Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报

news2025/4/20 0:16:44

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中进行下载即可

电路图:
CSDN风行男孩制

三、程序代码

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,AirHumidity
  String 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);     // 连接WiFi
  while (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,AirHumidity
    int 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的学习使用以及人工智能的相关知识等等内容,敬请期待哈!我是“风行男孩”,如果我的博客有帮助到你,点个免费的赞即可,那咱们有缘再见!(码字不易,转载请注明出处,谢谢!!!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地生活服务信息分类信息系统

最近在找分类信息系统&#xff0c;看了很多市面上常见的分类信息系统&#xff1a; 1&#xff0c;私集分类信息系统 2&#xff0c;火鸟分类信息系统 3&#xff0c;觅分类信息系统 4&#xff0c;框分类信息系统 5&#xff0c;蚂蚁分类信息系统 发现很多分类信息系统&#xff0c;…

【Dify应用】连接数据库生成Echarts图表

这里写自定义目录标题 需求文档内容测试环境实际效果工作流内容工具安装B工作流详解A工作流详解优化建议 需求 甲方要求。根据自然语言生成对应Echarts图表&#xff0c;并且数据来源于私有数据库。 文档内容 本文档内容主要展示使用Dify&#xff08;本地源码&#xff09;进行…

RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库

文章作者&#xff1a; 石强&#xff0c;镜舟科技解决方案架构师 赵恒&#xff0c;StarRocks TSC Member &#x1f449; 加入 StarRocks x AI 技术讨论社区 https://mp.weixin.qq.com/s/61WKxjHiB-pIwdItbRPnPA RAG 和向量索引简介 RAG&#xff08;Retrieval-Augmented Gen…

ubuntu 22.04 使用ssh-keygen创建ssh互信账户

现有两台ubuntu 22.04服务器&#xff0c;ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码&#xff0c;直接一直回车就行&#xff0c;创建的用户是没法使用用户密码进行登陆的 su - …

【Linux网络】Socket 编程TCP

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP socket API 详解 socket(): bind(): listen(): accept(): connect V0…

ESP32-idf学习(二)esp32C3作服务端与电脑蓝牙数据交互

一、当前需求 目前是想利用蓝牙来传输命令&#xff0c;或者一些数据&#xff0c;包括电脑、手机与板子的数据传输&#xff0c;板子与板子之间的数据传输。构思是一个板子是数据接收终端&#xff0c;在电脑或手机下发指令后&#xff0c;再给其他板子相应指令&#xff0c;也需要…

NHANES指标推荐:CMI

文章题目&#xff1a;Association between cardiometabolic index and biological ageing among adults: a population-based study DOI&#xff1a;10.1186/s12889-025-22053-3 中文标题&#xff1a;成年人心脏代谢指数与生物衰老之间的关系&#xff1a;一项基于人群的研究 发…

前端单元测试实战:如何开始?

实战&#xff1a;如何开始单元测试 1.安装依赖 npm install --save-dev jest2.简单的例子 首先&#xff0c;创建一个 sum.js 文件 ./sum.js function sum(a, b) {return a b; }module.exports sum;创建一个名为 sum.test.js 的文件&#xff0c;这个文件包含了实际测试内…

react-native搭建开发环境过程记录

主要参考&#xff1a;官网的教程 https://reactnative.cn/docs/environment-setup 环境介绍&#xff1a;macos ios npm - 已装node18 - 已装&#xff0c;通过nvm进行版本控制Homebrew- 已装yarn - 已装ruby - macos系统自带的2.2版本。watchman - 正常安装Xcode - 正常安装和…

观察者模式详解与C++实现

1. 模式定义 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了对象间的一对多依赖关系。当一个对象&#xff08;被观察者/主题&#xff09;状态改变时&#xff0c;所有依赖它的对象&#xff08;观察者&#xff09;都会自动收到通知…

UE5 关卡序列

文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画&#xff0c;可以用来录制场景中物体的动画 创建一个关卡序列…

AI测试用例生成平台

AI测试用例生成平台 项目背景技术栈业务描述项目展示项目重难点 项目背景 针对传统接口测试用例设计高度依赖人工经验、重复工作量大、覆盖场景有限等行业痛点&#xff0c;基于大语言模型技术实现接口测试用例智能生成系统。 技术栈 LangChain框架GLM-4模型Prompt Engineeri…

C#中扩展方法和钩子机制使用

1.扩展方法&#xff1a; 扩展方法允许向现有类型 “添加” 方法&#xff0c;而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法&#xff0c;但可以像实例方法一样进行调用。 使用场景&#xff1a; 1.当无法修改某个类的源代码&#…

YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12的网络结构图

文章目录 一、YOLOv5二、YOLOv6三、YOLOv7四、YOLOv8五、YOLOv9六、YOLOv10七、YOLOv11八、YOLOv12九、目标检测系列文章 本文将给出YOLO各版本&#xff08;YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12&#xff09;网络结构图的绘制方法及图。本文所展…

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和各种游戏开发技巧,以及各种资…

C#/.NET/.NET Core拾遗补漏合集(25年4月更新)

前言 在这个快速发展的技术世界中&#xff0c;时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节&#xff0c;以帮助大家更全面地了解这些技术栈的特性和发展方向。 ✍C#/.NET/.N…

MySQL性能调优(三):MySQL中的系统库(简介、performance_schema)

文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 1.MySQL中的系统库1.1.系统库简介1.2.performance_schema1.2.1.什么是performance_schema1.2.2.performance_schema使用1.2.3.检查当前数据库版本是否支持1.2.4.performance_schema表的分类1.2.5.performanc…

印度zj游戏出海代投本土网盟广告核心优势

印度游戏出海代投本土网盟广告的核心优势包括&#xff1a; 本土化广告策略&#xff1a;针对印度市场的特点&#xff0c;定制本土化的广告策略&#xff0c;吸引更多印度用户的关注和参与。 深度了解印度市场&#xff1a;对印度文化、消费习惯、网络使用习惯等有深入了解&#x…

NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)

约数和倍数 如果a 除以b 没有余数&#xff0c;那么a 就是b 的倍数&#xff0c;b 就是a 的约数&#xff0c;记作b ∣ a 。 约数&#xff0c;也称因数。 最⼤公约数和最⼩公倍数 最⼤公约数Greatest Common Divisor&#xff0c;常缩写为gcd。 ⼀组整数的公约数&#xff0c;是…