資料介紹
描述
如果您可以同時(shí)構(gòu)建您的 IoT 硬件設(shè)備原型并構(gòu)建您的云應(yīng)用程序會(huì)怎樣?好消息。我和我的團(tuán)隊(duì)花了幾個(gè)月的時(shí)間在從嵌入式到云的旅程中跌跌撞撞。我們陷入了時(shí)間陷阱并發(fā)現(xiàn)了陷阱,因此您無需這樣做!我們相信我們終于策劃了一種理想的方式來讓您開始開發(fā)自己的應(yīng)用程序。
在GitHub 上查看我們完整的指導(dǎo)之旅
在這個(gè)項(xiàng)目中,您將獲得對(duì)嵌入式設(shè)備(AVR-IoT或PIC-IoT板)進(jìn)行編程以及使用 AWS 和 MQTT 發(fā)布/訂閱消息傳遞協(xié)議構(gòu)建云應(yīng)用程序的實(shí)踐經(jīng)驗(yàn)。
在本教程結(jié)束時(shí),您將能夠從云中的開發(fā)板查看按鈕按下信息。您還將創(chuàng)建一個(gè)應(yīng)用程序,其中開發(fā)板的 LED 被配置為在云接收到有關(guān)按鈕按下的信息時(shí)閃爍。
您可以使用一個(gè)或多個(gè)開發(fā)板進(jìn)行跟進(jìn)。如果您使用兩個(gè)或更多,您將獲得特殊待遇——當(dāng)按下任何一個(gè)按鈕時(shí),云應(yīng)用程序?qū)⑹?/font>每個(gè)連接的開發(fā)板上的 LED 閃爍。也許您可以將一個(gè)給朋友,然后將閃爍的 LED 用作秘密消息系統(tǒng)?
在你開始之前
-
查看 IoT 板附帶的沙盒演示,方法是將其連接到您的計(jì)算機(jī),打開
CURIOSITY
驅(qū)動(dòng)器,然后單擊CLICK-ME.HTM
文件。 - 下載并安裝最新版本的MPLAB X IDE。
- 下載并安裝最新版本的XC8 (AVR-IoT) 和/或XC16 (PIC-IoT) 編譯器。
如果您不熟悉 MPLAB X 集成開發(fā)人員環(huán)境 (IDE),可以查看以下指南:MPLAB? X IDE 和 Microchip 工具入門
第 1 步:配置您的 IoT 板
如果您尚未從沙盒遷移到私有 AWS 賬戶,則需要使用 Microchip 的 IoT 配置工具來完成。如果您不確定,您可能還沒有 - 請(qǐng)查看本教程以設(shè)置您的板到云連接。
在上述教程中,物聯(lián)網(wǎng)板是使用物聯(lián)網(wǎng)供應(yīng)工具供應(yīng)的。這會(huì)生成一個(gè) AWS IoT Core 策略,用于確定董事會(huì)在與 AWS 資源交互時(shí)擁有哪些權(quán)限。默認(rèn)情況下,此策略配置為僅授予 IoT 板發(fā)布和訂閱包含板的事物名稱的 MQTT 主題的權(quán)利。
在這個(gè)項(xiàng)目中,我們將通過主題發(fā)送和接收 MQTT 消息buttonPresses
。因此,我們必須擴(kuò)展權(quán)限以包括此主題:
- 在 AWS 中打開IoT Core模塊,然后在左側(cè)菜單中選擇Secure -> Policies 。
- 打開zt_policy并向下滾動(dòng)到Policy 文檔部分。
- 單擊編輯策略文檔并執(zhí)行如下所述的更改:
-
更新
iot:Publish
和iot:Receive
權(quán)限以包含buttonPresses
主題,如下所示。請(qǐng)注意,############
以下代碼中是您唯一的 AWS 資源標(biāo)識(shí)符的占位符。請(qǐng)記住將其替換為原始保單文檔中的標(biāo)識(shí)符。
{
"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
權(quán)限以包含buttonPresses
主題,如下所示。請(qǐng)注意,############
以下代碼中是您唯一的 AWS 資源標(biāo)識(shí)符的占位符。請(qǐng)記住將其替換為原始保單文檔中的標(biāo)識(shí)符。
{
"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"
]
},
- 單擊另存為新版本。
權(quán)限現(xiàn)已更新,板應(yīng)該能夠通過buttonPresses
MQTT 主題發(fā)送和接收數(shù)據(jù)。
第 2 步:下載預(yù)裝固件的副本
我們的應(yīng)用程序的起點(diǎn)是與您設(shè)備的微控制器系列兼容的未修改固件副本:
下載正確的存儲(chǔ)庫并在 MPLAB X 中打開PICIoT.X
和/或AVRIoT.X
項(xiàng)目。
我們將在接下來的幾個(gè)步驟中對(duì)固件進(jìn)行一些修改。如果遇到困難,可以在 GitHub 上查看這些完全修改后的固件版本:
第 3 步:向云端發(fā)送消息
我們希望在按下按鈕時(shí)向 AWS 發(fā)送一條消息,我們將使用中斷來檢測。SW0
AVR-IoT 板的程序的第一部分與 PIC-IoT 板的程序有些不同。請(qǐng)按照以下適用于您設(shè)備的微控制器系列的程序進(jìn)行操作:
AVR-IoT 板卡流程
在 MPLAB X 項(xiàng)目中,打開(Source Files -> MCC Generated Files)并在函數(shù)調(diào)用application_manager.c
之后添加以下代碼:SYSTEM_Initialize()
application_init
SW0_EnableInterruptForFallingEdge();
PORTF_SW0_SetInterruptHandler(sendButtonPressToCloud);
第一行為AVR-IoT 板上的按鈕啟用下降沿中斷檢測,然后在第二行上分配此中斷的函數(shù)處理程序。SW0
PIC-IoT板的程序
在pin_manager.c
中,執(zhí)行以下編輯:
-
在函數(shù)中,為按鈕(連接到 RA7)
PIN_MANAGER_initialize
啟用中斷并通過包括以下兩行來清除其中斷標(biāo)志:SW0
IOCNAbits.IOCNA7 = 1; //Pin : RA7
IOCFAbits.IOCFA7 = 0; //Pin : RA7
-
在變量下面添加另一個(gè)變量
INT_InterruptHandler
來存儲(chǔ)SW0
硬件按鈕的中斷處理程序:
void (*SW0_InterruptHandler)(void) = NULL;
-
添加一個(gè)設(shè)置我們剛剛創(chuàng)建的變量的函數(shù)(將它放在
INT_SetInterruptHandler
函數(shù)之后):
void SW0_SetInterruptHandler(void (* InterruptHandler)(void))
{
IEC1bits.IOCIE = 0; //Disable IOCI interrupt
SW0_InterruptHandler = InterruptHandler;
IEC1bits.IOCIE = 1; //Enable IOCI interrupt
}
修改_IOCInterrupt
中斷服務(wù)程序以處理SW0
按鈕按下(中斷服務(wù)程序位于 155 行附近pin_manager.c
)。下面提供了完全修改的中斷服務(wù)程序。要么全部復(fù)制并替換_IOCInterrupt
,要么將第二個(gè)嵌套if
語句添加到您的項(xiàng)目中。
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
我們剛剛添加的函數(shù)的聲明,使其在其他文件中可用,例如在INT_SetInterruptHandler
函數(shù)聲明之后:
void SW0_SetInterruptHandler(void (* InterruptHandler)(void));
在中,在函數(shù)調(diào)用之后application_manager.c
設(shè)置中斷處理程序:SW0
SYSTEM_Initialize()
application_init
// Set interrupt handler for button presses
SW0_SetInterruptHandler(sendButtonPressToCloud);
AVR-IoT 和 PIC-IoT 板的程序
上述過程確保只要按下 PIC-IoT 或 AVR-IoT 板上的按鈕,sendButtonPressToCloud
就會(huì)調(diào)用該函數(shù)。SW0
IoT 板使用 MQTT 協(xié)議與 AWS 通信,該協(xié)議使用發(fā)布-訂閱模型。消息不直接在設(shè)備之間發(fā)送,而是發(fā)布到特定主題。設(shè)備可以訂閱各種主題,AWS 會(huì)跟蹤消息的分發(fā)方式。
讓我們聲明一個(gè)變量來跟蹤我們將使用的 MQTT 主題。將以下聲明添加到application_manager.c
(例如,在mqttSubscribeTopic
變量聲明下方):
char tutorialMqttTopic[SUBSCRIBE_TOPIC_SIZE];
通過添加以下代碼來實(shí)現(xiàn)上述函數(shù)處理程序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);
}
}
該函數(shù)與sendToCloud
我們之前提到的函數(shù)非常相似,會(huì)將 MQTT 消息發(fā)布到buttonPresses
主題。消息的內(nèi)容將是一個(gè) JSON 對(duì)象,其中包含發(fā)送消息的事物/設(shè)備的名稱。
編譯修改的項(xiàng)目并使用 MPLAB X 將其編程到器件上。這通過單擊 MPLAB X 工具欄上的Make and Program Device Main Project按鈕來完成。
驗(yàn)證消息是否已成功發(fā)送到 AWS
當(dāng)設(shè)備編程成功后,讓我們確保我們?cè)?AWS 中接收到消息:
- 登錄 AWS 管理控制臺(tái)并選擇 IoT Core 服務(wù)。
- 在左側(cè)菜單中選擇測試
-
在訂閱主題字段中,輸入
buttonPresses
。 - 單擊訂閱主題按鈕。
-
按下
SW0
板上的按鍵,觀察按鍵按下在云端注冊(cè)成功。
第 4 步:接收來自云端的消息
現(xiàn)在我們已經(jīng)成功地修改了我們的項(xiàng)目以向自定義主題發(fā)送消息,我們還必須找到訂閱該主題的方法:
-
更改
NUM_TOPICS_SUBSCRIBE
inmqtt_config.h
(Header Files -> MCC Generated Files -> config) 的定義,以允許最多同時(shí)訂閱兩個(gè) MQTT 主題:
#define NUM_TOPICS_SUBSCRIBE 2
-
編輯
subscribeToCloud
函數(shù)以包含對(duì)該主題application_manager.c
的訂閱。buttonPresses
下面提供了完全修改后的功能。復(fù)制并替換整個(gè)subscribeToCloud
函數(shù),或者在 MPLAB X 項(xiàng)目中添加以下代碼的最后兩行。
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
函數(shù)的第二個(gè)參數(shù)是一個(gè)處理程序,它指示接收到指定主題的消息時(shí)將運(yùn)行哪個(gè)函數(shù)。因此,我們需要實(shí)現(xiàn)該receiveButtonPressFromCloud
函數(shù)來處理任何接收到的消息。
-
將以下函數(shù)定義添加到
application_manager.c
(函數(shù)上方的某個(gè)subscribeToCloud
位置)以使設(shè)備的 LED 在收到消息時(shí)閃爍兩次:
static void receiveButtonPressFromCloud(uint8_t *topic, uint8_t *payload){
LED_test();
LED_test();
}
- 編譯項(xiàng)目并在 MPLAB X 中對(duì)器件進(jìn)行編程。如果您有多個(gè)可用的 AVR-IoT 或 PIC-IoT 器件,您可以嘗試使用同一個(gè)項(xiàng)目對(duì)所有器件進(jìn)行編程。
如果您同時(shí)使用 AVR-IoT和PIC-IoT 設(shè)備:要同時(shí)使用來自兩個(gè)不同設(shè)備系列的設(shè)備,有必要分別為 GitHub 上的 AVR-IoT 和 PIC-IoT 存儲(chǔ)庫完成本教程,并使用兼容的固件。
您的設(shè)備現(xiàn)在應(yīng)該已正確配置。如果SW0
按下任何已配置 IoT 套件上的按鈕,所有已配置 IoT 套件上的 LED 應(yīng)閃爍兩次。
下一步去哪里?
有關(guān)如何將 IoT 板與 AWS 結(jié)合使用的更多教程,請(qǐng)查看GitHub 上的適用于 AWS 的 Microchip IoT 開發(fā)人員指南。
- 適用于AWS IoT Greengrass的Xilinx KV260入門指南
- UM-WI-038 DA16200 開始使用適用于 AWS-IoT 的 AT-Command
- UM-WI-016DA16200 適用于 AWS IoT 的門鎖應(yīng)用
- 連接到AWS IoT的RIOT-OS應(yīng)用程序
- UM-WI-016DA16200 適用于 AWS IoT 的門鎖應(yīng)用
- UM-WI-038 DA16200 開始使用適用于 AWS-IoT 的 AT-Command
- 基于AWS IoT EduKit的睡眠監(jiān)測系統(tǒng)
- 適用于ESP32的AWS IoT Arduino庫
- 適用于AWS IoT EduKit的追蹤器
- 基于AWS IoT EduKit構(gòu)建Pandemic智能系統(tǒng)
- 適用于嵌入式C的AWS IoT設(shè)備開發(fā)工具包 5次下載
- 調(diào)整AVR-IoT WG的用途以連接到AWS 10次下載
- 適用于PIC和AVR器件的JSON解碼器 6次下載
- AVR程序編譯器avrubd應(yīng)用程序免費(fèi)下載 52次下載
- AVR frighter燒錄器應(yīng)用程序免費(fèi)下載 19次下載
- 速通IoT設(shè)備電源測量難點(diǎn) 511次閱讀
- 混合IoT平臺(tái)為物聯(lián)網(wǎng)提供簡單性、靈活性和快速上市時(shí)間 913次閱讀
- 在IoT邊緣設(shè)計(jì)智能視頻分析 774次閱讀
- 如何為IoT項(xiàng)目選擇最佳硬件 2747次閱讀
- 淺談RAM 執(zhí)行應(yīng)用程序 3060次閱讀
- IoT系統(tǒng)架構(gòu)和網(wǎng)絡(luò)類別 3544次閱讀
- 排名前15位的標(biāo)準(zhǔn)IoT協(xié)議 你知道多少 5523次閱讀
- 米爾科技 Beetle IoT 評(píng)估板概述 1187次閱讀
- 預(yù)認(rèn)證的互聯(lián)簡化IoT的應(yīng)用 3747次閱讀
- IoT的介紹和IoT在自動(dòng)駕駛及無人配送應(yīng)用的說明 4771次閱讀
- 通信技術(shù)NB-IoT為什么可以這么優(yōu)秀? 6343次閱讀
- 物聯(lián)網(wǎng)(IoT)和工業(yè)IoT(IIoT)的資料介紹IoT和IIoT有什么區(qū)別? 1.4w次閱讀
- 什么是NB-IoT核心網(wǎng)? 1.2w次閱讀
- NB-IOT的特點(diǎn)及應(yīng)用,NB-IoT發(fā)展與挑戰(zhàn) 1.2w次閱讀
- NB-IoT與eMTC的技術(shù)比較 5026次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多