Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报
Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报
- 一、前言
- 二、准备工作
- 三、程序代码
- 1. Arduino的程序
- 2. ESP826601的程序
- 3. 上面程序需要注意的地方
- 四、运行结果
- 五、结束语
一、前言
看完我这三篇文章,相信各位朋友对于阿里云物联网平台的使用都有了一定的认识了:
- MQTT客户端软件(MQTT.fx)测试连接阿里云物联网平台的基本使用
- 使用MQTT.fx向阿里云物理网平台上报物模型数据
- ESP826601(ESP826601s)WiFi模块使用AT指令连接阿里云物联网平台
而本篇文章主结合以上的知识点,制作一个相对比较完整的项目(在咱们大学生的毕业设计项目可用于参考),同时这里我给出我本篇博客的所写的代码资源,大家可以去我的gitee(码云)仓库直接下载(点击前往)。

二、准备工作
硬件:
- Arduino Uno R3开发板一个
- ESP826601WiFi模块一个(或ESP826601S)
- ESP826601固件下载器一个(其他烧录器也可以如TTL)
- DHT11温湿度传感器一个
- 杜邦线若干+面包板
软件
- Arduino IDE(没安装可以点击进入我的另一篇博客有详细教程)
- ESP8266开发环境(我的另一篇博客有安装教程)
- 库文件(ESP8266WiFi、PubSubClient、ArduinoJson),自行在Arduino IDE中进行下载即可
电路图:
三、程序代码
1. Arduino的程序
#include <SoftwareSerial.h>
#include <DHT.h>// 初始化DHT11
#define DHTPIN 2 // DHT11数据引脚连接到Arduino的D2
DHT dht(DHTPIN, DHT11);// 初始化软串口
#define ESP8266_RX_PIN 3 // Arduino的D10连接到ESP8266的TX
#define ESP8266_TX_PIN 4 // Arduino的D11连接到ESP8266的RX
SoftwareSerial esp8266Serial(ESP8266_RX_PIN, ESP8266_TX_PIN);void setup() {Serial.begin(115200); // 初始化硬件串口(用于调试)esp8266Serial.begin(115200); // 初始化软串口(用于与ESP8266通信)pinMode(DHTPIN, INPUT); // 设定DHT11引脚为输入模式dht.begin(); // 初始化DHT传感器
}void loop() {// 读取温湿度float temperature = dht.readTemperature();float humidity = dht.readHumidity();// 检查温湿度传感器是否正常工作if (isnan(temperature) || isnan(humidity)) {Serial.println("Failed to read from DHT sensor!");delay(1000);return;}// 将数据格式化为字符串:Temperature,AirHumidityString data = String(temperature) + "," + String(humidity);// Serial.println("Sent data to ESP8266: " + data); // 调试输出esp8266Serial.println(data); // 通过软串口发送数据到ESP826601模块 // 监听ESP8266返回的状态信息if (esp8266Serial.available() > 0) {String response = esp8266Serial.readStringUntil('\n');Serial.println(response);}// 延迟一段时间(例如每5秒上报一次数据)delay(5000);
}
2. ESP826601的程序
#include <ESP8266WiFi.h> // 引入ESP8266 WiFi库
#include <PubSubClient.h> // 引入MQTT客户端库
#include <ArduinoJson.h> // 引入JSON库/* 温湿度数据引脚 */
#define sensor_Pin 7/* WIFI名称和密码 */
#define WifiName "wifiName"
#define WifiPasswd "wifiPasswd"/* 设备三元组信息 */
#define ProductKey "ProductKey" // 产品Key
#define DeviceName "DeviceName" // 设备名称
#define DeviceSecret "DeviceSecret" // 设备密钥/* MQTT连接参数
服务器地址和端口号都一致,不需要改 */
#define mqttHostUrl "iot-06z00g5jo0z7no5.mqtt.iothub.aliyuncs.com" // MQTT服务器地址
#define port 1883 // MQTT端口号
#define username DeviceName "&" ProductKey // MQTT用户名
#define clientId "clientId" // 客户端ID
#define passwd "passwd" // MQTT密码#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}" // 上报数据的JSON格式
#define ALINK_TOPIC_PROP_POST "/sys/" ProductKey "/" DeviceName "/thing/event/property/post" // 上报属性的MQTT主题WiFiClient espClient; // WiFi客户端对象
PubSubClient client(espClient); // MQTT客户端对象float CurrentTemperature = 0; // 当前温度
float AirHumidity = 0; // 空气湿度// 连接WiFi
void wifiInit()
{WiFi.begin(WifiName, WifiPasswd); // 连接WiFiwhile (WiFi.status() != WL_CONNECTED){Serial.print(".");delay(1000);}Serial.println("\nWiFi Connected"); // WiFi连接成功
}// MQTT连接检查
void mqttCheckConnect()
{while (!client.connected()) // 如果MQTT未连接{if (client.connect(clientId, username, passwd)) { // 尝试连接MQTT服务器Serial.println("MQTT Connected"); // MQTT连接成功} else { // 连接失败Serial.print("MQTT connection failed, rc=");Serial.print(client.state()); // 打印MQTT连接状态Serial.println(" try again in 5 seconds");delay(5000); // 等待5秒后重试}}
}// 上报温湿度数据
void mqttIntervalPost()
{// 创建JSON文档StaticJsonDocument<64> jsonDoc;jsonDoc["CurrentTemperature"] = CurrentTemperature; // 添加当前温度jsonDoc["AirHumidity"] = AirHumidity; // 添加空气湿度数据// 将JSON文档转换为字符串char jsonBuffer[64];serializeJson(jsonDoc, jsonBuffer);// 构建最终的MQTT消息char jsonBuf[128];snprintf(jsonBuf, sizeof(jsonBuf), ALINK_BODY_FORMAT, jsonBuffer);boolean status = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf); // 发布JSON数据if (status) {Serial.println("Publish message success");// Serial.println("Published data: " + String(jsonBuf)); // 打印发布的数据} else {Serial.println("Could not send message");}
}// 解析串口数据
void parseSerialData() {if (Serial.available() > 0) { // 如果串口有数据String input = Serial.readStringUntil('\n'); // 读取一行数据// 解析数据格式:Temperature,AirHumidityint commaIndex = input.indexOf(',');if (commaIndex != -1) {String tempStr = input.substring(0, commaIndex); // 解析温度CurrentTemperature = tempStr.toFloat();String airHumidityStr = input.substring(commaIndex + 1); // 解析空气湿度AirHumidity = airHumidityStr.toFloat();mqttIntervalPost(); // 上报阿里云} else {Serial.println("Invalid data format. Expected: Temperature,AirHumidity");}}
}void setup()
{Serial.begin(115200); // 初始化串口通信client.setServer(mqttHostUrl, port); // 设定MQTT服务器连接地址及端口wifiInit(); // 初始化WiFi连接delay(500); // 短暂延迟
}void loop()
{mqttCheckConnect(); // 确保MQTT连接parseSerialData(); // 解析串口数据client.loop(); // 处理MQTT消息delay(100); // 短暂延迟
}
3. 上面程序需要注意的地方
两个程序代码中,Arduino端的可以直接使用我的代码,但是ESP826601端的代码有些地方需要按自己的实际情况修改,主要是WiFi信息、云平台设备信息以及MQTT连接参数,如下图中框选的内容。

其中WiFi名称和密码按照你实际情况填写即可,然后设备三元组的信息可以在你阿里云平台设备的详细页可以看到,如下:

然后是MQTT连接参数的clentId和passwd,在同页面下可以查看到。

做好上面的准备工作以及程序的修改,我们的项目就能够正常运行了。
四、运行结果
在Arduino IDE中我们打开串口监视器,可以看到打印设备连接初始化的信息,以及在初始化完成后开始进行数据上报。

然后打开阿里云,进入到相应的设备页面,可以看到设备在线,以及温湿度数据也更新了。

打开日志服务,可以看到确实是最新消息,并且状态为200(成功),点击查看可以看到上报的数据内容。

至此,项目实验成功!!!
五、结束语
好了,Arduino+ESP826601模块连接阿里云并实现温湿度数据上报的介绍就到这里结束了,同时,关于Arduino的博客内容后面可能不会更新太多了,后续有机会可能会更新一些全新的内容,比如stm32的学习使用以及人工智能的相关知识等等内容,敬请期待哈!我是“风行男孩”,如果我的博客有帮助到你,点个免费的赞即可,那咱们有缘再见!(码字不易,转载请注明出处,谢谢!!!)
相关文章:
Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报
ArduinoESP826601s模块连接阿里云并实现温湿度数据上报 一、前言二、准备工作三、程序代码1. Arduino的程序2. ESP826601的程序3. 上面程序需要注意的地方 四、运行结果五、结束语 一、前言 看完我这三篇文章,相信各位朋友对于阿里云物联网平台的使用都有了一定的认…...
本地生活服务信息分类信息系统
最近在找分类信息系统,看了很多市面上常见的分类信息系统: 1,私集分类信息系统 2,火鸟分类信息系统 3,觅分类信息系统 4,框分类信息系统 5,蚂蚁分类信息系统 发现很多分类信息系统,…...
React Native 0.79 稳定版发布,更快的工具、更多改进
React Native 0.79 已发布。此版本在多个方面进行了性能改进,并修复了一些漏洞。首先,得益于延迟哈希技术,Metro 的启动速度变快了,并且对包导出提供了稳定支持。由于 JS 包压缩方式的改变等原因,Android 的启动时间也…...
【Dify应用】连接数据库生成Echarts图表
这里写自定义目录标题 需求文档内容测试环境实际效果工作流内容工具安装B工作流详解A工作流详解优化建议 需求 甲方要求。根据自然语言生成对应Echarts图表,并且数据来源于私有数据库。 文档内容 本文档内容主要展示使用Dify(本地源码)进行…...
无刷电机槽数相同、转子极数不同的核心区别
一、基础原理差异 无刷电机的核心参数: 槽数(定子槽数,记为 ( Z )):定子铁芯上的绕组槽数量,决定绕组布局。极数(转子磁极数,记为 ( 2p )):转子上的永磁体磁极对数(总极数为 ( 2p ),如 ( p=4 ) 表示 8 极)。核心关系:槽极配合(( Z/2p ))决定电机电磁结构,相同…...
RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库
文章作者: 石强,镜舟科技解决方案架构师 赵恒,StarRocks TSC Member 👉 加入 StarRocks x AI 技术讨论社区 https://mp.weixin.qq.com/s/61WKxjHiB-pIwdItbRPnPA RAG 和向量索引简介 RAG(Retrieval-Augmented Gen…...
JavaScript 性能优化实战
一、代码执行效率优化 1. 减少全局变量的使用 全局变量在 JavaScript 中会挂载在全局对象(浏览器环境下是window,Node.js 环境下是global)上,频繁访问全局变量会增加作用域链的查找时间。 // 反例:使用全局变量 var globalVar = example; function someFunction() {con…...
ubuntu 22.04 使用ssh-keygen创建ssh互信账户
现有两台ubuntu 22.04服务器,ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码,直接一直回车就行,创建的用户是没法使用用户密码进行登陆的 su - …...
【Linux网络】Socket 编程TCP
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP socket API 详解 socket(): bind(): listen(): accept(): connect V0…...
C++指针与内存管理深度解析
前言: 在C开发的道路上,指针和内存管理就像是两个既强大又危险的朋友。掌握它们就如同学会驾驭一辆高性能跑车,稍有不慎可能导致灾难,但一旦熟练掌握,便能发挥出惊人的性能和灵活性。今天就让我们一起深入探讨C中的指…...
ESP32-idf学习(二)esp32C3作服务端与电脑蓝牙数据交互
一、当前需求 目前是想利用蓝牙来传输命令,或者一些数据,包括电脑、手机与板子的数据传输,板子与板子之间的数据传输。构思是一个板子是数据接收终端,在电脑或手机下发指令后,再给其他板子相应指令,也需要…...
NHANES指标推荐:CMI
文章题目:Association between cardiometabolic index and biological ageing among adults: a population-based study DOI:10.1186/s12889-025-22053-3 中文标题:成年人心脏代谢指数与生物衰老之间的关系:一项基于人群的研究 发…...
前端单元测试实战:如何开始?
实战:如何开始单元测试 1.安装依赖 npm install --save-dev jest2.简单的例子 首先,创建一个 sum.js 文件 ./sum.js function sum(a, b) {return a b; }module.exports sum;创建一个名为 sum.test.js 的文件,这个文件包含了实际测试内…...
react-native搭建开发环境过程记录
主要参考:官网的教程 https://reactnative.cn/docs/environment-setup 环境介绍:macos ios npm - 已装node18 - 已装,通过nvm进行版本控制Homebrew- 已装yarn - 已装ruby - macos系统自带的2.2版本。watchman - 正常安装Xcode - 正常安装和…...
【数据库系统概论】第3章 SQL(四)视图(超详细)
视图(View)是数据库中的虚拟表 通过执行查询定义并存储在数据库中,可以像普通表一样被查询和使用。 视图本身并不存储数据,而是基于一个或多个表的查询结果动态生成。 视图的概念 视图( View )是由其它表或视图上的查询所定义…...
观察者模式详解与C++实现
1. 模式定义 观察者模式(Observer Pattern)是一种行为型设计模式,定义了对象间的一对多依赖关系。当一个对象(被观察者/主题)状态改变时,所有依赖它的对象(观察者)都会自动收到通知…...
空调制冷量和功率有什么关系?
空调的制冷量和功率是衡量空调性能的两个核心参数,二者既有区别又紧密相关,以下是具体解析: 1. 基本定义 制冷量(Cooling Capacity)指空调在单位时间内从室内环境中移除的热量,单位为 瓦特(W) 或 千卡/小时(kcal/h)。它直接反映空调的制冷能力,数值越大,制冷效果越…...
【python报错解决训练】
在编程开发中,正确解读报错信息是解决问题的关键技能。以下是系统学习解读报错信息的方法指南: 一、理解报错信息的核心结构 典型的报错信息包含以下要素(以Python为例): Traceback (most recent call last):File &q…...
UE5 关卡序列
文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画,可以用来录制场景中物体的动画 创建一个关卡序列…...
AI测试用例生成平台
AI测试用例生成平台 项目背景技术栈业务描述项目展示项目重难点 项目背景 针对传统接口测试用例设计高度依赖人工经验、重复工作量大、覆盖场景有限等行业痛点,基于大语言模型技术实现接口测试用例智能生成系统。 技术栈 LangChain框架GLM-4模型Prompt Engineeri…...
C#中扩展方法和钩子机制使用
1.扩展方法: 扩展方法允许向现有类型 “添加” 方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像实例方法一样进行调用。 使用场景: 1.当无法修改某个类的源代码&#…...
大语言模型减少幻觉的常见方案
什么是大语言模型的幻觉 大语言模型的幻觉(Hallucination)是指模型在生成文本时,输出与输入无关、不符合事实、逻辑错误或完全虚构的内容。这种现象主要源于模型基于概率生成文本的本质,其目标是生成语法合理、上下文连贯的文本&…...
YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12的网络结构图
文章目录 一、YOLOv5二、YOLOv6三、YOLOv7四、YOLOv8五、YOLOv9六、YOLOv10七、YOLOv11八、YOLOv12九、目标检测系列文章 本文将给出YOLO各版本(YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12)网络结构图的绘制方法及图。本文所展…...
03 UV
04 Display工具栏_哔哩哔哩_bilibili 讲的很棒 ctrlMMB 移动点 s 打针 ss 批量打针...
AIGC-几款本地生活服务智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…...
Django ORM 定义模型
提示:定义模型字段的类型 文章目录 一、字段类型二、字段属性三、元信息 一、字段类型 常用字段 字段名描述备注AutoFieldint 自增必填参数 primary_keyTrue,无该字段时,django自动创建一个 BigAutoField,一个model不能有两个Au…...
4.18---缓存相关问题(操作原子性,击穿,穿透,雪崩,redis优势)
为什么要用redis做一层缓存,相比直接查mysql有什么优势? 首先介绍Mysql自带缓存机制的问题: MySQL 的缓存机制存在一些限制和问题,它自身带的缓存功能Query Cache只能缓存完全相同的查询语句,对于稍有不同的查询语句,…...
java八股之并发编程
1.java线程和操作系统线程之间的区别? 现在java线程本质上是操作系统线程,java中采用的是一对一的线程模型(一个用户线程对应一个内核进程) 2.什么是进程和线程? 1.进程是操作系统一次执行,资源分配和调度的…...
C#/.NET/.NET Core拾遗补漏合集(25年4月更新)
前言 在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。 ✍C#/.NET/.N…...
层次式架构核心:中间层的功能、优势与技术选型全解析
层次式架构中的中间层是整个架构的核心枢纽,承担着多种重要职责,在功能实现、优势体现以及技术选型等方面都有丰富的内容,以下为你详细介绍: 一、功能 1.业务逻辑处理 复杂规则运算:在许多企业级应用中,…...

