基於ESP32的智能家居管理系統的設計與實現


基於ESP32的智能家居管理系統的設計與實現

 

 

 

 ESP32的智能家居管理系統訪問鏈接: https://www.cnblogs.com/easyidea/p/13101165.html

一、需求分析

1.1硬件需求

1.1.1 藍牙收發數據

1.1.2 網絡收發數據

1.1.3 傳感器檢測

1.1.4 開關控制

1.1.5 PWM電機控制

1.1.6 舵機控制

1.1.7 OLED顯示

1.1.8 自動控制

1.2 微信小程序需求分析

1.2.1 用戶登錄

1.2.2 設備管理

1.2.3 數據修改

1.2.4 創建定時任務

1.2.5 控制ESP32

1.2.6 接受ESP32的數據

二、總體設計

2.1 總體設計要求

2.1.1 簡單

2.1.2 智能

2.1.3 跨平台

2.1.4 模塊化

2.1.5 可拓展

2.1.6 自適應

2.2 數據交互

2.2.1數據傳輸

2.2.2數據約定

2.2.3 數據安全

2.3 硬件總體設計

2.3.1 引腳分配

2.3.2硬件總體結構設計

2.3.3傳感器

2.3.4 控制器

2.4 軟件總體設計

2.4.1服務器搭建

2.4.2微信小程序設計

2.5 數據庫總體設計

三、數據交互詳細設計

3.1數據約定

3.2數據包裝

3.3 AES加密解密

3.4 BLE發送數據處理

四、硬件詳細設計與實現

4.1 傳感器

4.1.1溫度濕度數據采集

4.1.2氣體數據采集

4.1.3預留傳感器

4.2 控制器

4.2.1電風扇控制

4.2.2舵機控制

4.2.3 OLED顯示器

4.2.4 蜂鳴器

4.2.5 紅外活體檢測

4.3 藍牙收發數據

4.4 Wi-Fi聯網

4.5 MQTT協議收發數據

4.6 ESP32多任務配置

4.6.1中斷

4.6.2 多任務

4.6.3 多核心

五、軟件設計與實現

5.1 數據庫詳細設計與實現

5.1.1數據庫實體設計

5.1.2數據庫ER圖

5.1.3數據庫表設計

5.2 服務器搭建與實現設計與實現

5.2.1 EMQ X服務器軟件搭建

5.2.2 Nginx服務器搭建

5.3 微信小程序設計與實現

5.3.1功能設計與實現

5.3.2界面設計與實現

 

六、成品展示

6.1 ESP32設備硬件展示

6.2 微信小程序展示

 

 

 

基於ESP32的智能家居管理系統的設計與實現

摘要 :ESP32智能家居管理系統由硬件和軟件組成。能夠實現數據采集、紅外遙控、藍牙控制、遠程控制,還能對采集的數據進行處理發出警報。

硬件部分包括樂鑫信息科技股份有限公司推出ESP32主控芯片,傳感器和控制器。傳感器主要有MQ2可燃氣體檢測傳感器、MQ135煙霧檢測傳感器、DHT11溫度濕度檢測傳感器、土壤濕度檢測傳感器、雨水檢測傳感器等組成。控制器有紅外發光二極管、電動風扇、電動舵機、發光二極管、蜂鳴器等組成。

軟件部分包括微信小程序、Tomcat服務器、Nginx服務器、EMQ服務器、MySql數據。微信小程序上位機可以發出指令、接收數據、顯示數據、修改數據、保存數據,用戶通過微信小程序控制ESP32。Tomcat服務器用來處理小程序的業務操作。Nginx用來代理網絡請求。EMQ服務器用來接收轉發MQTT協議數據。Mysql用來儲存ESP32硬件設備的信息和用戶信息數據。

 

 

需求分析

1.1硬件需求

1.1.1 藍牙收發數據

  ESP32將傳感器檢測的數據通過藍牙發送出去,還可以接受藍牙的數據通過數據提取做出相應動作。

1.1.2 網絡收發數據

  ESP32將檢測的數據通過網絡發送出去,還可以接受網絡的數據通過數據提取做出相應動作。

1.1.3 傳感器檢測

(1)溫度濕度檢測

    ESP32每隔一段時間通過傳感器檢測空氣中的溫度和濕度。檢測的數據會通過藍牙或者網絡發送到微信小程序。

(2)氣體檢測

    ESP32每隔一段時間通過傳感器檢測氣體中的可燃氣體或是煙霧。檢測的數據會通過藍牙或者網絡發送到微信小程序。

(3)雨水檢測

    ESP32每隔一段時間通過傳感器檢測是不是有雨水。檢測的數據會通過藍牙或者網絡發送到微信小程序。

(4)土壤濕度檢測

    ESP32 每隔一段時間通過傳感器檢測土壤的濕度數據。檢測的數據會通過藍牙或者網絡發送到微信小程序。

(5)活體檢測

    ESP32通過傳感器檢測周圍是不是有活物,如果有活物做出相應的動作。例如用戶夜晚起來上廁所,那么活體檢測器檢測的哦有活物時,ESP32把燈打開。

1.1.4 開關控制

  開關控制是ESP32的核心功能,因為智能家居管理系統的核心就是通過開關來控制,那么開關能控制的開關越多越好。

1.1.5 PWM電機控制

  PWM是一種脈沖信號,可以通過不同的空占比來控制電機的速度。

1.1.6 舵機控制

  舵機可以用來控制門鎖,舵機根據接受到的pwm脈沖信號旋轉到不同的角度。

1.1.7 OLED顯示

  OLED的作用就是把傳感器檢測的數據顯示出來。

1.1.8 自動控制

  自動控制是當某個傳感器的的值超出正常范圍的時候發出預警,比如說當檢測的可燃氣體濃度過高時觸發蜂鳴器發出警吧。或是當檢測到煙霧是觸發電風扇轉動。

1.2 微信小程序需求分析

  1.2.1 用戶登錄

    由於用戶已經登錄微信那么可以直接獲取用戶的登錄狀態。如果需要用戶的頭像或昵稱等信息那么就需要用戶授權才能獲取。

1.2.2 設備管理

(1)激活設備

  一個用戶可以擁有多台ESP32設備,一台ESP32設備也可以被多人擁有,用戶一旦激活ESP32設備那么它就能獲取設備傳感器數據,控制設備。設備第一次被激活那么該用戶擁有對設備的最高控制權限,該用戶為root(管理員)用戶。如果設備再次被激活那么激活者為person(普通用戶)。

(2)切換設備

  由於用戶可以擁有多台設備那么用戶可以切換不同的設備使用。

