隨著微功耗處理器以及通訊芯片的發展,以往較為耗能的有線通訊方式越來越阻礙了通訊網絡的發展,于是一大批的無線通訊方案應運而生,例如NBIOT,藍牙4.0,zigbee等等。同時微功耗無線處理器的流行使得傳統家電帶上了智能的色彩,智能家居必將是未來家庭的必備。某些高科技企業也在揶揄這塊市場,紛紛推出了自家的智能家居解決方案,比較知名的有米家方案以及阿里智能的解決方案。但是回到現實的使用上來說,每個家庭的條件環境其實不一樣,同樣的產品未必在每個家庭上都可以使用方便,所以個性化的定制產品才可以更好的方便我們的生活。
于是在暑假期間,萌生了DIY一套智能家居方案的想法,具有各種智能開關和傳感器等節點,并且對接物聯平臺實現聯網控制以及數據的上傳。由于家庭中將會使用到的智能設備種類繁多,所以我將采用模塊化的設計思路,即采用核心板加外圍功能部分的思路,像搭積木一樣的構建各個智能設備。大家有同樣想制作的想法可以參考。截至發帖前,我完成了智能網關,智能墻壁開關,無線遙控開關以及無線氣象站的設計制作,之后有新的設備加入的話,我會及時的更新。
設想篇
下面是一張我構思的網絡拓撲圖:
無線通訊方案的選擇:zigbee
好早之前就接觸過zigbee組網,對于這種低成本低功耗的網絡還是抱有很大信心的。這里講解選擇這個網絡的幾大理由:
mesh結構的網絡很適合智能家居的控制結構,在入網的任何一個節點都可以訪問到所有節點的數據,這點很適合網關控制各個設備。
低功耗使得終端設備甚至可以采用電池供電,使得所有的模組都盡量可能的無線化。
多跳傳輸,無線方案中最大的問題就是數據發送的不穩定以及障礙物對信號的遮擋導致數據無法正確傳輸,而ZigBee的多跳恰好解決了這個問題,節點會自動選擇優質的傳輸路線多跳傳輸,保證信號質量。
zigbee網絡確實是好,但是對于我這種比較懶惰的人并不想去學習那復雜的傳輸理論以及zigbee通訊芯片的編程,于是我選擇上網購買ZigBee模塊,最后選擇了一種小型的串口轉zigbee模塊,比較方便單片機通訊。
核心板的制作:
說到模塊化,那么就需要核心的控制板。本質來說就是將單片機以及購買的zigbee模塊集成到一張電路板上,并且預留各種接口,方便后期移植到各種設備上,這樣一張電路板就可以適用各種智能家居設備了。
在保證功能足夠的同時,體積也是我需要考慮的問題,如果核心板做的過大,會導致無法安裝到某些空間狹小的智能設備中,所以小體積是我所著重考慮的。
基于多方面考慮之后,stc8F2k08s2進入了我的視線,小巧的sop16封裝以及簡單的外圍電路,足夠的IO口(14個)。這款芯片成為了核心板的控制單片機。于是一番繪制原理圖以及PCB之后,成品大概明朗了:
焊接好的成品如下:
這將會成為以后所有我的智能家居方案的核心控制板。
完成了核心板的制作,網關成為了下一個比較關注的對象,因為家中的所有智能設備的控制以及通訊都會由他來完成,包括鏈接到互聯網上傳數據,所以說對于網關的硬件選取也是重中之重。上聯互聯網,下接zigbee小型通訊網,網關擔任了一個家庭控制中心的角色,對于它的選擇我認為esp8266是個不錯的方案,可以支持arduino ide編程,這對于不太了解網絡通訊協議的我來說是個好消息,因為在arduino的編程中,我可以借助強大的庫函數來完成我想要的功能。
esp8266是一個擁有了近80Mhz的主頻的32位處理器,內置了wifi模組省去了網線,并且擁有豐富的外設以及較高的性能,可以勝任智能網關的工作。當然,近期樂鑫發布的ESP32系列芯片也會是個好的選擇,更高的主頻以及wifi藍牙雙模的設計讓其擁有更加方便的接入方式,由于手頭上正好有一塊esp8266,所以沒有采用性能更好的ESP32。
這樣我需要對ESP8266進行片上編程,并調用它的串口和zigbee模塊通信,當zigbee的節點收到其他設備發來的數據的時候,esp8266可以對其處理或者通過WiFi上傳到云平臺,整體的設計思路就是這樣。
為了方便網關節點的狀態顯示以及相關信息讀取,為以后的調試提供便利,我給網關添加了一塊4.3寸的串口觸摸屏,這樣方便信息的讀取以及調試工作。
完成了zigbee節點核心板的設計以及網關的硬件選擇,整個智能家居系統的主要部分就構建完成了,我先不講解程序的編寫,因為我將會在調試好每一個智能設備之后,再對網關進行編寫對應設備的接口程序。即完成一個智能設備的開發之后再對接網關,使其加入到家中的zigbee網絡,實現聯動控制或者聯網控制,因為畢竟我使用的ZigBee模組只是起一個通訊的作用,具體的功能實現還是靠核心板上的單片機來完成。這種開發方法叫做迭代開發,對于較為龐大的項目是一種較好的解決方案。
制作篇
下面是介紹智能墻壁開關的設計,核心就是使得家里墻壁開關智能化,可以聯網控制,達到場景聯動,智能控制等目的。
我嘗試就家中的傳統開關進行改造,但是發現拆開之后內部空間實在不夠,沒法完成改裝
于是嘗試網購新的開關,尋找空間大些的墻壁開關,后來我找到了專門生產觸摸智能開關外殼的廠家,購買了幾個觸摸墻壁開關的外殼,內部空間較大,適合改造
由于是觸摸面板,所以我準備使用觸摸模塊作為輸入。關于執行機構,也就是一充當原來機械開關的器件,我準備使用繼電器來代替。繼電器可以讓我使用單片機輸出的信號去控制220V交流電壓的通斷,并且提供良好的隔離以及絕緣性能。
1.代碼的編寫:
選擇了繼電器以及觸摸模塊之后,我在面包板上搭建了電路,接下來就是編寫代碼了
對于 智能開關節點,我將zigbee模塊配置成了路由器節點,這樣做的好處是,墻壁開關同時扮演了一個路由器的角色,看可以協助一些遠距離的終端節點完成多跳數據傳輸。。例如我想在臥室使用一個無線開關(下一章將會開發的)去控制家門口的燈光,直接將數據發送到家門口的智能開關上或許信號強度不夠造成通信失敗,這時我在客廳增加一個路由器節點之后,無線開關的信號便可以傳輸到家門口的智能開關上。
同樣的,為了響應國家節能減排的號召,我給單片機配置成了空閑模式以節省功耗,但是空閑模式下單片機沒法正確及時的檢測到觸摸按鍵的按下,所以我使用單片機的外部中斷來檢測觸摸按鍵,當觸摸按鍵按下時,單片機檢測到電平變化,引發中斷,喚醒單片機,使得單片機執行相關指令。
當zigbee模塊收到來自智能網關的數據時候(例如閉合開關或者斷開開關),其輸出數據引發的串口中斷也會喚醒單片機,這時候單片機會執行收到的指令,隨后再次進入空閑模式。
此外,為了更好的檢測每個開關的狀態,每次開關有動作之后,會將當前的狀態上報給智能網關,以便網關檢測家中所有的開關狀況。
2.開關的測試:
鏈接zigbee的協調器節點到電腦上,打開智能開關的電源,可以看到每當我觸摸開關,對應的繼電器都會動作,并且協調器節點串口都會輸出一些數據:
下面是一幀數據的解讀
同時,在串口監視器輸入關閉兩路開關的指令,按回車發送,可以觀察到本來開啟的兩路開關,全部關閉了
測試完畢,智能開關達到了我想要的功能,下面就是針對我購買的外殼設計PCB板了
3.智能開關PCB的設計與制作:
對于購買的外殼,我先找到了一張廠家提供的CAD圖紙,上面標有了一些基本尺寸,這樣方便我去設計一塊合適的PCB板。
將之前在面包板上搭建的電路,繪制成原理圖之后效果如下:
轉換成PCB文件后,經過簡單的元件擺放以及布線后,完成的效果如下:
將交流高壓部分和直流低壓部分開槽隔離,提供了較好的抗干擾特性。而反面則設有zigbee模塊以及單片機的位置。
約幾天后,我收到了制作好的板子。
同時到來的還有一些元器件。
焊接過程太繁瑣無聊,略去。焊接好之后的效果圖
安裝上觸摸模塊之后,使用雙面膠將觸摸模塊粘貼在面板玻璃上。
燒錄程序,合上外殼
背后使用標簽標明出接線口定義,方便安裝。
使用智能開關替代家中的傳統開關。
4.網關對應程序的編寫:
這部分的程序主要是網關接受物聯平臺發來的控制指令json字符串,然后解碼翻譯,最后通過zigbee網絡告知智能開關引起相應動作。所以其核心在于接受服務器的json字符串,解釋其含義。
同樣的,還是使用arduino的json庫來處理這些信息,查閱物聯平臺的通訊協議手冊,發現采用如下格式:
所以只需要解讀say指令后面附帶的指令即可,于是很快的,一個使用else if語句的并列結構就寫好了,程序對收到的字符串依次判斷,如果相同則發送指令給智能開關。
上傳程序到ESP8266,開始測試!
5.綜合測試
安裝智能開關到位,接上網關的電源,觸摸觸摸開關,電燈可以正常開啟關閉
拿出手機,打開物聯平臺,按下開啟電燈按鈕,電燈開啟。
至此,我實現了智能開關的設計,電路搭建以及使用網絡控制。并且支持各種功能擴展(定時開關,和人體傳感器聯動等等),升級空間十分大,并且可聯網控制,給生活帶來了很大方便。
無線遙控開關制作
晚上睡覺前,有的墻壁開關距離床上太遠,因此不方便關燈,所以我準備設計一款遙控無線開關,可以通過配對的形式完成對家中所有智能設備的控制,類似與隨手貼開關。下面是介紹無線遙控開關的設計。
1.電路設計
作為zigbee網絡中的終端節點,無線遙控開關需要具有低功耗運行模式,因此根據我采用的e18zigbee模塊的數據手冊,將其配置成睡眠模式
拿出制作好的zigbee最小系統板
無線遙控開關上面有一個按鍵用來操作,所以焊接一個按鍵開關到最小板模塊上
另外焊接上電源線,采用紐扣電池供電
用3D打印機打印了殼子
將板子切割一下放進去
組裝好的樣子
2.網關對應的配置
我繪制了一個顯示屏的界面
在此界面下,按下墻壁開關的配對按鈕
此時顯示屏上會顯示相關信息,設備編號為1的會顯示在第一行,以此類推,超出一頁的部分會自動翻頁
如果復位按鍵損壞,還可以使用MAC地址添加方式
點擊信息右邊的配對按鈕,屏幕下方會顯示配對中的提示語
此時按下無線遙控開關的按鈕
即可在顯示屏上見到配對成功的提示語
此時使用無線遙控開關即可控制燈的亮滅
實現這個功能的主要原理就是無線開關記住了墻壁開關的短地址,這樣每次按下按鍵都會發送一次數據給智能墻壁開關以便控制亮滅。由于是電池供電的開關,為了避免在更換電池后需要重新配對的問題,我使用了單片機內置的EEPROM來存儲短地址,這樣就無需每次上電都要重新配對了。
責任編輯 LK
-
處理器
+關注
關注
68文章
19259瀏覽量
229653 -
ZigBee
+關注
關注
158文章
2270瀏覽量
242735 -
智能家居
+關注
關注
1928文章
9553瀏覽量
184941
發布評論請先 登錄
相關推薦
評論