近年来,在智能化、自动化高新技术的驱动下,智能家居行业进入了飞速发展时期,很多智能设备都慢慢走近了我们的生活,比如阿里的天猫精灵、小米的小爱音箱还有百度的小度音箱。它们在智能家居中一般都是用来控制一些智能设备比如智能插座、智能电灯泡、智能洗衣机什么的。它们之间的系统设计如大致如下所示:

大致的流程我在这里简单说一下,如有错的地方,希望能指出!

先说说支持联网的设备吧,通常我们买到一个天猫精灵和一个智能插座通常要做这几件事情:

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的智能家居控制系统设计相关推荐

  1. 基于ARM开发板的智能家居控制系统设计

    本文章设计流程可以作为视频讲解的补充 视频链接:智能家居控制系统 一.硬件介绍: 1.ARM A53开发板 2.显示触摸屏(800 X 480) 3.蓝牙模块(HC-08,串口通信) 4.电话模块(G ...

  2. 基于树莓派的智能家居控制系统设计论文参考

    完整论文咨询可WX联系:gyf1842965496 智能家居控制系统功能实现详细介绍:基于树莓派的智能家居控制系统设计https://blog.csdn.net/G1842965496/article ...

  3. 基于STM32设计的智能家居控制系统设计_语音+环境检测(OneNet)_2022

    1. 前言 如今的智能家居越来越深入人心,越来越受人们的欢迎.智能家居作为与人们日常生活息息相关的科技智能产物,可以给我们的生活带来舒适便利.随着物联网.云计算.无线通信等新技术的发展,智能家居得到了 ...

  4. 基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料)

    基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 设计编号:C0053 主要功能: 1. ...

  5. 基于树莓派的智能家居控制系统设计

    基于树莓派的智能家居控制系统设计 完整文件下载 基于树莓派的智能家居控制系统设计 https://download.csdn.net/download/G1842965496/85802405 一.功 ...

  6. 基于ANDROID的智能家居控制系统设计

    pe基于Android的智能家居控制系统设计 配套论文

  7. ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现

    文章目录 ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现 一.绪论 1.1 研究背景与意义 1.2 国内外研究现状分析 1.3 研究内容与目标 1.4 ...

  8. 写基于stm32智能家居控制系统设计论文

    写作一篇基于STM32的智能家居控制系统设计论文需要涵盖以下内容: 简要介绍STM32微控制器的硬件特性和软件开发环境: 分析当前市场上关于智能家居控制系统的发展现状,并阐述为什么选择STM32作为系 ...

  9. android 智能设备管理,基于Android平台上BLE的智能家居控制系统设计与实现

    摘 要:基于智能家居无线控制的市场需求,以集成了CSR1010低功耗蓝牙芯片的智能插座为例,在Android平台上设计了一套基于蓝牙4.0通信协议的智能家居控制系统,实现了对此智能插座的无线通断电控制 ...

最新文章

  1. php随机数字总和固定,php 随机生成固定长度整数、各种服务器请求方法
  2. ftp之高级配置——虚拟用户
  3. SharePoint Server和Office 365之间的混合模式集成概述
  4. 计算机操作系统——经典进程的同步问题
  5. Prim和Kruskal求最小生成树
  6. block,inline和inline-block
  7. docker增加端口映射_docker配置lamp环境笔记
  8. CDN---共享单车算啥,阿里云发布共享网络黑科技PCDN,降低视频行业75%的成本
  9. python程序写完怎么保存_python程序如何进行保存
  10. 动易模板——制作前的准备工作
  11. hyperterminal使用教程_Win 7 使用 XP的超级终端 hyper terminal
  12. Python开源机器学习项目实战
  13. 光电耦合器的隔离作用是什么?
  14. SpringBoot应用监控(带邮件警报)
  15. Windows_Program_Via_C_Translate_Win32编程的背景知识/基础知识_包括基本输入输出机制介绍...
  16. 如何将大量图片文件合并成一个*.bin文件
  17. 救灾帐篷惊现高档小区
  18. oracle apex global,Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
  19. 微信小程序 发送模板消息的功能实现
  20. 浅谈子网、子网掩码、保留地址

热门文章

  1. mysql gis index 索引原理_从原理到优化,深入浅出数据库索引
  2. php设置页面最小高度,HTML_CSS布局中最小高度的妙用,最小高度可以设定一个BOX的最 - phpStudy...
  3. 鸿蒙系统华为mate10,从3899跌至1040,2K分辨率+4000mAh,可升级鸿蒙系统
  4. Algorithm Set:floyd判环法
  5. 吴恩达机器学习练习4:神经网络学习(反向传播)
  6. Redis基础(十二)——缓存读写策略
  7. Redis基础(七)——事件、服务器、客户端、多线程
  8. 有谁了解 最基础的计算机的网络结构呢?
  9. angular使用动态组件后属性值_Angular 2-组件
  10. MySQL单表删除重复列SQL语句