您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何利用單片機快速實現家庭智能控制平臺”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“如何利用單片機快速實現家庭智能控制平臺”文章能幫助大家解決問題。
0x01 單片機實現web服務器
探討用單片機來實現web服務器的文章通過baidu也能找到幾篇,但比較詳實的實現方法并沒有找到,這里考慮有兩種思路可以完成,一種是有線的lan模塊,如w5500,這種模塊本身就帶有web服務的部分功能,使用起來比較簡單,但是只能基于lan進行訪問。另一種是通過stm32等單片機,配合網絡模塊來完成。當前我能想到的最簡單的方法就是用stm32+esp8266來實現。
基于第一種方法,我覺得受模塊性能影響比較大,受限于模塊,沒有開發感。于是考慮用第二種方法。這個方法里,有人用arduino來完成,這要基于c進行編程。另外,就是考慮用micropython,這樣直接可以用python來實現。這里依然使用tpyboard V202。
0x02 模擬實現家庭智能家居控制平臺
因為沒有想好要做一個多么復雜的實驗,只是想能模擬一下效果,所有在整個的模塊過程中,我選用了tpyboard v202開發板做主控制板,用一個發光二極管來模擬一個臺燈(現實中,這里其實可以用一個繼電器來控制其它設備的通斷電),用一個直流小電機加迷你風扇葉表示模擬電風扇。整個實現還用到了一個三極管(S9014,NPN)來控制直流電機。
0x03 硬件的搭建與連接
1、發光二極管的使用
發光二極管使用比較簡單,直接看它的兩條“腿”,長的那個是正極,反之是負極。
0x04 利用micropython實現web服務器
首先,編輯一個main.py文件。v202 開機自啟動main.py 文件
try: import usocket as socket except: import socket import network from machine import UART from machine import Pin led_flag=Pin(2, Pin.OUT)#esp8266模塊上的小燈 高電平:滅 低電平:亮 led = Pin(4, Pin.OUT)#發光二極管的控制引腳 motor = Pin(5, Pin.OUT)#直流電機的控制引腳 #初始化 led.low() motor.low() led_flag.high() def do_connect(ssid,pwd): sta_if = network.WLAN(network.STA_IF)#STA 模式 sta_if.active(False) if not sta_if.isconnected():#判斷是否連接 sta_if.active(True) sta_if.connect(ssid,pwd)#ssid:WIFI名稱 pwd:WIFI 密碼 while not sta_if.isconnected(): pass if sta_if.isconnected(): return sta_if.ifconfig()[0] def main(ip_,dev_data,login_data,name,pwd): s = socket.socket() ai = socket.getaddrinfo(ip_, 80) addr = ai[0][-1] s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(addr) s.listen(5) led_flag.low() #s_data=login_data while True: res = s.accept() client_s = res[0] client_addr = res[1] led_flag.high() req =client_s.readline() while True: h = client_s.readline() if h == b"" or h == b"\r\n": break #print(h) req+=(h.decode('utf-8').lower()) print("Request:") req=req.decode('utf-8').lower().split('\r\n') #http header 解析 req_data=req[0].lstrip().rstrip().replace(' ','') print(req_data) if req_data.find('favicon.ico')>-1: client_s.close() continue else: if len(req_data)<=12: #說明是第一次訪問,輸入login.html s_data=login_data else: req_data=req_data.replace('get/?','').replace('http/1.1','') _name=req_data.find('name') _pwd=req_data.find('pwd') if _name>-1 and _pwd>-1: #判斷是否是用戶登錄 if req_data.find(name)>-1 and req_data.find(pwd)>-1: s_data=dev_data print('Login Success!') else: f=open('fail.html','r') s_data=f.read() f.close() print('Login Fail!') else: #判斷是否是控制LED _index=req_data.find('led=') if _index>-1: s_data=dev_data led_val=req_data[_index+4:_index+6].lstrip().rstrip() print('led:',led_val) if led_val=='on': led.value(1) else: led.value(0) #判斷是否是控制電機 _index=req_data.find('motor=') if _index>-1: s_data=dev_data motor_val=req_data[_index+6:_index+8].lstrip().rstrip() print('motor_val:',motor_val) if motor_val=='on': motor.value(1) else: motor.value(0) print('-----------') client_s.send(s_data) client_s.close() led_flag.low() f=open('device.html','r') dev_html=f.read() f.close() f=open('login.html','r') login_html=f.read() f.close() f=open('info.txt','r') info=f.read() f.close() name=info.split(',')[0].lstrip().rstrip() pwd=info.split(',')[1].lstrip().rstrip() print('name:',name) print('pwd:',pwd) myip_=do_connect('essid','pwd')#家中網絡的WIFI名稱和密碼 print(myip_) main(myip_,dev_html,login_html,name,pwd)
login.html 登錄頁面
<html> <head> <title>智能家庭網絡</title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> h3 { margin-top:4%; margin-bottom:40px; } </style> </head> <body> <center> <h3>歡迎登錄智能家庭網絡平臺</h3> <form action="/" method="get" accept-charset="utf-8"> <p>用戶名: <input type="text" name="name" /></p> <p>密 碼: <input type="password" name="pwd" /></p> <input type="Submit" value="登錄" /> </form> </center> </body> </html>
device.html 控制頁面
<html> <head> <title>智能家庭網絡平臺</title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> h3 { margin-top:4%; margin-bottom:40px; } </style> </head> <body> <center> <h3>歡迎使用智能家庭網絡-控制平臺</h3> <form action="/" method="get" accept-charset="utf-8"> <p>燈光: <input type="Submit" value="ON" name="led" /> <input type="Submit" value="OFF" name="led" /></p> <p>風扇: <input type="Submit" value="ON" name="motor" /> <input type="Submit" value="OFF" name="motor" /></p> </form> </center> </body> </html>
fail.html 登錄錯誤頁面(就是把login.html 稍做了一下改動)
<html> <head> <title>智能家庭網絡</title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> h3 { margin-top:4%; margin-bottom:40px; } </style> </head> <body> <center> <h3>歡迎登錄智能家庭網絡平臺</h3> <form action="/" method="get" accept-charset="utf-8"> <p >用戶名或密碼錯誤!</p> <p>用戶名: <input type="text" name="name" /></p> <p>密 碼: <input type="password" name="pwd" /></p> <input type="Submit" value="登錄" /> </form> </center> </body> </html>
info.txt 這里是用文件存放的用戶名和密碼(英文逗號分隔),前面是用戶名,后面是密碼。
這里的用戶名和密碼是用來登錄我們 智能家居控制平臺的。
admin,123456
0x05 程序下載測試
使用MicroPython File Uploader 工具,將源代碼下載到v202中。
工具下載地址: http://tpyboard.com/download/tool/170.html
1、 使用usb數據線將v202接入到電腦,打開設備管理器,查看加載的端口。我的是COM44
※如果驅動安裝失敗,可以下載CH340的驅動,手動安裝。
CH340驅動下載地址:http://tpyboard.com/download/drive/163.html
2、 打開MicroPython File Uploader 選擇端口,點擊[Open]。
關于“如何利用單片機快速實現家庭智能控制平臺”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。