找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4872|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

[資料分享] 人人都可以DIY的Arduino UNO智能燈(三)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:184786 發(fā)表于 2017-6-23 10:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本文出自機(jī)智云論壇,版權(quán)所有@bigfanofloT,轉(zhuǎn)載請(qǐng)注明出處
前面說到了設(shè)備聯(lián)網(wǎng),接下來是進(jìn)行MCU端的開發(fā)。本節(jié)詳細(xì)的描述了如何使用下載的MCU工程,如何根據(jù)自動(dòng)生成的代碼提示去填充用戶業(yè)務(wù)相關(guān)的代碼。

關(guān)于MCU代碼自動(dòng)生成的原理:
借助MCU代碼自動(dòng)生成工具,自動(dòng)生成的代碼已經(jīng)根據(jù)用戶定義的產(chǎn)品數(shù)據(jù)點(diǎn)信息,并針對(duì)STM32、esp8266等平臺(tái),生成了對(duì)應(yīng)的機(jī)智云串口協(xié)議層代碼,用戶只需要調(diào)用相應(yīng)的API接口或添加相應(yīng)的邏輯處理即可。代碼框架如下圖所示:




其原理是:自動(dòng)生成的代碼實(shí)現(xiàn)了機(jī)智云通信協(xié)議的解析與封包、傳感器數(shù)據(jù)與通信數(shù)據(jù)的轉(zhuǎn)換邏輯,并封裝成了簡(jiǎn)單的API,且提供了多種平臺(tái)的實(shí)例代碼。當(dāng)設(shè)備收到云端或APP端的數(shù)據(jù)后,程序會(huì)將數(shù)據(jù)轉(zhuǎn)換成對(duì)應(yīng)的事件并通知到應(yīng)用層,開發(fā)者只需要在對(duì)應(yīng)的事件處理邏輯中添加傳感器的控制函數(shù),就可以完成產(chǎn)品的開發(fā)。


五、MCU端編程

Step1解壓下載的工程,找到Gizwits文件夾,把它復(fù)制/移動(dòng)到arduinoIDE安裝目錄下的libraries文件夾下。例如我的是D:\Arduino\libraries


Step2:接下來找到工程目錄下的examples文件夾,里面有2個(gè)文件夾networkConfigsimpleTry,進(jìn)去后有同名的Arduino文件,后綴名為.ino。


使用ArduinoIDE打開這2個(gè)文件:


simpleTry.ino是本次項(xiàng)目工程,里面有程序框架,以及告知了用戶在哪里填充接入機(jī)智云的代碼;networkConfig.ino是配置入網(wǎng)的例程,因?yàn)槌R姷闹悄苡布a(chǎn)品是沒有鍵盤和顯示屏的,因此需要一種技術(shù)來讓它獲取路由器的SSID和密碼,首選是通過手機(jī)APP輔助。這里簡(jiǎn)單的介紹一下方法,通過一個(gè)按鍵來觸發(fā)設(shè)備進(jìn)入配網(wǎng)模式,然后手機(jī)APP把SSID和密碼廣播給設(shè)備,原理如下圖:


這里需要說明的是,機(jī)智云開發(fā)的配網(wǎng)方案有2種,取名為AirLink和SoftAP,設(shè)備第一次聯(lián)網(wǎng)是要進(jìn)行配置的,以后它就記住了這個(gè)路由器的SSID和密碼,無需配置,除非更改了SSID、密碼等情況發(fā)生,就需要重新進(jìn)行配網(wǎng)操作。


Step3WS2812B是一個(gè)集控制電路與發(fā)光電路于一體的智能外控LED光源。其外型與一個(gè)5050LED燈珠相同,每個(gè)元件即為一個(gè)像素點(diǎn),只需占用MCU一個(gè)IO即可驅(qū)動(dòng)。我們先安裝WS2812B型RGBLED的驅(qū)動(dòng)庫Adafruit_NeoPixel,下載地址為https://github.com/adafruit/Adafruit_NeoPixel,這個(gè)庫的使用說明可以參考https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library