(3)設備授權

  設備的root用戶可以對person用戶進行權限分配,root用戶也可以給自己分配權限。person用戶被權限分配之后將不再接受權限之外的數據。

1.2.3 數據修改

  數據修改包括傳感器名稱,開關名稱修改,電機名稱修改,紅外指令修改,觸發條件修改。在數據庫中每個開關、傳感器、電機、遙控器都有自己的ID、名稱、值。觸發條件保存在ESP32設備中通過指令可以修改觸發的條件。

1.2.4 創建定時任務

  定時任務就是可以給一個控制指設置時間,到時自動執行。

1.2.5 控制ESP32

  小程序通過藍牙發送指令給ESP32設備,這些指令在小程序端和硬件端相互約定,通過約定的指令來實現控制的功能。

1.2.6 接受ESP32的數據

  小程序能夠通過藍牙的方式接受ESP32設備發出的數據,也可以通過通過MQTT協議訂閱主題的方式接受ESP32設備發送到EMQ X服務器的數據。

 

 

 總體設計

 

2.1 總體設計要求

2.1.1 簡單

(1)開發方式簡單

  開發方式簡單主要是為了方便后期維護,硬件程序采用Arduino開發大大簡化了開發步驟,使開發人員主要考慮業務邏輯。微信小程序開發也極大的節省了開發流程。

(2)軟件使用簡單

  用戶通過微信小程序控制ESP32設備,微信小程序打開即用,無需安裝任何軟件。

2.1.2 智能

  ESP32可以根據用戶設定的條件來自動做出處理,當傳感器的值大於或小於某個值的時候會自動發出警報,用戶還可以設置定時任務,如同鬧鍾一樣定時執行該任務。

2.1.3 跨平台

  現在的移動端主要是IOS系統和Android系統,用戶的手機無論是IOS系統和Android系統都可以對硬件進行控制。

2.1.4 模塊化

  模塊化是指硬件的各個功能區進行模塊化設計,如果某個模塊壞了不影響其它模塊的正常使用,模塊可容易的拆卸和更換。

2.1.5 可拓展

  可拓展主要是針對硬件的設計如控制器的數量,和模塊化。硬件預留可拓展的接口如果后續需要對硬件進行升級可以很方便的拓展。如果某個模塊壞了可以隨時維護,更換。

2.1.6 自適應

  微信小程序開發需要在不同尺寸的屏幕上都能正常顯示數據,不會出現超出屏幕顯示或是顯示紊亂等情況。

2.2 數據交互

2.2.1數據傳輸

數據傳輸:

 

圖2-1 數據傳輸流程圖

 

  微信小程序和ESP32之間采用藍牙進行數據直接交互,實現藍牙控制、藍牙獲取數據。ESP32也可以把數據發送到EMQ X服務器上,由EMQ X服務器轉發給微信小程序實現遠程數據獲取,微信小程序吧數據發送到EMQ X服務器,由EMQ X服務器轉發給ESP32實現遠程控制。

2.2.2數據約定

  數據約定就是約定一段數據的某些字段代表什么意思,在進行數據傳輸的過程中需要約定數據格式,最方便的一種方式就是json格式但是由於ESP32處理json格式耗費時間占用內存,更重要的原因是在藍牙傳輸數據過程中由於微信小程序只支持藍牙低能耗(Bluetooth Low Energy簡稱BLE)每次傳輸最多20個字符,而且微信小程序不支持修改最大傳輸單元(Maximum Transmission Unit,MTU)那么傳輸的數據長度越短越好。因此需要自己定義數據傳輸的格式。

 

設備ID 時間位 操作碼 地址碼 數據碼 合計 預留 總記
32 13 6 1 16 68 32 100

圖2-2 數據約定圖

 

設備ID:ESP32設備擁有唯一的設備ID,發送指令的時候需要攜帶設備ID,當ESP32設備接受數據時會驗證ID是否相同,如果相同則有權操控設備。如果不同則不做任何處理。

時間位:時間位是格林威治標准時間1970 年1 月1 日的00:00:00.000到現在的毫秒數,加上時間指令的意義在於每次發送的指令不重復,過時作廢。

操作碼:操作碼表示ESP32設備進行什么操作,例如“opensw”的意義是打開開關,那么ESP32會去判斷要執行什么操作。

地址碼:地址碼用來表示對應操作碼的編號,例如“2”代表第二個。

數據碼:數據碼用來存放要操作的數值,例如:設置電機轉速為1024。

為什么數據格式是這樣的?請看下面的數據安全分析。

2.2.3 數據安全

(1)數據驗證

  驗證數據是保證數據安全的一種方式,那么需要在數據中加入驗證的字段,最好的方式就是每次傳輸數據過程中加入設備的ID,因為設備ID是唯一的,當ESP32接受到數據的時候提取數據中的設備ID字段與內存中自帶的字段進行比較,如果相同那么就驗證通過,如果不同驗證不通過。

(2)數據唯一

  經過數據驗證還是達不到數據安全的地步,需要對數據進行進一步的處理。數據的唯一性是保證數據安全的另一種方式,舉個例子:當微信小程序發送控制信息給ESP32設備的時候,如關閉開關指令數據,因為每次的指令都是相同的,如果下次再發送該的指令數據依然可以操作設備,那么這樣的指令如果被竊取,將很容易的控制ESP32設備。解決辦法就是把指令變得唯一,那么只需要在發送的指令當中添加一部分的隨機字符就可以把指令變得唯一。

(2)數據作廢

  經過數據驗證,數據唯一處理之后數據還是指令還是不安全!因為指令即使是唯一的那么如果該指令被竊取再次發出該指令依然可以控制ESP32 設備。要解決這個問題需要讓已經發出的指令作廢,下次不能再使用。解決辦法就是給指令加上時間,每次ESP32接受數據之后驗證接收的時間與上次接收的時間那個大,如果新接收的時間在上次指令之前那么指令作廢,反之驗證通過。

(3)數據加密

  在經過經過數據驗證,數據唯一處理、數據作廢之后可以說數據已經很安全了,但是還不是絕對的安全,因為BLE在傳輸的過程中可能被截取,通過對截取的數據進行分析,很容易得出規律,那么之前的操作都有白費了,數據安全的終極大發就是數據加密,加密后的數據即使被截取也很難被破解,即使被破解由於數據的唯一性,也不能再被使用了,解決辦法就是將數據,經過以上處理之后再進行AES算法加密。待ESP32接收到數據之后通過AES算法解密。這樣處理之后的控制指令數據將是極其安全的。

2.3 硬件總體設計

2.3.1 引腳分配

  在進行設計之前需要對ESP32的引腳進行分配。

 

 

圖2-3 ESP32 MCU引腳約定圖

 

  通過上圖可以發現本系統設計過程中幾乎耗盡了ESP32的所有可用引腳。

