Arduino開發-樓宇自動照明系統


物聯網智能樓宇自動照明系統,用Arduino系列的WifiDuino作為主控開發板,配合Blinker提供的“點燈·blinker”APP,實現在該APP上控制LED亮暗、狀態顯示、溫濕度顯示、用小米小愛進行語音控制燈開關、亮暗程度等功能。

點燈科技的官網  https://www.diandeng.tech/home

開發者社區內教學  https://www.arduino.cn/thread-104162-1-1.html

本文章的內容都是參考了官網內的開發文檔以及開發者社區內教學完成的,作者水平有限,文章難免出紕漏,有問題的話建議去以上兩個網址查詢

准備工作:

1.WifiDuino開發板

2.Arduino IDE

3.手機下載“點燈·blinker”APP,在點燈科技官網可以下載(上面第一個鏈接),注冊好后,在APP界面點擊右上角“+”號-獨立設備-網絡-阿里雲-到Secret Key界面,把key復制下來,寫程序要用。

 

 

4.一些必要的傳感器,如聲音、光敏、人體紅外等,LED,杜邦線,語音控制需要用小米手機(小愛同學語音控制)

之后就可以打開Arduino IDE進行編程了。

打開Arduino IDE之后,插上WifiDuino開發板,配置好,關於開發板插入之后串口什么東西的配置,可以參考網上的博客,這里僅放幾張圖:

 設備管理器

 

連接好電腦后,COM8口是我的WifiDuino,連接好后刷新一下,如果沒有出現,可能是沒有安裝驅動,

 驅動連接如下:

鏈接:https://pan.baidu.com/s/1O-uLR3fv637_2VpkOkGJDQ
提取碼:6qbw

然后需要安裝一些庫文件,安裝庫文件的方法有很多,我介紹我使用的一種:

下載好庫文件Zip后-解壓-解壓文件復制到arduino路徑-libraries中,注意里面原有的庫文件,打開之后里面有examples,src等文件夾,你復制進去之后也要在里面打開之后直接是有examples,src等文件夾,不要復制進去一個Crypto,打開之后還是Crypto,再打開才是examples,src等文件夾。

我把我所用的所有庫文件放上來,可能有的不需要,但是保險還是都安裝上吧,鏈接如下:

鏈接:https://pan.baidu.com/s/1kw6mIADdN-kZ7L0His-VbQ
提取碼:agpx

等都裝好之后,在Arduino中“工具”選項中選中自己使用的開發板WifiDuino,如下圖所示

在Arduino中配置WfiDuino

弄好之后就可以開始編寫程序了。

在做整個項目前,首先要了解一下 WifiDuino+點燈·blinker 控制的基本原理,首先打開點燈app的頁面-點擊你的設備-點擊“載入示例”,出現如下界面

載入示例

軟件界面

可以看到,圖中有四個元素,一個“0次點擊按鍵”,一個“點我計數”的按鈕,一個“點我開關燈”的按鈕,一個“Monitor”監視器,APP部分先結束。

打開Arduino IDE-文件-示例-Blinker-Blinker_hello-Hello_Wifi,如下圖所示:

示例

打開程序后,需修改下圖所示的部分:

將紅色框部分,第一行改為最初在“點燈·blinker”中創建設備賦值的Secret Key復制上去,第二、第三行分別是你創建的無線網絡的網絡名和密碼(可以自己用手機創建一個熱點即可)。改好之后,將程序燒錄進開發板,然后打開App,點擊“點我開關燈按鈕”可以看到開發板上有藍燈(是開發自帶的LED,引腳是LED2,可以用默認宏定義“LED_BUILTIN”來控制)隨着點擊亮暗。

上面這個程序是最基礎的程序了,用手機App控制開發板上燈的亮暗,其實本文所介紹的項目的開發很簡單,只要你理解了這個程序,你就可以寫出這個項目的大部分功能。下面來簡單解釋一下這段代碼是如何控制開發板上的燈亮暗的。

