ESP8266模块示例
乐鑫科技的ESP8266是一款非常流行的低成本Wi-Fi芯片,它可以轻松地添加到微控制器项目中以实现
互联网连接。ESP8266内部集成了Tensilica L106超低功耗32位微处理器,支持IEEE 802.11 b/g/n协议,
适合应用于物联网(IoT)项目。
### 主要特性
- 工作电压:3.3V
- Wi-Fi标准:IEEE 802.11 b/g/n
- 频率:2.4 GHz
- 最大发射功率:+4dBm
- 接收灵敏度:-93dBm
- 最大数据传输速率:150Mbps
- 工作温度:-40°C 至 85°C
- 内存:内置80kB SRAM
- 外设:包括ADC、DAC、PWM、UART、I2C、SPI等
### 模式
- Station模式:连接到现有的Wi-Fi网络。
- Access Point (AP) 模式:创建自己的Wi-Fi热点。
- Station+AP模式:同时作为客户端和热点。
### 初级示例程序
#### 1. 闪烁LED灯
这个简单的示例程序将控制ESP8266上的一个LED灯闪烁。
void setup() { // 初始化串口通信 Serial.begin(115200); pinMode(2, OUTPUT); // 设置GPIO 2为输出 } void loop() { digitalWrite(2, HIGH); // 打开LED灯 delay(1000); // 延时1秒 digitalWrite(2, LOW); // 关闭LED灯 delay(1000); // 延时1秒 }
#### 2. 连接到Wi-Fi网络
接下来的示例程序将连接到指定的Wi-Fi网络。
const char* ssid = "yourSSID"; const char* password = "yourPassword"; void setup() { Serial.begin(115200); // 尝试连接到Wi-Fi网络 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() { // 循环体为空,因为我们只需要在setup中完成连接 }
#### 3. 创建Wi-Fi热点
这个示例程序将创建一个Wi-Fi热点。
void setup() { Serial.begin(115200); // 创建一个名为myAP的接入点 WiFi.mode(WIFI_AP); WiFi.softAP("myAP"); // 打印出接入点的IP地址 Serial.print("AP IP address: "); Serial.println(WiFi.softAPIP()); } void loop() { // 循环体为空 }
### 高级示例程序
### 示例 1: 发送HTTP请求
###代码
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> const char* ssid = "yourSSID"; const char* password = "yourPassword"; const char* server = "httpbin.org"; void setup() { Serial.begin(115200); // 连接Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // 发送HTTP GET请求 HTTPClient http; http.begin("http://" + String(server) + "/get"); int httpCode = http.GET(); if (httpCode > 0) { // 检查HTTP响应码 String payload = http.getString(); Serial.println(payload); } else { Serial.printf("Error on HTTP request: %d\n", httpCode); } http.end(); // 断开HTTP连接 } void loop() { // 循环体为空 }
1.导入必要的库
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h>
- `ESP8266WiFi.h`: 提供了Wi-Fi连接的功能。
- `ESP8266HTTPClient.h`: 用来发送HTTP请求。
2.定义变量
const char* ssid = "yourSSID"; const char* password = "yourPassword"; const char* server = "httpbin.org";
- `ssid`: Wi-Fi热点的名称。
- `password`: 对应Wi-Fi热点的密码。
- `server`: 目标服务器地址,在本例中使用了`httpbin.org`,它是一个测试HTTP请求的网站。
3.`setup()` 函数
- 初始化串行端口(用于输出调试信息)。
- 连接到Wi-Fi。
- 使用`HTTPClient`类发起HTTP GET请求。
4.发送HTTP GET请求
HTTPClient http; http.begin("http://" + String(server) + "/get"); int httpCode = http.GET();
- `http.begin()`: 设置HTTP请求的目标URL。
- `http.GET()`: 发送GET请求并返回HTTP状态码。
5.处理HTTP响应
if (httpCode > 0) { String payload = http.getString(); Serial.println(payload); } else { Serial.printf("Error on HTTP request: %d\n", httpCode); }
- 如果HTTP请求成功,读取并打印响应体。
- 如果失败,则打印错误信息。
6.结束HTTP连接
http.end();
- 结束HTTP客户端的连接。
### 示例 2: 作为Web服务器
###代码
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> const char* ssid = "yourSSID"; const char* password = "yourPassword"; ESP8266WebServer server(80); // 创建Web服务器实例 void handleRoot() { server.send(200, "text/html", "<h1>Hello, World!</h1>"); } void setup() { Serial.begin(115200); // 连接Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // 设置Web服务器的处理函数 server.on("/", handleRoot); server.begin(); // 启动Web服务器 } void loop() { server.handleClient(); // 处理客户端请求 }
1.导入必要的库
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h>
- `ESP8266WiFi.h`: 提供Wi-Fi功能。
- `ESP8266WebServer.h`: 提供Web服务器功能。
2.定义变量
const char* ssid = "yourSSID"; const char* password = "yourPassword"; ESP8266WebServer server(80);
- `ssid`, `password`: Wi-Fi连接信息。
- `server`: Web服务器实例,监听80端口。
3.`setup()` 函数
- 初始化串行端口。
- 连接到Wi-Fi。
- 配置Web服务器路由。
4.Web服务器路由配置
server.on("/", handleRoot); server.begin();
- `server.on("/", handleRoot)`: 设置根路径的路由处理器。
- `server.begin()`: 开始Web服务器。
5.路由处理器函数
void handleRoot() { server.send(200, "text/html", "<h1>Hello, World!</h1>"); }
- 当客户端访问根路径时,发送包含HTML内容的HTTP响应。
6.`loop()` 函数
- 处理客户端请求。
### 示例 3: MQTT通信
###代码
#include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "yourSSID"; const char* password = "yourPassword"; const char* mqtt_server = "mqtt.yourbroker.com"; WiFiClient espClient; PubSubClient client(espClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } void reconnect() { while (!client.connected()) { if (client.connect("ESP8266Client")) { client.subscribe("esp8266/test"); } else { Serial.println("Connection failed. Retrying in 5 seconds..."); delay(5000); } } } void setup() { Serial.begin(115200); // 连接Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // 设置MQTT服务器和回调函数 client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); // 每隔一段时间发布一条消息 static unsigned long lastMessage = 0; if (millis() - lastMessage > 5000) { lastMessage = millis(); client.publish("esp8266/output", "Hello MQTT!"); } }
1.导入必要的库
#include <ESP8266WiFi.h> #include <PubSubClient.h>
- `ESP8266WiFi.h`: 提供Wi-Fi功能。
- `PubSubClient.h`: 提供MQTT客户端功能。
2.定义变量
const char* ssid = "yourSSID"; const char* password = "yourPassword"; const char* mqtt_server = "mqtt.yourbroker.com"; WiFiClient espClient; PubSubClient client(espClient);
- `ssid`, `password`: Wi-Fi连接信息。
- `mqtt_server`: MQTT服务器地址。
- `espClient`: 用于网络通信的客户端。
- `client`: MQTT客户端实例。
3.定义回调函数
void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); }
- 当收到MQTT消息时,该函数会被调用。
4.`setup()` 函数
- 初始化串行端口。
- 连接到Wi-Fi。
- 设置MQTT服务器和回调函数。
5.`loop()` 函数
- 维护MQTT连接。
- 定期发送消息到特定主题。
### 如何上传示例程序
1. 安装Arduino IDE。
2. 在Arduino IDE中配置ESP8266的开发板。
3. 将上述示例代码复制到Arduino IDE的新文件中。
4. 选择正确的端口和开发板类型。
5. 使用USB转串口适配器将ESP8266连接到电脑。
6. 点击上传按钮。
如有侵权,请联系删除。
未经允许,禁止转载,
如需使用,请注明出处