Arduino UNO采集DHT11数据,与掌控板软串口通信并将数据上传到阿里云


前言

注:本文系湛江市第十七中学星火创客团队及岭南师范学院物联网俱乐部原创部分参赛项目,转载请保留声明。

本实验的内容是使用Arduino UNO R3和DHT11进行数据采集,然后将数据发送到掌控板,由掌控板将数据发送到阿里云的物联网平台,最后使用IoT Stdio做一个数据可视化界面。


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目准备

1、硬件准备

硬件数量
Arduino UNO R31
掌控板1
micro:bit掌控I/O扩展板1
DHT111

由于在Mind+上使用Arduino UNO上传数据到云平台需要用到DFRobot的OBLOQ物联网模块,手头上并没有,就借助一下掌控板来实现上云功能。

2、软件准备

软件
Arduino IDE
Mind+

3、硬件连接

Arduino UNODHT11
5VVCC
4Data
GNDGND
Arduino UNO掌控板
2(RX)P9(TX)
3(TX)P8(RX)
GNDGND

本实验中Arduino UNO只用作发送数据,并没有用到数据接收的功能,所以2号引脚可接可不接,这里只是习惯性标注

(不要忘记将Arduino UNO和掌控板共地,也就是上面表格中的GND——GND,不然会影响掌控板接收数据的准确性)

二、实验过程

1、Arduino采集数据及软串口发送数据

若使用硬串口通信,则需要在每次上传代码的时候都要拔掉硬串口RX(0)与其他硬件的线路,不然会因为硬串口被占用而导致代码上传出错,使用软串口通信即可不用担心上述问题

这里使用了一个JSON格式的数据来进行发送,来方便掌控板端的数据提取

#define Msg "{\"Temperature\": \"%s\", \"Humidity\": \"%s\"}"

这里的数据格式使用了字符串型是因为使用浮点型的数据发送过去给掌控板的话,该数据会出现乱码,使用字符串型可以避免这个问题

代码中使用到的DHT库:https://github.com/adafruit/DHT-sensor-library

具体代码如下:

#include <SoftwareSerial.h>
#include "DHT.h"

SoftwareSerial mySerial(2, 3); // RX, TX
#define BUF_LEN 50
char SEND_BUF[BUF_LEN];
#define Msg "{\"Temperature\": \"%s\", \"Humidity\": \"%s\"}"

#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float Temp, Humi;

void setup() {
  Serial.begin(115200);
  while (!Serial) {;}
  mySerial.begin(57600);
  dht.begin();
}

void loop() { // run over and over
  static unsigned long now = millis();
  if (millis() - now >= 10000) {
    now = millis();
    Get_Temp_Humi();
    
    snprintf(SEND_BUF, BUF_LEN, Msg, String(Temp).c_str(), String(Humi).c_str());
    mySerial.write(SEND_BUF);
  }
}