2.3.2硬件總體結構設計

  硬件主要由控制器和傳感器構成。

 

圖2-4 硬件模塊構成

 

2.3.3傳感器

  傳感器由,溫度濕度傳感器、氣體檢測傳感器、雨水檢測傳感器、土壤濕度檢測和預留接口傳感器組成。

2.3.4 控制器

  控制器由,電風扇、舵機、紅外發射和預留電機接口器組成。

2.4 軟件總體設計

2.4.1服務器搭建

  項目中微信小程序的后台服務器是Tomcat,用來處理微信小程序的業務,EMQ X服務器用來處理微信小程序與ESP32設備之間的數據交互。因為小程序只支持HTTPS協議那么就需要Nginx來轉發請求。

2.4.2微信小程序設計

(1)模塊划分

  小程序界面可以划分為三個模塊,第一個模塊是藍牙,包括藍牙搜索界面及藍牙連接界面。第二個模塊為設備模塊,包括傳感器數據展示界面,開關控制界面,電機控制界面,遙控控制界面等。

 

2.5 數據庫總體設計

  由於用戶通過微信小程序控制ESP32設備那么,設備上所有的傳感器及控制器都名稱都應該保存到數據庫中。需要建立用戶表,用戶登錄信息表,設備表,傳感器表,控制器表。

 

 

 數據交互詳細設計

3.1數據約定

  當小程序發送數據給ESP32設備的時候需要進行數據約定,當ESP32接收到數據之后根據約定的數據進行相應的操作如表5-1數據約定表。

表3-1 數據約定表

功能

約定

示例

解釋

設置Wi-Fi名稱

stWiFi

stWiFin12345678

Wi-Fi名稱為12345678

設置Wi-Fi密碼

stWiFi

stWiFip12345678

Wi-Fi密碼為12345678

設置開關狀態

switch

switch1true

開關1開

設置開關狀態

switch

switch1false

開關1關

設置電動機

pwm_EM

pwm_EM11020

電機1最大功率

設置電動機

pwm_EM

pwm_EM10000

電機1關閉

設置轉向舵機

pwm_SE

pwm_SE1t

舵機轉向

設置轉向舵機

pwm_SE

pwm_SE1f

舵機復位

傳感器觸發蜂鳴器

TG_S_B

TG_S_B1>500

傳感器1的值大於500時觸發 蜂鳴器

活體檢測觸發開關

TG_I_S

TG_I_S@t1t

活體檢測開(有活體)觸發開關1打開

傳感器觸發PWM電機

TG_S_E

TG_S_E1>400B100

傳感器的值大於400時,電機的值為100

 

  微信小程序和ESP32設備通過上表發送數據,處理數據。

3.2數據包裝

  真實的數據在傳輸過程中不安全需要進行包裝之后才能處理之后才能發送。

(1)加入設備ID 

  操作:加入設備ID,例如原數據為“switch1true”(開關1開)那么加入設備ID之后變成“a411a6ec84de4d00aae73677dadb2901switch1true”,設備ID長度是32字節,加入設備ID之后在接收段先驗證ID,相同才執行操作,反之則不執行操作。

  意義:因為藍牙是開放連接的那么任何人都可以連接ESP32設備,對其發送數據,如果不加設備ID進行驗證,通過遍歷的方式將很快破解ESP32控制指令,者對ESP32設備來說是極不安全的。

(2)加入時間信息

  原因:因為在BLE4.2之前發送信息可能被竊取,那么設備ID被竊取后數據會變得不安全。

  操作:加入時間信息。加入時間信息之后每次ESP32接收信息之后先驗證當前數據的時間與上一條指令的時間進行比較看是否過期,如果過期則不執行該指令,反之執行相應操作。

  意義:加入之間參數之后每一條指令都是唯一的,而且發送之后就不能再次使用,必須下次的時間大於本次時間才行。

3.3 AES加密解密

AES的算法本身是跨平台的,只不過以下這些要素決定了跨平台不是那么簡單:

加密模式: ECB,CBC,CFB,OFB,CTR,XTS...

密鑰長度: 128, 256

iv向量: 需要與密鑰同時設置

padding: NoPadding,ZeroPadding,PKCS5Padding,ISO10126Padding,ANSI X.923,SSL3Padding...

密鑰: 用於加解密的key

只有當這5個要素都完全一致時,AES的加密和解密才可以在任何地方通用,實現跨平台.一般的編程語言會支持ECB,CBC,CFB這幾種常見的加密模式,以及128的密鑰長度,但在padding的處理方式上,各個語言的區別就太大了,而且這個padding與加密模式也存在緊密的關聯.

AES的一些加密模式需要原文的bytes數是16的倍數,以下是信息表:

 

圖3-2 填充模式比較圖

 

解決辦法:

  在微信小程序引入Crypto-JS庫中加密時采用默認填充。在ESP32中采用AESLib庫,使用相同的iv和key即可實現正常的加密解密。

3.4 BLE發送數據處理 

 

圖3-3 BLE發送數據流程圖

 

  由於BLE最多只能發送20個字節,而常用的解決辦法就是修改MTU(最大傳輸單元),但是微信信息不支持修改MTU那么只能采用分包的方式發送數據。為了保證數據完整性將數據包分為18個字節,每次最多發送18個字節多次發送即可完成數據發送。但是接收段如何處理數據呢?由於接收端不知道接受的數據有多大,更不知道什么時候結束。解決辦法就是加入起始字符和結束字符,但是由於可能發送的數據中包含起始字符和結束字符,從而導致接收處理的數據不完整,那么就要選用特殊字符來作為起始字符和結束字符。在ASCII表中0-32號字符為不可見字符,也就是說ASCII表中0-32號字符不回出現在發送的數據中,那么正好可以用來作為起始字符、結束字符。

 

 

 硬件詳細設計與實現

4.1 傳感器

4.1.1溫度濕度數據采集

(1)傳感器選擇

  溫度濕度數據采用DHT11溫度濕度傳感器傳感器。DHT11 數字溫濕度 傳感器是一款含有已校准數字信號輸出的溫濕度復合傳感器 。它應用專用的數字模塊采集技術和溫濕度傳感技術 ,確保產品具有極 高的可靠性與卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,並與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比 極高等優點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校准。校准系數以程序的形式儲存在OTP 內存中,傳感器內部在檢測信號的處理過程中要調用這些校准系數。單 線制串行接口,使系統集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達20 米以上,使其成為各類應用甚至最為苛刻的應用場合的最佳選則。產品為4針單排引腳封裝。連接方便,特殊封裝形式可根據用戶需求而提供。

 

