资料介绍
描述
如果您可以同时构建您的 IoT 硬件设备原型并构建您的云应用程序会怎样?好消息。我和我的团队花了几个月的时间在从嵌入式到云的旅程中跌跌撞撞。我们陷入了时间陷阱并发现了陷阱,因此您无需这样做!我们相信我们终于策划了一种理想的方式来让您开始开发自己的应用程序。
在GitHub 上查看我们完整的指导之旅
在这个项目中,您将获得对嵌入式设备(AVR-IoT或PIC-IoT板)进行编程以及使用 AWS 和 MQTT 发布/订阅消息传递协议构建云应用程序的实践经验。
在本教程结束时,您将能够从云中的开发板查看按钮按下信息。您还将创建一个应用程序,其中开发板的 LED 被配置为在云接收到有关按钮按下的信息时闪烁。
您可以使用一个或多个开发板进行跟进。如果您使用两个或更多,您将获得特殊待遇——当按下任何一个按钮时,云应用程序将使每个连接的开发板上的 LED 闪烁。也许您可以将一个给朋友,然后将闪烁的 LED 用作秘密消息系统?
在你开始之前
-
查看 IoT 板附带的沙盒演示,方法是将其连接到您的计算机,打开
CURIOSITY
驱动器,然后单击CLICK-ME.HTM
文件。 - 下载并安装最新版本的MPLAB X IDE。
- 下载并安装最新版本的XC8 (AVR-IoT) 和/或XC16 (PIC-IoT) 编译器。
如果您不熟悉 MPLAB X 集成开发人员环境 (IDE),可以查看以下指南:MPLAB® X IDE 和 Microchip 工具入门
第 1 步:配置您的 IoT 板
如果您尚未从沙盒迁移到私有 AWS 账户,则需要使用 Microchip 的 IoT 配置工具来完成。如果您不确定,您可能还没有 - 请查看本教程以设置您的板到云连接。
在上述教程中,物联网板是使用物联网供应工具供应的。这会生成一个 AWS IoT Core 策略,用于确定董事会在与 AWS 资源交互时拥有哪些权限。默认情况下,此策略配置为仅授予 IoT 板发布和订阅包含板的事物名称的 MQTT 主题的权利。
在这个项目中,我们将通过主题发送和接收 MQTT 消息buttonPresses
。因此,我们必须扩展权限以包括此主题:
- 在 AWS 中打开IoT Core模块,然后在左侧菜单中选择Secure -> Policies 。
- 打开zt_policy并向下滚动到Policy 文档部分。
- 单击编辑策略文档并执行如下所述的更改:
-
更新
iot:Publish
和iot:Receive
权限以包含buttonPresses
主题,如下所示。请注意,############
以下代码中是您唯一的 AWS 资源标识符的占位符。请记住将其替换为原始保单文档中的标识符。
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-east-2:############:topic/${iot:Connection.Thing.ThingName}/*",
"arn:aws:iot:us-east-2:############:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
"arn:aws:iot:us-east-2:############:topic/buttonPresses"
]
},
-
更新
iot:Publish
和iot:Receive
权限以包含buttonPresses
主题,如下所示。请注意,############
以下代码中是您唯一的 AWS 资源标识符的占位符。请记住将其替换为原始保单文档中的标识符。
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-east-2:############:topicfilter/${iot:Connection.Thing.ThingName}/*",
"arn:aws:iot:us-east-2:############:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
"arn:aws:iot:us-east-2:############:topicfilter/buttonPresses"
]
},
- 单击另存为新版本。
权限现已更新,板应该能够通过buttonPresses
MQTT 主题发送和接收数据。
第 2 步:下载预装固件的副本
我们的应用程序的起点是与您设备的微控制器系列兼容的未修改固件副本:
下载正确的存储库并在 MPLAB X 中打开PICIoT.X
和/或AVRIoT.X
项目。
我们将在接下来的几个步骤中对固件进行一些修改。如果遇到困难,可以在 GitHub 上查看这些完全修改后的固件版本:
第 3 步:向云端发送消息
我们希望在按下按钮时向 AWS 发送一条消息,我们将使用中断来检测。SW0
AVR-IoT 板的程序的第一部分与 PIC-IoT 板的程序有些不同。请按照以下适用于您设备的微控制器系列的程序进行操作:
AVR-IoT 板卡流程
在 MPLAB X 项目中,打开(Source Files -> MCC Generated Files)并在函数调用application_manager.c
之后添加以下代码:SYSTEM_Initialize()
application_init
SW0_EnableInterruptForFallingEdge();
PORTF_SW0_SetInterruptHandler(sendButtonPressToCloud);
第一行为AVR-IoT 板上的按钮启用下降沿中断检测,然后在第二行上分配此中断的函数处理程序。SW0
PIC-IoT板的程序
在pin_manager.c
中,执行以下编辑:
-
在函数中,为按钮(连接到 RA7)
PIN_MANAGER_initialize
启用中断并通过包括以下两行来清除其中断标志:SW0
IOCNAbits.IOCNA7 = 1; //Pin : RA7
IOCFAbits.IOCFA7 = 0; //Pin : RA7
-
在变量下面添加另一个变量
INT_InterruptHandler
来存储SW0
硬件按钮的中断处理程序:
void (*SW0_InterruptHandler)(void) = NULL;
-
添加一个设置我们刚刚创建的变量的函数(将它放在
INT_SetInterruptHandler
函数之后):
void SW0_SetInterruptHandler(void (* InterruptHandler)(void))
{
IEC1bits.IOCIE = 0; //Disable IOCI interrupt
SW0_InterruptHandler = InterruptHandler;
IEC1bits.IOCIE = 1; //Enable IOCI interrupt
}
修改_IOCInterrupt
中断服务程序以处理SW0
按钮按下(中断服务程序位于 155 行附近pin_manager.c
)。下面提供了完全修改的中断服务程序。要么全部复制并替换_IOCInterrupt
,要么将第二个嵌套if
语句添加到您的项目中。
void __attribute__ (( interrupt, no_auto_psv )) _IOCInterrupt ( void )
{
if(IFS1bits.IOCIF == 1)
{
// Clear the flag
IFS1bits.IOCIF = 0;
if(IOCFAbits.IOCFA12 == 1)
{
IOCFAbits.IOCFA12 = 0; //Clear flag for Pin - RA12
if(INT_InterruptHandler)
{
INT_InterruptHandler();
}
}
// Handle SW0 button presses
if(IOCFAbits.IOCFA7 == 1)
{
IOCFAbits.IOCFA7 = 0; //Clear flag for Pin - RA7
if(SW0_InterruptHandler)
{
SW0_InterruptHandler();
}
}
}
}
在pin_manager.h
中,添加SW0_SetInterruptHandler
我们刚刚添加的函数的声明,使其在其他文件中可用,例如在INT_SetInterruptHandler
函数声明之后:
void SW0_SetInterruptHandler(void (* InterruptHandler)(void));
在中,在函数调用之后application_manager.c
设置中断处理程序:SW0
SYSTEM_Initialize()
application_init
// Set interrupt handler for button presses
SW0_SetInterruptHandler(sendButtonPressToCloud);
AVR-IoT 和 PIC-IoT 板的程序
上述过程确保只要按下 PIC-IoT 或 AVR-IoT 板上的按钮,sendButtonPressToCloud
就会调用该函数。SW0
IoT 板使用 MQTT 协议与 AWS 通信,该协议使用发布-订阅模型。消息不直接在设备之间发送,而是发布到特定主题。设备可以订阅各种主题,AWS 会跟踪消息的分发方式。
让我们声明一个变量来跟踪我们将使用的 MQTT 主题。将以下声明添加到application_manager.c
(例如,在mqttSubscribeTopic
变量声明下方):
char tutorialMqttTopic[SUBSCRIBE_TOPIC_SIZE];
通过添加以下代码来实现上述函数处理程序application_manager.c
:
static void sendButtonPressToCloud(){
// Ensure that we have a valid cloud connection
if (shared_networking_params.haveAPConnection)
{
static char tutorialPayload[PAYLOAD_SIZE];
int tutorialLen = 0;
// Set MQTT topic
memset((void*)tutorialMqttTopic, 0, sizeof(tutorialMqttTopic));
sprintf(tutorialMqttTopic, "buttonPresses");
// Construct payload
tutorialLen = sprintf(tutorialPayload,"{"thing_name":"%s"}", cid);
// Publish data to cloud
CLOUD_publishData((uint8_t*)tutorialMqttTopic ,(uint8_t*)tutorialPayload, tutorialLen);
}
}
该函数与sendToCloud
我们之前提到的函数非常相似,会将 MQTT 消息发布到buttonPresses
主题。消息的内容将是一个 JSON 对象,其中包含发送消息的事物/设备的名称。
编译修改的项目并使用 MPLAB X 将其编程到器件上。这通过单击 MPLAB X 工具栏上的Make and Program Device Main Project按钮来完成。
验证消息是否已成功发送到 AWS
当设备编程成功后,让我们确保我们在 AWS 中接收到消息:
- 登录 AWS 管理控制台并选择 IoT Core 服务。
- 在左侧菜单中选择测试
-
在订阅主题字段中,输入
buttonPresses
。 - 单击订阅主题按钮。
-
按下
SW0
板上的按键,观察按键按下在云端注册成功。
第 4 步:接收来自云端的消息
现在我们已经成功地修改了我们的项目以向自定义主题发送消息,我们还必须找到订阅该主题的方法:
-
更改
NUM_TOPICS_SUBSCRIBE
inmqtt_config.h
(Header Files -> MCC Generated Files -> config) 的定义,以允许最多同时订阅两个 MQTT 主题:
#define NUM_TOPICS_SUBSCRIBE 2
-
编辑
subscribeToCloud
函数以包含对该主题application_manager.c
的订阅。buttonPresses
下面提供了完全修改后的功能。复制并替换整个subscribeToCloud
函数,或者在 MPLAB X 项目中添加以下代码的最后两行。
static void subscribeToCloud(void)
{
sprintf(mqttSubscribeTopic, "$aws/things/%s/shadow/update/delta", cid);
CLOUD_registerSubscription((uint8_t*)mqttSubscribeTopic,receivedFromCloud);
sprintf(tutorialMqttTopic, "buttonPresses");
CLOUD_registerSubscription((uint8_t*)tutorialMqttTopic,receiveButtonPressFromCloud);
}
该CLOUD_registerSubscription
函数的第二个参数是一个处理程序,它指示接收到指定主题的消息时将运行哪个函数。因此,我们需要实现该receiveButtonPressFromCloud
函数来处理任何接收到的消息。
-
将以下函数定义添加到
application_manager.c
(函数上方的某个subscribeToCloud
位置)以使设备的 LED 在收到消息时闪烁两次:
static void receiveButtonPressFromCloud(uint8_t *topic, uint8_t *payload){
LED_test();
LED_test();
}
- 编译项目并在 MPLAB X 中对器件进行编程。如果您有多个可用的 AVR-IoT 或 PIC-IoT 器件,您可以尝试使用同一个项目对所有器件进行编程。
如果您同时使用 AVR-IoT和PIC-IoT 设备:要同时使用来自两个不同设备系列的设备,有必要分别为 GitHub 上的 AVR-IoT 和 PIC-IoT 存储库完成本教程,并使用兼容的固件。
您的设备现在应该已正确配置。如果SW0
按下任何已配置 IoT 套件上的按钮,所有已配置 IoT 套件上的 LED 应闪烁两次。
下一步去哪里?
有关如何将 IoT 板与 AWS 结合使用的更多教程,请查看GitHub 上的适用于 AWS 的 Microchip IoT 开发人员指南。
- 适用于AWS IoT Greengrass的Xilinx KV260入门指南
- UM-WI-038 DA16200 开始使用适用于 AWS-IoT 的 AT-Command
- UM-WI-016DA16200 适用于 AWS IoT 的门锁应用
- 连接到AWS IoT的RIOT-OS应用程序
- UM-WI-016DA16200 适用于 AWS IoT 的门锁应用
- UM-WI-038 DA16200 开始使用适用于 AWS-IoT 的 AT-Command
- 基于AWS IoT EduKit的睡眠监测系统
- 适用于ESP32的AWS IoT Arduino库
- 适用于AWS IoT EduKit的追踪器
- 基于AWS IoT EduKit构建Pandemic智能系统
- 适用于嵌入式C的AWS IoT设备开发工具包 5次下载
- 调整AVR-IoT WG的用途以连接到AWS 10次下载
- 适用于PIC和AVR器件的JSON解码器 6次下载
- AVR程序编译器avrubd应用程序免费下载 52次下载
- AVR frighter烧录器应用程序免费下载 19次下载
- 速通IoT设备电源测量难点 511次阅读
- 混合IoT平台为物联网提供简单性、灵活性和快速上市时间 913次阅读
- 在IoT边缘设计智能视频分析 774次阅读
- 如何为IoT项目选择最佳硬件 2747次阅读
- 浅谈RAM 执行应用程序 3060次阅读
- IoT系统架构和网络类别 3544次阅读
- 排名前15位的标准IoT协议 你知道多少 5523次阅读
- 米尔科技 Beetle IoT 评估板概述 1187次阅读
- 预认证的互联简化IoT的应用 3747次阅读
- IoT的介绍和IoT在自动驾驶及无人配送应用的说明 4771次阅读
- 通信技术NB-IoT为什么可以这么优秀? 6343次阅读
- 物联网(IoT)和工业IoT(IIoT)的资料介绍IoT和IIoT有什么区别? 1.4w次阅读
- 什么是NB-IoT核心网? 1.2w次阅读
- NB-IOT的特点及应用,NB-IoT发展与挑战 1.2w次阅读
- NB-IoT与eMTC的技术比较 5026次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多