ESP32物联网开发实战指南
·
ESP32物联网开发实战:基础环境搭建
确保开发环境配置正确是ESP32开发的第一步。安装Arduino IDE或PlatformIO,添加ESP32开发板支持。以Arduino IDE为例,需在首选项中添加以下开发板管理器网址:
https://dl.espressif.com/dl/package_esp32_index.json
安装完成后,选择ESP32开发板型号(如ESP32 Dev Module)。
连接Wi-Fi网络
ESP32作为物联网设备的核心功能是联网。以下代码演示如何连接Wi-Fi:
#include <WiFi.h>
const char* ssid = "你的Wi-Fi名称";
const char* password = "你的Wi-Fi密码";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n连接成功,IP地址: ");
Serial.println(WiFi.localIP());
}
void loop() {}
代码说明:
WiFi.begin()初始化连接,WiFi.status()检查状态,成功后会打印本地IP地址。
MQTT协议通信实例
MQTT是物联网常用的轻量级协议。以下代码使用PubSubClient库实现MQTT消息发布:
#include <WiFi.h>
#include <PubSubClient.h>
const char* mqtt_server = "mqtt.eclipseprojects.io";
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("收到消息 [");
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("ESP32Client")) {
client.subscribe("test/topic");
} else {
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
client.publish("test/topic", "Hello from ESP32");
delay(2000);
}
代码说明:
PubSubClient库实现MQTT客户端功能,callback处理接收到的消息,reconnect确保断线重连。
传感器数据采集与上传
以DHT11温湿度传感器为例,采集数据并上传至MQTT服务器:
#include <DHT.h>
#include <WiFi.h>
#include <PubSubClient.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
client.setServer(mqtt_server, 1883);
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("读取传感器失败");
return;
}
char msg[50];
snprintf(msg, 50, "温度: %.2f°C, 湿度: %.2f%%", temperature, humidity);
client.publish("sensor/data", msg);
delay(10000);
}
代码说明:
DHT库读取传感器数据,snprintf格式化字符串后通过MQTT发布。
OTA远程固件更新
ESP32支持OTA(Over-The-Air)更新,无需物理连接:
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiClient.h>
#include <ArduinoOTA.h>
void setup() {
ArduinoOTA
.onStart([]() { Serial.println("开始更新"); })
.onEnd([]() { Serial.println("\n更新完成"); })
.onError([](ota_error_t error) { Serial.printf("错误[%u]: ", error); });
ArduinoOTA.begin();
Serial.println("OTA就绪");
}
void loop() {
ArduinoOTA.handle();
}
代码说明:
ArduinoOTA库实现远程更新功能,需与Wi-Fi配合使用,可通过IDE或espota.py工具上传固件。
以上实例覆盖了ESP32物联网开发的核心场景,可根据实际需求扩展功能(如HTTPS加密、数据存储等)。
更多推荐
所有评论(0)