ESP8266遠程控制電子門

ESP8266遠程控制電子門

最前面介紹:

這是一個使用ESP8266 聯網控制繼電器,實現手機遠程控制電子門,打開關閉,開關一次的物聯網聯手小項目

附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部署

  • addnasdaq 新建命令,客戶端調用,新增一條命令
  • querylast 查詢最新一條命令,ESP8266查詢是否有命令指定調用
  • updatenasdaq 更新指定命令狀態 ,ESP8266執行完畢命令調用

數據庫使用MySql,數據庫地址和參數在請 DbConfig.py文件配置

以上介紹完畢,如果你還想動手試試,參照一下步驟

前提說明:

​ 如果要想將此教程跑起來,需要一些預備知識:

  1. 瞭解ESP8266 開發環境搭建,基礎的開發和上傳步驟

    需要修改參數,調整wifi信息,服務器地址

    在此推薦太極創客 的基礎教程,我看教程2個週末完成Esp部分。

    物聯網基礎教程ESP8266物聯網教程

  2. 瞭解Docker基礎,參照教程可以運行實例

    需要設置MySql地址和服務器地址

    Docker教程參見B站教程

    FastAPI 部署教程

  3. AndroidStudio使用,可以運行Flutter項目,也可以下載打包好的項目

    項目源碼包含客戶端源碼,我運行過Android,未測試IOS,代碼很簡單,瞭解Dart基礎語法就可以修改

    Flutter教程

如何使用

準備材料:

  • 無線遙控器,支持學習和對拷貝,
  • ESP8266 主板
  • 3.3V四路繼電器
  • 電源,這裏使用3節1.5V 電池替代
  • 工具類,電烙鐵,萬能表,焊錫絲,熱熔槍,
  • 服務器(之前就有),如果使用三方服務,請跳過
  • 耐心
遙控器改造

我是使用ESP8266控制遙控器,需要對遙控器改造

將 遙控器 ABCD 開關分別使用電烙鐵 ,焊接處四條引線,後續接入 繼電器

其中,負極接地是通用一根,參考圖:

如果接其他控制器,請參照類似方式,其實就是使用繼電器將原本開關短路

ESP8266環境搭建

​ 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和紅外開關如圖連接

​ 注意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服務端部署

參見Docker部署FastAPI

客戶端打包

​ 客戶端採用Flutter方案,目前就1個接口請求,我不想些兩端代碼(懶-_-!!)

​ 配置好AndroidStudio的Flutter開發環境,直接導入就可以,配置教程可以參見搭建Flutter開發環境

​ 需要修改對應的服務器地址:post('http://101.xxx.xxx.xxx:8000/addnasdaq',

測試:
  1. 先測試ESP8266連接WIFI是否正常
  2. 測試ESP8266單獨控制繼電器是否正常
  3. 本地部署服務器,使用PostMan接口測試數據庫 增加,查詢是否正常
  4. 測試ESP8266 連接數據是否正常
  5. 如果到此測試正常,標識項目正常運行

項目聲明:此項目是學習練手項目,僅用於個人學習,

剛接觸物聯網硬件,項目中難免有不規範的地方,僅供學習,歡迎大家貢獻代碼

目前已經實現的功能

TODO

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