一、温湿度控制风扇
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();
}