继上次nodemcu(esp8266)的小升级

继上次nodemcu(esp8266)的小升级

为啥做这个呢,回家后每次睡觉不方便关灯,于是就想了这个,都是因为懒惰哈哈哈哈

上视频、看看实现啥了

实现:温湿度的上传,加上继电器开关等
在这里插入图片描述

nodemcu(esp8266)

硬件

在这里插入图片描述
面包板一个(其实不需要,纯属为了美观)
esp8266模块一个(应该叫nodemcu) 12.8元
继电器开关一个(1路5v) 4.2元
光敏电阻模块一个 3.2元
温湿度传感器一个 9元(严重怀疑买贵了)
杜邦线若干

软件配置的话直接看上一篇哦,有详细说明

https://blog.csdn.net/weixin_44695217/article/details/121429305?spm=1001.2014.3001.5502

程序代码

因为是在之前的舵机基础上改的代码,所以涉及到舵机程序可以忽略
里面的程序有详细的注释

#include <Servo.h> 
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#include <Blinker.h>
#include <DHT.h>//包含DHT头文件

//  oled用
#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);


//blinker 提供的key
char auth[] = "      ";  //点灯Key
char ssid[] = "     ";      //wifi名称
char pswd[] = "    ";     //wifi密码

//发送到 blinker 的湿度数据key,和blink组件名字相对应
BlinkerNumber HUMI("humi");
//发送到 blinker 的温度数据key
BlinkerNumber TEMP("temp");

BlinkerNumber LIGHT("Light");   //光敏电阻
float light=0;
 
/*-----------------------------开关继电器和舵机-------------------------------------------------*/

// 新建组件对象(按键+滑块)
BlinkerButton Button1("btn-maxm");   //位置1 按钮 数据键名
BlinkerButton Button2("btn-closed");
BlinkerSlider Slider1("max-num");   //位置1 滑块 数据键名  范围0-180
Servo myservo;
int servo_max=180;
int servo_close=0;  

void button1_callback(const String & state) {    //位置1 按钮
    BLINKER_LOG("get button state: ", servo_max);
    myservo.write(servo_max);
    digitalWrite(D3, HIGH); 
    Blinker.vibrate();
  /*--------2021.11.23添加舵机复位程序----------------------*/
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();//反馈状态
    delay(1000);//延时1秒
    myservo.write(72);//舵机归零,回到垂直状态
    Blinker.vibrate();
  
    
}

void button2_callback(const String & state) {    //位置1 按钮
    BLINKER_LOG("get button state: ", servo_close);
    myservo.write(servo_close);
    digitalWrite(D3, LOW);  
    Blinker.vibrate();
      /*--------2021.11.23添加舵机复位程序----------------------*/
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();//反馈状态
    delay(1000);//延时1秒
    myservo.write(72);//舵机归零,回到垂直状态
    Blinker.vibrate();
    
}
/*
void slider1_callback(int32_t value)
{
  BLINKER_LOG("get slider value: ", value);
    servo_max = value;
    Slider1.color("#1E90FF");
    Slider1.print();
    //digitalWrite(D3, value);
    myservo.write(value);//如果包含这句,APP中的按键是不起作用的,只有滑块管用。
}
*/

/*-----------------------------引入 DHT 库,温湿度--------------------------------------------------*/

#define DHTPIN D6      // 定义温湿度引脚接D6
#define DHTTYPE DHT11    // 定义温湿度传感器的类型
DHT dht(DHTPIN, DHTTYPE);  //生成DHT对象,参数是引脚和DHT的类型 

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();//此函数用于返回Arduino板开始运行当前程序时的毫秒数。这个数字在大约50天后溢出,即回到零。
    
    Blinker.print("millis", BlinkerTime);
}

/*---------------------------------心跳包,用来给blink发温湿度----------------------------------------------*/
void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
    LIGHT.print(light);
}


/*---------------------------------定义存储时间---------------------------------------------*/
void dataStorage() {
    //添加数据存储 以便于图标数据展示
    Blinker.dataStorage("humi", humi_read);
    //添加数据存储 以便于图标数据展示
    Blinker.dataStorage("temp", 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);
    
    Blinker.attachDataStorage(dataStorage);//函数的意思就是每次循环的时候就会调用上面的dataStorage函数,达到可以将每次获得的数据云存储的效果。
    
    dht.begin();

   u8g2.begin();
   u8g2.enableUTF8Print();    // enable UTF8 support for the Arduino print() function
    
}

void loop()
{
    Blinker.run();
/*--------------------------------------------------温湿度传感器设置   2022.1.20-------------*/
    if (read_time == 0 || (millis() - read_time) >= 2000)
    {
        read_time = millis();
        //读取湿度
        float h = dht.readHumidity();
        //读取温度
        float t = dht.readTemperature();   
        // 读取华氏度    
        float f = dht.readTemperature(true);// 读取华氏度
        
        // 判断读取是否成功,不成功则返回
        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");
//        BLINKER_LOG("HuaTemp: ", f, " F");
    }
/*---------------------------------- 光照检测模块加入,2021.12.21 -----------*/
    light=digitalRead(D4);  //读出D4的高低电平赋值给v
    BLINKER_LOG("Light: ", light);

   if(light==1)// 有光---0
    digitalWrite(D1, HIGH); 
   else
    digitalWrite(D1, LOW); 
       
   Blinker.delay(1000);//延时函数
/*------------------------oled显示-----------*/
    u8g2.setFont(u8g2_font_unifont_t_chinese2);  // use chinese2 for all the glyphs of "你好世界"
    u8g2.setFontDirection(0);
    u8g2.clearBuffer();
    u8g2.setCursor(0, 15);
    u8g2.print("temp:",temp_read);
    u8g2.sendBuffer();
    delay(2000);
//    u8g2.setCursor(0, 15);
//    u8g2.print("humi:",humi_read); 
//    u8g2.setCursor(0, 40);
//    u8g2.print("我有一个美丽的");   // Chinese "Hello World" 
    u8g2.sendBuffer();
    delay(2000);
   
}



/*
 * sg90舵机:
 5v--vv   信号线-----D2

温湿度:
  D6----DA

光照:
  D4

led:
  D3
oled :
  D7 (SCL) 和D8 SDA)
*/

手机界面的设置,温湿度的上传

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值