文章目录
前言
注:本文系湛江市第十七中学星火创客团队及岭南师范学院物联网俱乐部原创部分参赛项目,转载请保留声明。
本实验的内容是使用Arduino UNO R3和DHT11进行数据采集,然后将数据发送到掌控板,由掌控板将数据发送到阿里云的物联网平台,最后使用IoT Stdio做一个数据可视化界面。
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目准备
1、硬件准备
硬件 | 数量 |
---|---|
Arduino UNO R3 | 1 |
掌控板 | 1 |
micro:bit掌控I/O扩展板 | 1 |
DHT11 | 1 |
由于在Mind+上使用Arduino UNO上传数据到云平台需要用到DFRobot的OBLOQ物联网模块,手头上并没有,就借助一下掌控板来实现上云功能。
2、软件准备
软件 |
---|
Arduino IDE |
Mind+ |
3、硬件连接
Arduino UNO | DHT11 |
---|---|
5V | VCC |
4 | Data |
GND | GND |
Arduino UNO | 掌控板 |
---|---|
2(RX) | P9(TX) |
3(TX) | P8(RX) |
GND | GND |
本实验中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端完成数据可视化
简单配置一下后,基本上就完成了