当前位置: 首页 > news >正文

程序代码篇---ESP32云开发


文章目录

  • 前言


前言

本文简单介绍了实现 ESP32-S3 传感器数据上传至云平台 + 手机远程控制电机 的完整方案,涵盖推荐的云平台、手机端。


一、推荐云平台及工具

  1. 云平台选择
    阿里云 IoT 平台

优势:国内稳定、支持大规模设备接入、提供完整设备管理及安全认证。

协议:支持 MQTT、HTTP(S) 等协议,适合 ESP32-S3 通信。

免费额度:新用户可免费使用基础功能。

文档:阿里云 IoT 文档

ThingsBoard(开源)

优势:免费、可私有化部署、自带可视化仪表盘和手机端控制界面。

协议:MQTT、HTTP、CoAP。

部署:可使用公有云托管版(如 ThingsBoard Cloud)或自行搭建。

Blynk(快速开发)

优势:提供现成的手机 App,拖拽式界面设计,适合快速验证原型。

限制:免费版有设备数量和数据量限制。

推荐:阿里云 IoT 平台(适合长期稳定项目)或 ThingsBoard(适合快速开发+自定义界面)。

二、手机端显示与控制方法

  1. 方案选择
    阿里云 IoT 平台 + 自定义 App

使用 Flutter 或 React Native 开发手机 App,通过阿里云 API 获取数据并下发控制指令。

优点:完全自定义界面。

缺点:需开发代码。

ThingsBoard 自带 Web 界面

直接使用 ThingsBoard 的仪表盘功能,通过手机浏览器访问 Web 页面。

优点:无需开发,支持实时数据展示和控件绑定。

Blynk App

使用 Blynk 提供的 App,通过拖拽控件绑定设备数据和控制按钮。

优点:5 分钟完成配置。

推荐:ThingsBoard(平衡功能与开发成本)或 Blynk(最快实现)。

三、硬件与传感器配置

  1. 硬件清单
    主控:ESP32-S3 开发板(支持 Wi-Fi 和 BLE)。

传感器:

温湿度传感器:DHT11/DHT22 或 SHT30。

光照传感器:BH1750 或光敏电阻模块。

执行器:直流电机 + L298N 电机驱动模块。

其他:杜邦线、电源(5V/12V 适配器)。

  1. 硬件连接
    传感器:

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。


http://www.xdnf.cn/news/244153.html

相关文章:

  • 深入解析 .NET Kestrel:高性能 Web 服务器的架构与最佳实践
  • NUC非均匀校正算法框架
  • Centos 7 yum配置出现一下报错:
  • 怪物猎人:世界-冰原10000+mod整合包5月最新更新!
  • 2025年RAG技术发展现状分析
  • cPanelWHM 的 AutoSSL
  • ctfshow web入门 web45
  • 哈希表笔记(二)redis
  • 机器人--架构及设备
  • Unity SpriteAtlas (精灵图集)
  • 使用vue的插值表达式渲染变量,格式均正确,但无法渲染
  • LabVIEW在工业设备故障诊断报告领域的深度开发与发展趋势
  • Python-57:Base32编码和解码问题
  • Git 基本操作(一)
  • DeepSeek 赋能自然语言处理:从理论到实践的全方位解析
  • GESP2024年6月认证C++八级( 第二部分判断题(1-5))
  • 【2025最新】为什么用ElasticSearch?和传统数据库MySQL与什么区别?
  • 驱动开发系列55 - Linux Graphics QXL显卡驱动代码分析(二)显存管理
  • C++11新特性_自动类型推导
  • (34)VTK C++开发示例 ---将图片映射到平面
  • PostgreSQL数据库操作SQL
  • 2025年- H17-Lc125-73.矩阵置零(矩阵)---java版
  • 坚鹏:工行《DEEPSEEK赋能银行智能办公及数字化营销服务》培训
  • [蓝桥杯 2023 国 Python B] 划分 Java
  • 如何快速定位网络中哪台主机发起ARP攻击
  • 范式演进:从ETL到ELT及未来展望
  • 如何提升个人的稳定性?
  • 学习 Django 之前
  • 数据结构——树(中篇)
  • 论文笔记——QWen2.5 VL