千家信息网

如何利用单片机快速实现家庭智能控制平台

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍"如何利用单片机快速实现家庭智能控制平台"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"如何利用单片机快速实现家庭智能控制平台"文章能帮助大家解
千家信息网最后更新 2025年02月02日如何利用单片机快速实现家庭智能控制平台

这篇文章主要介绍"如何利用单片机快速实现家庭智能控制平台"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"如何利用单片机快速实现家庭智能控制平台"文章能帮助大家解决问题。

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 socketexcept:    import socketimport networkfrom machine import UARTfrom machine import Pinled_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 登录页面

            智能家庭网络                                

欢迎登录智能家庭网络平台

用户名: 

密 码:  

device.html 控制页面

            智能家庭网络平台                                

欢迎使用智能家庭网络-控制平台

灯光:  

风扇:  

fail.html 登录错误页面(就是把login.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]。

关于"如何利用单片机快速实现家庭智能控制平台"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0