圖4-1 DHT11傳感器圖

 

(2)引腳說明

引腳說明:

Pin

名稱

注釋

1

VDD

供電 3-5.5V

2

DATA

串行數據,單總線

3

NC

空腳,懸空

4

GND

姐弟,傑電源負級

表4-2 DHT11引腳說明表

(3)傳感數據獲取

  在ArduinoIDE中搜索DHT sensor library庫下載安裝,打開示例代碼即可即可實現溫度濕度數據采集。實現代碼請參考附錄硬件代碼。

 

4.1.2氣體數據采集

(1)傳感器選擇

  氣體傳感器采用MQ135氣體傳感器,MQ135氣體傳感器對氨氣、硫化物、苯系蒸汽的靈敏度高,對煙霧和其它有害氣體的監測也很理想。這種傳感器可檢測多種有害氣體,是一款適合多種應用的低成本傳感器。

 

圖4-3 MQ135傳感器圖

 

(2)引腳說明

圖4-4 MQ135傳感器說明圖

 

(3)數據獲取

  由於MQ135輸入的是模擬信號直接調用Arduino函數analogRead(Pin);即可得到數據。實現代碼請參考附錄硬件代碼。

 

4.1.3預留傳感器

  由於土壤濕度傳感器、雨水傳感器、熱敏傳感器、光敏傳感器等都是傳感器加電阻轉電壓模塊組成,那么可以把電阻轉電壓模塊提取出來,留出一些接口插槽來給傳感器使用,當要使用什么傳感器的時候就插入對於的傳感器。 

圖4-5 傳感器圖

  使用ESP32讀取模擬值意味着您可以測量0 V至3.3 V之間的變化電壓電平。

 

  然后,將測得的電壓分配給一個介於0和4095之間的值,其中0 V對應於0,而3.3 V對應於4095。0V和3.3 V之間的任何電壓都將被賦予介於兩者之間的對應值。

 

  為了實現自動切換傳感器省去手動切換,需要一個可以通過電路信號來選擇通道的器件。通過查詢相關資料找到CD74HC4051一個高速CMOS 8通道模擬多路復用器和多路信號分離器。通過輸入信號可以切換通道使其導通。

 

圖4-6 74H4051引腳圖

表4-7 74H4051引腳說明表

表4-874H4051真值表 

  通過對74HC4050器件的引腳說明和真值表分析之需要3個選擇輸入端即可控制8個通道的任意一個通道的導通,那么采用ESP32設備的G5,G18,G19引腳來連通74HC4051器件的9,10,11選擇引腳。再采用ESP32的SVP引腳來連通74HC4051器件的公共引腳Z(3)即可實現一個電阻轉電壓模塊與多個傳感器相連接的目的。由於74HC4051器件有8個獨立輸入輸出端,目前之有雨水傳感器,土壤濕度傳感器連接,剩下的6個獨立輸入輸出端將作為預留傳感器的接口。實現代碼請參考附錄硬件代碼。

 

4.2 控制器

  通過PWM來控制電機的優勢在於可以通過改變PWM來控制電機的轉速,常見的電機有電風扇,電馬達等。

4.2.1電風扇控制

(1)電風扇選擇

  本設計中采用5V的電風扇來模擬家居環境中的大功率電風扇、油煙機風扇。

選擇MG995R 金屬齒輪舵機,來模擬自動開門、關門、開窗等。

 

 

圖4-10 電風扇圖

 

圖4-11 電風扇功率對照圖

 

(2)電風扇控制

  通過電風扇的的功率對照表可以發送即是是5V的電風扇,ESP32依然無法直接驅動它轉動。那么就需要一個轉換模塊,接收PWM信號轉換為輸出對應的電流。這里我采用pwm直流驅動模塊。

 

 

 

 

圖4-12 pwm直流驅動模塊

 

  pwm直流驅動模塊由雙路H橋電機驅動,可以同時驅動兩路直流電機或者1個4線兩相式步進電機,模塊供電電壓2V-10V,信號端輸入電壓1.8-7V,單路工作電流1.5A,峰值電流可達2.5A,低待機電流(小於0.1uA),內置防共態導通電路,輸入端懸空時,電機不會誤動作,內置帶遲滯效應的過熱保護電路(TSD),無需擔心電機堵轉。

 

表4-13 pwm直流驅動模塊邏輯真值表

 

  通過ESP32設備pwm直流驅動模塊去控制電機這樣就實現了所需的功能。

 

圖4-14 電機控制原理

 

  這樣使用了模塊化的思想,如果電機控制模塊或電機壞了那么更換壞掉的模塊就行了,而不會影響ESP32設備的正常運行。實現代碼請參考附錄硬件代碼。

4.2.2舵機控制

  舵機是一一種位置伺服的驅動器,適用於那些需要角度不斷變化並可以保持的控制系統。其工作原理是:控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一一個基准電路,產生周期為20ms,寬度為1.5ms的基准信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出到電機驅動芯片決定電機的正反轉。當電機轉速一定時, 通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。

(1)舵機選擇

  在本設計中選用MG996R型號的舵機。

 

圖4-15 MG996R舵機圖

 

(2)引腳說明

  黃色導線接5V電壓,棕色導線接地(GND),黃色導線(信號)。

(3)舵機控制

  單片機系統實現對舵機輸出轉角的控制,必須首先完成兩個任務:首先是產生基本的PWN周期信號,本設計是產生20ms的周期信號;其次是脈寬的調整,即單片機模擬PWM信號的輸出,並且調整占空比。

在Arduino中引入“ESP32_ISR_Servo”庫該庫提供舵機相關的控制方法。

4.2.3 OLED顯示器

(1)OLED 顯示器選擇

  在本設計中使用的使一款0.96寸藍色IIC驅動屏,其內置驅動芯片為SSD1306。

 

圖4-16 0.96寸OLED顯示屏圖

 

  這里0.96寸OLED分辨率是128*64;即OLED顯示是128行*64列,但是由於OLED不能一次控制一個點陣,只能控制8個點陣;而且是垂直方向掃描控制;

(2)引腳說明:

OLED的GND引腳接ESP32設備的GND引腳。

OLED的VCC引腳接ESP32設備的GND引腳。

OLED的SCL引腳接ESP32設備的CLK時鍾引腳。

OLED的SDA引腳接ESP32設備的MOSI數據引腳。

(3)顯示漢字

  我們使用的OLED屏是由方形的發光點陣列組成的,分辨率為128x64。漢字最小顯示像素為16x16,要顯示需要的字符只需對應點亮像素區域中對應的發光點即可。

 

圖4-17 子模提取圖

 

  為了方便實現需要用到字模提取軟件(PCtoLCD)。

