8266wifi模塊開發(fā)詳解(二)基本用法
掃描二維碼
隨時隨地手機看文章
1. 文章說明2. 硬件電路2.1 外觀介紹2.2 引腳分布3. 軟件設計3.1 閃燈3.2 按鍵3.3 PWM3.4 SoftAP3.5 STA模式3.6 AP+STA3.7 Scan WiFi4. 總結
1. 文章說明
本文主要結合上面的工程環(huán)境,利用vscode+platformIO物聯(lián)網(wǎng)開發(fā)環(huán)境,同時使用當下最流行的開源硬件系統(tǒng)Arduino學習與掌握對硬件的編程方法。對于物聯(lián)網(wǎng)的江湖世界,Arduino猶如掀起一股浪潮的屠龍寶刀,將繼續(xù)為這風起云涌的物聯(lián)網(wǎng)時間貢獻力量。文章就是就是采用Arduino。Talk is cheap!
2. 硬件電路
2.1 外觀介紹
對于硬件的使用,采用的是NODEMCU。如下圖所示

基本上就是這個樣子。一句話概括。NodeMCU,是一個開源的物聯(lián)網(wǎng)平臺。淘寶上14元左右即可拿下。

2.2 引腳分布
NodeMCU引腳分布如下圖所示。其中用戶按鍵FLASH 為GPIO16,LED為GPIO16。

3. 軟件設計
3.1 閃燈
對于最開始的設計,先演示一下閃燈操作。閃燈也是最直觀看到程序效果的方法,猶如機器的心跳,能夠用眼睛看到程序的運行。這也就是最基本的入門程序。
目的
讓開發(fā)板上的燈閃爍起來!
程序如下
#define PIN_LED 16 //定義LED void setup() {
pinMode(PIN_LED,OUTPUT);
} void loop() {
digitalWrite(PIN_LED,LOW); //低電平點亮 delay(500);
digitalWrite(PIN_LED,HIGH);
delay(500);
}
非常的簡單,將程序放入VSCode進行編譯,然后下載到開發(fā)板就可以看到程序正常啟動了。當然,這都是非常簡單的操作。
3.2 按鍵
按鍵作為外部輸入設備,可以作為外界的感應給設備。那么究竟如何使用這個按鍵呢?下面通過按鍵來進行點燈操作。
掃描方式
掃描就是每隔一定時間去查看一下按鍵的狀態(tài),如果按鍵達到了需求的狀態(tài)則進行相關的操作。
#define PIN_LED 16 //定義LED #define KEY_FLASH 0 //定義按鍵 void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
pinMode(PIN_LED,OUTPUT);
pinMode(KEY_FLASH,INPUT);
} void keyScan() { int k = 0;
k = digitalRead(KEY_FLASH);
Serial.println("keyScan:");
Serial.write(k);
Serial.println(); if(k == 0)
{
digitalWrite(PIN_LED,HIGH);
} else {
digitalWrite(PIN_LED,LOW);
}
} void loop() {
keyScan();
delay(500);
}
中斷方式
中斷就相當于鬧鐘,平時它什么事情也不做,當按鍵事件到來時,就觸發(fā)了相應的操作。
#include "Arduino.h" #define PIN_LED 16 //定義LED #define KEY_FLASH 0 //定義按鍵 volatile int state = HIGH; void stateChange(); void setup() {
Serial.begin(74880);
Serial.setDebugOutput(true);
pinMode(PIN_LED,OUTPUT);
pinMode(KEY_FLASH,INPUT);
attachInterrupt(KEY_FLASH,stateChange,RISING);//下降沿中斷 digitalWrite(PIN_LED,HIGH);//低電平點亮 } void stateChange() {
state = !state;
Serial.printf("state:%d\n",state);
digitalWrite(PIN_LED,state);
} void loop() {
}
3.3 PWM
先講一下什么是PWM,也就是脈沖寬度調制。本來數(shù)字電路就是輸出高低電平來維持設備的正常工作,PWM就可以輸出斷斷續(xù)續(xù)的電平,從而通過占空比來調節(jié)輸出電壓。典型的應用就是控制液晶顯示屏的背光燈的亮度?;蛘呖刂齐姍C的轉速和角度。下面我們通過一個示例來講解PWM的調節(jié)。
目標:呼吸燈
呼吸燈就是按照特定的頻率明暗變化的閃燈方式,猶如人體肺部吸入和呼出空氣一樣慢慢的變化。
#define PIN_LED 16 void setup() {
pinMode(PIN_LED,OUTPUT);
analogWrite(PIN_LED,0);//信號模擬輸出 } void loop() { for(int i = 0; i < 1024; i++)
{
analogWrite(PIN_LED,i);
delay(2);
} for(int i = 1024; i >= 0; i--)
{
analogWrite(PIN_LED,i);
delay(2);
}
}
程序如上所述,通過控制輸出到LED上的PWM占空比,從而間接調節(jié)兩端的電壓。進一步讓其輸出明暗的效果。
3.4 SoftAP
既然是聯(lián)網(wǎng)模塊,那么就一定要涉及到網(wǎng)絡部分才叫wifi模塊。8266的網(wǎng)絡支持功能是非常的強大的,這個也是該模塊的特點。下面主要講一下AP與STA。先來說說AP。AP就是Access Point 也就是訪問接入點。一般就是網(wǎng)絡的創(chuàng)建者,對于家庭或者辦公室來說,一個無線路由器就是AP,而其他的外設就是STA。

