物聯網時刻正式到來,用單片機快速實現家庭智能控制平台

2022-04-03     大方老師單片機

原標題:物聯網時刻正式到來,用單片機快速實現家庭智能控制平台

物聯網時刻正式到來,用單片機快速實現家庭智能控制平台

一提到智能家庭,大家可能首先想到的是各種大佬級公司搞的牛逼產品,或者說是創新產品。想想就覺得很複雜,有的用工控機,有的用樹莓派,還有的arduino,不管用什麼,都繞不過伺服器進行控制,比yeelink平台,企鵝的智能硬體平台等等。其實,真實實現起來,並沒有想想中這麼複雜,我們甚至只用一個小的單片機就能實現。

0x01單片機實web伺服器

探討用單片機來實web伺服器的文章通baidu也能找到幾篇,但比較詳實的實現方法並沒有找到,這裡考慮有兩種思路可以完成,一種是有線lan模塊,w5500,這種模塊本身就帶web服務的部分功能,使用起來比較簡單,但是只能基lan進行訪問。另一種是通stm32等單片機,配合網絡模塊來完成。當前我能想到的最簡單的方法就是stm32+esp8266來實現。基於第一種方法,我覺得受模塊性能影響比較大,受限於模塊,沒有開發感。於是考慮用第二種方法。這個方法裡,有人arduino來完成,這要基c進行編程。另外,就是考慮micropython,這樣直接可以python來實現。這裡依然使tpyboard V202

0x02模擬實現家庭智能家居控制平台

因為沒有想好要做一個多麼複雜的實驗,只是想能模擬一下效果,所有在整個的模塊過程中,我選用tpyboard v202開發板做主控制板,用一個發光二極體來模擬一個檯燈(現實中,這裡其實可以用一個繼電器來控制其它設備的通斷電),用一個直流小電機加迷你風扇葉表示模擬電風扇。整個實現還用到了一個三極體S9014NPN)來控制直流電機。

0x03硬體的搭建與連接

發光二極體的使用

發光二極體使用比較簡單,直接看它的兩,長的那個是正極,反之是負極。

直流小電機的使用方法

上圖直流小電機中,紅色框內的兩個接線AB,無論那個接正極或負極都可以,只不過轉動的方向不一樣而已。本次我是B端接入正極,正好是順時針轉動。

三極S9014NPN)的使用方法

本次我們使S9014的放大和開關功能,集電極接v2023.3V引腳,發射極接入電機某一端,通過給基極高低電平來控制發射極和集電極之間是否導通,從而控制直流電機轉動或停止。下面來介紹一下接線方法

我的實物連接圖

0x04micropythonweb伺服器

首先,編輯一main.py文件v202開機自啟main.pytry: 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)

#說明是第一次訪問,輸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登錄頁:

<>>智能家庭網

<>>歡迎登錄智能家庭網絡平

<>>用戶:

<>>:

"" />

info.txt這裡是用文件存放的用戶名和密(英文逗號分),前面是用戶名,後面是密碼。這裡的用戶名和密碼是用來登錄我智能家居控制平台的admin,123456

0x05程序下載測試

使MicroPython File Uploader工具,將原始碼下載v202中。工具下載地址可以私信我,這裡不好放。

·1、使usb數據線v202接入到電腦,打開設備管理器,查看加載的埠。我的COM44

如果驅動安裝失敗,可以下CH340的驅動,手動安裝CH340驅動下載地址:http://tpyboard.com/download/drive/163.html

2、打MicroPython File Uploader選擇埠,點[Open]

3、取[Autorun]的打鉤,點擊紅框的文件夾圖標,選擇源碼,點[Send]等待發送成功。

4、將上面的源碼文件都下載v202中,下載完畢後,點[Run/Reset]就會開始執行代碼。

5、開始運行後,紅色框內列印的是我們存放info.txt里的用戶名和密碼,這個可以自定義。

6、下面桃紅色框內列印的是我v202從路由器那裡獲取到IP地址,只要列印IP地址,說明就成功接入網絡了。我v202獲取IP地址192.168.1.192

7、到此,我們web伺服器就搭建完成了。

0x06智能家庭網絡平台的使用

1、在家庭區域網內,我們可以選pc或者手機,通過瀏覽器,打192.168.1.192就可以看到登錄介面。

2、默認用戶 admin123456,大家可以通過修info.txt文件來進行修改。

1)輸入錯誤的用戶名和密碼會進入錯誤介面。2輸入正確的,進入控制平台。

3、接下來,我們就可以通過網頁開控制燈光和小風扇了,看我的實驗效果圖。

這裡,我只是做了一個實例,受時間限制,沒有再做更深入的開發。大家可以自己結合自己的創意再深入去做。如果能夠通過路由器tpyboard v202設一個外Ip,這樣就可以從外網進行訪問,從而完成外網對家內設備的控制。

我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,簡介里就有,或者留意下方評論第一條(私信我也可以~

文章來源: https://twgreatdaily.com/zh-tw/c2e99cc841bfb94cab7db7eb86a17ce2.html