我用50行代碼居然「讓天貓精靈把客廳燈開了」

Author:AXYZdong 自動化專業 工科男
有一點思考,有一點想法,有一點理性!
定個小小目標,努力成爲習慣!在最美的年華遇見更好的自己!
CSDN@AXYZdong,CSDN首發,AXYZdong原創
唯一博客更新的地址爲: 👉 AXYZdong的博客 👈

ESP8266(NodeMCU) + Blinker + 天貓精靈


【ESP8266 + Blinker +天貓精靈】讓天貓精靈開燈


在這裏插入圖片描述


文章基於 點燈|Blinker (點燈科技) 開源社區整理,並親身實踐,歡迎交流學習。

  • Blinker官網點我跳轉
  • 天貓精靈接入流程點我跳轉

  • 1. 開發環境準備

    1.1 Arduino開發環境

    備註:安裝1.8.7或更新版本,這個軟件是免費使用的,直接在官網下載安裝最新版本即可。


    1.2 安裝ESP8266的擴展

    • 如果你的電腦能夠科學上網的話,使用這個方法很簡便,在首選項中輸入一個網址,然後添加庫即可。否則參考方法二。
    1. 啓動Arduino並打開“首選項”窗口。

    2. 輸入 https://arduino.esp8266.com/stable/package_esp8266com_index.json

    在這裏插入圖片描述
    1. 從工具 \to 主板菜單打開Boards Manager並安裝esp8266平臺(安裝後不要忘記從工具\to主板菜單中選擇ESP8266主板)。

    在這裏插入圖片描述

    方法二:下載打包的esp8266安裝包,直接運行並解壓即可。

    鏈接:https://pan.baidu.com/s/1Eu0qhlP5xu6GgQMdwflfAw 提取碼:3x1f

    備註:如果安裝過其他版本的esp8266sdk,請先刪除,再使用本安裝包,解壓完成後,再打開Arduino IDE,即可在 菜單欄 \to 工具 \to 開發板 中找到你使用的esp8266開發板


    1.3 安裝 blinker Arduino庫

    官網安裝 :點此下載

    在這裏插入圖片描述

    • Windows:將下載好的 blinker庫 解壓到 我的電腦 \to 文檔 \to Arduino \to libraries 文件夾中
    • Mac OS:將下載好的 blinker庫 解壓到 文稿 \to Arduino \to libraries 文件夾中

    安裝成功之後重啓Arduino軟件,可以在示例的第三方庫庫中找到。
    在這裏插入圖片描述

    1.4 安裝 blinker APP

    • Android下載:點我下載 或 在android應用商店搜索“blinker”下載安裝
    • IOS下載:在app store中搜索 “blinker” 下載

    2. 配置 App

    2.1 在app中添加設備,獲取Secret Key

    • 下載完 App 後註冊賬號
    • 進入App,點擊右上角的 “+” 號,然後選擇 添加設備
    • 點擊選擇 Arduino \to WiFi接入
    • 選擇要接入的服務商
    • 複製申請到的 Secret Key

    2.2 DIY界面

    • 在設備列表頁,點擊設備圖標,進入設備控制面板
    • 首次進入設備控制面板,會彈出嚮導頁
    • 在嚮導頁點擊 載入示例,即可載入示例組件

    3. Arduino代碼編寫

    打開Arduino IDE,通過 文件 \to 示例 \to Blinker \to AliGenie_OUTLET 打開例程
    在程序中找到如下變量,填入你申請到的 Secret Key(auth) 和要連接的WiFi熱點名 (ssid) 、密碼(pswd),如:

    char auth[] = "abcdefghijkl"; //上一步中在app中獲取到的Secret Key
    char ssid[] = "abcdefg"; //你的WiFi熱點名稱
    char pswd[] = "123456789"; //你的WiFi密碼
    

    例程中宏 LED_BUILTIN 爲開發板廠家定義的連接板載LED的引腳,如果你選擇的開發板沒有定義LED_BUILTIN,可以自行修改爲你要使用的引腳

    NodeMCU(CH340串口)開發板有一個LED,接在 GPIO16 也就是 D0 口
    只需在例程中加個宏定義,並將所有的 LED_BUILTIN 改掉

    #define LED D0
    

    • 完整代碼(親測有用)
    #define BLINKER_PRINT Serial
    #define BLINKER_WIFI
    #define BLINKER_ALIGENIE_OUTLET
    
    #include <Blinker.h>
    
    char auth[] = "abcdefghijkl"; //上一步中在app中獲取到的Secret Key
    char ssid[] = "abcdefg"; //你的WiFi熱點名稱
    char pswd[] = "123456789"; //你的WiFi密碼
    
    bool oState = false;  //天貓精靈插座的狀態
    
    #define LED D0
    
    
    BlinkerButton Button1("btn-abc");  // 新建組件對象
     
    // 按下按鍵即會執行該函數
    void button1_callback(const String & state) 
    {
        BLINKER_LOG("get button state: ", state);  
        digitalWrite(LED, !digitalRead(LED));
        Blinker.vibrate();
    }
    
    //天貓精靈電源的狀態
    void aligeniePowerState(const String & state)
    {
        BLINKER_LOG("need set power state: ", state);
    
        if (state == BLINKER_CMD_ON) {
            digitalWrite(LED, HIGH);
    
            BlinkerAliGenie.powerState("on");
            BlinkerAliGenie.print();
    
            oState = true;
        }
        else if (state == BLINKER_CMD_OFF) {
            digitalWrite(LED, LOW);
    
            BlinkerAliGenie.powerState("off");
            BlinkerAliGenie.print();
    
            oState = false;
        }
    }
    
    //天貓精靈狀態查詢
    void aligenieQuery(int32_t queryCode)
    {
        BLINKER_LOG("AliGenie Query codes: ", queryCode);
    
        switch (queryCode)
        {
            case BLINKER_CMD_QUERY_ALL_NUMBER :
                BLINKER_LOG("AliGenie Query All");
                BlinkerAliGenie.powerState(oState ? "on" : "off");
                BlinkerAliGenie.print();
                break;
            case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
                BLINKER_LOG("AliGenie Query Power State");
                BlinkerAliGenie.powerState(oState ? "on" : "off");
                BlinkerAliGenie.print();
                break;
            default :
                BlinkerAliGenie.powerState(oState ? "on" : "off");
                BlinkerAliGenie.print();
                break;
        }
    }
    
    //數據讀取
    void dataRead(const String & data)
    {
        BLINKER_LOG("Blinker readString: ", data);
    
        Blinker.vibrate();
    
        uint32_t BlinkerTime = millis();
        Blinker.print(BlinkerTime);
        Blinker.print("millis", BlinkerTime);
    }
    
    // 初始化串口,並開啓調試信息
    void setup()         
    {
        Serial.begin(115200);
    
        #if defined(BLINKER_PRINT)
            BLINKER_DEBUG.stream(BLINKER_PRINT);
        #endif
    
        pinMode(LED, OUTPUT);
        digitalWrite(LED, LOW);
    
        Blinker.begin(auth, ssid, pswd);
        Blinker.attachData(dataRead);
    
        BlinkerAliGenie.attachPowerState(aligeniePowerState);
        BlinkerAliGenie.attachQuery(aligenieQuery);
    
        Button1.attach(button1_callback);
    }
    
    void loop()
    {
        Blinker.run();
    }
    

    編譯後上傳就OK了。

    4. 天貓精靈接入流程

    官網鏈接點我進入

    在這裏插入圖片描述

    5. 總結

    雖然這只是一個點燈的小歷程,但是能向外圍擴展的東西很多。

    比如可以用來控制繼電器,從而來控制各種家電,實現智能家居等。

    知道的越多,不知道的也就越多!

    【參考文獻】

    [1]:https://blog.csdn.net/qq_36243942/article/details/104833831
    [2]:https://diandeng.tech/doc/tmallgenie
    [3]:開發環境準備 中的部分圖片來源於 這篇文章


      本次的分享就到這裏


    11

    好書不厭百回讀,熟讀自知其中意。將學習成爲習慣,用知識改變命運,用博客見證成長,用行動證明努力。
    如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
    聽說 👉 點贊 👈 的人運氣不會太差,每一天都會元氣滿滿呦!^ _ ^ ❤️ ❤️ ❤️
    碼字不易,大家的支持就是我堅持下去的動力。點贊後不要忘了👉關注👈我哦!
    更多精彩內容請前往 AXYZdong的博客

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