- 上一期介紹了如何使用語音助手控制多路接口,這一期將爲大家介紹如何使用官方提供的APP控制多路接口。
1、APP的下載地址,以及使用方法可以參考此處,筆者爲大家找了一個講的很詳細的網頁。
2、關於爲什麼筆者一直在強調“控制多路接口”,因爲官方或者其他網站並未給出此類教程,但這也是一項亟待解決的問題。筆者通過實驗,驗證了下述算法的可行性,值得大家借鑑。
一、先列出官方提供的例程,便於大家對照比較。
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "Your Device Secret Key";
char ssid[] = "Your WiFi network SSID or name";
char pswd[] = "Your WiFi network WPA password or WEP key";
BlinkerButton Button1("btn-abc");
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
Blinker.vibrate();
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback);
}
void loop()
{
Blinker.run();
}
二、提前配置好APP內的開關,以及配套的語音功能。
改進後的程序如下:
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "******";
char ssid[] = "******";
char pswd[] = "******";
#define BUTTON_1 "btn-po9"
#define BUTTON_2 "btn-hkc"
#define BUTTON_3 "btn-abc"
BlinkerButton Button1(BUTTON_1); //定義3個按鈕
BlinkerButton Button2(BUTTON_2);
BlinkerButton Button3(BUTTON_3);
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_ON)
{
digitalWrite(LED_BUILTIN, LOW);
Button1.print("on");
}
else if (state == BLINKER_CMD_OFF)
{
digitalWrite(LED_BUILTIN, HIGH);
Button1.print("off");
}
}
void button2_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_ON)
{
digitalWrite(LED_BUILTIN, LOW);
Button2.print("on");
}
else if (state == BLINKER_CMD_OFF)
{
digitalWrite(LED_BUILTIN, HIGH);
Button2.print("off");
}
}
void button3_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
if (state == BLINKER_CMD_BUTTON_TAP)
{
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
Button3.print();
}
else
{
digitalWrite(LED_BUILTIN, HIGH);
Button3.print();
}
}
void setup()
{
Serial.begin(115200);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback); //回調函數
Button2.attach(button2_callback);
Button3.attach(button3_callback);
}
void loop()
{
Blinker.run();
}
以上程序能通過APP控制3路開關接口,理論上能控制無數路開關接口。
由於手頭缺乏實驗器材,筆者測試的時候都是依靠NodeMCU上自帶的LED(位於D2口)。所有例程均能保證運行良好。
詳情請關注億航創客官方抖音賬號:EhangGroup