①Windows系統下雙擊啟動軟件,點擊「模式」,選擇「字符模式」,通常默認就是字符模式。

 

圖4-18 PCtoLCD軟件圖

 

② 點擊「選項」進行字模配置。通常字模配置要根據程序驅動方式來選擇,本篇中我們選擇陰碼、逐行式、順向,其他選項如下圖所示。

 

圖4-19 PCtoLCD軟件設置圖

 

③ 輸入漢字。點擊生成字模或者保存字模,就會得到對應的點陣數據。

 

圖4-20 PCtoLCD子模提取圖

 

④把得到的子模保存到代碼中即可顯示該漢字。

4.2.4 蜂鳴器

  蜂鳴器是一種電子發聲元器件,可以發出"beep"的聲音。采用直流電壓供電,廣泛應用於計算機、電磁爐、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。

(1)蜂鳴器選擇

發蜂鳴器主要分為一下兩種:

有源蜂鳴器: 內部帶有震盪源,只要一通電就會發出固定頻率的聲音。

無源蜂鳴器:內部不帶震盪源,需要使用2KHz到5KHz的脈沖信號驅動發聲,聲音頻率可變。

本設計中采用無源蜂鳴器。

 

圖4-21 蜂鳴器

 

(2)蜂鳴器發聲

  要使蜂鳴器發聲就產生發送脈沖信號,在Arduino中針對ESP32的脈沖信號函數有:

  ledcSetup(channel, freq, resolution);//用來產生特定頻率的脈沖信號

  ledcAttachPin(12, channel);//用來將信號與引腳進行綁定。

  ledcWriteTone(channel, 2000);//重新設置頻率。

4.2.5 紅外活體檢測

(1)傳感器選擇

  活體檢測采用HC--SR501人體感應模塊,HC--SR501是基於紅外線技術的自動控制模塊,可靠性強,靈敏度高,超低電壓工作模式,被廣泛應用於各類自動感應控制的電器設備當中。

 

圖4-22 HC--SR501人體感應模塊

 

(2)傳感器特點

  全自動感應:當活物進入其感應范圍則輸入高電平,離開后感應范圍則自動關閉高電平,輸出低電平。模塊預留有位置,可設置光敏控制,白天或光線強時不感應。功耗低工作電壓范圍寬。

圖4-23 探測范圍圖

 

(4)檢測活體

  通過圖的說明可以知道HC--SR501檢測到有活體的時候輸出高電平,那么通過Arduino的digitalRead(); 函數即可讀取該數據,如果為高電平證明有活物,如果為電平則沒有活物。實現代碼請參考附錄硬件代碼。

4.3 藍牙收發數據

(1)ESP32 BLE配置

  藍牙是一種短距離通信技術,藍牙系統分為兩種不同的技術:經典藍牙(Classic Bluetooth)和藍牙低功耗(Bluetooth Low Energy)。由於微信小程序只支持BLE開發那么需要配置ESP32設備的BLE。

(2)收發數據

  由於已經約定了數據傳輸的格式那么,處理后的數據進行發送即可,對接收的數據進行,相應的逆操作即可。在ArduinoIDE中的實例庫中提供了8個示例如果下圖所示,實現代碼請參考附錄硬件代碼。

 

圖4-25 Arduino IDE圖

 

4.4 Wi-Fi聯網

  在Arduino已經封裝了ESP32設備的Wi-Fi庫,配置ESP32設備接入互聯網需要讓ESP32設備知道接入Wi-Fi熱點的名稱和密碼。

  在ArduinoIDE示例代碼中提供了Wi-Fi熱點及密碼的配置方法,通過調用<WiFi.h>庫來實現對熱點及密碼的配置。實現代碼請參考附錄硬件代碼。

4.5 MQTT協議收發數據

  ESP32設備通過mqtt發布主題,接收消息需要“PubSubClient”庫。MQTT的原理是傳統的客戶端-服務器模型。在此模型中,有一個MQTT服務器(也稱為代理)和許多MQTT客戶端。MQTT客戶端始終保持與MQTT服務器的連接。MQTT服務器(代理)的作用是過濾消息並將其轉發到已訂閱的MQTT客戶端。客戶端之間的通信基於發布/訂閱/主題模式。實現代碼請參考附錄硬件代碼。

4.6 ESP32多任務配置

  ESP32設備需要進行傳感器數據采集,OLED顯示,蜂鳴器發聲,電機轉動,網絡數據收發,藍牙數據收發等功能。這些任務很多是實時的如OLED顯示,蜂鳴器發聲,那么當ESP32設備在做着一件任務的時候需要做另一件任務怎么辦呢?在ESP32設備中可以通過配置中斷來解決這個問題。

4.6.1中斷

(1)中斷是什么?

  中斷就是當CPU正在處理任務A時,發生了任務B請求CPU去處理,CUP暫停任務A去處理任務B,處理完成之后任務B之后再返回任務A執行任務。

①硬件中斷

  硬件中斷由物理信號生成,可以來自微控制器本身(例如,作為總線控制器的一部分),也可以來自配置為中斷的外部GPIO。例如某個引腳的電平輸入信號由低電平轉為高電平時觸發中斷。外部中斷是可以屏蔽的中斷,也就是說,利用中斷控制器可以屏蔽這些外部設備問 的中斷請求。

②軟件中斷

  軟件中斷由微控制器執行的指令生成。例如數據自增,當數據自增大於某個數的時候觸發中斷。內部中斷是不可屏蔽的中斷。

(2)中斷與多任務

  通過中斷就能實現多個任務的切換,由於切換時間短,幾乎可以忽略不計,這樣多個任務一起執行,達到並發執行的目的。

4.6.2 多任務

  解決的辦法就是配置多任務,每個任務執行來回切換實現多個任務的同時執行。Arduino 提供的“Thread”庫可以來實現多任務並發執行。

4.6.3 多核心

  ESP32擁有兩個核心,那么可以做到在兩個核心上運行的任務同時執行。通過任務來回切換可以實現多個任務的並發執行,那么在核心分配上就可以根據任務的屬性把任務放在不同的核心上執行。根據數據傳輸來說可以把設備分為藍牙傳輸,和網絡傳輸。根據任務執行時長來說可以把任務分為瞬時任務和持續任務。瞬時任務包括開關任務,傳感器數據采集任務,檢測Wi-Fi或MQTT服務器連接任務以及OLED任務。持續任務包括舵機任務,藍牙接收數據任務。根據任務執行頻率可以分為低平任務,和高頻任務。低平任務包括數據采集任務,OLED顯示任務,檢測Wi-Fi或MQTT服務器連接任務。高頻任務包括Wi-Fi或藍牙接收數據任務,觸發器任務。

 

 軟件設計與實現

