esp8266 扫描wifi_基于ESP8266与QT的智能家居控制系统设计
近年来,在智能化、自动化高新技术的驱动下,智能家居行业进入了飞速发展时期,很多智能设备都慢慢走近了我们的生活,比如阿里的天猫精灵、小米的小爱音箱还有百度的小度音箱。它们在智能家居中一般都是用来控制一些智能设备比如智能插座、智能电灯泡、智能洗衣机什么的。它们之间的系统设计如大致如下所示:
大致的流程我在这里简单说一下,如有错的地方,希望能指出!
先说说支持联网的设备吧,通常我们买到一个天猫精灵和一个智能插座通常要做这几件事情:
1.通过APP给它配网,现在的配网技术主要有AP配网、smartconfig一键配网还有微信的airkiss配网。这里先不对这些技术进行讨论。
2.通过天猫精灵(wifi、蓝牙)扫描设备,添加设备、绑定设备
做好了两件事之后,我们就可以通过语音来和天猫精灵对话控制设备了。
用户语音--->天猫精灵---->服务器----->智能插座
后续的话,我也会出一遍针对esp8266连接天猫精灵的文章,感兴趣的童鞋可以关注下噢。
下面就开始进入我们的主题了:在局域网内控制我们的设备
软件的话主要用的QT5.11.3编写,设备端就是esp8266,控制3个设备的开关。先来张演示图:
关于设备端esp8266端的编程,我采用的是mircopython的方式编程,为什么会采用这种语言来写嵌入式的代码呢?第一:跟Python的大部分都兼容。第二:简单;第三:就是个人喜好了。你也可以采用Nono 编程和RTOS
如果不熟悉这门Python语言的,可以先去菜鸟教程看看,简单入门一下,很快就会了。
主要有以下几个步骤:
第一:新建一个main.py文件,然后打开,导入的Python包:
import network #网络相关import socket #socket相关import time #延时需要from machine import Pin #MircoPython独有的,针对微处理器设计的
第二:编写控制设备的IO口的代码,具体可以参考原理图,代码如下
#定义esp8266 IO口p2_led = Pin(2,Pin.OUT)#板载ledp4_airconditioner = Pin(4,Pin.OUT)#空调i/op5_smartsocket = Pin(5,Pin.OUT);#插座IO
第三:编写各个功能的开关函数;具体代码如下:
#定义一些设备操作函数 def led_control(status): p2_led.value(status)def airconditioner_control(status): p4_airconditioner.value(status) def smart_socket_control(status): p5_smartsocket.value(status)
第四:编写连接wifi相关的函数,具体代码如下:
#wifi连接函数 def do_connect(): sta_if = network.WLAN(network.STA_IF) sta_if.active(False) if not sta_if.isconnected(): print("connectting to network ...") sta_if.active(True) sta_if.connect("MERCURY_A3CC","123456789001")#要修改成自己的路由器的wifi名和密码 while not sta_if.isconnected(): pass if sta_if.isconnected(): print("connect success") print('network config:', sta_if.ifconfig())
第五:编写连接服务器和处理函数,具体代码如下:
#tcp客户端连接服务器函数def tcp_connect(host, port): s = socket.socket()#创建一个socket s.connect((host, port))#连接服务器 s.send("hello i'm Esp8266 Device\r\n")#连接的时候,像服务器发送一串数据 while True: data = s.recv(1024)#接收来自服务的数据,最大长度为1024 #如果有数据则进行处理,否则延时50ms if data: print(str(data,'utf8'))#打印输出收到的函数 if str(data,'utf8') == "light_on": led_control(0)#因为板载的LED是低电平点亮的,所以这里为0 s.send(str(data,'utf8'))#数据原路返回给TCP服务器,TCP服务器收到这串数据后,才会把led的图片设置为开启状态,其他的也是一样的处理 elif str(data,'utf8') == "light_off": led_control(1)#因为板载的LED是低电平点亮的,所以这里为1 s.send(str(data,'utf8'))#数据原路返回给TCP服务器,TCP服务器收到这串数据后,才会把led的图片设置为关闭状态,其他的也是一样的处理 elif str(data,'utf8') == "airconditioner_on": airconditioner_control(0) s.send(str(data,'utf8')) elif str(data,'utf8') == "airconditioner_off": airconditioner_control(1) s.send(str(data,'utf8')) elif str(data,'utf8') == "socket_on": smart_socket_control(0) s.send(str(data,'utf8')) elif str(data,'utf8') == "socket_off": smart_socket_control(1) s.send(str(data,'utf8')) else: time.sleep_ms(50)#睡眠50ms
最后:编写main函数,具体代码如下:
if __name__ == "__main__": default_value_init() do_connect() tcp_connect("192.168.100.100",8080)#修改成QT服务器一致
main.py完整代码如下:
import networkimport socketimport timefrom machine import Pin#定义esp8266 IO口p2_led = Pin(2,Pin.OUT)#板载ledp4_airconditioner = Pin(4,Pin.OUT)#空调i/op5_smartsocket = Pin(5,Pin.OUT);#插座IO#初始化默认值,低电平有效def default_value_init(): p2_led.value(1) p4_airconditioner.value(1) p5_smartsocket.value(1)#定义一些设备操作函数 def led_control(status): p2_led.value(status)def airconditioner_control(status): p4_airconditioner.value(status) def smart_socket_control(status): p5_smartsocket.value(status) #wifi连接函数 def do_connect(): sta_if = network.WLAN(network.STA_IF) sta_if.active(False) if not sta_if.isconnected(): print("connectting to network ...") sta_if.active(True) sta_if.connect("MERCURY_A3CC","123456789001")#要修改成自己的路由器的wifi名和密码 while not sta_if.isconnected(): pass if sta_if.isconnected(): print("connect success") print('network config:', sta_if.ifconfig())#tcp客户端连接服务器函数def tcp_connect(host, port): s = socket.socket()#创建一个socket s.connect((host, port))#连接服务器 s.send("hello i'm Esp8266 Device\r\n")#连接的时候,像服务器发送一串数据 while True: data = s.recv(1024)#接收来自服务的数据,最大长度为1024 #如果有数据则进行处理,否则延时50ms if data: print(str(data,'utf8'))#打印输出收到的函数 if str(data,'utf8') == "light_on": led_control(0)#因为板载的LED是低电平点亮的,所以这里为0 s.send(str(data,'utf8'))#数据原路返回给TCP服务器,TCP服务器收到这串数据后,才会把led的图片设置为开启状态,其他的也是一样的处理 elif str(data,'utf8') == "light_off": led_control(1)#因为板载的LED是低电平点亮的,所以这里为1 s.send(str(data,'utf8'))#数据原路返回给TCP服务器,TCP服务器收到这串数据后,才会把led的图片设置为关闭状态,其他的也是一样的处理 elif str(data,'utf8') == "airconditioner_on": airconditioner_control(0) s.send(str(data,'utf8')) elif str(data,'utf8') == "airconditioner_off": airconditioner_control(1) s.send(str(data,'utf8')) elif str(data,'utf8') == "socket_on": smart_socket_control(0) s.send(str(data,'utf8')) elif str(data,'utf8') == "socket_off": smart_socket_control(1) s.send(str(data,'utf8')) else: time.sleep_ms(50)#睡眠50msif __name__ == "__main__": default_value_init() do_connect() tcp_connect("192.168.100.100",8080)
代码写好了之后,接下来就是怎么把main.py文件烧录到esp8266单片机中了。
先下载好mircopython固件
下载链接:http://micropython.org/download#esp8266
这里的固件版本号为:esp8266-20190529-v1.11.bin
!!!!!!!!!!!!!注意!!!!!!!!!!!!!!!
不能用平时烧写软件的方式,只能用下面的方式来烧写,否则烧写后会进入死循环!!!!!!!!
先擦除,后烧写
烧写步骤如下:
1.pip install esptool 安装esptool(电脑上要先装好python环境)
2.擦除所有的flash:
Linux系统:
esptool.py --port /dev/ttyUSB0 erase_flash 擦除所有的flash(ttyUSB0===只是示例)
windows系统,则改为具体的COM口,比如我的电脑是COM4:
esptool.py --port COM4 erase_flash
先按住kd_wifi按键,然后再按下kr_wifi复位按键,释放kr_wifi按键后,再释放kd_wifi按键。
3.烧写固件
先按住kd_wifi按键,然后再按下kr_wifi复位按键,释放kr_wifi按键后,再释放kd_wifi按键。
esptool.py --port COM4 --baud 460800 write_flash --flash_size=detect 0 esp8266-20190529-v1.11.bin
4.烧写完成后,打开MicroPython File Uploader
点击打开串口
复位开发板
会看到提示信息
5.打开烧录软件,打开com口,点击打开文件,选择main.py发送。等待发送完成即可
6.打开QT上位机软件,监听8080端口,注意电脑和esp8266必须在同一个局域网内,连接同一个路由器就行了。
7.重启esp8266硬件,等待连接上服务器即可,会有相应的提示。
接线来就是测试验证的过程了
esp8266 扫描wifi_基于ESP8266与QT的智能家居控制系统设计相关推荐
- 基于ARM开发板的智能家居控制系统设计
本文章设计流程可以作为视频讲解的补充 视频链接:智能家居控制系统 一.硬件介绍: 1.ARM A53开发板 2.显示触摸屏(800 X 480) 3.蓝牙模块(HC-08,串口通信) 4.电话模块(G ...
- 基于树莓派的智能家居控制系统设计论文参考
完整论文咨询可WX联系:gyf1842965496 智能家居控制系统功能实现详细介绍:基于树莓派的智能家居控制系统设计https://blog.csdn.net/G1842965496/article ...
- 基于STM32设计的智能家居控制系统设计_语音+环境检测(OneNet)_2022
1. 前言 如今的智能家居越来越深入人心,越来越受人们的欢迎.智能家居作为与人们日常生活息息相关的科技智能产物,可以给我们的生活带来舒适便利.随着物联网.云计算.无线通信等新技术的发展,智能家居得到了 ...
- 基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料)
基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 设计编号:C0053 主要功能: 1. ...
- 基于树莓派的智能家居控制系统设计
基于树莓派的智能家居控制系统设计 完整文件下载 基于树莓派的智能家居控制系统设计 https://download.csdn.net/download/G1842965496/85802405 一.功 ...
- 基于ANDROID的智能家居控制系统设计
pe基于Android的智能家居控制系统设计 配套论文
- ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现
文章目录 ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现 一.绪论 1.1 研究背景与意义 1.2 国内外研究现状分析 1.3 研究内容与目标 1.4 ...
- 写基于stm32智能家居控制系统设计论文
写作一篇基于STM32的智能家居控制系统设计论文需要涵盖以下内容: 简要介绍STM32微控制器的硬件特性和软件开发环境: 分析当前市场上关于智能家居控制系统的发展现状,并阐述为什么选择STM32作为系 ...
- android 智能设备管理,基于Android平台上BLE的智能家居控制系统设计与实现
摘 要:基于智能家居无线控制的市场需求,以集成了CSR1010低功耗蓝牙芯片的智能插座为例,在Android平台上设计了一套基于蓝牙4.0通信协议的智能家居控制系统,实现了对此智能插座的无线通断电控制 ...
最新文章
- php随机数字总和固定,php 随机生成固定长度整数、各种服务器请求方法
- ftp之高级配置——虚拟用户
- SharePoint Server和Office 365之间的混合模式集成概述
- 计算机操作系统——经典进程的同步问题
- Prim和Kruskal求最小生成树
- block,inline和inline-block
- docker增加端口映射_docker配置lamp环境笔记
- CDN---共享单车算啥,阿里云发布共享网络黑科技PCDN,降低视频行业75%的成本
- python程序写完怎么保存_python程序如何进行保存
- 动易模板——制作前的准备工作
- hyperterminal使用教程_Win 7 使用 XP的超级终端 hyper terminal
- Python开源机器学习项目实战
- 光电耦合器的隔离作用是什么?
- SpringBoot应用监控(带邮件警报)
- Windows_Program_Via_C_Translate_Win32编程的背景知识/基础知识_包括基本输入输出机制介绍...
- 如何将大量图片文件合并成一个*.bin文件
- 救灾帐篷惊现高档小区
- oracle apex global,Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
- 微信小程序 发送模板消息的功能实现
- 浅谈子网、子网掩码、保留地址
热门文章
- mysql gis index 索引原理_从原理到优化,深入浅出数据库索引
- php设置页面最小高度,HTML_CSS布局中最小高度的妙用,最小高度可以设定一个BOX的最 - phpStudy...
- 鸿蒙系统华为mate10,从3899跌至1040,2K分辨率+4000mAh,可升级鸿蒙系统
- Algorithm Set:floyd判环法
- 吴恩达机器学习练习4:神经网络学习(反向传播)
- Redis基础(十二)——缓存读写策略
- Redis基础(七)——事件、服务器、客户端、多线程
- 有谁了解 最基础的计算机的网络结构呢?
- angular使用动态组件后属性值_Angular 2-组件
- MySQL单表删除重复列SQL语句