從原理上來說,我們接下來的實驗是要實現(xiàn)一個接入點,也就是路由器一樣的功能。
#include #include //自定義AP的SSID與密碼 const char *ssid = "BA_AP"; const char *password = "bigmagic"; //申明端口 ESP8266WebServer server(80); //設定 web 服務的成功響應信息 void handleRoot() {
Serial.print("\n123...\n");
server.send(200, "text/html", "
You are connected
");
} void setup() {
delay(1000);
Serial.begin(74880);
Serial.println();
Serial.print("Configuring access point..."); /*如果使用開放式 AP 模式,可以把下面語句的 password 參數(shù)省略 */ WiFi.softAP(ssid, password); //獲取 AP 的 IP 地址,存入變量 myIP IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP); //調用 on 方法,給客戶端發(fā)送響應信息,啟動 web 服務,并在串口回顯 server.on("/", handleRoot);
server.begin();
Serial.println("HTTP server started");
} //循環(huán)等待處理客戶端的連接 void loop() {
delay(100);
Serial.print(".");
server.handleClient();
}
程序執(zhí)行后,我們可以用手機收到名稱為BA_AP的WIFI信息,同時連接上wifi后瀏覽器訪問192.168.4.1即可看到網(wǎng)頁上顯示You are connected的信息。同時可以在串口控制臺上看到123的輸出。
3.5 STA模式
與AP模式相對應,STA就是連接到路由器上的設備。這種模式使用的最多。下圖中路由器是AP,其他的手機,電腦,開發(fā)板都是屬于STA的范疇。

在講今天的程序之前,可以看看設備是如何聯(lián)網(wǎng)的。
首先AP在不斷的向周圍發(fā)出信號,也就是信標幀(beacon)。STA如果開啟WiFi也會每隔一定的事件發(fā)送探測幀(probe)。這樣其實有一個問題,就是會有不良的使用者制作WIFI探針。今年的315上報道了WIFI探針的問題。也就是自帶WIFI功能的手機,即使在不連接WIFI的情況下,只要開啟了WIFI的功能,那么信息就有可能被截獲到。
其整個流程如下:
連接WIFI程序如下
#include //連接AP賬號 const char* ssid = "ChinaNet-pUas" const char* password = "zhao565658" void setup()
{
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
} void loop() {
}
串口打印信息如下

并且可以在路由器管理中看到設備,表示連接成功。
3.6 AP+STA
8266可以既作為AP也同時可以作為STA,這就需要內部有兩個MAC地址。這種方式就像筆記本電腦既可以聯(lián)網(wǎng),也可以開啟熱點一樣。作為數(shù)據(jù)直接轉發(fā)功能。
3.7 Scan WiFi
8266可以掃描附件的WiFi信息,和手機上掃描熱點一樣。下面來實現(xiàn)一下這個功能
#include "ESP8266WiFi.h" void setup() {
Serial.begin(115200); //設定 WiFi 為 STA 模式,如果先前已連接上 AP,則與之斷開 WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
} void loop() {
Serial.println("scan start"); // WiFi.scanNetworks 可以返回掃描到的無線網(wǎng)絡數(shù)目 int n = WiFi.scanNetworks();
Serial.println("scan done"); if (n == 0)
Serial.println("no networks found"); else {
Serial.print(n);
Serial.println(" networks found"); for (int i = 0; i < n; ++i)
{ /*在串口輸出所發(fā)現(xiàn)的每一個無線網(wǎng)絡的 SSID 和所接收的信號強度 RSSI */ Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")"); //判斷 WiFi 網(wǎng)絡是否加密,并輸出結果 Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
delay(10);
}
}
Serial.println(""); //連續(xù)掃描的時間間隔 delay(3000);
}
通過串口可以看到串口消息如下

表示列出附件的WiFi的相關信息。
4. 總結
本次分享的文章主要是對8266進行基本的操作,演示了基本的用法和功能,更加高級的用法后面再做研究。好的東西用起來的效果就是不一樣。前面的實驗對于初學者來說,可以全面的了解這個模塊的功能,如果是大神可以直接忽略,因為太過簡單。后面再慢慢深入研究該模塊的使用。