程序代码篇---ESP32云开发
文章目录
- 前言
前言
本文简单介绍了实现 ESP32-S3 传感器数据上传至云平台 + 手机远程控制电机 的完整方案,涵盖推荐的云平台、手机端。
一、推荐云平台及工具
- 云平台选择
阿里云 IoT 平台
优势:国内稳定、支持大规模设备接入、提供完整设备管理及安全认证。
协议:支持 MQTT、HTTP(S) 等协议,适合 ESP32-S3 通信。
免费额度:新用户可免费使用基础功能。
文档:阿里云 IoT 文档
ThingsBoard(开源)
优势:免费、可私有化部署、自带可视化仪表盘和手机端控制界面。
协议:MQTT、HTTP、CoAP。
部署:可使用公有云托管版(如 ThingsBoard Cloud)或自行搭建。
Blynk(快速开发)
优势:提供现成的手机 App,拖拽式界面设计,适合快速验证原型。
限制:免费版有设备数量和数据量限制。
推荐:阿里云 IoT 平台(适合长期稳定项目)或 ThingsBoard(适合快速开发+自定义界面)。
二、手机端显示与控制方法
- 方案选择
阿里云 IoT 平台 + 自定义 App
使用 Flutter 或 React Native 开发手机 App,通过阿里云 API 获取数据并下发控制指令。
优点:完全自定义界面。
缺点:需开发代码。
ThingsBoard 自带 Web 界面
直接使用 ThingsBoard 的仪表盘功能,通过手机浏览器访问 Web 页面。
优点:无需开发,支持实时数据展示和控件绑定。
Blynk App
使用 Blynk 提供的 App,通过拖拽控件绑定设备数据和控制按钮。
优点:5 分钟完成配置。
推荐:ThingsBoard(平衡功能与开发成本)或 Blynk(最快实现)。
三、硬件与传感器配置
- 硬件清单
主控:ESP32-S3 开发板(支持 Wi-Fi 和 BLE)。
传感器:
温湿度传感器:DHT11/DHT22 或 SHT30。
光照传感器:BH1750 或光敏电阻模块。
执行器:直流电机 + L298N 电机驱动模块。
其他:杜邦线、电源(5V/12V 适配器)。
- 硬件连接
传感器:
DHT11:GPIO 引脚(如 GPIO4)连接数据线。
BH1750:I2C 接口(SCL=GPIO5, SDA=GPIO6)。
电机驱动:
L298N 的 IN1、IN2 连接 ESP32-S3 的 GPIO12、GPIO13,控制电机转向。
电机电源需独立供电(避免 ESP32 过载)。
四、详细实现步骤(以阿里云 IoT + ThingsBoard 为例)
步骤 1:云平台配置
阿里云 IoT 平台设置
创建产品:登录阿里云 IoT 控制台,新建产品(如 “ESP32-S3_Sensor”),选择“自定义品类”。
添加设备:在产品下创建设备,记录 ProductKey、DeviceName、DeviceSecret。
定义物模型:添加属性(温度、湿度、光照)和服务(电机开关)。
ThingsBoard 配置(若选择)
注册 ThingsBoard Cloud 账号,创建设备,记录设备访问令牌(ACCESS_TOKEN)。
创建仪表盘,添加图表(温度/湿度曲线)和开关控件(绑定电机控制)。
步骤 2:ESP32-S3 固件开发
开发环境
使用 Arduino IDE 或 PlatformIO,安装 ESP32 开发板支持包。
代码逻辑
依赖库:
阿里云 IoT SDK 或 PubSubClient(MQTT 库)。
DHT sensor library、BH1750 库。
核心代码:
cpp
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <BH1750.h>
// 配置 Wi-Fi 和云平台参数
const char* ssid = “Your_WiFi_SSID”;
const char* password = “Your_WiFi_Password”;
const char* mqttServer = “iot-xxx.mqtt.aliyuncs.com”; // 阿里云 MQTT 地址
const int mqttPort = 1883;
const char* deviceName = “Your_Device_Name”;
const char* deviceSecret = “Your_Device_Secret”;
// 传感器与电机引脚定义
#define DHTPIN 4
#define MOTOR_IN1 12
#define MOTOR_IN2 13
DHT dht(DHTPIN, DHT11);
BH1750 lightMeter;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
lightMeter.begin();
pinMode(MOTOR_IN1, OUTPUT);
pinMode(MOTOR_IN2, OUTPUT);
connectWiFi();
connectMQTT();
}
void loop() {
if (!client.connected()) reconnectMQTT();
client.loop();
// 读取传感器数据并上传
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
float lux = lightMeter.readLightLevel();
publishSensorData(temperature, humidity, lux);
delay(5000); // 5秒上传一次
}
void publishSensorData(float temp, float humi, float light) {
String payload = “{“temp”:” + String(temp) +
“,“humi”:” + String(humi) +
“,“light”:” + String(light) + “}”;
client.publish(“/sys/your-product-key/your-device-name/thing/event/property/post”, payload.c_str());
}
// MQTT 回调处理控制指令
void callback(char* topic, byte* payload, unsigned int length) {
String msg = String((char*)payload, length);
if (msg.indexOf(“motor_on”) != -1) {
digitalWrite(MOTOR_IN1, HIGH);
digitalWrite(MOTOR_IN2, LOW);
} else if (msg.indexOf(“motor_off”) != -1) {
digitalWrite(MOTOR_IN1, LOW);
digitalWrite(MOTOR_IN2, LOW);
}
}
步骤 3:手机端实现
阿里云方案
自定义 App:
使用 Flutter 开发,集成阿里云 IoT SDK,监听设备属性变化并显示图表。
添加按钮控件,调用阿里云 API 下发服务(电机开关)。
ThingsBoard 方案:
登录 ThingsBoard Web 仪表盘,手机浏览器访问页面。
开关控件绑定设备属性,点击后通过 MQTT 下发指令至 ESP32-S3。
Blynk 方案:
在 Blynk App 中创建项目,添加数值显示控件(温度/湿度/光照)和按钮。
绑定虚拟引脚(如 V1 为温度,V2 为电机控制)。
步骤 4:联调测试
数据上传验证
查看云平台设备日志,确认传感器数据是否正常上报。
手机控制测试
在手机端点击开关,观察电机是否响应,并通过云平台确认指令下发状态。
故障排查
Wi-Fi 连接失败:检查 SSID/密码、路由器设置。
MQTT 断开:确保设备三元组(ProductKey/DeviceName/DeviceSecret)正确。
传感器数据异常:检查硬件连接和库函数调用。
五、扩展优化
低功耗模式:ESP32-S3 启用 Deep Sleep,定时唤醒上传数据。
数据加密:启用 TLS 加密 MQTT 通信(阿里云支持 8883 端口)。
OTA 升级:通过云平台推送固件更新。
多设备协同:添加多个 ESP32 节点,构建分布式监控网络。
六、总结
通过 ESP32-S3 + 阿里云/ThingsBoard + 手机 App 的组合,可实现传感器数据上云与远程控制功能。选择云平台时需权衡开发成本与功能需求,若追求快速验证,优先使用 Blynk 或 ThingsBoard;若需企业级稳定性,选择阿里云 IoT。