附git地址:https://github.com/YaronWong/ESP8266RemoteControl
三個週末,學習了下ESP8266 基礎使用,做了個小玩具
實現手機端控制電子大門的開關,再也不用擔心沒帶鑰匙進不去大門了 (掩面)
使用場景:電子門支援紅外遙控器,有時忘記遙控或門禁卡,只能呼叫同事開門,遂想把遙控開關放到手機裡面
看不清可以右鍵存下來看大圖
硬體:ESP8266 主機板,控制繼電器,繼電器連線紅外遙控器
前端:Flutter 搭的Demo (前後用了半天,頁面太粗)
後端:介面使用 FastAPI +Python ,資料庫:MySql
ESP8266 主要功能在door.ino
檔案
setup() 主要做 連線wifi初始化
loop() 函數迴圈請求伺服器,查詢最新一條命令,如果命令狀態為1,表述需要執行,按照命令執行,執行完畢,更新資料狀態為0,
執行命令依賴欄位ACTION_NAME, 如A 則執行A 命令,A命令對應設定 A引腳低電平,等待200毫秒後,重置高電平
命令ABCD 和引腳的對應關係參見 ,
const uint8_t PORT_A = D1; // 對應引腳
const uint8_t PORT_B = D2; //
const uint8_t PORT_C = D6; //
const uint8_t PORT_D = D7; //`
伺服器端,使用FastApi 搭建三個介面,使用Docker部署
資料庫使用MySql,資料庫地址和引數在請 DbConfig.py檔案設定
以上介紹完畢,如果你還想動手試試,參照一下步驟
如果要想將此教學跑起來,需要一些預備知識:
瞭解ESP8266 開發環境搭建,基礎的開發和上傳步驟
需要修改引數,調整wifi資訊,伺服器地址
在此推薦太極創客 的基礎教學,我看教學2個週末完成Esp部分。
瞭解Docker基礎,參照教學可以執行範例
需要設定MySql地址和伺服器地址
Docker教學參見B站教學
AndroidStudio使用,可以執行Flutter專案,也可以下載打包好的專案
專案原始碼包含使用者端原始碼,我執行過Android,未測試IOS,程式碼很簡單,瞭解Dart基礎語法就可以修改
我是使用ESP8266控制遙控器,需要對遙控器改造
將 遙控器 ABCD 開關分別使用電烙鐵 ,焊接處四條引線,後續接入 繼電器
其中,負極接地是通用一根,參考圖:
如果接其他控制器,請參照類似方式,其實就是使用繼電器將原本開關短路
esp8266端程式碼在muc目錄,door.ino
這裡我參考的太極創客教學,物聯網硬體開發0基礎,學了兩個週末,十分推薦,表示感謝
再次貼一下地址ESP8266開發環境搭建教學地址
準備好環境,跑一下範例中的Blink程式碼,正常執行就表述環境搭建成功
在ESP8266 可以執行Demo後,可以匯入door.ino
檔案,修改設定
注意需要修改的位置:
wifi賬號密碼
const char *ssid = "your_wifi_name"; // 需要連線到的WiFi名
const char *password = "88888888"; // 連線的WiFi密碼
伺服器地址和埠
const char *host = "101.xx.xxx.xxx";
const int httpPort = 8000;
補充1:
第一次解除物聯硬體開發,C++現學現賣,寫起來很慢,也不規範,
另外就是ESP8266的網路庫,我開始想使用HTTPClient庫,網路請求回來一直重啟,查資料說可能是電壓不穩,多次嘗試無法修復,改用了WiFiClient庫,
WiFiClient庫寫起來,需要拼接header和body,第一次差點崩潰,不知道哪裡缺少個空格或者回車,後來想到一個辦法
先把伺服器端搭起來,使用FastAPI的 測試介面進行測試,使用Charles抓包,Charles可以明顯的看出Header和body格式,方便拼接。
也可能是我使用不熟,有更好些GET和POST的方案,有的話歡迎告知,
補充2
編寫過程,開始使用Arduino,不支援連提示和格式化,對於用IDEA快捷鍵的人著實不習慣,後來設定了VS環境
使用麵包線用繼電器將ESP8266和紅外開關如圖連線
注意ESP8266開發期間使用USB供電,輸出3.3V給繼電器供電,繼電器接收到ESP8266的低電平會將兩個觸電短路,達到開關閉合的效果
將繼電器負極並聯,四路輸出如圖連線開關四個開關,注意連線是常閉的兩個介面,不確定哪兩個常閉就用萬能表測試下
注:連線完畢之後,可以使用door.ino程式碼進行測試,看是否可以實現繼電器的控制,如果控制正確,再使用網路請求
伺服器端程式碼可以直接Docker部署到伺服器,也可以本地部署,區域網測試
伺服器端程式碼目錄在 services目錄
注意需要修改的地方:
MySql 地址和 埠,
ipname = "101.xxx.xxx.xxx"
duankou = 3306
DB_NAME = "db_name"
userName = "userName"
pwd = "pwd"
資料庫初始化檔案:nasdaq.sql
FastAPI本地部署:
專案services目錄匯入到Pycharm,直接執行,
FastAPI伺服器端部署
使用者端採用Flutter方案,目前就1個介面請求,我不想些兩端程式碼(懶-_-!!)
設定好AndroidStudio的Flutter開發環境,直接匯入就可以,設定教學可以參見搭建Flutter開發環境
需要修改對應的伺服器地址:post('http://101.xxx.xxx.xxx:8000/addnasdaq',
專案宣告:此專案是學習練手專案,僅用於個人學習,
剛接觸物聯網硬體,專案中難免有不規範的地方,僅供學習,歡迎大家貢獻程式碼
目前已經實現的功能
TODO