電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>用于PIC IoT和AVR IoT的AWS應(yīng)用程序

用于PIC IoT和AVR IoT的AWS應(yīng)用程序

2022-11-25 | zip | 1.54 MB | 次下載 | 免費(fèi)

資料介紹

描述

如果您可以同時(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-IoTPIC-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)?

pYYBAGOAH92AJbR3AACSB2YTcz4473.png
本項(xiàng)目中的數(shù)據(jù)流圖解
?

在你開始之前

  • 查看 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:Publishiot: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:Publishiot: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)該能夠通過buttonPressesMQTT 主題發(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è)置中斷處理程序SW0SYSTEM_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è)成功。
驗(yàn)證是否已在 AWS IoT Core 中成功接收消息
?

第 4 步:接收來自云端的消息

現(xiàn)在我們已經(jīng)成功地修改了我們的項(xiàng)目以向自定義主題發(fā)送消息,我們還必須找到訂閱該主題的方法:

  • 更改NUM_TOPICS_SUBSCRIBEin mqtt_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-IoTPIC-IoT 設(shè)備要同時(shí)使用來自兩個(gè)不同設(shè)備系列的設(shè)備,有必要分別為 GitHub 上的 AVR-IoT 和 PIC-IoT 存儲(chǔ)庫完成本教程,并使用兼容的固件。

您的設(shè)備現(xiàn)在應(yīng)該已正確配置。如果SW0按下任何已配置 IoT 套件上的按鈕,所有已配置 IoT 套件上的 LED 應(yīng)閃爍兩次。

成功!按下 SW0 按鈕時(shí),兩個(gè)板都在閃爍!
?

下一步去哪里?

有關(guān)如何將 IoT 板與 AWS 結(jié)合使用的更多教程,請(qǐng)查看GitHub 上的適用于 AWS 的 Microchip IoT 開發(fā)人員指南


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)