溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)

發(fā)布時(shí)間:2022-01-13 10:28:04 來源:億速云 閱讀:171 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)”文章能幫助大家解決問題。

0x01 單片機(jī)實(shí)現(xiàn)web服務(wù)器

探討用單片機(jī)來實(shí)現(xiàn)web服務(wù)器的文章通過baidu也能找到幾篇,但比較詳實(shí)的實(shí)現(xiàn)方法并沒有找到,這里考慮有兩種思路可以完成,一種是有線的lan模塊,如w5500,這種模塊本身就帶有web服務(wù)的部分功能,使用起來比較簡單,但是只能基于lan進(jìn)行訪問。另一種是通過stm32等單片機(jī),配合網(wǎng)絡(luò)模塊來完成。當(dāng)前我能想到的最簡單的方法就是用stm32+esp8266來實(shí)現(xiàn)。

基于第一種方法,我覺得受模塊性能影響比較大,受限于模塊,沒有開發(fā)感。于是考慮用第二種方法。這個(gè)方法里,有人用arduino來完成,這要基于c進(jìn)行編程。另外,就是考慮用micropython,這樣直接可以用python來實(shí)現(xiàn)。這里依然使用tpyboard V202。

0x02 模擬實(shí)現(xiàn)家庭智能家居控制平臺(tái)

    因?yàn)闆]有想好要做一個(gè)多么復(fù)雜的實(shí)驗(yàn),只是想能模擬一下效果,所有在整個(gè)的模塊過程中,我選用了tpyboard v202開發(fā)板做主控制板,用一個(gè)發(fā)光二極管來模擬一個(gè)臺(tái)燈(現(xiàn)實(shí)中,這里其實(shí)可以用一個(gè)繼電器來控制其它設(shè)備的通斷電),用一個(gè)直流小電機(jī)加迷你風(fēng)扇葉表示模擬電風(fēng)扇。整個(gè)實(shí)現(xiàn)還用到了一個(gè)三極管(S9014,NPN)來控制直流電機(jī)。

0x03 硬件的搭建與連接

1、發(fā)光二極管的使用

    發(fā)光二極管使用比較簡單,直接看它的兩條“腿”,長的那個(gè)是正極,反之是負(fù)極。

如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)

0x04 利用micropython實(shí)現(xiàn)web服務(wù)器

    首先,編輯一個(gè)main.py文件。v202 開機(jī)自啟動(dòng)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)#發(fā)光二極管的控制引腳
motor = Pin(5, Pin.OUT)#直流電機(jī)的控制引腳
#初始化
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)
                    #判斷是否是控制電機(jī)
                    _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')#家中網(wǎng)絡(luò)的WIFI名稱和密碼
print(myip_)
main(myip_,dev_html,login_html,name,pwd)

login.html 登錄頁面

<html>
    <head>
        <title>智能家庭網(wǎng)絡(luò)</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>歡迎登錄智能家庭網(wǎng)絡(luò)平臺(tái)</h3>
            <form action="/" method="get" accept-charset="utf-8">
                <p>用戶名:&nbsp;<input type="text" name="name"  /></p>  
                <p>密&nbsp;碼:&nbsp;&nbsp;<input type="password" name="pwd"  /></p>
                <input type="Submit" value="登錄"  />         
                
            </form>
        </center>
    </body>
</html>

device.html 控制頁面

<html>
    <head>
        <title>智能家庭網(wǎng)絡(luò)平臺(tái)</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>歡迎使用智能家庭網(wǎng)絡(luò)-控制平臺(tái)</h3>
            <form action="/" method="get" accept-charset="utf-8">
                <p>燈光:&nbsp;<input type="Submit" value="ON" name="led" />&nbsp;<input type="Submit" value="OFF" name="led" /></p>  
                <p>風(fēng)扇:&nbsp;<input type="Submit" value="ON" name="motor" />&nbsp;<input type="Submit" value="OFF" name="motor" /></p>         
                
            </form>
        </center>
    </body>
</html>

fail.html 登錄錯(cuò)誤頁面(就是把login.html 稍做了一下改動(dòng))

<html>
    <head>
        <title>智能家庭網(wǎng)絡(luò)</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>歡迎登錄智能家庭網(wǎng)絡(luò)平臺(tái)</h3>
            <form action="/" method="get" accept-charset="utf-8">
                <p >用戶名或密碼錯(cuò)誤!</p>
                <p>用戶名:&nbsp;<input type="text" name="name"  /></p>  
                <p>密&nbsp;碼:&nbsp;&nbsp;<input type="password" name="pwd"  /></p>
                <input type="Submit" value="登錄"  />         
                
            </form>
        </center>
    </body>
</html>

info.txt 這里是用文件存放的用戶名和密碼(英文逗號(hào)分隔),前面是用戶名,后面是密碼。

這里的用戶名和密碼是用來登錄我們 智能家居控制平臺(tái)的。

admin,123456

0x05 程序下載測試

使用MicroPython File Uploader 工具,將源代碼下載到v202中。

工具下載地址: http://tpyboard.com/download/tool/170.html

1、 使用usb數(shù)據(jù)線將v202接入到電腦,打開設(shè)備管理器,查看加載的端口。我的是COM44

※如果驅(qū)動(dòng)安裝失敗,可以下載CH340的驅(qū)動(dòng),手動(dòng)安裝。

CH340驅(qū)動(dòng)下載地址:http://tpyboard.com/download/drive/163.html

如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)

2、 打開MicroPython File Uploader 選擇端口,點(diǎn)擊[Open]。

如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)

如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)

關(guān)于“如何利用單片機(jī)快速實(shí)現(xiàn)家庭智能控制平臺(tái)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI