banner
bladedragon

bladedragon

搭建一個關燈神器

image

自從租房之後,生活環境發生了很大的變化。其實大部分的變化我尚且還算滿意,但每當晚上躺在床上玩手機的時候,當困意襲來時,心裡總是非常鬱悶:我在這邊,燈的開關在床的那邊。沒辦法,只得再度下床關燈,再摸黑爬上床 —— 此時睡意早已消失(大哭

於是,我想到了關燈神器 —— 遠程操控開關關燈。


方案設計#

因為只是想做一個解放雙手的小玩具,自然沒有打算做得非常複雜。鑑於家裡的開關設計(如下圖),只需要一個可以通電左右搖擺的舵機即可,給予一定的電信號,就物理控制開關上下撥動

image

方案很簡單,只需要一塊單片機和一個舵機就可以,考慮到撥動開關所需的強度,如果開關很硬可以考慮提供額外的電源供電來保持舵機輸出功率。好在家裡的開關還算聽話(勉強剛剛好,鬼知道我調整了多少次角度和高度),這次就不額外添加配件了。

參考 B 站的諸多 "關燈神器"視頻,這裡單片機選用了 esp8266,類似下圖

image

舵機則是使用了sg90

image

總成本不到 20 元...

(Ps: 網上淘寶現成的開關神器換個馬甲,多裝個模塊就能賣百來塊... 可見其中的利潤空間,咱們理工男可不能被這種騙了錢去~)

剩下就是控制方案

常見的必然是手機 app 控制,這裡必須借助第三方提供,自己寫 app 也不是不可以,主要是不想徒增學習成本(說白了還是懶😂),連接方法有藍牙、WiFi,這裡可以看自己的開發板需求。

具體實現#

既然搞定了方案,接下來進行實踐環節!

硬件實現#

硬件方面很簡單,注意看賣家給的引腳圖不要插錯即可。

image

image

注意觀察,如果發現線序不對,可能需要自己拆下舵機的線材固定器更改線序。運氣很好,我買的不需要,就直接插上連 PC 就行了

軟件實現#

這裡需要用到軟件和安裝包如下

image

  1. 8266 開發板的配置包
  2. 開發板開發軟件
  3. blink 電燈科技第三方應用的適配庫文件
  4. COM 串口驅動

安裝 arduino#

首先安裝 arduino,直接無腦 next 即可

安裝完成後打開 arduino,界面如圖:

image

導入 ESP8266 配置包#

首先打開 Arduino IDE 菜單 > 文件 > 首選項,在 附加開發板管理器網址 輸入框中,填入以下網址:https://www.arduino.cn/package_esp8266com_index.json

image

然後點擊文件夾中的配置包:

導入配置。

安裝三方庫文件#

image

添加庫中添加blinker-library-0.3.80210803.zip

配置開發板#

接下來新建文件 -> 保存一下 -> 如下圖配置開發板信息

image

如果沒有8266開發選項,如下圖,搜索8266,安裝上圖對應module

image

接下來就是編寫代碼,這邊已經提供好了一個模板

#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT

#include <Blinker.h>
#include <Servo.h>

Servo myservo;//定義舵機

char auth[] = "xxxxxxxx";  //點燈Key
char ssid[] = "SELF-WIFI";      //wifi名稱
char pswd[] = "password";     //wifi密碼

// 新建組件對象,注意這裡的名稱要和電燈科技app裡保持一致
BlinkerButton Button1("test");


int counter = 0;

//注意如果接入小愛同學,其監聽的就是這個電源事件
void miotPowerState(const String & state)//電源類操作
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
      
        myservo.write(150);//收到“on”的指令後舵機旋轉150度
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();//反饋狀態
        delay(1000);//延時1秒
        myservo.write(90);//舵機歸零,回到垂直狀態
         
        
    }
    else if (state == BLINKER_CMD_OFF) {
      
         myservo.write(30);            //舵機偏轉30°
         BlinkerMIOT.powerState("off");
         BlinkerMIOT.print();
         delay(1000);
         myservo.write(90);
         
      
    }
}

