本文出自機智云論壇,版權所有@bigfanofloT,轉載請注明出處 前面說到了設備聯網,接下來是進行MCU端的開發。本節詳細的描述了如何使用下載的MCU工程,如何根據自動生成的代碼提示去填充用戶業務相關的代碼。
關于MCU代碼自動生成的原理:
借助MCU代碼自動生成工具,自動生成的代碼已經根據用戶定義的產品數據點信息,并針對STM32、esp8266等平臺,生成了對應的機智云串口協議層代碼,用戶只需要調用相應的API接口或添加相應的邏輯處理即可。代碼框架如下圖所示:

其原理是:自動生成的代碼實現了機智云通信協議的解析與封包、傳感器數據與通信數據的轉換邏輯,并封裝成了簡單的API,且提供了多種平臺的實例代碼。當設備收到云端或APP端的數據后,程序會將數據轉換成對應的事件并通知到應用層,開發者只需要在對應的事件處理邏輯中添加傳感器的控制函數,就可以完成產品的開發。
五、MCU端編程
Step1:解壓下載的工程,找到Gizwits文件夾,把它復制/移動到arduinoIDE安裝目錄下的libraries文件夾下。例如我的是D:\Arduino\libraries
Step2:接下來找到工程目錄下的examples文件夾,里面有2個文件夾networkConfig和simpleTry,進去后有同名的Arduino文件,后綴名為.ino。
使用ArduinoIDE打開這2個文件:
simpleTry.ino是本次項目工程,里面有程序框架,以及告知了用戶在哪里填充接入機智云的代碼;networkConfig.ino是配置入網的例程,因為常見的智能硬件產品是沒有鍵盤和顯示屏的,因此需要一種技術來讓它獲取路由器的SSID和密碼,首選是通過手機APP輔助。這里簡單的介紹一下方法,通過一個按鍵來觸發設備進入配網模式,然后手機APP把SSID和密碼廣播給設備,原理如下圖:

這里需要說明的是,機智云開發的配網方案有2種,取名為AirLink和SoftAP,設備第一次聯網是要進行配置的,以后它就記住了這個路由器的SSID和密碼,無需配置,除非更改了SSID、密碼等情況發生,就需要重新進行配網操作。
Step3:WS2812B是一個集控制電路與發光電路于一體的智能外控LED光源。其外型與一個5050LED燈珠相同,每個元件即為一個像素點,只需占用MCU一個IO即可驅動。我們先安裝WS2812B型RGBLED的驅動庫Adafruit_NeoPixel,下載地址為https://github.com/adafruit/Adafruit_NeoPixel,這個庫的使用說明可以參考https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library
把它解壓后拷貝到ArduinoIDE安裝目錄的\libraries文件夾下,例如我的目錄是D:\Arduino\libraries
先不用急著添加應用代碼,先在simpleTry.ino中添加一下硬件模塊底層驅動的測試代碼(可下載高清大圖查看):
RGB LED測試OK的話是這樣子的效果:

Step4:我們把networkConfig.ino中的部分代碼(按鍵驅動等,處理配網問題)拷貝到本次項目的工程simpleTry.ino中,注意凡是串口打印調試的都要注釋掉,因為我們的Arduino UNO R3只有一個串口,要用來和WiFi模塊通信。然后需要根據注釋填充數據點代碼,1是手機端APP控制RGB LED亮滅,2是手機端APP單獨控制RGB LED的RGB顏色值,3是手機端APP一鍵控制RGB LED的組合顏色值,具體的接口都給出了詳細的注釋,我們直接填充就可以啦~
如下圖(下載高清大圖放大查看效果更好哦~),左邊為我們在開發者中心下載的工程文件simpleTry.ino,右邊為修改好后的,作為一個對比,可以清晰的知道需要添加的用戶代碼。
第30~149行藍色方框為與按鍵觸發配網有關的代碼。 第168~191行為WIFI狀態處理有關代碼,定義了2個按鍵key1、key2分別來觸發不同的配網方式,板載黃色LED連接到了管腳13,我們把它作為配網操作過程的狀態提示,本次采用的方式是:通過手機APP輔助,長按key2 5秒后板載LED亮起,WIFI模塊連接路由器成功后則熄滅,關于這些按鍵和WIFI狀態處理的代碼是從networkConfig.ino拷貝來的。 第11~16行代碼定義RGB LED使用的管腳和個數以及創建了piexls對象; 第20~28行是自己利用Adafruit_NeoPixel類方法編寫的一個能夠控制所有RGB LED的函數; 第154~162行初始化了RGB LED、板載LED、按鍵。
一個重要問題是,很多人會問,我生成了MCU工程后,要到哪里添加代碼呢?怎么修改呢?
第195~231行,黃色方框注釋內容就是自動生成的,用于幫助用戶填充業務代碼。 第232~256行代碼基本就是黃色方框代碼的拷貝,這就是我們在云端創建的用于描述產品功能的數據點在MCU代碼里的表達方式,因為對于控制LED,需要保持顏色變量值不被銷毀,所以我們把定義的數據點相關5個變量加了static關鍵字使之成為靜態變量,當然你也可以直接把它們放到函數外面作為全局變量。 第258~266行實現的是開啟/關閉紅色燈的功能。 第268~274行實現的是設定LED組合顏色的功能。 第276行實現的是設定LED紅色值、設定LED綠色值、設定LED藍色值的功能。
Step5:至此MCU端代碼修改完畢,編譯并燒錄代碼到Arduino UNO板卡;
|