Arduino篇(一)esp8266实现温控和语音控制风扇

一、温湿度控制风扇

1、功能说明
通过改变外界温湿度,由于条件限制,采用口哈气的方法。传感器接收数据,当测量的湿度(h)大于40.00%,温度大于30度时,电机正转,转速200,此时绿灯亮;当测量湿度低于这个数值时,电机反转,转速125,此时红灯亮。
2、实验结果图
在这里插入图片描述
3、程序

#define BLINKER_WIFI
//#define BLINKER_WITHOUT_SSL  //blinker默认使用加密方式进行远程通信,但通信加密会消耗大量的RAM,如果您对通信安全性无要求,
               //可以添加宏BLINKER_WITHOUT_SSL用以获得更多可用RAM,BLINKER_WITHOUT_SSL目前仅可用于ESP8266,其他设备的RAM足以进行加密通信


#include <Blinker.h>  
#include <DHT.h>


char auth[] = "90173a01b9ac";
char ssid[] = "xiaoju";
char pswd[] = "123123123";



// 新建组件对象
BlinkerButton Button1("btn-lfg");//组件对象,要和APP组件中的“数据键名”一致

///读取DHTXX传感器相关定义和变量//
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");

#define DHTPIN D7   //定义单总线协议传输的数据引脚

//传感器类型选择
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

float humi_read = 0, temp_read = 0;

// 心跳包函数 用于数据同步、状态查询。
void heartbeat()
{
    //将设备端采集的温湿度数据,通过心跳包同步数据的方式,显示到APP上
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);//APP中的Monitor控件打印的信息
    if (state=="on") 
    {
        digitalWrite(LED_BUILTIN, LOW);//打开LED灯
        digitalWrite(D2, LOW);//打开LED灯
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
        digitalWrite(LED_BUILTIN, HIGH);//关闭LED灯
        digitalWrite(D2, HIGH);//打开LED灯
        // 反馈开关状态
        Button1.print("off");
    }
}

const int IA=D1;
const int IB=D3;


void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(D2, OUTPUT);
    pinMode(D7,OUTPUT);
    pinMode(IA,OUTPUT);
    pinMode(IB,OUTPUT);
    pinMode(D4,OUTPUT);
    
    digitalWrite(LED_BUILTIN, HIGH);//默认熄灭LED
    digitalWrite(D2, HIGH);
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);//绑定按键回调
    //注册一个心跳包
    Blinker.attachHeartbeat(heartbeat);
    dht.begin();//DTHXX传感器初始化
}

void loop()
{
    Blinker.run();

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

    if (isnan(h) || isnan(t))
    { 
        BLINKER_LOG("Failed to read from DHT sensor!");
    }
    else
    {
        BLINKER_LOG("Humidity: ", h, " %");
        BLINKER_LOG("Temperature: ", t, " *C");
        humi_read = h;
        temp_read = t;
    }

   if (h>40.00||t>30)
   {
      digitalWrite(D2, LOW);    //绿灯亮
      digitalWrite(D4, HIGH);   //红灯灭
      forward();   //执行前进(正转)函数
      delay(2000);
   }
  else
  {
     digitalWrite(D2, HIGH);   //绿灯灭
     digitalWrite(D4, LOW);    //红灯亮
     backward();    //执行后退(反转)函数
     delay(2000); 
    }
    Blinker.delay(2000);
}

void forward()  //前进函数
{
  byte speed=200;
  analogWrite(IA,speed);
  analogWrite(IB,0);  
}


void backward()  //后退函数
{
  byte speed=125;
  analogWrite(IA,0);
  analogWrite(IB,speed);  
}

其中部分代码可以不用参考,因为我还另外做了手机端app控制。
要调用blinker-library-master和DHT-sensor-library-master的库,提前将库在网上下载解压到libraries中,并加载使用。

二、小爱同学控制风扇转动

1、功能说明
小爱同学绑定点灯科技手机应用blinker账号,程序中设定好WIFI名称及密码,连接在线设备,当说出“小爱同学,打开风扇”,电机转动,灯亮;当说出“小爱同学,关掉风扇”,风扇停止转动,灯灭;
2、实验结果图
在这里插入图片描述
3、程序

#define BLINKER_WIFI        //用于指定设备接入方式为WIFI,如果为蓝牙接入 BLINKER_BLE
#define BLINKER_MIOT_LIGHT  //小爱同学支持LED灯控制

#include <Blinker.h>  //调用点灯科技Blinker库


char auth[] = "90173a01b9ac";    //设备密钥
char ssid[] = "xiaoju";            //wifi名称
char pswd[] = "123123123";        //wifi密码





// 新建组件对象
BlinkerButton Button1("btn-abc");//组件对象,要和APP组件中的“数据键名”一致
BlinkerNumber Number1("num-abc");
 
int counter = 0;//计数器
 
// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);//APP中的Monitor控件打印的信息
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));//控制LED灯亮灭,低电平亮,高电平灭
}
 
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;//未绑定的组件被触发,就会进行计数
    Number1.print(counter);
}

//小爱电源类回调,例如:开灯/关灯
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);
 
    if (state == BLINKER_CMD_ON) {
       digitalWrite(D0, LOW);//电机风扇转动
       digitalWrite(D1, HIGH);
       digitalWrite(D2, LOW);//风扇转动时绿灯亮
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {
        
       digitalWrite(D0, HIGH);//电机风扇停止转动
       digitalWrite(D1, HIGH);
       digitalWrite(D2, HIGH);//风扇不转绿灯灭
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}
void setup()
{
    // 初始化串口
    Serial.begin(115200);    
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
 
    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);//设置引脚为输出模式
    pinMode(D2, OUTPUT);
    pinMode(D1, OUTPUT);
    pinMode(D0, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);//默认打开LED
 
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);//连接WiFi和设备上线
    Blinker.attachData(dataRead);//如果没有被绑定的组件被触发就执行这个回调
    Button1.attach(button1_callback);//绑定按键
 
    //小爱同学注册回调
    BlinkerMIOT.attachPowerState(miotPowerState);//注册小爱电源回调
    //BlinkerMIOT.attachColor(miotColor);//注册小爱颜色回调
    //BlinkerMIOT.attachBrightness(miotBright);//注册小爱亮度回调
    //BlinkerMIOT.attachColorTemperature(miotColoTemp);//注册小爱色温回调
}
 
void loop()
{
    Blinker.run();
}
  • 10
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值