void Get_Temp_Humi() {
  Temp = dht.readTemperature();
  Humi = dht.readHumidity();

  if (isnan(Humi) || isnan(Temp)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
}

2、掌控板获取数据并上云

在掌控板这端也同样是使用了软串口进行通信(接收数据),由于掌控板是使用十进制的ASCII码进行通信的,所以掌控板在接收到数据后,要将十进制ASCII码转为相对应的ASCII码字符
在这里插入图片描述
这里使用了字符串拼接,保证数据接收完整。并且顺便做了Wi-Fi和MQTT的自动重连,避免与Wi-Fi或MQTT断开后无法恢复正常。

(Ps:MQTT_Msg一定要注意JSON格式正确与否,这会直接导致数据上传的成功与失败)

在阿里云平台,设备上报属性所使用的JSON数据格式如下

{"id":12345,"params":{"Temperature":25.20,"Humidity":68.30},"method":"thing.event.property.post"}

具体代码如下:

在这里插入图片描述
掌控板串口打印展示:
在这里插入图片描述
实物效果图:
在这里插入图片描述

3、阿里云物联网平台

在阿里云物联网平台上创建产品、设备,配置好产品中的功能定义的属性“Temperature”、“Humidity”,将功能定义发布上线后,即可在物联网平台上正常接收设备发布的消息
在这里插入图片描述
接着就可以去IoT Studio中创建一个Web端完成数据可视化
在这里插入图片描述
简单配置一下后,基本上就完成了
在这里插入图片描述


三、总结

以上就是使用Arduino UNO采集数据传至掌控板,并由掌控板提取数据发送上云的小实验,简单的介绍了一下一些实验过程中要注意的点。如有写的不好的地方,欢迎大家提点宝贵的建议。
  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我可以帮您完成这个项目。首先,您需要准备以下物品:Arduino UNO开发DHT11传感器和ESP8266-01S模块。然后,您可以按照以下步骤进行操作: 1. 将DHT11传感器连接到Arduino开发上。具体连接方式如下: - 将DHT11中的VCC引脚连接到开发上的5V电源引脚上。 - 将DHT11中的GND引脚连接到开发上的GND引脚上。 - 将DHT11中的数据引脚连接到开发上的数字引脚2上。 2. 编写Arduino代码,用于采集温湿度数据。可以使用Adafruit提供的DHT库进行操作。将以下代码拷贝到Arduino IDE中并上传到开发: ``` #include <DHT.h> #define DHTPIN 2 // DHT11连接到数字引脚2上 #define DHTTYPE DHT11 // DHT类型为DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { float h = dht.readHumidity(); // 读取湿度 float t = dht.readTemperature(); // 读取温度(摄氏度) if (isnan(h) || isnan(t)) { Serial.println("读取温湿度数据失败!"); return; } Serial.print("湿度: "); Serial.print(h); Serial.print(" %\t"); Serial.print("温度: "); Serial.print(t); Serial.println(" 度C"); delay(2000); // 2秒钟采集一次 } ``` 3. 配置ESP8266-01S模块,用于连接到阿里云。具体操作如下: - 下载并安装Arduino ESP8266开发环境(https://github.com/esp8266/Arduino)。 - 在Arduino IDE中,选择ESP8266开发型号,并选择串口。 - 在Arduino IDE中,打开示例程序“ESP8266WiFi / WiFiClient”,并按照要求填写WiFi名称和密码。 - 在程序中添加以下代码,用于连接到阿里云并上传数据: ``` #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <PubSubClient.h> // WiFi网络信息设置 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // 阿里云IoT平台信息设置 const char* mqtt_server = "your_mqtt_server"; const int mqtt_port = 1883; const char* mqtt_user = "your_mqtt_user"; const char* mqtt_password = "your_mqtt_password"; const char* mqtt_clientID = "your_mqtt_clientID"; // WiFi客户端 WiFiClient espClient; // MQTT客户端 PubSubClient client(espClient); // DHT11连接到数字引脚2上 #define DHTPIN 2 // DHT类型为DHT11 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { // 初始化串口 Serial.begin(9600); // 初始化DHT11传感器 dht.begin(); // 连接WiFi网络 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // 连接MQTT服务器 client.setServer(mqtt_server, mqtt_port); while (!client.connected()) { if (client.connect(mqtt_clientID, mqtt_user, mqtt_password)) { Serial.println("MQTT connected"); } else { Serial.print("failed with state "); Serial.print(client.state()); delay(2000); } } } void loop() { float h = dht.readHumidity(); // 读取湿度 float t = dht.readTemperature(); // 读取温度(摄氏度) if (isnan(h) || isnan(t)) { Serial.println("读取温湿度数据失败!"); return; } Serial.print("湿度: "); Serial.print(h); Serial.print(" %\t"); Serial.print("温度: "); Serial.print(t); Serial.println(" 度C"); // 将温湿度数据传到阿里云 char message[50]; snprintf(message, 50, "{\"temperature\":\"%.1f\",\"humidity\":\"%.1f\"}", t, h); Serial.print("Publish message: "); Serial.println(message); client.publish("/your_topic", message); delay(2000); // 2秒钟采集一次 } ``` 4. 修改程序中的WiFi网络信息和阿里云IoT平台信息。 5. 将ESP8266-01S模块连接到Arduino开发上,并上传程序到开发。 以上是基于Arduino UNO开发,使用DHT11采集温湿度数据,并通过ESP8266-01S模块将温湿度数据上传至阿里云的一些基本操作,希望能够帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simply myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值