将ESP8266开发板接入blinker,并使用小爱同学控制

将ESP8266开发板接入blinker,并使用小爱同学控制

AMENG
2021-03-25 / 0 评论 / 0 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年09月24日,已超过938天没有更新,若内容或图片失效,请留言反馈。

这还是当初在天喻上班时接触到了esp8266,于是买了块开发板打算自己玩试试,买回来后测试了下例程就放下了一直没动,主要是这套东西里面涉及的东西有点多,好多我还不会,比如APP的编写,服务器的搭建,还有开发大多是用的官方的SDK。最近无意在一个QQ群里看到Blinker支持小爱同学控制,就打算接入试试。

百度搜点灯科技进入官网,https://www.diandeng.tech/,安装ArduinoIDE和下载Blinker的库文件

注册手机APP,获取密钥(注意:经测试发现使用点灯的服务器无法使用小爱同学而使用阿里云的服务器就可以,具体原因不清楚)

将密钥填入代码里面就可以了。

[cpp]

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//小爱同学灯
//#define BLINKER_MIOT_SENSOR//小爱同学传感器
//#define BLINKER_MIOT_OUTLET//单孔插座
//#define BLINKER_MIOT_MULTI_OUTLET//多孔插座

#include <Blinker.h>
#include <rgb_led.h>
#include <dht11.h>
char auth[] = "*******";   //密钥
char ssid[] = "";                 //WIFI账号
char pswd[] = "";              //WIFI密码

// 新建组件对象
BlinkerButton LED("led");
BlinkerNumber TEMP("temp");
BlinkerNumber HUMI("humi");
BlinkerRGB RGB("rgb");

dht11 DHT11;
#define DHT11PIN 5 //DHT11数据引脚
#define SmartconfigPin 14 //一键配网引脚

#define NUM_LEDS 1 //rgb灯的数量

ChainableLED leds(15, 4, NUM_LEDS); //rgb灯引脚设置scl sda

//一键配网函数
void smartConfig()
{
if(digitalRead(SmartconfigPin) == LOW){
digitalWrite(LED_BUILTIN, LOW);
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;
}
}
Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());//运行blinker
digitalWrite(LED_BUILTIN, HIGH);
}
}

//小爱同学控制LED函数
void miotQueryLED(const String & state)
{
BLINKER_LOG("need set power state: ", state);

if (state == BLINKER_CMD_ON) {
digitalWrite(LED_BUILTIN, LOW);
BlinkerMIOT.powerState("on");
LED.print("on");
LED.color("#9D9D9D");
BlinkerMIOT.print();
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_BUILTIN, HIGH);
BlinkerMIOT.powerState("off");
LED.print("off");
LED.color("#1D70D1");
BlinkerMIOT.print();
}
}

//小爱同学查询温湿度
void miotQuerySensor(int32_t queryCode)
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
//同时查询传感器数据
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.temp((int32_t)DHT11.temperature);
BlinkerMIOT.humi((int32_t)DHT11.humidity);
BlinkerMIOT.print();
break;
//查询湿度
case BLINKER_CMD_QUERY_HUMI_NUMBER :
BLINKER_LOG("MIOT Query HUMI");
BlinkerMIOT.humi((int32_t)DHT11.humidity);
BlinkerMIOT.print();
break;
//查询温度
case BLINKER_CMD_QUERY_TEMP_NUMBER :
BLINKER_LOG("MIOT Query TEMP");
BlinkerMIOT.temp((int32_t)DHT11.temperature);
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.temp((int32_t)DHT11.temperature);
BlinkerMIOT.humi((int32_t)DHT11.humidity);
BlinkerMIOT.print();
break;
}
}

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);

if (state == "on") {
digitalWrite(LED_BUILTIN, LOW);
LED.print("on");
LED.color("#9D9D9D");
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_BUILTIN, HIGH);
LED.print("off");
LED.color("#1D70D1");
}
}

//rgb灯控制函数
void colour1_callback(uint8_t r_value, uint8_t g_value,uint8_t b_value, uint8_t bright_value)
{
uint8_t r,g,b;

r = ((float) r_value/255)*bright_value;
g = ((float) g_value/255)*bright_value;
b = ((float) b_value/255)*bright_value;

BLINKER_LOG("R value: ", r);
BLINKER_LOG("G value: ", g);
BLINKER_LOG("B value: ", b);
BLINKER_LOG("Rrightness value: ", bright_value);

for(int i = 0; i < NUM_LEDS; i++){
leds.setColorRGB(i, r, g, b);
}
}

//心跳包发送温度和湿度
void heartbeat()
{
TEMP.print(DHT11.temperature); //发送温度
HUMI.print(DHT11.humidity); //发送湿度
}

//起始函数
void setup()
{
//初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();

//初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
LED.color("#1D70D1");//默认灯关闭

pinMode(SmartconfigPin, INPUT); //key2引脚初始化

leds.init(); //初始化RGB灯

//判断是否进入配网模式
smartConfig();

//初始化blinker
Blinker.begin(auth, ssid, pswd);

//心跳函数
Blinker.attachHeartbeat(heartbeat);

//按键控制回调函数
LED.attach(button1_callback);

//rgb灯控制回调函数
RGB.attach(colour1_callback);

//小爱同学务必在回调函数中反馈该控制状态
BlinkerMIOT.attachPowerState(miotQueryLED);//LED灯
//BlinkerMIOT.attachQuery(miotQuerySensor); //温湿度

}

void loop()
{
DHT11.read(DHT11PIN);//获取温度和湿度
Blinker.run();
}

[/cpp]

要想小爱同学控制就得在代码里面加小爱同学控制的部分,小爱同学支持四种设备,灯,传感器,单孔插座,多孔插座(最多四孔)

#define BLINKER_MIOT_LIGHT//小爱同学灯
//#define BLINKER_MIOT_SENSOR//小爱同学传感器
//#define BLINKER_MIOT_OUTLET//单孔插座
//#define BLINKER_MIOT_MULTI_OUTLET//多孔插座

在米家其他平台里添加点灯科技,就自动同步设备了,接下来就可以用小爱同学控制了

 

0

评论 (0)

取消