// 按下按鍵即會執行該函數
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    if (state=="on") 
    {
        myservo.write(170);//收到“on”的指令後舵機旋轉150
        delay(1000);//延時
        myservo.write(90);//舵機歸零垂直
         
        
    } else if(state=="press"||state=="tap")
    {
       myservo.write(10);//長按開關按鍵後舵機旋轉10
       delay(1000);//延時
       myservo.write(90);//舵機歸零垂直(90度)
    }
        
}

// 如果未綁定的組件被觸發,則會執行其中內容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
 
}

void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    // 初始化舵機
    myservo.attach(2);//舵機的IO口,nodemcu的D4口
    myservo.write(90);//上電時舵機歸零垂直
  BlinkerMIOT.attachPowerState(miotPowerState);
  
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);

    Button1.attach(button1_callback);
}

void loop() {
    BLINKER_LOG("Blinked running...");
    Blinker.run();
}

接下來,只需要點擊左上角編譯通過就完成了。

如果編譯沒有問題,接下來就需要將程序上傳到開發板上。首先注意下圖端口,經過之前安裝 com 端口驅動,理論上這邊端口可以正常顯示

image

如果不能,查看設備管理器看是否端口正常顯示。

image

安裝 APP#

還記得代碼裡的key嗎?接下來就是下載電燈科技 APP 並申請key

image

一般應用市場都有,如果沒有的話可以去官網下。

註冊設備#

下載並註冊點燈科技賬號之後,在右上角加號 -> 獨立設備 -> 網絡接入

image

一般推薦阿里雲 接入,但是我目前的版本只能接入點燈科技服務,實測無論是控制還是接入小愛同學都沒有影響,這裡就看大家選擇。

image

完成設備註冊後如上圖所示,這時你會獲取一個key,填入代碼中即可。

開發界面#

這裡大家就可以按照代碼中發信指引自己製作開關界面。我這邊在網上找到一份簡單的界面配置文件

{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fad fa-lightbulb-on¨¨mode¨Ê¨t0¨¨開燈¨¨t1¨¨文本2¨¨bg¨Ì¨cols¨Í¨rows¨Í¨key¨¨test¨´x´Ë´y´Ì¨speech¨|÷¨cus¨¨on¨¨lstyle¨Ë¨clr¨¨#076EEF¨}{ßAßBßC¨fad fa-lightbulb¨ßEÉßF¨關燈¨ßHßIßJÌßKÍßLÍßMßN´x´Ë´y´ÑßO|÷ßRËßSßT}{ßA¨deb¨ßEÉßJÉßKÑßLÌßM¨debug¨´x´É´y´¤D}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡ßQ¨打開?name¨¨off¨¨關閉?name¨—÷¨triggers¨|{¨source¨ßa¨source_zh¨¨開關狀態¨¨state¨|ßQßd÷¨state_zh¨|¨打開¨¨關閉¨÷}÷}

將這份文件導入到配置信息即可。(上面的亂碼是真的(汗))

導入後配置如下:

image

接下來就可以自己操控查看配置情況了。

接入小愛同學#

接入小愛同學其實很簡單,就看第三方服務方提不提供支持

米家 -> 接入其他設備 -> 點燈科技 -> 同步配置即可

設備安裝#

這一步在實際操作中反倒是最難的,因為每個人情況不同,按鈕的強度也不一樣,我一開始還是非常擔心舵機的功率可能不足以撥動開關的。實際上確實在嘗試了很多角度之後總是無法成功實現。

曾經嘗試過給舵機扇葉進行延長增大接觸面積,但是這些方案最終沒有一個很好的實現。最後我嘗試回歸起點,通過墊高舵機,使得扇葉和開關產生一定的間隔,這樣在扇葉旋轉的時候,會有一個慣性輔助用力。接著使用紙板和 502 將舵機固定,並用透明膠在外層進行二次輔助固定,最終總算實現了開關的正常撥動(雖然有的時候還是不太靈敏)

最終實現圖如下:

效果#

這裡給出一個鏈接

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。