NodeMCU-ESP8266开发(VSCODE+PlatformIO+Arduino框架):第3篇--Blinker_MIOT_LIGHT(点灯科技手机APP控制+米家小爱同学控制)

首先完成开发环境搭建:https://blog.csdn.net/felix_tao/article/details/113092886

其次完成Blinker_Hello_WiFi(点灯科技-手机APP控制例程):https://blog.csdn.net/felix_tao/article/details/113359707

 

第一步:复制一份Blinker_Hello_WiFi工程,并重命名为Blinker_MIOT_LIGHT。

第二步:打开VSCODE->文件->将文件夹添加到工作区->选择工程文件夹Blinker_MIOT_LIGHT->添加到VSCODE中。

第三步:复制以下代码到VSCODE中的src->main.cpp里面。

/* *****************************************************************  
 * 程序功能:
 * 1.使用开发板:nodemcu-ESP8266(模块ESP-12E)
 * 2.程序功能:程序功能:使用Blinker 手机APP添加设备并绑定,通过APP远程控制开发板上的灯的亮灭、还有小爱同学控制开发板上的灯的亮灭
 * 3.例程文档:https://www.diandeng.tech/doc/xiaoai
 * 
 小爱支持的语音指令:
  1.灯
  打开/关闭{门口}的{灯}
  把{卧室}的{灯}调为{红色}
  颜色范围为0-16777215(0xFFFFFF)
  把{卧室}的{灯}的{亮度调高一点}
  亮度范围为1-100
  把{门口}的{灯}的{色温}调到{1400}
  色温范围为1000-10000
  把{卧室}的{灯}调为{月光模式}
  查询{卧室}的{灯}的状态
  2.插座
  打开/关闭{厨房}的{插座}
  {客厅}的{插座}是否打开
  3.传感器
  {设备名}室内{温度}/{湿度}/{PM2.5}/{空气质量}/{二氧化碳含量}
 * *****************************************************************/

//#define LED_BUILTIN 2   //ESP-12E模块自身的LED,对应GPIO2,低电平亮
//#define LED_BUILTIN 16  //nodemcu-esp8266开发板扩展的LED,对应GPIO16,低电平亮

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

#include <Blinker.h>         //使用第三方库

char auth[] = "aabfdfc3b167";//Blinker APP中获取到的Secret Key(密钥),小爱同学接入,需要选择阿里云broker,点灯broker暂不支持语音控制
char ssid[] = "Xiaomi_123";  //wifi名称
char pswd[] = "felix1234";   //wifi密码

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

int counter = 0;//计数器
uint8_t colorR, colorG, colorB, colorW;

// 按下按键即会执行该函数
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);
}

//得到当前的颜色值
uint32_t getColor()
{
    uint32_t color = colorR << 16 | colorG << 8 | colorB;

    return color;
}

//小爱电源类回调,例如:开灯/关灯
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
       digitalWrite(LED_BUILTIN, LOW);//低电平打开LED
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {
        
        digitalWrite(LED_BUILTIN, HIGH);//高电平关闭LED
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}

//小爱设置颜色回调,例如:红色/绿色/蓝色
void miotColor(int32_t color)
{
    BLINKER_LOG("need set color: ", color);

    colorR = color >> 16 & 0xFF;
    colorG = color >>  8 & 0xFF;
    colorB = color       & 0xFF;

    BLINKER_LOG("colorR: ", colorR, ", colorG: ", colorG, ", colorB: ", colorB);

    BlinkerMIOT.color(color);
    BlinkerMIOT.print();
}

//小爱调亮度回调,例如:调亮一些
void miotBright(const String & bright)
{
    BLINKER_LOG("need set brightness: ", bright);

    colorW = bright.toInt();

    BLINKER_LOG("now set brightness: ", colorW);

    BlinkerMIOT.brightness(colorW);
    BlinkerMIOT.print();
}

//小爱调色温回调,例如:色温调到1400
void miotColoTemp(int32_t colorTemp)
{
    BLINKER_LOG("need set colorTemperature: ", colorTemp);

    BlinkerMIOT.colorTemp(colorTemp);
    BlinkerMIOT.print();
}

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

    // 初始化有LED的IO
    pinMode(LED_BUILTIN, 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();
}

