1. 連接WiFI
如下圖所示,ESP8266可通過WiFi連接無線路由器。這與用您的手機通過WiFi連接無線路由器的模式相同。
以下示例程序用于演示如何使用NodeMCU以無線終端模式通過WiFi連接無線路由器。
注:我們在本教程中為您所提供的所有代碼都會盡可能豐富的提供注釋說明。這些注釋說明的作用就是為了便于您更好的理解程序的運行。
無法復(fù)制本站示例程序?請點擊這里找到解決方案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /* NodeMCU無線終端模式連接WiFi By 太極創(chuàng)客(http://www.taichi-maker.com) 2019-03-11 本示例程序用于演示如何使用NodeMCU無線終端模式連接WiFi 如需獲得更多關(guān)于如何使用NodeMCU開發(fā)物聯(lián)網(wǎng)的教程和資料信息 請參考太極創(chuàng)客網(wǎng)站(http://www.taichi-maker.com) 并在首頁搜索欄中搜索關(guān)鍵字:物聯(lián)網(wǎng) */ #include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi庫 const char* ssid = 'taichi-maker'; // 連接WiFi名(此處使用taichi-maker為示例) // 請將您需要連接的WiFi名填入引號中 const char* password = '12345678'; // 連接WiFi密碼(此處使用12345678為示例) // 請將您需要連接的WiFi密碼填入引號中 void setup() { Serial.begin(9600); // 啟動串口通訊 WiFi.begin(ssid, password); // 啟動網(wǎng)絡(luò)連接 Serial.print('Connecting to '); // 串口監(jiān)視器輸出網(wǎng)絡(luò)連接信息 Serial.print(ssid); Serial.println(' ...'); // 告知用戶NodeMCU正在嘗試WiFi連接 int i = 0; // 這一段程序語句用于檢查WiFi是否連接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函數(shù)的返回值是由NodeMCU的WiFi連接狀態(tài)所決定的。 delay(1000); // 如果WiFi連接成功則返回值為WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此處通過While循環(huán)讓NodeMCU每隔一秒鐘檢查一次WiFi.status()函數(shù)返回值 } // 同時NodeMCU將通過串口監(jiān)視器輸出連接時長讀秒。 // 這個讀秒是通過變量i每隔一秒自加1來實現(xiàn)的。 Serial.println(''); // WiFi連接成功后 Serial.println('Connection established!'); // NodeMCU將通過串口監(jiān)視器輸出'連接成功'信息。 Serial.print('IP address: '); // 同時還將輸出NodeMCU的IP地址。這一功能是通過調(diào)用 Serial.println(WiFi.localIP()); // WiFi.localIP()函數(shù)來實現(xiàn)的。該函數(shù)的返回值即NodeMCU的IP地址。 } void loop() { } |
在以上程序的控制下,您的NodeMCU將會連接名稱是”taichi-maker”的WiFi網(wǎng)絡(luò)。當(dāng)網(wǎng)絡(luò)連接成功后,您可以通過串口監(jiān)視器看到如下信息。其中最后一行“IP Address”信息就是NodeMCU連接WiFi以后的IP地址了。
如下圖所示,為了確認(rèn)NodeMCU的確已經(jīng)聯(lián)網(wǎng),我們可以在Windows操作系統(tǒng)的“命令提示符”中輸入:ping 192.168.0.106
從以上截屏可以看到,NodeMCU成功的對我們的ping指令做出應(yīng)答。到這里就可以確定當(dāng)前NodeMCU已經(jīng)成功連接WiFi了。
假如您不清楚以上操作的原理,請讓我在這里給您做一個簡單的介紹。當(dāng)NodeMCU成功連接WiFi以后,電腦就可以通過WiFi與NodeMCU相互通訊了。反之,如果NodeMCU沒有成功連接WiFi,那電腦自然是無法與NodeMCU通訊的。因此我們可以通過電腦能否與NodeMCU通訊來判斷NodeMCU是否成功聯(lián)網(wǎng)?但是該如何讓電腦和NodeMCU進行通訊呢?這就要借助Windows指令ping了。
從以上的串口監(jiān)視器截屏我們知道了NodeMCU在網(wǎng)絡(luò)中的IP地址是192.168.0.106。接下來我們只需要在Windows的“命令提示符”中輸入ping 192.168.0.106
然后回車。這時電腦將會向NodeMCU所在的IP地址192.168.0.106發(fā)送多個數(shù)據(jù)包。如果NodeMCU成功接收到了這些數(shù)據(jù)包,那么它會同樣回復(fù)幾個數(shù)據(jù)包給電腦。于是在“命令提示符”窗口中,我們看到了這幾條Reply from 192.168.0.106: bytes=32 ...
信息如下圖紅色方框標(biāo)注部分所示:
當(dāng)我們在“命令提示符”窗口中看到了這幾條Reply from 192.168.0.106: bytes=32 ...
以后,就可以確定電腦和NodeMCU可以彼此通訊了,這也就證明了NodeMCU已經(jīng)成功聯(lián)網(wǎng)。
相反,如果您的NodeMCU沒有聯(lián)網(wǎng)的話,在“命令提示符”窗口中將會看到Request timed out
信息。如下圖所示。
2. 自動連接最強信號WiFi網(wǎng)絡(luò)
假如我們的NodeMCU只在一個地方使用,它也就只需要知道一個WiFi網(wǎng)絡(luò)的連接信息。但是如果NodeMCU需要在多個地方使用,這時候就需要它能存儲多個地點的WiFi信息。通過以下示例程序,NodeMCU可以在它所處的網(wǎng)絡(luò)環(huán)境里搜索預(yù)先存儲好的WiFi。一旦找到預(yù)存的WiFi名稱,NodeMCU將會使用預(yù)存的密碼信息嘗試連接該WiFi。如果同時找到多個預(yù)存WiFi,NodeMCU將會嘗試連接信號最強的WiFi。
以下這段示例程序?qū)崿F(xiàn)這一功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /* NodeMCU無線終端模式連接WiFi-2 By 太極創(chuàng)客(http://www.taichi-maker.com) 2019-03-11 此程序?qū)刂芅odeMCU在當(dāng)前的網(wǎng)絡(luò)環(huán)境里搜索預(yù)先存儲好的WiFi。 一旦找到預(yù)存的WiFi名稱,NodeMCU將會使用預(yù)存的密碼信息嘗試連接該WiFi。 如果同時找到多個預(yù)存WiFi,NodeMCU將會嘗試連接信號最強的WiFi。 如需獲得更多關(guān)于如何使用NodeMCU開發(fā)物聯(lián)網(wǎng)的教程和資料信息 請參考太極創(chuàng)客網(wǎng)站(http://www.taichi-maker.com) 并在首頁搜索欄中搜索關(guān)鍵字:物聯(lián)網(wǎng) */ #include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi庫 #include <ESP8266WiFiMulti.h> // 本程序使用ESP8266WiFiMulti庫 ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti對象,對象名稱是'wifiMulti' void setup() { Serial.begin(9600); // 啟動串口通訊 //通過addAp函數(shù)存儲 WiFi名稱 WiFi密碼 wifiMulti.addAP('taichi-maker', '12345678'); // 這三條語句通過調(diào)用函數(shù)addAP來記錄3個不同的WiFi網(wǎng)絡(luò)信息。 wifiMulti.addAP('taichi-maker2', '87654321'); // 這3個WiFi網(wǎng)絡(luò)名稱分別是taichi-maker, taichi-maker2, taichi-maker3。 wifiMulti.addAP('taichi-maker3', '13572468'); // 這3個網(wǎng)絡(luò)的密碼分別是123456789,87654321,13572468。 // 此處WiFi信息只是示例,請在使用時將需要連接的WiFi信息填入相應(yīng)位置。 // 另外這里只存儲了3個WiFi信息,您可以存儲更多的WiFi信息在此處。 Serial.println('Connecting ...'); // 通過串口監(jiān)視器輸出信息告知用戶NodeMCU正在嘗試連接WiFi int i = 0; while (wifiMulti.run() != WL_CONNECTED) { // 此處的wifiMulti.run()是重點。通過wifiMulti.run(),NodeMCU將會在當(dāng)前 delay(1000); // 環(huán)境中搜索addAP函數(shù)所存儲的WiFi。如果搜到多個存儲的WiFi那么NodeMCU Serial.print('.'); // 將會連接信號最強的那一個WiFi信號。 } // 一旦連接WiFI成功,wifiMulti.run()將會返回“WL_CONNECTED”。這也是 // 此處while循環(huán)判斷是否跳出循環(huán)的條件。 Serial.println('\n'); // WiFi連接成功后 Serial.print('Connected to '); // NodeMCU將通過串口監(jiān)視器輸出。 Serial.println(WiFi.SSID()); // 連接的WiFI名稱 Serial.print('IP address:\t'); // 以及 Serial.println(WiFi.localIP()); // NodeMCU的IP地址 } void loop() { } |
聯(lián)系客服