esp32编程实例
什么是ESP32编程实例?
ESP32编程实例,指的是用代码实现ESP32芯片具体功能的完整项目示例。它不是理论讲解,而是你能直接复制、烧录、运行,并看到实际效果的代码片段。无论是点亮一个LED,还是让ESP32通过WiFi上传温湿度数据到云端,每一个实例都代表一个真实可用的功能模块。掌握这些实例,你就掌握了ESP32开发的核心能力。
第一个实例:控制内置LED
ESP32开发板通常自带一个LED,连接在GPIO2引脚上。我们先从最简单的开始——让LED闪烁。
const int ledPin = 2;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
这段代码在Arduino IDE中直接可用。烧录后,你会看到LED每半秒闪烁一次。这是你与硬件的第一次对话。别小看它,这是所有复杂项目的基础。
第二个实例:连接WiFi并打印IP地址
ESP32最强大的地方是它的WiFi和蓝牙双模能力。下面这段代码让ESP32连接你的家庭路由器,并在串口监视器中显示获取到的IP地址。
#include <WiFi.h>
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("连接中...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n连接成功!");
Serial.print("IP地址: ");
Serial.println(WiFi.localIP());
}
void loop() {}
记住:WiFi名称和密码必须替换成你自己的。这个例子是后续所有联网功能的基础,比如MQTT、HTTP请求、远程控制,都从这里开始。
第三个实例:通过MQTT上传DHT11温湿度数据
现在我们来做一个真正的物联网项目:用DHT11传感器读取环境数据,并通过MQTT协议发送到云平台(如EMQX或阿里云IoT)。
你需要安装DHT库和PubSubClient库。代码如下:
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHT_PIN 4
#define DHT_TYPE DHT11
DHT dht(DHT_PIN, DHT_TYPE);
const char* ssid = "你的WiFi名";
const char* password = "你的WiFi密码";
const char* mqtt_server = "your-mqtt-broker.com";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
client.setServer(mqtt_server, 1883);
}
void loop() {
if (!client.connected()) {
client.connect("esp32-client");
}
float temp = dht.getTemperature();
float hum = dht.getHumidity();
if (isnan(temp) || isnan(hum)) return;
String topic = "sensor/temperature";
client.publish(topic.c_str(), String(temp).c_str());
topic = "sensor/humidity";
client.publish(topic.c_str(), String(hum).c_str());
delay(5000);
}
这个例子能让你的ESP32变成一个真正的传感器节点。你可以在手机App或网页上实时看到温湿度变化,这就是物联网的雏形。
第四个实例:OTA无线升级固件
传统方式升级固件需要USB线,而ESP32支持OTA(Over-The-Air),即无线升级。你只需在代码中加入几行,就能通过浏览器上传新固件。
#include <WiFi.h>
#include <ESPmDNS.h>
#include <ArduinoOTA.h>
const char* ssid = "你的WiFi名";
const char* password = "你的WiFi密码";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
ArduinoOTA.setHostname("esp32-ota");
ArduinoOTA.setPassword("12345678");
ArduinoOTA.begin();
}
void loop() {
ArduinoOTA.handle();
}
上传代码后,打开Arduino IDE的工具→端口,你会看到一个名为“esp32-ota”的网络端口。以后升级固件,再也不用插线了,特别适合安装在高处或封闭空间的设备。
实用建议:避免踩坑
- ESP32的GPIO不能直接驱动大功率设备,建议加三极管或继电器模块。
- 上电时序很重要,某些传感器需要稳定供电后再读取。
- 使用
Serial.println()调试时,注意波特率要一致(建议115200)。 - 长期运行建议加入看门狗:
ESP.restart();或esp_task_wdt_init()。
结语:从实例到项目
每一个编程实例,都是通向完整项目的基石。当你能熟练控制LED、连接WiFi、读取传感器、上传数据、无线升级,你就已经超越了90%的入门者。不要只看教程,动手做。把代码改一改,换一个传感器,换一个云平台,你会发现,ESP32的世界远比你想象的广阔。
现在,拿起你的ESP32,选一个例子,烧录,运行,然后,庆祝你的第一个物联网作品诞生。