找回密码
 立即注册
搜索
热搜: STM32
查看: 40|回复: 0

【物联网】ESP32 物联网开发实战 - WiFi+ 蓝牙 +MQTT 全攻略

[复制链接]

28

主题

0

回帖

102

积分

注册会员

积分
102
发表于 2026-3-21 18:17:39 |中国| 显示全部楼层 |阅读模式
【物联网】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 开发经验!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2026-4-5 20:59 , Processed in 0.045117 second(s), 20 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表