一文速通ESP8266 NodeMCU(基于Arduino IDE)——万字爆肝含示例代码
ESP8266 NodeMCU 是一款流行的 Wi-Fi 模块,广泛应用于物联网(IoT)项目中。本文将详细介绍如何使用 Arduino IDE 开发 ESP8266 NodeMCU,包括环境配置、基本功能示例以及常用库的使用。代码示例将贯穿整个文章,帮助读者快速上手。
1. 环境配置
1.1 安装 Arduino IDE
首先,下载并安装 Arduino IDE。你可以在 Arduino 官方网站 下载适合你操作系统的版本。
1.2 配置 ESP8266 开发板
- 打开 Arduino IDE,点击
文件 -> 首选项
。 - 在
附加开发板管理器网址
中添加以下 URL:http://arduino.esp8266.com/stable/package_esp8266com_index.json
- 进入
工具 -> 开发板 -> 开发板管理器
,搜索ESP8266
,找到esp8266 by ESP8266 Community
,点击安装。
1.3 选择开发板
- 在
工具 -> 开发板
中选择NodeMCU 1.0 (ESP-12E Module)
或者你使用的其他 ESP8266 模块。
2. 基本功能示例
2.1 LED 控制示例
我们从一个简单的 LED 控制程序开始。通过 GPIO 控制板上的 LED。
2.1.1 硬件连接
将 LED 的长脚(正极)连接到 D2 引脚,短脚(负极)连接到 GND 引脚。
2.1.2 代码示例
#define LED_PIN D2 // 定义 LED 引脚
void setup() {
pinMode(LED_PIN, OUTPUT); // 设置引脚为输出模式
}
void loop() {
digitalWrite(LED_PIN, HIGH); // 点亮 LED
delay(1000); // 延时 1 秒
digitalWrite(LED_PIN, LOW); // 熄灭 LED
delay(1000); // 延时 1 秒
}
2.2 Wi-Fi 连接示例
在 IoT 项目中,Wi-Fi 是至关重要的。下面的示例将演示如何连接到 Wi-Fi。
2.2.1 代码示例
#include <ESP8266WiFi.h>
const char* ssid = "你的SSID"; // Wi-Fi SSID
const char* password = "你的密码"; // Wi-Fi 密码
void setup() {
Serial.begin(115200); // 启动串口监视器
WiFi.begin(ssid, password); // 连接到 Wi-Fi
while (WiFi.status() != WL_CONNECTED) { // 等待连接
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
}
void loop() {
// 这里可以放置其他代码
}
2.3 HTTP 请求示例
ESP8266 可以作为 HTTP 客户端或服务器。下面是一个简单的 HTTP GET 请求示例。
2.3.1 代码示例
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
const char* ssid = "你的SSID"; // Wi-Fi SSID
const char* password = "你的密码"; // Wi-Fi 密码
const char* host = "example.com"; // 要请求的主机
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
sendRequest(); // 发送 HTTP 请求
}
void loop() {
// 这里可以放置其他代码
}
void sendRequest() {
WiFiClient client;
if (!client.connect(host, 80)) {
Serial.println("Connection failed");
return;
}
// 发送请求
client.print(String("GET / HTTP/1.1\r\n") +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
while (client.connected() || client.available()) {
if (client.available()) {
String line = client.readStringUntil('\n');
Serial.println(line);
}
}
client.stop();
}
3. 常用库的使用
3.1 ArduinoJson
处理 JSON 数据时,ArduinoJson 库非常有用。下面是如何在 ESP8266 中使用它。
3.1.1 安装 ArduinoJson
在 Arduino IDE 中,通过 库管理器
搜索 ArduinoJson
并安装。
3.1.2 示例代码
#include <ArduinoJson.h>
void setup() {
Serial.begin(115200);
// 创建 JSON 对象
StaticJsonDocument<200> doc;
doc["sensor"] = "gps";
doc["time"] = "12:00";
doc["latitude"] = 37.7749;
doc["longitude"] = -122.4194;
// 序列化 JSON 对象
serializeJson(doc, Serial);
}
void loop() {
// 这里可以放置其他代码
}
3.2 PubSubClient(MQTT)
MQTT 是一种轻量级的消息协议,适合物联网应用。PubSubClient 库可以轻松实现 MQTT 功能。
3.2.1 安装 PubSubClient
在 Arduino IDE 中,通过 库管理器
搜索 PubSubClient
并安装。
3.2.2 示例代码
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "你的SSID"; // Wi-Fi SSID
const char* password = "你的密码"; // Wi-Fi 密码
const char* mqtt_server = "broker.hivemq.com"; // MQTT 代理
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
client.setServer(mqtt_server, 1883); // 设置 MQTT 代理地址
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
client.publish("test/topic", "Hello from ESP8266!"); // 发送消息
delay(2000); // 每 2 秒发送一次
}
void reconnect() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP8266Client")) {
Serial.println("Connected to MQTT!");
} else {
Serial.print("Failed to connect, rc=");
Serial.print(client.state());
delay(2000);
}
}
}
4. 进阶应用
4.1 Web 服务器示例
ESP8266 可以轻松构建一个简单的 Web 服务器,控制设备状态。
4.1.1 示例代码
#include <ESP8266WiFi.h>
const char* ssid = "你的SSID"; // Wi-Fi SSID
const char* password = "你的密码"; // Wi-Fi 密码
WiFiServer server(80);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
server.begin(); // 启动服务器
}
void loop() {
WiFiClient client = server.available(); // 监听客户端请求
if (client) {
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
// HTTP 响应
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
client.println("<!DOCTYPE HTML><html>");
client.println("<h1>Hello from ESP8266!</h1>");
client.println("</html>");
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c; // 读取客户端请求
}
}
}
client.stop(); // 关闭客户端连接
}
}
4.2 控制继电器示例
将继电器与 ESP8266 连接,以控制电器的开关。
4.2.1 硬件连接
将继电器模块的控制引脚连接到 D1,引脚的 VCC 连接到 5V,GND 连接到 GND。
4.2.2 示例代码
#define RELAY_PIN D1 // 继电器引脚
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // 初始关闭继电器
}
void loop() {
digitalWrite(RELAY_PIN, HIGH); // 打开继电器
delay(5000); // 延时 5 秒
digitalWrite(RELAY_PIN, LOW); // 关闭继电器
delay(5000); // 延时 5 秒
}
5. 调试与常见问题
5.1 串口调试
在代码中使用 Serial.print()
来输出调试信息,通过 Arduino IDE 的串口监视器查看。
5.2 常见问题
6. 总结
本文详细介绍了 ESP8266 NodeMCU 的使用,包括环境配置、基本功能示例和常用库的使用。通过丰富的代码示例,读者可以快速上手并开发自己的物联网项目。希望这篇文章能帮助你在 ESP8266 开发中取得成功!
作者:一只蜗牛儿