如今,多數(shù)小區(qū)中的單元樓都裝有樓宇對講門禁。人們想要進入樓中,理論上只有兩種方式:刷門禁卡(臉或手指也可);輸入并呼叫門牌號,讓屋里的人按開門按鈕。這兩種開門方式,分別適用于戶主和訪客進入,同時極大程度降低了入室盜竊發(fā)生的概率,是“科技改變生活”的極佳案例。然而,對于一些只能刷卡的老式門禁,出門忘帶門卡,是個相當高頻的問題,尤其是家里沒有別人的時候,別提多頭大了。實際生活中,解決方法有很多。有的門禁可以輸入密碼;我們也可以打電話聯(lián)系物業(yè),或是等一會尾隨他人進入。但是以上這些方式,或多或少會耽誤幾分鐘時間,而且太不自動化。作為一個“創(chuàng)客”,我怎能接受得了。為此,我設(shè)計并制作了一款基于ESP8266和舵機的聯(lián)網(wǎng)門禁,使用手機APP操作開門禁,解決了這個棘手的問題。ESP8266是一款國產(chǎn)的WiFi芯片,通常是以WiFi模塊的方式,通過串口連接到Arduino等開發(fā)板上使用。然而有許多國內(nèi)外技術(shù)大佬發(fā)現(xiàn),ESP8266內(nèi)置的MCU控制器,可以直接被編程。換句話說,它可以獨立運作,完成Arduino等單片機幾乎全部功能的同時還能連接WiFi。此外,一塊ESP8266開發(fā)板,價格大約二十塊錢人民幣,相比于Arduino官方的動輒數(shù)百元的開發(fā)板,性能更強的同時成本大幅度降低。況且,官方秉持開源精神,開放了適用于Arduino的ESP8266 SDK。說白了,就是會玩Arduino的人可以零門檻開發(fā)ESP8266。于是,在以Atmel(Arduino官方開發(fā)板芯片供應(yīng)商)為首的許多芯片廠商因疫情原因供貨短缺的情況下,ESP8266在全球開源硬件圈大受歡迎,成為了新一代物聯(lián)網(wǎng)控制器的極佳選擇。而我這個作品需求:首先要有聯(lián)網(wǎng)功能,并能驅(qū)動舵機這樣的模塊設(shè)備;其次為了實際應(yīng)用,要盡可能降低成本;最后要便于開發(fā),使用我熟悉的Arduino代碼(基于C++)編程。恰好這幾點都是ESP8266的優(yōu)點,于是我毫不猶豫地下單,看在其便宜,怕質(zhì)量不好的份上一次買了四塊板。此外,我還學(xué)習了AppInventor,是一款圖形化的簡單安卓開發(fā)工具,用于設(shè)計手機上的開鎖應(yīng)用。一切準備就緒,我便利用周末的自由時間,開始了這一項目。我結(jié)合其目標功能,設(shè)定了分步開發(fā)計劃。第一是用模塊驅(qū)動舵機轉(zhuǎn)動,這很容易,直接把Arduino程序拿過來就能用;第二步是將模塊聯(lián)網(wǎng),與手機等廣域網(wǎng)設(shè)備建立通信,實現(xiàn)手機控制。這一步的難度就相當大了。由于現(xiàn)在家庭WiFi上面都套了好幾層內(nèi)網(wǎng),手機和模塊不在同一WiFi下是完全無法訪問ESP8266的,更別說建立通信控制了。因此,直接連接的方案是不可能的,必須進行中轉(zhuǎn)。中轉(zhuǎn)的原理就是在公網(wǎng)架設(shè)一臺服務(wù)器,ESP和手機都可以訪問并建立連接。當手機發(fā)送的信息到達服務(wù)器,ESP就會立刻檢測到并執(zhí)行開門動作。自己購買云服務(wù)器的成本過高,好在有許實惠的物聯(lián)網(wǎng)專用云可供選擇。目前國內(nèi)做得比較好的是巴法云,個人非商業(yè)用途可免費使用。根據(jù)巴法云官方的開發(fā)文檔和示例程序,我發(fā)現(xiàn)稍微損失一點安全性,讓模塊使用MQTT協(xié)議聯(lián)網(wǎng),要比使用TCP協(xié)議速度更快,且代碼更簡單。并且單元樓的大門,就算被無關(guān)人員遠程打開,還有一層家門,大可不必擔心。以上過程,我用了兩個周末寫代碼,終于實現(xiàn)了手機聯(lián)網(wǎng)控制功能,然而新的棘手問題又出現(xiàn)了。1.0版本的程序,模塊連接的WiFi名稱和密碼信息,是寫在源代碼里,直接燒寫進單片機的。如果要連接其它WiFi,或者自己家的WiFi改了密碼,就需要更改源代碼重新燒寫程序,過于復(fù)雜。因此,模塊最好能夠像市面上的物聯(lián)網(wǎng)設(shè)備,通過手機配網(wǎng),隨時重置連接其它WiFi。為此,我再次上網(wǎng)搜索,在各種社區(qū)論壇查閱大佬們的解決方案,最終發(fā)現(xiàn)了一個寶藏庫——WiFiManager。這個庫整合了一些簡單的函數(shù),可以實現(xiàn)通電自動聯(lián)網(wǎng)和手機配網(wǎng)。ESP8266通電開機后,程序會自動檢索EEPROM(ESP8266上一個斷電不會清空的存儲器)中是否有WiFi信息,如果有就會嘗試連接,沒有或者連接失敗,就會進入配網(wǎng)模式;ESP8266會先把自己變成一個WiFi熱點,使用手機連接后會自動跳轉(zhuǎn)到其內(nèi)置的配置網(wǎng)頁,我們可在網(wǎng)頁上可以輸入要連接的WiFi名和密碼。保存后,模塊會再次嘗試聯(lián)網(wǎng),如果連接成功,新設(shè)置的WiFi名和密碼信息會覆蓋原來EEPROM中的數(shù)據(jù),并在下次通電自動連接;如果連接失敗,那么模塊就會重置,再次進入配網(wǎng)程序。此外,我們也可以通過引腳觸發(fā),比如按按鈕的方式,手動清除模塊中已有的WiFi信息,觸發(fā)重新配網(wǎng)。這一系列研發(fā)過程同樣耗時兩個周末,也與聯(lián)網(wǎng)控制完成了融合,實現(xiàn)了目標中的全部功能。至此,這個項目已經(jīng)進行了一個月的時間。在實際使用的測試中,還有一些需要改進的地方。比如模塊短暫斷網(wǎng)后,不會自動重連,而是先重啟,再自動清除了配網(wǎng)信息……直到現(xiàn)在,我的程序代碼已經(jīng)更新到了第四代,解決了測試中發(fā)現(xiàn)的全部BUG。通過這次制作我大大認識到ESP系列WiFi控制器的無限潛力,手里剩下的三塊板子未來也有相當廣闊的開發(fā)空間。其實,這一項目的成功,除了我的興趣,更離不開各種開源社區(qū)的帖子,也就是各位大佬秉持極客精神,將自己的包括源代碼在內(nèi)的整個作品成果,無償分享給愛創(chuàng)造的所有人。我也會將我的整個設(shè)計和代碼分享到各大社區(qū),將這種無私的開源創(chuàng)客精神傳遞下去。最后,我也希望自己能夠保持興趣,繼續(xù)享受這種自己動手解決問題的獨特快樂。 實際測試視頻
作者簡介:金元寶,男,2007年10月生,高一“求知少年”?!盒⌒∩倌暾f』公號創(chuàng)建者,周五專欄小作者。自2016年3月25日起,每周一篇,記錄成長。
元寶的話:好久沒有做自己曾熱愛的單片機電子制作了。這次實踐,我似乎發(fā)現(xiàn)了兩個寶藏,一個是ESP8266這個性價比極高的物聯(lián)網(wǎng)控制器,另一個就是各大開源論壇。這些開源極客們秉持極客精神,將自己的設(shè)計與成果分享出來,是一種非常高尚的行為,我也要將其延續(xù)下去。作品相關(guān)的布線圖和代碼鏈接將會置頂留言中發(fā)出,感興趣的可以閱讀并下載。
|