IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 智能家庭系统micropython实现2 -> 正文阅读

[系统运维]智能家庭系统micropython实现2

今天介绍homecenter的设计,就是主控部分。主控部分实现接收语音模块输入,蓝牙模块输入,红外接口发射,WiFi访问智能设备访问。接口输入容易,都采用串口输入,然后查配置文件,向对应的智能设备ip地址发送控制命令。

1、配置部分

 wifi路由器配置,通过设置esp32模块为AP模式,通过网页浏览器,就可以访问到esp32模块,通过网页设置WiFi的名称和密码。最后记录下,WiFi的信息,以后esp32就可以连接上WiFi。
def connectAp():
            # 响应头网页正文内容
    content = b'''
                <!DOCTYPE html>
                <html lang="zh-CN">
                <head>
                    <meta charset="utf-8">
                    <title>用户登录.html</title>
                </head>
                <body>
                <p>输入wifi路由信息</p>
                <form name="wifimsg"action="#" method="get">
                路由器名称:
                <input type="text" name="wifi" value=""/>
                路由器密码:
                <input type="text" name="password" value=""/>   
                <input type="submit" name="tijiao" value="ok"/>
                </form>
                </body>
                </html>
    '''
    ap = network.WLAN(network.AP_IF)
    ap.config(essid='HUAWEI1', authmode=4, password='12345678')
    ap.active(True)  # 开启无线热点
    if not ap.isconnected():
        print('connecting to network...')
    start = time.time()
    while not ap.isconnected():
        time.sleep(1)
        if time.time()-start > 30:
            print("connect STA timeout!")
            break
                
    if ap.isconnected():
        print('network config:', ap.ifconfig())
        s = socket.socket()
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # (重要)设置端口释放后立即就可以被再次使用
        s.bind(socket.getaddrinfo("0.0.0.0", 80)[0][-1])  # 绑定地址
        s.listen(5)  # 开启监听(最大连接数5)

        print('接入热点后可从浏览器访问下面地址:')
        print(ap.ifconfig()[0])
        print('')
        fl=open("Ap.txt","w")
        while True:  # mian()函数中进行死循环,在这里保持监听浏览器请求与对应处理
            client_sock, client_addr = s.accept()  # 接收来自客户端的请求与客户端地址
            print('Client address:', client_addr)
            
            while True:
                h = client_sock.readline() # 按行读取来自客户端的请求内容
                getline=h.decode('utf8')
                
                x=getline.find('wifi=')
                y=getline.find("password")
                z=getline.find("tijiao")
                if((x>0) and (y>0) and (z>0)):
                    wifiname=getline[x:y-1]
                    password=getline[y:z-1]
     
                    print(wifiname)
                    print(password)
                    fl.write(wifiname+"|"+password)
                     
                    fl.close()
                    print("file write\r\n")
                    
                    fl=open("Ap.txt","r")
                    print(fl.read())
                    fl.close;
                    print(getline, end='')
                    return
                if h == b'' or h == b'\r\n':  # 当读取到空行的时候表示接收到一个完整的请求头
                    break

            client_sock.write(responseHeaders) # 向客户端发送响应头
            client_sock.write(content) # 向客户端发送网页内容
            client_sock.close()
  读取WiFi路由器可以通过以下程序。
def getwifiAp():
    fl=open("Ap.txt",'r')
    tempstr=fl.read()
    fl.close()
    x=tempstr.find('wifi=')
    y=tempstr.find('password=')
    essid=tempstr[5:y-1]
    password=tempstr[y+9:]
    return essid,password

2、关于查找可用智能控制器

由于智能控制器是否在线,需要通过测试,当然有更好更完善的办法,如Upnp的方法,本项目采用比较简单的办法,直接枚举出内部网络的ip地址。访问特定范围ip地址,只要响应正确,就是存在自己的控制器。里面要用到poll,把超时设置成为2秒钟时间,当访问的ip没有超时,且存在反馈,就可以记录该智能控制器存在,最后以json记录在下面文件。

print(Online_web)  #保存所有可以接受的server
with open("Online_web.json", "w", encoding='utf-8') as f:
    f.write(json.dumps(Online_web))
    f.close()

poll机制设置部分。

  print("connecting")
    poller.register(s, select.POLLIN|select.POLLOUT)
    res = poller.poll(2000)  # time in milliseconds
    poller.unregister(s)
    print("connect server at",addr)

3、向智能设备发出控制命令
这部分是整个系统的核心,前面工作都是准备,为了方便配置,为了控制工程中不出现问题。控制阶段也可能出现问题,因此我们也需要做好相应的错误控制,确保系统在任何故障情况不引起系统崩溃,也就是系统的故障处理或者叫健康管理。看下面程序,通过try和except防止系统出错,还要把连接命令加上超时2秒的设置,里面很多打印命令只是供系统调试使用。最后记得关闭一些资源,释放多余的空间等,才能确保系统稳定运行。

 try:
                    s = socket.socket() #生成socket
                    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
                    
                    print(addr[i])
                    if not connect_on2s(s,addr[i]):
                        time.sleep_ms(100);
                        continue 
                    #s.connect(socket.getaddrinfo(addr[i], 8888)[0][-1])  # 绑定地址
                    s.settimeout(4)         
                except OSError as msg:
                    print('timeout2')
                    s.close()
                    s = None
                    continue
                delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
                print("time :{:d}".format(delta))
                if s is None:
                    print('could not open socket')
                    s.close
                    time.sleep(1)

4、红外控制功能
红外控制采用现成的网上程序,该程序可以采用内部计数器生产38khz载波信号,只要把对应的红外控制码发送到程序就可以,简单好用。我目前只能通过采用示波器读出,红外接收的码,然后写入到程序里面,实现简单控制。采用esp32接收红外码,经过学习,然后放出去,还没有调试好。下载地址忘记了,你们自己网上找吧,这是他的介绍,是个开源的程序。

__init__.py Nonblocking IR blaster # Runs on Pyboard D or Pyboard 1.x (not Pyboard Lite), ESP32 and RP2 # Released under the MIT License (MIT). See LICENSE. # Copyright (c) 2020-2021 Peter Hinch

事实证明,micropython确实很稳定了,而且插入c语音的函数也非常方便,估计大有前途。
我的homecenter玩具,还欠缺的功能是语音提示和显示。
下期介绍智能控制器设计。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:43:00  更:2021-12-15 18:44:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:23:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码