把它解壓后拷貝到ArduinoIDE安裝目錄的\libraries文件夾下,例如我的目錄是D:\Arduino\libraries


先不用急著添加應(yīng)用代碼,先在simpleTry.ino中添加一下硬件模塊底層驅(qū)動(dòng)的測(cè)試代碼(可下載高清大圖查看):


RGB LED測(cè)試OK的話是這樣子的效果:


Step4我們把networkConfig.ino中的部分代碼(按鍵驅(qū)動(dòng)等,處理配網(wǎng)問題)拷貝到本次項(xiàng)目的工程simpleTry.ino中,注意凡是串口打印調(diào)試的都要注釋掉,因?yàn)槲覀兊腁rduino UNO R3只有一個(gè)串口,要用來和WiFi模塊通信。然后需要根據(jù)注釋填充數(shù)據(jù)點(diǎn)代碼,1是手機(jī)端APP控制RGB LED亮滅,2是手機(jī)端APP單獨(dú)控制RGB LED的RGB顏色值,3是手機(jī)端APP一鍵控制RGB LED的組合顏色值,具體的接口都給出了詳細(xì)的注釋,我們直接填充就可以啦~

如下圖(下載高清大圖放大查看效果更好哦~),左邊為我們?cè)陂_發(fā)者中心下載的工程文件simpleTry.ino,右邊為修改好后的,作為一個(gè)對(duì)比,可以清晰的知道需要添加的用戶代碼。


第30~149行藍(lán)色方框?yàn)榕c按鍵觸發(fā)配網(wǎng)有關(guān)的代碼。
第168~191行為WIFI狀態(tài)處理有關(guān)代碼,定義了2個(gè)按鍵key1、key2分別來觸發(fā)不同的配網(wǎng)方式,板載黃色LED連接到了管腳13,我們把它作為配網(wǎng)操作過程的狀態(tài)提示,本次采用的方式是:通過手機(jī)APP輔助,長(zhǎng)按key2 5秒后板載LED亮起,WIFI模塊連接路由器成功后則熄滅,關(guān)于這些按鍵和WIFI狀態(tài)處理的代碼是從networkConfig.ino拷貝來的。
第11~16行代碼定義RGB LED使用的管腳和個(gè)數(shù)以及創(chuàng)建了piexls對(duì)象;
第20~28行是自己利用Adafruit_NeoPixel類方法編寫的一個(gè)能夠控制所有RGB LED的函數(shù);
第154~162行初始化了RGB LED、板載LED、按鍵。

一個(gè)重要問題是,很多人會(huì)問,我生成了MCU工程后,要到哪里添加代碼呢?怎么修改呢?

第195~231行,黃色方框注釋內(nèi)容就是自動(dòng)生成的,用于幫助用戶填充業(yè)務(wù)代碼。
第232~256行代碼基本就是黃色方框代碼的拷貝,這就是我們?cè)谠贫藙?chuàng)建的用于描述產(chǎn)品功能的數(shù)據(jù)點(diǎn)在MCU代碼里的表達(dá)方式,因?yàn)閷?duì)于控制LED,需要保持顏色變量值不被銷毀,所以我們把定義的數(shù)據(jù)點(diǎn)相關(guān)5個(gè)變量加了static關(guān)鍵字使之成為靜態(tài)變量,當(dāng)然你也可以直接把它們放到函數(shù)外面作為全局變量。
第258~266行實(shí)現(xiàn)的是開啟/關(guān)閉紅色燈的功能。
第268~274行實(shí)現(xiàn)的是設(shè)定LED組合顏色的功能。
第276行實(shí)現(xiàn)的是設(shè)定LED紅色值、設(shè)定LED綠色值、設(shè)定LED藍(lán)色值的功能。

Step5:至此MCU端代碼修改完畢,編譯并燒錄代碼到Arduino UNO板卡;



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:266702 發(fā)表于 2018-6-6 09:40 | 只看該作者
高清大圖哪里下載啊...
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表