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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章