5.1 數據庫詳細設計與實現

5.1.1數據庫實體設計

(1)用戶實體

  用戶實體對應每個一個授權登錄的用戶,保存着用戶的唯一標識OpenID。

 

圖5-1 用戶實體圖

 

(2)設備實體

  設備實體主要存放ESP32設備的ID字段和名稱主題等信息。

 

圖5-2 設備實體圖

 

(3)用戶與設備關系實體

設備與用戶之間是多對多的關系,那么用戶與設備關系實體就是用來保存着這多對多的關系的。

 

圖5-3 關系實體圖

 

(4)登錄狀態實體

  當用戶登錄小程序之后需要有一個表來保存用戶當前的的sessionkey,微信小程序每次和服務器進行數據交互的時候都要將sessionkey攜帶上。通過sessionkey就能知道用戶是誰了。

 

圖5-4 登錄狀態圖

 

(5)開關實體表

  開關屬於設備,但是ESP32設備擁有很多開關和其它控制器,如果把開關數據保存和設備數據存放在一起不利於維護和升級,那么把開關數據單獨提取出來對其進行增刪改查都將變得容易。

 

圖5-5 開關實體圖

 

(6)任務實體,任務並非時間存在的事物,它是由用戶設置之后產生的,任務依托於設備,任務會隨着時間的流逝而被服務器刪除。

 

圖5-6 任務實體圖

 

(7)傳感器實體,傳感器是指將傳感電阻數據映射為電壓的傳感器,傳感器種類很多。但是無論什么傳感器都有固定的ID編號。

 

圖5-7 傳感器實體圖

 

(8)紅外遙控實體,遙控器實體主要保存遙控編碼。

 

圖5-7 紅外遙控實體圖

 

(9)電機實體,電機包括電風扇,舵機等。

 

圖5-8 電機實體圖

 

5.1.2數據庫ER圖

(1)數據庫ER簡略圖。

 

 

 

 

圖5-9 ER簡略圖

 

(2)數據庫ER圖。

 

 

 

 

圖5-9 ER完整圖

 

5.1.3數據庫表設計

根據數據庫實體圖可以構建數據庫表。

(1)用戶表

表5-10 用戶表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

user_id

int

11

非空約束、自增

主鍵

用戶ID

open_id

varchar

64

 

 

小程序OpenID

user_bickname

varchar

60

 

 

用戶昵稱

user_head_url

varchar

2048

 

 

用戶頭像地址

creat_time

timestamp

 

默認為插入時間

 

創建時間

(2)設備表

表5-11 設備表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

device_id

int

11

非空約束、自增

主鍵

設備ID

device_name

varchar

100

默認為“ESP32”

 

加密后的sessionkey

device_macid

varchar

64

非空約束

外鍵依賴與設備表ID

用戶正在使用的設備ID

create_time

timestamp

 

默認為插入時間

 

創建時間

 

(3)用戶登錄狀態sessionkey表

表5-12 登錄狀態表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

sessionkey_user

int

11

非空約束

主鍵外鍵依賴與用戶表的用戶ID

用戶ID

session_key

varchar

64

唯一性約束

 

加密后的sessionkey

user_current_device

int

11

 

外鍵依賴與設備表ID

用戶正在使用的設備ID

update_time

timestamp

 

默認為更新時間

 

更新時間

 

(4)用戶與設備關系表

表5-13 關系表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

device_and_user_id

int

11

非空約束、自增

主鍵

關系ID

device_id

int

11

非空約束

外鍵依賴與設備表的設備ID

設備ID

user_id

int

11

非空約束

外鍵依賴與用戶表的用戶ID

用戶ID

user_key

varchar

20

默認為“p0000000000”

 

用戶對設備的控制權限

activation_time

timestamp

 

插入時的時間

 

激活時間

 

(5)開關數據表

表5-14 開關數據表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

switch_id

int

11

非空約束、自增

主鍵

開關ID

device_id

int

11

非空約束

外鍵依賴與設備表的設備ID

開關所屬設備

switch_name

int

30

 

 

開關名稱

switch_state

tinyint

大小

(0-255)

 

 

開關狀態

 

(6)傳感器表

表5-15 傳感器數據表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

sensor_id

int

11

非空約束、自增

主鍵

傳感器ID

sensor_device

int

11

非空約束

外鍵依賴與設備表的設備ID

傳感器所屬設備

sensor_name

varchar

30

 

 

傳感器名稱

sensor_value

smallint

大小

(-32768到32767)

 

 

傳感器的值

 

(7)溫度濕度傳感器數據表

表5-16 溫度數據表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

ht_id

int

11

非空約束、自增

主鍵

傳感器ID

ht_device

int

11

非空約束

外鍵依賴與設備表的設備ID

傳感器所屬設備

ht_name

varchar

30

 

 

溫度濕度傳感器名稱

temperature_value

smallint

大小

(-32768到32767)

默認為0

 

溫度濕度傳感器的值

humidity_value

smallint

大小

(-32768到32767)

默認為0

 

 

 

(8)遙控表

表5-17 遙控數據表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

ir_id

int

11

非空約束、自增

主鍵

遙控器ID

ir_device

int

11

非空約束

外鍵依賴與設備表的設備ID

遙控器所屬設備

ir_name

varchar

30

 

 

遙控器名稱

ir_code

varchar

30

 

 

遙控器編碼的值

 

(9)pwm電機表

表5-18 pwm電機數據表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

slider_id

int

11

非空約束、自增

主鍵

電機ID

slider_device

int

11

非空約束

外鍵依賴與設備表的設備ID

電機所屬設備

slider_name

varchar

30

 

 

電機名稱

slider_value

smallint

大小

(-32768到32767)

默認為0

 

電機的值

 

(10)任務表

表5-19 任務數據表

字段名

數據類型

長度

約束

主鍵/外鍵

中文名稱

task_id

int

11

非空約束、自增

主鍵

任務ID

device_id

int

11

非空約束

外鍵依賴與設備表的設備ID

任務屬設備

task_name

varchar

30

默認為“任務”

 

任務名稱

run_time

timestamp

 

非空約束

 

任務執行時間

mqtt_topic

varchar

50

非空約束

 

任務通過MQTT發布的主題

mqtt_message

varchar

1024

非空約束

 

任務通過MQTT發布的內容

5.2 服務器搭建與實現設計與實現

5.2.1 EMQ X服務器軟件搭建

  本設計中采用阿里雲的Ubuntu16.4系統來搭建EMQ X服務器軟件。因為EMQ服務器軟件是開源免費的代碼被托管到GitHub上,那么可以很容易的下載安裝。搭建過程很簡單這里主要簡述搭建的步驟:第一步將EMQ X的安裝包下載解壓到阿里雲的服務器上,第二步安裝EMQ X服務器軟件,第三步啟動EMQ X配置端口及密碼等。

