NodeMCU-ESP8266开发(VSCODE+PlatformIO+Arduino框架):第5篇--Blinker_MIOT_MULTI_OUTLE(点灯科技APP+小爱同学控制插座多个插孔)

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

其次完成Blinker_MIOT_LIGHT(点灯科技手机APP控制+小爱同学控制):https://blog.csdn.net/felix_tao/article/details/113467782

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

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

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

/* *****************************************************************  
 * @author  TaoDream
 * @version V1.0
 * @date    2021.02.09
 * @brief   主程序
 * 程序功能:blinker+小爱同学控制插座多路插孔(利用LED灯模拟)
 * 1.使用开发板:nodemcu-ESP8266(模块ESP-12E)
 * 2.程序功能:使用Blinker 手机APP添加设备并绑定,通过APP远程控制开发板上的灯的亮灭、还有小爱同学控制开发板上的灯的亮灭
 * 4.例程文档:https://www.diandeng.tech/doc/xiaoai
 * 5.程序参考:blinker库例程--blinker-library-master\examples\Blinker_MIOT\MIOT_MULTI_OUTLET
 * *****************************************************************/

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

#define BLINKER_WIFI               //支持wifi
#define BLINKER_MIOT_MULTI_OUTLET  //支持多路插座,最多4个插孔
#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(密钥)
char ssid[] = "Xiaomi_123";   //wifi名称
char pswd[] = "felix1234";    //wifi密码

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

bool oState[5] = { false };
#define OUTLET_ALL   0  //所有插孔
#define OUTLET_NO_1  1  //插座插孔一
#define OUTLET_NO_2  2  //插座插孔二

//控制插座多个插孔(用LED灯模拟调试)
void ctrl_multi_outlet(uint8_t num, uint8_t io_level)
{
    switch (num)
        {
            case 0:  //所有插孔
                digitalWrite(LED_BUILTIN, io_level);//控制LED灯
                digitalWrite(LED_BUILTIN_AUX, io_level);//控制LED灯
                break;
            case 1:  //插座插孔一
                digitalWrite(LED_BUILTIN, io_level);//控制LED灯
                break;
            case 2:  //插座插孔二
                digitalWrite(LED_BUILTIN_AUX, io_level);//控制LED灯
                break;
            default:
                break;
        }
}

//小爱电源类回调,例如:“打开1号插座”、“打开1号插座插孔一”、“打开1号插座插孔二”
void miotPowerState(const String & state, uint8_t num)
{
    BLINKER_LOG("need set outlet: ", num, ", power state: ", state);

    if (state == BLINKER_CMD_ON) 
    {
        ctrl_multi_outlet(num, LOW);//打开LED灯,num表示是多少路
        BlinkerMIOT.powerState("on", num);
        BlinkerMIOT.print();

        oState[num] = true;
    }
    else if (state == BLINKER_CMD_OFF) 
    {
        ctrl_multi_outlet(num, HIGH);//关闭LED灯,num表示是多少路

        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();

        oState[num] = false;

        if (num == 0)
        {
            for (uint8_t o_num = 0; o_num < 5; o_num++)
            {
                oState[o_num] = false;
            }
        }
    }
}

// 按下按键即会执行该函数--总开关,在APP控制
void button_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);//APP中的Monitor控件打印的信息
    if (state=="on") 
    {
        ctrl_multi_outlet(OUTLET_ALL, LOW);//打开LED灯--所有
        // 反馈开关状态
        Button.print("on");
    } else if(state=="off")
    {
        ctrl_multi_outlet(OUTLET_ALL, HIGH);//关闭LED灯--所有
        // 反馈开关状态
        Button.print("off");
    }
}

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

// 按下按键即会执行该函数--第2路开关,在APP控制
void button2_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);//APP中的Monitor控件打印的信息
    if (state=="on") 
    {
        ctrl_multi_outlet(OUTLET_NO_2, LOW);//打开LED灯--第2路
        // 反馈开关状态
        Button2.print("on");
    } else if(state=="off")
    {
        ctrl_multi_outlet(OUTLET_NO_2, HIGH);//关闭LED灯--第2路
        // 反馈开关状态
        Button2.print("off");
    }
}

void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    
    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(LED_BUILTIN_AUX, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);//默认点亮LED--第1路
    digitalWrite(LED_BUILTIN_AUX, LOW);//默认点亮LED--第2路

    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Button.attach(button_callback);//绑定按键回调
    Button1.attach(button1_callback);//绑定按键回调
    Button2.attach(button2_callback);//绑定按键回调

    //小爱同学注册回调
    BlinkerMIOT.attachPowerState(miotPowerState);//注册小爱电源回调
}

void loop() 
{
    Blinker.run();
}

第四步:修改以下代码。

修改密钥、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号”->将原来LED灯的图标改为插座图标,设备名由原来“房间1号”改为“1号插座”。

3)返回设备首页,进入控件编辑界面,添加以下控件。

4)点击“插座插孔一”按键,可以看到开发板上面的LED灯亮和灭进行切换,点击“插座插孔二”按键,可以看到开发板下面的LED灯亮和灭进行切换,点击“总开关”按键,可以看到开发板上两个LED灯亮和灭进行切换。

第七步:使用小爱同学APP语音控制。

1)使用米家APP同步设备。米爱APP->我的->其它平台设备->点灯科技->同步设备。

2)同步设备后,可以看到原来是LED图标,变为插座图标,共4个插孔。

3)打开小爱同学手机APP,使用与米家APP同一个帐号登陆,在“智能家居”一栏中可以看到blinker绑定的设备“1号插座”。

4)点击下方中间的“语音图标”,说:“关闭1号插座插孔一”,则会看到开发板上面的LE灯关闭,接着说“关闭1号插座插孔二”,则会看到开发板下面的LED灯关闭。接着说“打开1号插座”,可以看到开发板上两个LED灯同时亮了起来。

第八步:使用小爱音箱语音控制。

1)对着小爱音箱说:“关闭1号插座插孔一”、“关闭1号插座插孔二”、“打开1号插座插孔一”、“打开1号插座插孔二”、“关闭1号插座”、“打开1号插座”。

2)可以看到开发板上的LED灯控制成功。

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

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘梦TaoDream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值