資料介紹
描述
如果您可以同時構建您的 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應用程序免費下載 53次下載
- AVR frighter燒錄器應用程序免費下載 19次下載
- 速通IoT設備電源測量難點 746次閱讀
- 混合IoT平臺為物聯網提供簡單性、靈活性和快速上市時間 1051次閱讀
- 在IoT邊緣設計智能視頻分析 856次閱讀
- 如何為IoT項目選擇最佳硬件 2942次閱讀
- 淺談RAM 執行應用程序 3262次閱讀
- IoT系統架構和網絡類別 3704次閱讀
- 排名前15位的標準IoT協議 你知道多少 5708次閱讀
- 米爾科技 Beetle IoT 評估板概述 1361次閱讀
- 預認證的互聯簡化IoT的應用 3986次閱讀
- IoT的介紹和IoT在自動駕駛及無人配送應用的說明 4994次閱讀
- 通信技術NB-IoT為什么可以這么優秀? 6536次閱讀
- 物聯網(IoT)和工業IoT(IIoT)的資料介紹IoT和IIoT有什么區別? 1.4w次閱讀
- 什么是NB-IoT核心網? 1.2w次閱讀
- NB-IOT的特點及應用,NB-IoT發展與挑戰 1.2w次閱讀
- NB-IoT與eMTC的技術比較 5215次閱讀
下載排行
本周
- 1錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 2涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 4次下載 | 1 積分
- 3錦銳CA51F005 SDK開發包
- 19.47 MB | 3次下載 | 1 積分
- 4蘋果iphone 11電路原理圖
- 4.98 MB | 3次下載 | 2 積分
- 5基礎模擬電子電路
- 3.80 MB | 2次下載 | 1 積分
- 6FS4059B、FS4059C雙節鋰電池充電應用圖
- 0.05 MB | 1次下載 | 免費
- 7RA-Eco-RA6M4-100PIN-V1.0開發板資料
- 34.89 MB | 1次下載 | 免費
- 8RF9209 低功耗高靈敏EM9209 2.4G通信模塊規格書
- 565.33 KB | 次下載 | 免費
本月
- 1AI智能眼鏡產業鏈分析
- 4.43 MB | 382次下載 | 免費
- 2蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 296次下載 | 5 積分
- 3貼片三極管上的印字與真實名稱的對照表詳細說明
- 0.50 MB | 94次下載 | 1 積分
- 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 91次下載 | 5 積分
- 5錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 6AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 7長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
- 8802.11_Wireless_Networks
- 4.17 MB | 12次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191388次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論