5.2.2 Nginx服務器搭建

  在本設計中Nginx服務器只有用來代理https網絡請求,因為小程序只允許訪問https請求。因為Nginx服務器軟件是開源的,那么可以很容易的搭建及部署。下面簡述搭建流程:第一步下載解壓Nginx到服務器上,第二步安裝Nginx,第三步修改配置文件。

5.3 微信小程序設計與實現

5.3.1功能設計與實現

(1)登錄小程序

  用戶打開小程序即可進入小程序的主頁面,並且可以查看小程序顯示的默認數據,而不能對小程序進行任何操作,如果用戶需要對ESP32設備進行操控那么久需要激活設備,在激活設備之前需要用戶授權頭像昵稱等信息,雖然說用戶一旦進入小程序就可以通過用戶攜帶的code信息獲取用戶的OpenID(微信小程序用戶的唯一標示),但是為了后面的功能需求,需要用戶授權頭像昵稱等信息。在用戶授權之后調用登錄請求將用戶數據保存到數據庫中。

 

 

 

 

圖5-20 登錄流程圖

 

(2)用戶激活設備

  用戶與設備之間的關系是多對多的關系,即一個用戶可以擁有多台設備,一台設備可以被多個用戶激活,設備的第一激活者(設備第一次被激活)為管理員用戶,設備再次被激活那么該用戶為普通用戶。管理員擁有對設備的絕對控制權限,管理員可以給該設備的其它使用者分配權限,管理員也可以給自己分配權限。

 

圖5-21 激活流程圖

 

(3)搜索藍牙設備

  用戶激活設備之后就可以通過藍牙控制設備了。微信小程序藍牙開發的流程如下:

①初始化(開啟)藍牙模塊wx.openBluetoothAdapter。

②搜索藍牙設備(消耗大量資源,要及時結束)wx.startBluetoothDevicesDiscovery。

③結束搜索wx.stopBluetoothDevicesDiscovery

④與藍牙設備建立連接wx.createBLEConnection

⑤獲取藍牙設備的服務列表wx.getBLEDeviceServices

⑥獲取藍牙設備的某個服務的特征值列表wx.getBLEDeviceCharacteristics

與特征值通信

⑦啟用/關閉某個特征值的notify wx.notifyBLECharacteristicValueChange

讀取特征值數據(讀取到的數據通過特征值變化事件返回)wx.readBLECharacteristicValue

⑧向特征值寫入數據wx.writeBLECharacteristicValue

⑨斷開與藍牙設備的連接wx.closeBLEConnection

⑩停用(關閉)藍牙模塊wx.closeBluetoothAdapter

 

圖5-22 連接藍牙流程圖

 

 

(4)數據傳輸及安全驗證

  控制數據在傳輸過程中要先進行包裝再進行加密加密之后再加上起始字符和結束字符之后再進行傳輸。具體流程如下圖所示:

 

 

圖5-23 數據傳輸程圖

 

(5)修改數據

  當用戶授權登錄,激活設備,得到設備之后即可對設備的數據進行修改,如傳感器的名稱,開關的名稱,電機的名稱,遙控器的名稱及編碼進行修改。當用戶點擊這些名稱的時候,彈出修改框,用戶自需要將新的名稱輸入其中點擊確定就行了。

 

圖5-24 修改數據流程圖

 

(6)創建定時任務

  當用戶點擊開關名稱時,彈出選擇框,用戶可以選擇開關在什么時候開啟或關閉。當用戶點擊電機名稱時,彈出選擇框,用戶可以選擇電機在什么時候的值為多少。當用戶長按遙控名稱時,彈出選擇框,用戶可以選擇遙控在什么時候發出指令。

 

 

 

 

圖5-25 創建任務流程圖

 

(7)執行定時任務

  定時任務是將指令攜帶執行時間傳輸到服務器,服務器將指令和時間保存到數據庫,服務器每隔30秒掃描一次數據庫,查詢小於當前系統時間的數據字段,將其指令通過MQTT協議發送到ESP32設備上,並將查詢出來的數據庫字段進行刪除。

 

圖5-26 執行任務程圖

 

(8)設備授權

  設備的管理員可以對其它用戶進行授權,授權內容包括傳感器數據顯示,控開關控制,電機控制,定時任務,條件控制。授權之后用戶將不能再獲取權限之外的數據。 

 

圖5-27 授權設備程圖

 

5.3.2界面設計與實現

(1)底部導航欄。

 

  底部導航欄是用來切換不同的頁面的,微信小程序的主要頁面有藍牙頁面,設備頁面,和個人中心頁面。導航欄可以實現用戶很

 

圖5-28 底部導航欄圖

 

(2)藍牙搜索頁面

①描述

  藍牙搜索連接頁面,用來搜索藍牙設備、顯示藍牙設備、連接藍牙設備。用戶可以查看本機的設備信息,還可以查看搜索到的藍牙設備的信息。

②設計

  藍牙搜索連接頁面由頂部欄,本機設備信息顯示區域,按鈕和設備顯示區域組成。由於搜索到的設備數量不確定可能會撐出頁面,那么要把搜索的藍牙設備放到微信小程序的<scroll-view>組件當中。

 

③頁面實現

圖5-29 掃描藍牙界面圖

 

(3)藍牙數據收發頁面

①描述

  藍牙數據收發界面可以實時的顯示當前接收的數據,還提供輸入框可以輸入數據,發送數據,提供斷開藍牙設備的功能。

②設計

  頁面功能主要是兩個,查看接收的藍牙數據,發送數據。頁面頂部是導航欄,隨后是數據顯示區域,顯示當前連接的藍牙的設備名稱、設備ID。數據接收區域封裝在<scroll-view>組件中。中間有兩個功能按鈕分別是清空顯示按鈕,斷開連接按鈕。還有輸入框和發送按鈕,當用戶點擊輸入框時跳出鍵盤,用戶點擊發送即可將數據發送到ESP32設備。

③頁面實現

 

圖5-30 藍牙發送數據界面圖

 

(4)藍牙幫助頁面

①描述

  由於手機設備眾多、系統版本不同、微信版本不同,那么用戶在通過小程序連接ESP32設備過程中肯定會遇到各種各樣的問題,這時就需要給用戶一個連接指南,所有就需要一個幫助頁面。

②設計

  藍牙幫助頁面通過標題與解答的方式顯示文本內容。用戶通過標題查看自己遇到的問題,和解決方案。

③頁面實現

 

圖5-31 藍牙幫助界面圖

 

