Arduino ESP8266 DHT11温湿度传感器数据上传OneNet平台教程
使用ESP8266和DHT11传感器将温湿度数据上传到OneNet平台
本教程将介绍如何使用ESP8266模块和DHT11传感器,通过Arduino编程将采集到的温湿度数据上传到OneNet平台。
准备工作:
- Arduino开发板
- ESP8266模块
- DHT11温湿度传感器
- 一根面包板
- 跳线
步骤:
-
连接硬件:
- 将ESP8266模块连接到Arduino开发板,并根据ESP8266模块的TX/RX引脚连接到Arduino的软串口引脚D3和D2。
- 将DHT11传感器连接到Arduino的数字引脚4。
-
安装库:
- 在Arduino IDE中安装以下库:
- ESP8266WiFi.h
- dht11.h
- SoftwareSerial.h
- 在Arduino IDE中安装以下库:
-
代码:
#include 'ESP8266.h' #include 'dht11.h' #include 'SoftwareSerial.h' //配置ESP8266WIFI设置 #define SSID 'HONOR Play4T' //填写2.4GHz的WIFI名称,不要使用校园网 #define PASSWORD '12345678'//填写自己的WIFI密码 #define HOST_NAME 'api.heclouds.com' //API主机名称,连接到OneNET平台,无需修改 #define DEVICE_ID '1099655073' //填写自己的OneNet设备ID #define HOST_PORT (80) //API端口,连接到OneNET平台,无需修改 String APIKey = 'IiJSs17atNND2C77wumz03w63hw='; //与设备绑定的APIKey #define INTERVAL_SENSOR 5000 //定义传感器采样及发送时间间隔 //创建dht11示例 dht11 DHT11; //定义DHT11接入Arduino的管脚 #define DHT11PIN 4 //定义ESP8266所连接的软串口 /********************* * 该实验需要使用软串口 * Arduino上的软串口RX定义为D3, * 接ESP8266上的TX口, * Arduino上的软串口TX定义为D2, * 接ESP8266上的RX口. * D3和D2可以自定义, * 但接ESP8266时必须恰好相反 *********************/ SoftwareSerial mySerial(3, 2); ESP8266 wifi(mySerial); void setup() { mySerial.begin(115200); //初始化软串口 Serial.begin(9600); //初始化串口 Serial.print('setup begin\r\n'); //以下为ESP8266初始化的代码 Serial.print('FW Version: '); Serial.println(wifi.getVersion().c_str()); if (wifi.setOprToStation()) { Serial.print('to station ok\r\n'); } else { Serial.print('to station err\r\n'); } //ESP8266接入WIFI if (wifi.joinAP(SSID, PASSWORD)) { Serial.print('Join AP success\r\n'); Serial.print('IP: '); Serial.println(wifi.getLocalIP().c_str()); } else { Serial.print('Join AP failure\r\n'); } Serial.println(''); Serial.print('DHT11 LIBRARY VERSION: '); Serial.println(DHT11LIB_VERSION); mySerial.println('AT+UART_CUR=9600,8,1,0,0'); mySerial.begin(9600); Serial.println('setup end\r\n'); } unsigned long net_time1 = millis(); //数据上传服务器时间 void loop() { if (net_time1 > millis()) net_time1 = millis(); if (millis() - net_time1 > INTERVAL_SENSOR) //发送数据时间间隔 { int chk = DHT11.read(DHT11PIN); Serial.print('Read sensor: '); switch (chk) { case DHTLIB_OK: Serial.println('OK'); break; case DHTLIB_ERROR_CHECKSUM: Serial.println('Checksum error'); break; case DHTLIB_ERROR_TIMEOUT: Serial.println('Time out error'); break; default: Serial.println('Unknown error'); break; } float sensor_hum = (float)DHT11.humidity; float sensor_tem = (float)DHT11.temperature; Serial.print('Humidity (%): '); Serial.println(sensor_hum, 2); Serial.print('Temperature (oC): '); Serial.println(sensor_tem, 2); Serial.println(''); if (wifi.createTCP(HOST_NAME, HOST_PORT)) { //建立TCP连接,如果失败,不能发送该数据 Serial.print('create tcp ok\r\n'); char buf[10]; //拼接发送data字段字符串 String jsonToSend = '{\'Temperature\':'; dtostrf(sensor_tem, 1, 2, buf); jsonToSend += '\'' + String(buf) + '\''; jsonToSend += ',\'Humidity\':'; dtostrf(sensor_hum, 1, 2, buf); jsonToSend += '\'' + String(buf) + '\''; jsonToSend += '}'; //拼接POST请求字符串 String postString = 'POST /devices/'; postString += DEVICE_ID; postString += '/datapoints?type=3 HTTP/1.1'; postString += '\r\n'; postString += 'api-key:'; postString += APIKey; postString += '\r\n'; postString += 'Host:api.heclouds.com\r\n'; postString += 'Connection:close\r\n'; postString += 'Content-Length:'; postString += jsonToSend.length(); postString += '\r\n'; postString += '\r\n'; postString += jsonToSend; postString += '\r\n'; postString += '\r\n'; postString += '\r\n'; const char *postArray = postString.c_str(); //将str转化为char数组 Serial.println(postArray); wifi.send((const uint8_t *)postArray, strlen(postArray)); //send发送命令,参数必须是这两种格式,尤其是(const uint8_t*) Serial.println('send success'); if (wifi.releaseTCP()) { //释放TCP连接 Serial.print('release tcp ok\r\n'); } else { Serial.print('release tcp err\r\n'); } postArray = NULL; //清空数组,等待下次传输数据 } else { Serial.print('create tcp err\r\n'); } Serial.println(''); net_time1 = millis(); } } -
配置OneNet平台:
- 注册OneNet账号并创建一个新的设备。
- 获取设备ID和APIKey。
- 在代码中修改SSID、PASSWORD、HOST_NAME、DEVICE_ID和APIKey的值。
-
上传代码并运行:
- 将代码上传到Arduino开发板并运行。
- 打开串口监视器,观察代码运行日志。
- 在OneNet平台上查看设备的数据,验证是否成功上传数据。
注意:
- 确保ESP8266模块和DHT11传感器正确连接。
- 确保WIFI名称和密码正确。
- 确保设备ID和APIKey正确。
- 代码中的时间间隔INTERVAL_SENSOR可以根据需要进行调整。
本教程仅提供一个基本示例,您可以根据自己的需求对代码进行扩展和修改。
其他资源:
- OneNet平台:https://www.onenet.io/
- ESP8266文档:https://www.espressif.com/en/products/hardware/esp8266
- DHT11传感器文档:https://www.adafruit.com/product/385
原文地址: https://www.cveoy.top/t/topic/oI5Y 著作权归作者所有。请勿转载和采集!