物联那点事儿之DS18B20自制网络温度计(arduino+点灯科技篇)

前言

很久没有更新了,该好好反思了,废话不多说,fighting!
代码开源,喜欢的给个star吧!
git链接!!!
物联那点事儿专栏往期回顾:


一、硬件

所需材料

1.nodemcu(这里就不做过多说明了)。
2.DS18B20(温湿度传感器)。
3.阻值大于4.7K的电阻一个(满足条件即可)。
4.杜邦线若干,面包板一个。(看具体实际要求)

硬件连线

        在单片机中我们知道,单片机的io口接DS18B20需要一个上拉电阻,只是开发板在生产时便焊接好了上拉电阻,然后这个Nodemcu并没有上拉电阻,所以我们要自己接一个电阻,阻值范围大于4.7k,否则检测不到DS18B20设备接入Nodemcu上。
硬件连线入如下图所示:在这里插入图片描述

程序部分

1.下载部分

下载DS18B20使用的库文件OneWire和DallasTemperature。
(可以手动在项目->加载库->管理库 中搜素对应的库文件进行下载安装)
OneWire库文件的作用是它的构造可以使Arduino指定应用于单总线的引脚,而DallasTemperature库文件的作用就是可以拿到DS18B20读取的温度数据,程序中必须包含这两个头文件。

2.代码解读

(1)引入blinker头文件和下载的OneWire.h、DallasTemperature.h头文件。

#define BLINKER_WIFI //定义wifi模块
#include <Blinker.h>

#include<OneWire.h>
#include<DallasTemperature.h>

2.定义要使用的引脚、全局变量和OneWire对象(13号引脚对应NodeMCU的D7)。

#define PIN 13      //定义DHT11模块连接管脚io2
//定义一个OneWire对象,并使用13引脚作为单总线的引脚
float temp_read = 0;//定义浮点型全局变量 储存传感器读取的温湿度数据
//单总线的引脚的对象作为传感器的参数。
DallasTemperature sensors(&onewire);
OneWire onewire(PIN);

3.使用SmartConfig技术给设备一键配网,原理类似wifi共享,比直接配网的可用性强。

void smartConfig()//配网函数
{
    
    
  WiFi.mode(WIFI_STA);//使用wifi的STA模式
  Serial.println("\r\nWait for Smartconfig...");//串口打印
  WiFi.beginSmartConfig();//等待手机端发出的名称与密码
  //死循环,等待获取到wifi名称和密码
  while (1)
  {
    
      //等待过程中一秒打印一个.
    Serial.print(".");
    delay(1000);                                             
    if (WiFi.smartConfigDone())//获取到之后退出等待
    {
    
    
      Serial.println("SmartConfig Success");
      //打印获取到的wifi名称和密码
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      break;
    }
  }
}
void WIFI_Init()
{
    
    
    Serial.println("\r\n正在连接");
    //当设备没有联网的情况下,执行下面的操作
    while(WiFi.status()!=WL_CONNECTED)
    {
    
    
        if(WIFI_Status)//WIFI_Status为真,尝试使用flash里面的信息去 连接路由器
        {
    
    
            Serial.print(".");
            delay(1000);                                        
            count++;
            if(count>=5)
            {
    
    
                WIFI_Status = false;
                Serial.println("WiFi连接失败,请用手机进行配网"); 
            }
        }
        else//使用flash中的信息去连接wifi失败,执行
        {
    
    
            smartConfig();  //smartConfig技术配网
        }
     }  
     //串口打印连接成功的IP地址
     Serial.println("连接成功");  
     Serial.print("IP:");
     Serial.println(WiFi.localIP());
}

4.温度回传给手机app端,提前定义blinker组件。

BlinkerNumber TEMP("temp");    //定义温度数据键名

void heartbeat()
{
    
    
    TEMP.print(temp_read);        //给blinkerapp回传温度数据
}

65setup主函数中对串口、blinker初始化操作和数据回传函数的回调。

void setup()
{
    
    
    //初始化端口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    
    WIFI_Init();//调用WIFI函数
    Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());//运行blinker
    Blinker.attachHeartbeat(heartbeat);//将传感器获取的数据传给blinker app上
}

6.loop函数中不停地读取温度,把读取温度操作放到loop函数中,并把读取到的温度赋值给全局变量。

  Blinker.run();//运行Blinker
   sensors.requestTemperatures();
   Serial.write("温度:");
   float t=sensors.getTempCByIndex(0);
   temp_read=t;
   Serial.print(t);
   Serial.println("摄氏度");
   delay(1000);

3.调试与结果

(1)串口监视器打印出的效果截图如下所示。

在这里插入图片描述
(2)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/JIANGYINGH/article/details/108802325