整個程序的整體思路是這樣的,我們的填寫的Secret Key是用來綁定我們app中的“設備”(也可以說是在app上的虛擬設備界面)與我們物理上的WifiDuino開發板的,我們填寫的SSID和PSWD是我們創建的網絡的名稱和密碼,這可以用來讓我們的WifiDuino通過該無線網絡連接上網絡,然后與app建立連接。之后,點擊app中“點我開關燈”按鈕,可以向WifiDuino開發板中發送開燈或者關燈的命令,我們可以看到,點擊“點我開關燈”后,app中的“Monitor”會出現  “btn-abc”:"tap"  的命令,這其實就是app向WifiDuino開發板發送的json格式的命令,而因為我們之前也安裝了庫文件,所以開發板中的程序會自動解析收到的json格式命令,並執行命令。

那么開發板中的程序是如何執行這些命令的呢?

我們看到程序中這兩行代碼,程序上的注解是“新建組件對象”,我們可以隱約感覺到,組件就是app里的那四個組件,那么建立的“組件對象“”自然是可以在本程序中控制app里那四個組件的對象了。

我們很清楚“Button1”是按鈕,那么“Number1”呢?事實上,我們打開我們的app,進入我們的設備,看到右上角有一個鉛筆,點擊之后,會發現我們是可以自己編輯組件的,如下圖所示:

 

我們可以看到下面一行有文字、按鍵、數據這些組件選項,事實上,程序中地Button對象對應“按鍵”組件,Number對象對應“數據”組件。

我們還可以注意到,圖中的四個組件左上角都有藍色的小字,“點我開關燈”上面的小字是“btn-abc”,“0次點擊按鍵”上面的小字是“num-abc”,是跟上面兩行代碼中括號的內容是一致的。

實際上,程序中就是通過這種方式,來綁定對象與app中組件的“數據鍵名”,“數據鍵名”即“btn-abc”、"num-abc",我們在上面的app界面中點擊“點我開關燈”,會發現數據鍵名是可以自己設置的,如下圖所示:

 

 

這樣我們就清楚在程序中是如何將對象與app中的組件關聯起來的了。以“點我開關燈”按鈕為例,在程序中寫入如下代碼:

 

 就可以將Button1對象與app中數據鍵名為“btn-abc”的按鈕綁定在一起。

 綁定在一起之后,每當app中點擊該按鈕,app端便會向我們的開發板發送josn格式的命令{"btn-123":"tap"},如下圖所示:

當開發板端接收到該命令后,會自動解析該命令,並調用 與數據鍵名為"btn-123"綁定在一起的對象 的回調函數,並將狀態數據"tap"放入該回調函數的形式參數中。

開發板程序中與 app中數據鍵名為"btn-123"的組件對象 綁定在一起的對象為Button1,在setup()函數中再將對象Button1與該對象的回調函數"button1_callback"相關聯,這樣當在app中點擊該按鈕時,該回調函數則會被調用。對象Button1與回調函數"button1_callback"的綁定如下圖所示:

 

我們只需要在開發板端編寫回調函數,決定當接收到該命令后開發板應該做什么事情。

回調函數如下:

 該回調函數的意思是,當調用該回調函數時,第一句在打印Blinker日志上輸出狀態state,第二句,每當調用一次回調函數,改變LED_BUILTIN的狀態。

此外,點燈·blinker的按鈕分為普通按鈕和開關按鈕,如下圖所示:

設置為開關按鍵后,當該按鍵處於關閉狀態時,點擊該按鍵,app端會向開發板發送{"btn-w4m","on"}的命令,當按鍵處於開啟狀態時,點擊該按鍵,app端會向開發板發送

{"btn-w4m","off"}的命令,下面簡單用開關按鍵的回調函數講一下如何在app端控制開發板上LED燈光亮暗:

 

當點擊開關按鈕后,app端會向開發板端發送命令,其中發送來的"on"和"off"會存儲到形式參數state中,在回調函數內判斷,如果命令是"on",說明按鈕為關閉狀態時按了一下按鈕,則另開發板D10引腳為高電平(D10)連接LED,並用ledButton.print("on")來將app中的按鈕呈打開狀態。(ledButton為開發板程序中 與開關按鈕組件的數據鍵名 綁定的對象)

了解了以上知識,就可以開始我們自動照明系統的開發了,以上所有組件的操作在點燈官網的開發文檔都可以查詢到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM