一:Arduino安裝ESP8266

二:簡單測試
void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN,OUTPUT); //測試燈
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED_BUILTIN,LOW);
delay(1000);
digitalWrite(LED_BUILTIN,HIGH);
delay(1000);
}
LED_BUILTIN中builtin是內建意思,為內建LED燈,可直接用於測試
三:引腳對應
| 引腳編號 |
對應數字 |
| D0 |
16 |
| D1 |
5 |
| D2 |
4 |
| D3 |
0 |
| D4 |
2 |
| D5 |
14 |
| D6 |
12 |
| D7 |
13 |
| D8 |
15 |
| D9 |
3 |
| D10 |
1 |
四:簡單使用案例:無線控制LED開關
#include <ESP8266WiFi.h> //引入模塊
#ifndef STASSID
#define STASSID "Tenda_064E38"
#define STAPSK "YM123456789"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80); //開啟板子的80端口
void setup() {
//https://blog.csdn.net/rong81590509/article/details/77010216 //在波特率為9600~38400之間,波特率的增長倍數與傳輸速率的增長倍數基本相同,但是在波特率大於192000以上時,傳輸速率基本沒有任何提高。 //從115200開始實際與理論相差較大 11.25kb/s //不要9600,因為9600下速率太慢0.9kb/s
Serial.begin(115200); //開啟電腦的序列埠,設置為115200 // 測試D4接口
pinMode(2, OUTPUT);
digitalWrite(2, 0); //設置為低電壓
//告訴電腦連接到那個wifi了
Serial.println();
Serial.println();
Serial.print(F("Connecting to "));
Serial.println(ssid);
//開始連接
WiFi.mode(WIFI_STA); //WIFI模塊的STA模式和AP模式有什么區別:AP是接入點,可以讓用戶接入。STA--Station無線終端,不接受無線接入,可以連接到無線AP,無線網卡工作在STA下
WiFi.begin(ssid, password); //開啟WIFI //若是沒有連接上:則一直打印....
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
//打印連線成功
Serial.println();
Serial.println(F("WiFi connected"));
//開啟伺服器
server.begin();
Serial.println(F("Server started"));
//告訴電腦自己的IP
Serial.println(WiFi.localIP());
}
void loop() {
//每次循環進入:都需要確認本板子是否有效(是否連上AP),成功則返回客戶端連接自己的句柄
WiFiClient client = server.available(); if (!client) {
return;
}
//成功就打印成功
Serial.println(F("new client"));
//若是客戶端一直連接沒有信息傳入,則等待
//設置客戶端連接超時時間。若在指定時間連接不上的為超時
client.setTimeout(5000); // default is 1000
//看客戶端是否發送信息,不然一直等待 while(!client.available()) { delay(1); } //讀取第一行\r為換行符--->為請求
String req = client.readStringUntil('\r');
Serial.println(F("request: "));
Serial.println(req);
//client.flush(); //刷新流
// Match the request
int val;
if (req.indexOf(F("/gpio/0")) != -1) { //若是匹配到/gpio/0
val = 0; //關閉
} else if (req.indexOf(F("/gpio/1")) != -1) { //若是匹配到/gpio/1
val = 1; //打開
} else {
Serial.println(F("invalid request"));
val = digitalRead(2); //若是無用,則讀取當前狀態不變
}
//修改狀態
digitalWrite(2, val);
//向客戶端句柄寫入數據
client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now "));
client.print((val) ? F("high") : F("low"));
client.print(F("<br><br>Click <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/1'>here</a> to switch LED GPIO on, or <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/0'>here</a> to switch LED GPIO off.</html>"));
//客戶端斷開連接(對象釋放了)
Serial.println(F("Disconnecting from client"));
}
本程序為單進程,不支持同步處理連接,易出現客戶端死等。待改進