使用Blinker APP+NodeMCU控制多路接口

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

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