欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

程序员文章站 2024-03-16 18:45:40
...

在模块测试之后,确保ESP8266能正常工作,开始与Arduino连接,将DHT11温湿度传感器检测的数据上传到监控平台。之前了解的平台有yeelink和thingspeak,原理应该都一样,我这里选用thingspeak,大家可以试试yeelink,欢迎提供学习分享。

先把结果摆上欢迎访问:https://thingspeak.com/channels/296658

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传
Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

一、前期准备

硬件:

Arduino单片机(我这里用的是nano,其他的也一样)
esp8266模块
DHT11温湿度传感器

软件:

1.在thingspeak网站注册账号:https://thingspeak.com/

2.添加设备:点击Channels–>My Channels–>New Channel
建立自己的设备

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

3.设置传感器属性,本实例中温湿度传感器工两个数据故选择两个领域,勾选Make Public便于分享链接,点击保存

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

4.在传感器管理界面点击 “API Keys”,查看Write API Key,之后会用到。

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

二、电路连接

ESP8266模块:

接线方式同上一节与TTL串口连接一样,只不过换成了Arduino单片机。(建议ESP8266可以单独3.3V供电,单片机电流太弱可能会影响模块正常工作)

DHT11:

pin1–>单片机+5V
pin2–>单片机数字口(我这里选择的是4引脚)
pin3–>悬空不用管
pin4–>接地
建议pin2口接一个5K欧电阻再接VCC做上拉电阻

我简单画了一下原理图,电路很简单

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

三、程序编写

#include <stdlib.h>
#include <SoftwareSerial.h>
#include <dht.h>            
dht DHT;  
const int pin = 4;  // 将把 DHT11 的 data pin 連到 arduino Pin 4

#define SSID "***"      //wifi名
#define PASS "***" //wifi密码
#define IP "184.106.153.149" // 连接thingspeak.com服务器
String GET = "GET /update?key=****"; //输入前面记下的API
SoftwareSerial monitor(10, 11); // 定义软串口RX, TX

//初始化-----------------------------------------
void setup()
{
    monitor.begin(9600);
    Serial.begin(9600);
    sendDebug("AT");        //指令测试
    delay(5000);
    if(Serial.find("OK"))   //接收指令正常则返回OK
    {
        monitor.println("RECEIVED: OK");
        connectWiFi();
    }
}

//主循环-----------------------------------------
void loop()
{
    DHT.read11(pin);  // 读取 DHT11 传感器
    //Serial.print(DHT.humidity,1);    //串口打印湿度
    //Serial.print(",\t");  
    //Serial.println(DHT.temperature,1);   //打印温度
    float tempH = DHT.humidity;
    float tempT = DHT.temperature;
    char buffer[10];
    String temph = dtostrf(tempH, 4, 1, buffer);    
    String tempt = dtostrf(tempT, 4, 1, buffer);    
    updateTemp(temph,tempt);
    delay(60000);
}


void updateTemp(String temph,String tempt)          
{               
    String cmd = "AT+CIPSTART=\"TCP\",\"";
    cmd += IP;
    cmd += "\",80";
    sendDebug(cmd);                         //发送指令,链接服务器
    delay(2000);
    if(Serial.find("Error"))
    {
        monitor.print("RECEIVED: Error");
        return;
    }
    cmd = GET + "&field1=" + temph + "&field2=" + tempt +"\r\n";        //记录T和H的值
    Serial.print("AT+CIPSEND=");
    Serial.println(cmd.length());
    if(Serial.find(">"))
    {
        monitor.print(">");
        monitor.print(cmd);
        Serial.print(cmd);
    }
    else
    {
        sendDebug("AT+CIPCLOSE");
    }
    if(Serial.find("OK"))
    {
        monitor.println("RECEIVED: OK");
    }
    else
    {
        monitor.println("RECEIVED: Error");
    }
}

void sendDebug(String cmd)
{
    monitor.print("SEND: ");
    monitor.println(cmd);
    Serial.println(cmd);
}

boolean connectWiFi()
{
    Serial.println("AT+CIPMUX=0");
    Serial.println("AT+CWMODE=1");
    delay(2000);
    String cmd="AT+CWJAP=\"";
    cmd+=SSID;
    cmd+="\",\"";
    cmd+=PASS;
    cmd+="\"";
    sendDebug(cmd);
    delay(5000);
    if(Serial.find("OK"))
    {
        monitor.println("RECEIVED: OK");
        return true;
    }else
    {
        monitor.println("RECEIVED: Error");
        return false;
    }
}

库文件下载:

软串口库文件
CSDN积分下载微云免费下载

DHT11传感器库文件
CSDN积分下载微云免费下载

四、结果

电路工作正常,数据测量正常

连接WIFI正常

数据传输正常,并实时更新

电路连续工作了好几天没出现一点问题,很强大!!

在监控网站上查看已接收到数据:https://thingspeak.com/channels/296658

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

电路:

Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传

上面那个绿色的板子是我焊接的将5V降为3.3V的电路,方便满足不同的电压需求。

五、问题排除

1.电路连接是否有问题,RX,TX是否接反

2.程序编写(直接用我的程序应该不会出问题),注意烧录时将RX,TX先拔掉,烧写成功后马上接上,观察arduino IDE监视窗口

3.AT指令测试时模块是否正常

4.连接WIFI 是否成功,密码是否正确(可以连接热点,观察是否有新设备接入)

5.模块供电问题:建议ESP5266模块单独供3.3V电

6.模块波特率问题,使用的是15200还是9600(我采用的是9600)

7.模块每次发送数据时,蓝色的小灯都会闪一下。今天早上看到好久没闪(或者一直闪),猜是数据上传估计中断了,查看监控网页确实数据更新到凌晨四点中断了,其实只是电路连线的问题,在面包板上插线,杜邦线永久了也可能松,有问题大家也可以检查一下接线是都松动

欢迎大家继续提供问题解决方案,一起交流学习。


WIFI系列上一篇:

Arduino+ESP8266WIFI(1)——模块测试