(4)設備頁面

①描述

  設備頁面顯示主要的功能列表,當用戶點擊功能項時跳轉到對應的頁面,設備頁面由頂部欄、底部欄、功能項組成。

②設計功能項采用flex布局,每兩項換一行顯示,直到功能項全部顯示完成。功能項目前有傳感項、開關項、遙控項、電機項、條件項、任務項組成。

③實現

圖5-32 設備界面圖

 

(4)傳感頁面

①描述

  傳感頁面顯示ESP32設備的傳感器數據,由兩部分組成。上半部分顯示氣體檢測、雨水檢測、土壤濕度檢測等數據。下半部分顯示溫度濕度數據。

②設計

  因為傳感數據由兩部分組成,為了將數據全部顯示出來需要將兩部分都封裝到<scroll-view>組件,為了使上半部分的傳感項不超出屏幕還需要將上半部分也封裝到<scroll-view>組件中,

③實現

 

圖5-33 傳感器界面圖

 

(5)開關頁面

①描述

  開關頁面一共顯示40個開關。用戶通過開關來控制ESP32設備上面的開關。

②設計

  開關頁面由40個開關項組成,每個開關項包括開關名稱和開關選擇器組成。為了保證頁面不溢出把40個開關封裝在<scroll-view>組件當中。

③實現

 

圖5-34 開關控制界面圖

 

(6)遙控頁面

①描述

  遙控頁面用來控制ESP32的紅外信號,ESP32通過紅外信號可以用來遙控紅外接收裝置,如電視劇、空調、音響等設備。

②設計

  用戶點擊紅外遙控項即可讓ESP32設備發出紅外控制信號,而且每個紅外遙控項的的編碼都是可以修改的,那么1個開關就行了,但是由於來回的修改編碼麻煩那么在本設計中一共有5個開關項。

③實現

 

圖5-35 遙控界面圖

 

(7)電機頁面

①描述

  ESP32設備的電機由電風扇,舵機等組成,這些電機通過PWM信號控制,可以實現控制電機的轉速和轉動角度。

②設計

  由於PWM信號可以是不同的頻率,那么不同的頻率對應不同的電機狀態,要實現選擇不同的頻率且方便操控,那么選擇微信小程序提供的<slider>組件來實現。

③實現

 

圖5-36 電機控制界面圖

 

(8)條件頁面

①描述

  ESP32設備有很多自動控制的功能,這些功能實現語句是“當什么條件滿足時執行什么動作”,這些條件的值是可以改變的,條件頁面就是用來修改這些條件的。

②設計

  要修改條件就要知道條件有哪些,以及條件所綁定的是什么,目前設置有3個條件分別是:當傳感的值大於或小於某個值的時候蜂鳴器發出聲音,當傳感器的值當傳感的值大於或小於某個值的時候電機的轉速為多少,當活體檢測到活物時開關開啟或關閉。實現這些功能需要用到微信小程序提供的<picker>選擇器組件。封裝條件選項。

③實現

 

圖5-37 觸發設置界面圖

 

(9)任務界面

①描述

  任務界面是用來查看管理任務的,可以查看當前設備的所有未執行的任務。

②設計

  頁面由頂部欄和任務項組成,由於任務的數量不確定為了保證任務數量過多不超出屏幕,需要將任務項封裝到<scroll-view>組件中。任務項由任務標題、任務執行時間,任務內容。

③實現

 

圖5-38 任務界面圖

 

 

(10)個人中心界面

①描述

  個人中心顯示當前用戶的一些數據如頭像昵稱等,提供功能列表。

②設計

  個人中心界面由兩個部分組成,上部分是用戶數據顯示,下半部分是功能列表,用戶數據有用戶頭像和用戶昵稱豎排顯示。功能列表有激活設備、設備聯網、設備授權、使用說明等。

③實現

 

圖5-39 個人中心界面圖

 

 

(11)激活設備頁面

①描述

  用戶要使用設備必須先激活設備,激活設備頁面就是用來激活設備的。

②設計

  激活設備需要輸入設備激活碼,那么就需要一個輸入框和一個激活按鈕。

③實現

 

圖5-40 激活設備界面圖

 

(12)設備聯網頁面

①描述

  激活設備成功之后用戶即可通過藍牙方式控制ESP32設備。如果要通過網絡控制那么需要讓ESP32設備連接上網絡,

②設計

  激活設備需要輸入設備激活碼,那么就需要一個輸入框和一個激活按鈕。

③實現

 

圖5-41 配置WiFi界面圖

 

(13)設備管理頁面

①描述

  用戶與設備是多對多的關系,那么需要一個頁面來切換不同的設備,如果用戶是管理員那么還可以給其它用戶設置設備使用權限。

②設計

  設備管理頁面頂部是導航欄,功能頁面需要顯示用戶已經激活的所有設備,還需要顯示當前設備的所有使用者的頭像。為了防止頁面超出范圍將設備封裝在<scroll-view>組件當中。

③實現

圖5-42 設備管理界面圖

 

(14)使用說明頁面

①描述

  當用戶使用小程序遇到不懂的情況,可以通過使用說明界面解答自己的疑惑。

②設計

  為了讓用戶可以快速的找到幫助文檔,功能頁面采用左右兩個部分組成,左邊是目錄,右邊是具體說明。用戶通過目錄可以快速的找到自己想看的文檔。為了實現這樣的布局需要使用<scroll-view>組件。

③實現

圖5-43 使用說明界面圖

 

 成品展示

6.1 ESP32設備硬件展示

(1)硬件正面展示

 

 

 

 

圖6-1 硬件連接正面圖

 

(2)硬件背面展示

  

圖6-2 硬件連接背面面圖

 

(3)模型展示

 

 

 

圖6-3 模塊組裝圖

 

 

 

圖6-4 最終完成圖

6.2 微信小程序展示

打開手機微信掃描小程序碼即可查看。

 

圖6-5 小程序碼

 

 

參考

[1]余傑.智能家居及其發展趨勢[J].電子制作,2014(22):229.

[2] Stallings, William. Cryptography and network security: principles and practice. Pearson Education India, 2003.

[3]顧新萍. 基於微信小程序的智能家居控制系統設計與實現[D].青島大學,2019.

[4]張偉. 智能家居終端互聯系統的設計與實現[D].電子科技大學,2019.

[5]胡元. 基於ESP32的野外探險多功能信息傳遞系統[D].華中師范大學,2019.

[6]何經偉,劉玉媛.基於ESP32的辦公環境信息監測系統[J].電子技術與軟件工程,2019(24):153-154.

[7]王耀楠. 基於雲服務平台的智能家居管理系統[D].電子科技大學,2019.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM