ESP8266从零学起第三课检测温湿度DHT11

ESP8266从零学 笔记

L2 ESP8266读取DHT11的温湿数据+Blinker APP

P1 写在前面

 说来惭愧,消失了半个多月,终于调整好了状态准备新的开始啦。这段时间也是在硬啃DHT11与Esp8266的程序(暴露了是个小渣渣的本质)。
  网上找了各式各样的相关程序,有的是使用“天猫精灵”、有的是使用“阿里云”,可惜咱穷,买不起天猫精灵、还没钱买阿里云,所以就找有没有直接使用blinker读数据的程序啊啊啊!!!诶嘿原来是俺舍近求远了,在Blinker的库里就有DHT的案例程序,而且相当好用!!!
废话不多说,上干货!!!

P2 Esp8266的完整程序代码

#define BLINKER_WIFI
#include <Blinker.h>

char auth[] = "我是来自blinker的密钥";
char ssid[] = "HUAWEI nova 21";
char pswd[] = "我是密码";

BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");

#include <DHT.h>

#define DHTPIN 2

#define DHTTYPE DHT11   // DHT 11
//define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

uint32_t read_time = 0;

float humi_read, temp_read;

void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    Blinker.vibrate();
    uint32_t BlinkerTime = millis();
    Blinker.print("millis", BlinkerTime);
}

void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}

void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
    //应该是我自己添的,测试了一下板子是不是在工作

    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    Blinker.attachHeartbeat(heartbeat);
    
    dht.begin();
}

void loop()
{
    Blinker.run();

    if (read_time == 0 || (millis() - read_time) >= 2000)
    {
        read_time = millis();

        float h = dht.readHumidity();
        float t = dht.readTemperature();        

        if (isnan(h) || isnan(t)) {
            BLINKER_LOG("Failed to read from DHT sensor!");
            return;
        }

        float hic = dht.computeHeatIndex(t, h, false);

        humi_read = h;
        temp_read = t;

        BLINKER_LOG("Humidity: ", h, " %");
        BLINKER_LOG("Temperature: ", t, " *C");
        BLINKER_LOG("Heat index: ", hic, " *C");
    }
}
或者打开 Arduino IDE找到blinker库中的示例程序

在这里插入图片描述

P4 分段程序

第一段:准备工作
#define BLINKER_WIFI
#include <Blinker.h>
//以上都是声明要使用Blinker

#include <DHT.h> //引用DHT库
#define DHTPIN 2 //定义读取数据要使用的引脚 2

char auth[] = "我是来自blinker的密钥";
char ssid[] = "HUAWEI nova 21";
char pswd[] = "我是密码";
//设施Blinker上的设备密钥、esp8266连接的WIFI名称及密码

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

//这部分挺有意思的、因为DHT有不止一款传感器,
//所以你使用的是什么型号就选择哪一款、DHT11相对便宜所以使用的较为很广泛

DHT dht(DHTPIN, DHTTYPE)
//刚刚有定义DHTPIN即传感器引脚、DHTTYPE即传感器型号,在这要要进行说明
//dht(注意小写)是本程序使用的传感器自定义名称
第二段:创建组件(数据)
BlinkerNumber HUMI("humi");
//在Blinker APP 中创建“数据组件”
//湿度数据 humi  

BlinkerNumber TEMP("temp");
//在Blinker APP 中创建“数据组件”
//温度数据 humi  

关于如何新建组件请参照之前的笔记

在这里插入图片描述

大家可以参照一下我的组件外观!
第三段:定义变量
uint32_t read_time = 0;
// 字面意思读取时间

float humi_read, temp_read;
//humi_read将要用来输出在Blinker湿度数据组件上
//temp_read将要用来输出在Blinker温度数据组件上
第四段:回调数据
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    Blinker.vibrate();
    //以上代码解析请参照前几节笔记
    
    uint32_t BlinkerTime = millis();
    //BlinkerTime变量用来保存板子运行当前程序的时间
    
    Blinker.print("millis", BlinkerTime);
    //向APP发送millis耗时
}
该回调函数在设备收到APP发来的数据时被调用
不包含在程序中的部分
millis();
//此函数用于返回的Arduino板开始运行当前程序时的毫秒数。
第五段:心跳包
void heartbeat()
//APP定时向设备发送心跳包,设备收到心跳包后会返回设备当前状态
{
    HUMI.print(humi_read);
    //发送湿度数据
    TEMP.print(temp_read);
    //发送温度数据
}
心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。
  设备建立连接后APP会立即发送心跳包,此后每30s-60s会发送一次心跳包
第六段: 初始化设置
void setup()
{
    Serial.begin(115200);//通信波特率,用于串口监视观察
    BLINKER_DEBUG.stream(Serial);//详解见第一节笔记

    Blinker.begin(auth, ssid, pswd);//发送密钥、WIFI名称及密码
    Blinker.attachData(dataRead);
    //注册回调函数
    Blinker.attachHeartbeat(heartbeat);
    //注册心跳包的回调函数
    dht.begin();
    //初始化dht11
}
第七段:
void loop()
{
    Blinker.run();//详解见第一节笔记

    if (read_time == 0 || (millis() - read_time) >= 2000)
    //如果设备运行时间为0即刚开始工作 或者2秒内内没有更新readtime
     {
        read_time = millis();//readtime时间变更为设备运行时间

        float h = dht.readHumidity();
        //定义湿度h变量,读取DHT11的湿度数据
        float t = dht.readTemperature();   
         //定义湿度t变量,读取DHT11的温度数据     

        if (isnan(h) || isnan(t)) 
        //如果读取到的“湿度h” 或者 “温度t” 是 非字符 数据
        {
            BLINKER_LOG("Failed to read from DHT sensor!");
            //发送“DHT传感器数据读取失败”
            return;
            //再试一次
        }

        humi_read = h;
        temp_read = t;
        //更新用于显示在APP中的数据
        //[小白说]咱是没太明白为啥非得转一手,搞得大家懵懵的

        BLINKER_LOG("Humidity: ", h, " %");
        BLINKER_LOG("Temperature: ", t, " *C");
        //发送温湿度数据 
        //例如 {"temp":{"val":20},"humi":{"val":15}}
    }
}
因为BLINKER_LOG与dataRead()函数显示在APP中所以需要在APP中新建一个“调试”组件,用来观察APP收到的其他数据

在这里插入图片描述

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值