(吔,我的ESP8266有長腳了,開醺!感謝也不知道該說是那一間學校的劉同學,專程跑來幫我焊)最近都在玩MQTT相關的東西,在這裡有一個關鍵的角色,就是用來接收由設備傳送過來的資訊,處理完後,送到MQTT伺服器的設備,在今天這個例子中指的是上一篇文章中所用的ESP8266 D1 mini

(上圖是網路上找的)想像一個狀況,這個ESP8266的設備,未來會裝到商品之中,這個商品到消費者手中後,消費者所要做的第一件事就是要把設備連上家中的AP,這樣這個商品才能把資訊透過網路把感測器取得的資訊上傳與接收控制設備的控制指令。所以今天面對的問題就是要在ESP8266 D1 mini中啟動基礎的AP功能,啟動自帶的網站處理連結消費者家中AP的程序,連上AP後於EEPROM中記錄下相關的資訊以供下次使用。(單單用想的就覺得好麻煩喔!)

我常對學生說"我們所遭遇到問題一定不會只有我們遇到,上網查一下看別人是怎麼解決的",果然對於ESP8266而言,有人做了名為WiFiManager的Library可以解決這個問題。

以下是我這次完成的完整程式(其實絕大部的程式都跟上一篇文章中的相同,只有在連AP的部分重新改寫為由WiFiManager的物件來處理)

在程式中,可使用

WiFiManager wifiManager;

wifiManager.autoConnect();

來啟用在WiFiManager物件中所預設好的網站、連接AP與保留相關參數的程序,執行後可在Serial port中看到

其中ESP9483774中的數字是ESP8266晶片中的序號(自動抓取),我用它來做為ESP8266 D1 mini所啟動的AP之SSID。而192.168.4.1,就是ESP8266 D1 mini所啟動的Web Server的IP位址。接下來要做的就是連上ESP8266 D1 mini的AP,先讓行動裝置連接此AP

連上ESP8266 D1 mini後可用瀏覽器連到位於192.168.4.1的網站

這時Serial port中會看到

在網頁中按Configure WiFi,會自動去掃描附近可用的AP

這時Serial port中會看到

指定要使用的SSID與PASSWORD,在網頁中按Save,若可以正常連線指定AP,則會把資訊保留在EEPROM中

這時Serial port中會看到

正確連上AP後就可透過網路來傳送與接收MQTT的訊息了

之後若是設備重新啟動,由於要連的AP的相關資訊有保留下來,所以會自動連上AP,做該做的事情。若是找不到最後一次設定好的AP可以使用,程式又會自動啟動相關程序,只要再重新前述的動作,指定新的AP給它就又可運作了。

吔!又寫完了,可以玩鋼彈大亂鬥了!