|
|
【物联网】ESP32 物联网开发实战
1. ESP32 简介
ESP32 是乐鑫科技推出的高性能、低功耗双核 MCU,集成 WiFi 和蓝牙功能。
主要特性:
- 双核 Xtensa LX6,240MHz
- 520KB SRAM
- 4MB Flash(外部)
- WiFi 802.11 b/g/n
- 蓝牙 4.2 BR/EDR + BLE
- 34 个 GPIO
- 12 位 SAR ADC
- 10 个电容触摸 GPIO
2. 开发环境搭建
2.1 Arduino IDE 开发
- 安装 Arduino IDE
- 添加 ESP32 开发板支持
- 安装 ESP32 库
- 选择开发板:DOIT ESP32 DEVKIT V1
2.2 ESP-IDF 开发
- 安装 ESP-IDF 工具链
- 配置环境变量
- 使用 CMake 构建
- 使用 menuconfig 配置
3. WiFi 连接
WiFi 连接代码:
#include <WiFi.h>
const char* ssid = "your_ssid";
const char* password = "your_password";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println(WiFi.localIP());
}
void loop() {
// 主循环
}
4. WiFi 热点模式
AP 模式代码:
#include <WiFi.h>
void setup() {
WiFi.softAP("ESP32_AP", "12345678");
Serial.println(WiFi.softAPIP());
}
5. 蓝牙 BLE 应用
BLE 服务器代码:
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
BLEServer *pServer = NULL;
BLECharacteristic *pCharacteristic = NULL;
void setup() {
BLEDevice::init("ESP32_BLE");
pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic: ROPERTY_READ |
BLECharacteristic: ROPERTY_WRITE
);
pCharacteristic->setValue("Hello BLE");
pService->start();
pServer->getAdvertising()->start();
}
6. MQTT 物联网协议
MQTT 客户端代码:
#include <WiFi.h>
#include < ubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
const char* mqtt_server = "broker.hivemq.com";
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("ESP32Client")) {
client.publish("esp32/status", "connected");
client.subscribe("esp32/control");
} else {
delay(5000);
}
}
}
void setup() {
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
7. WebServer 开发
Web 服务器代码:
#include <WiFi.h>
#include <WebServer.h>
WebServer server(80);
void handleRoot() {
server.send(200, "text/html", "<h1>Hello ESP32!</h1>");
}
void setup() {
server.on("/", handleRoot);
server.begin();
}
void loop() {
server.handleClient();
}
8. OTA 固件更新
OTA 配置:
#include <ArduinoOTA.h>
void setup() {
ArduinoOTA.begin();
ArduinoOTA.onStart([]() {
Serial.println("Start");
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
}
void loop() {
ArduinoOTA.handle();
}
9. 低功耗设计
低功耗模式:
#include "esp_sleep.h"
void setup() {
// 配置唤醒源
esp_sleep_enable_timer_wakeup(5000000); // 5 秒唤醒
// 进入深度睡眠
esp_deep_sleep_start();
}
10. 项目实战建议
推荐项目:
1. 智能家居控制中心
2. 环境监测站
3. 远程摄像头
4. 蓝牙遥控器
5. 物联网网关
学习资源:
- ESP32 官方文档
- Arduino ESP32 库
- ESP-IDF 编程指南
- 1024la 单片机板块
欢迎大家分享 ESP32 开发经验!
|
|