第四步:在app中添加设备,获取Secret Key。

1)下载APP并进行安装,打开网址https://www.diandeng.tech/doc/getting-start-8266,找到“下载并安装blinker APP“,根据不同的手机平台,下载对应的APP并进行安装。

2)进入App,点击右上角的“+”号,然后选择 添加设备。

3)点击选择Arduino(独立设备)-> WiFi接入。

4)选择要接入的服务商(阿里云、点灯科技、腾讯云、OneNet),例如选择”点灯科技“,如果要接入小爱同学,则要选择”阿里云“。

5)复制申请到的Secret Key到代码中要填写密钥的一栏中。

第五步:修改以下代码。

修改密钥、wifi名称、wifi密码为自己的。

注意:小爱同学接入,需要选择阿里云broker,点灯broker暂不支持语音控制。

char auth[] = "Your Device Secret Key";//Blinker APP中获取到的Secret Key(密钥)
char ssid[] = "Your WiFi network SSID or name";//wifi名称
char pswd[] = "Your WiFi network WPA password or WEP key";//wifi密码

第六步:修改完后,进行编译、下载,编译过程中发现有“黄色警告”,不用理会,最后编译是“SUCCESS”就OK。

下载成功后,可以看到开发板上的LED亮了起来,打开VSCODE的串口监视器可以看到打印一些信息,当看到“MQTT Connected!”则证明连接wifi是成功的,当看到"state":"online"则证明设备是在线的。

VSCODE串口监视器打印的信息:
......
[32881] MQTT Connected! //连接wifi成功
[32881] Freeheap: 39456
[48020] Got: {"deviceType":"DiyArduino","data":{"get":"state"},"fromDevice":"eeb71ff85f1d11eb81be5254","toDevice":"C133A71AZPR087CQTZ5FFRXR"}
[48022] data: {"get":"state"}
[48024] fromDevice: eeb71ff85f1d11eb81be5254
[48028] Authority uuid
[48051] available: 1
[48051] checkAvail: 1
[48051] parse data: {"get":"state"}
[48051] defined BLINKER_ARDUINOJSON
[48052] autoManager begin: 0 0
[48053] autoFormatData key: state, json: "state":"online" //设备在线

第七步:使用手机APP进行远程控制开发板中的LED灯。

1)打开”点灯-blinker”APP。

2)在设备列表页,点击设备图标,例如我的设备是:“房间1号”,点击后进入设备控制面板。

3)点击“点我开关灯”,则看到开发板上的LED灯会进行亮和灭的切换。

4)由于“点我计数”在代码未进行绑定,所以会触发dataRead()函数。

第八步:使用米家APP中的小爱同学进行语音控制开发板中的LED灯。

1)下载米家APP并打开。通过 我的>其他平台设备>点击添加>点灯科技>绑定账号 ,绑定blinker账号。
2)绑定成功后,支持小爱控制的blinker设备会出现在 我的>其他平台设备>点灯科技 设备列表中。
3)如果设备列表中没有设备,则需要点击“同步设备”。
4)返回到米家APP首页,在首页有一个“语音图标”,点击“语音图标”,说:“关闭房间一号的灯”,则会看到开发板上的LE灯关闭,接着说“打开房间一号的灯”,则会看到LED灯打开。

注意事项:

1)如果绑定blinker账号后,点灯科技列表中没有设备,可能是您设备中没有烧写小爱支持程序,或者设备没有成功上线。
2)绑定blinker账号后,通过手机上的小爱同学也可以控制设备。
3)blinker App中对设备进行修改或新增后,可在米家App中,通过 我的>其他平台设备>点灯科技>同步设备 更新设备信息。

完整的工程文件:https://download.csdn.net/download/felix_tao/14975837

参考文档:

点灯科技:https://www.diandeng.tech/doc/xiaoai

参考例程:

点灯科技blinker库:blinker-library-master\examples\Blinker_MIOT\MIOT_LIGHT

 

猜你喜欢

转载自blog.csdn.net/felix_tao/article/details/113467782