如何将ESP8266变成智能家居设备

电子说

1.2w人已加入

描述

  智能家居设备正变得越来越普遍,这要归功于远程控制的可能性和配置的便利性。灯、智能插头、恒温器和气象站只是智能家居设备中最常见的一些例子,如今主要配备 WiFi 通信接口。任何有机会使用众多智能 WiFi 灯或灯泡之一的人都知道将设备连接到 WiFi 网络并远程控制其操作是多么快速和简单。我们如何在小型ESP8266设备上重现这种行为,将其变成智能家居设备?

  介绍

  在本文中,将解释嵌入式设备如何在不知道其凭据的情况下连接到 WiFi 网络(通常是安全的)。由于智能设备没有任何键盘或触摸屏显示器,用户无法输入 WiFi SSID 和密码。那么,商业设备如何在无需上传新固件的情况下连接到 WiFi 网络呢?

  德州仪器 (Texas Instruments) 为简化嵌入式设备与家庭 WiFi 网络的连接而开发的SmartConfig技术解释了这个明显的谜团:此操作只需一次,并且由一个简单的步骤组成。在本文的后续部分,我们将介绍在 Espressif Systems 开发的ESP8266系列设备上激活 SmartConfig 功能的必要程序,这是一款提供 WiFi 接口并适合支持智能家居应用的廉价板。

  工作原理

  尽管德州仪器尚未发布任何真正的 SmartConfig 公有文档,但其操作原理相对简单。连接到家庭 WiFi 网络的主机设备(智能手机、平板电脑或 PC)向虚构的接收者发送 UDP 数据包,其中包含用于访问 WiFi 网络的 SSID 和密码。仍未连接的智能设备正在侦听和监视网络上传输的数据包的流量。

  当客户端识别到主机发送的数据包时,它会对其进行解码,提取用于访问 WiFi 网络的凭据,并将它们存储在自己的非易失性存储器中,以便在每次上电时重复使用。从这一刻起,智能设备将能够连接到 WiFi 网络,而无需任何外部干预。如果设备随后将被移动到另一个 WiFi 网络的范围内(例如在另一个房子中),则应重复相同的过程以获取新的凭证。

  图 1所示的移动设备配备了一个特殊的应用程序,该应用程序连接到家庭 WiFi 网络,将一系列 UDP 数据包传输到 WiFi 接入点 (AP)。在这些数据包的长度字段中,应用程序对 WiFi 网络的 SSID 和密码进行编码。在智能设备上启用 SmartConfig 功能时,对长度字段的内容进行解码以提取访问网络的凭据。

  通过网络发送的数据包的结构符合IEEE 802.3 标准。具体而言,数据链路头由 14 个字节组成:6 个字节用于目标地址,6 个字节用于源地址,2 个字节指定数据字段的长度。之所以选择在 2 字节长度字段中输入有关 WiFi 网络的信息的原因非常简单:即使在接入点上激活了安全连接,该字段也不会被编码。

  SmartConfig 功能由用于通过Arduino IDE开发草图的ESP8266 WiFi 库完全集成和支持。API 接口非常简单:在“站”模式下配置 WiFi 收发器后,草图中唯一要使用的功能如下:

  • bool beginSmartConfig() – 在设备上启用 SmartConfig 功能。如果成功,则返回 true,否则返回 false;

  • bool smartConfigdone() – 它是更相关的函数:当设备已通过Sm​​artConfig 协议正确配置并已建立WiFi 连接时,它返回true;

  • bool stopSmartConfig() – 此函数禁用设备上的SmartConfig 功能。此功能的使用是可选的,在我们的草图中根本不会使用。

  草图

  所有处理都在setup函数内部执行。最初,WiFi 连接配置为站模式,并初始化串行线路波特率。随后,如果设备在 10 秒超时后未能使用其非易失性存储器中包含的信息连接到 WiFi 网络,则调用beginSmartConfig函数以启用此功能。然后,草图进入一个循环,无限期地等待应用程序发送的 UDP 数据包的到达和随后的解码。

  发生这种情况时,smartConfigDone函数返回一个非零值,草图退出循环并在串行线路上显示一条消息,其中包含用于连接到 WiFi 网络的凭据和 DHCP 服务器分配的 IP 地址。后续连接将使用相同的凭据。除了在串口线上发送的调试信息外,Sketch 还使用板载 LED 显示程序所在的阶段,根据以下方案:

  • LED 亮起:设备尝试连接到 WiFi 网络的初始阶段;

  • LED 闪烁:设备正在等待主机 UDP 数据包;

  • LED 熄灭:设备已连接到 WiFi 网络。

  #include

  #include

  void setup()

  {

  int retry=0, config_done=0;

  // 在站模式下配置 WiFi

  WiFi.mode(WIFI_STA);

  // 配置串口波特率

  Serial.begin(9600);

  // 将板载 LED 配置为输出引脚

  pinMode(16, OUTPUT);

  // 打开 LED

  digitalWrite(16, LOW);

  // 检查是否可以建立 WiFi 连接

  Serial.println(“Attempt to connect to WiFi network.。.”);

  而(WiFi.status()!= WL_CONNECTED)

  {

  Serial.print(“。”);

  延迟(500);

  if (retry++ 》= 20) // 连接超时为 10 秒

  {

  Serial.println(“连接超时已过期!启动 SmartConfig.。.”);

  WiFi.beginSmartConfig();

  // 永远循环:仅在接收到 SmartConfig 数据包时退出

  while (true)

  {

  delay(500);

  Serial.print(“。”);

  if (WiFi.smartConfigDone())

  {

  Serial.println(“nSmartConfig 配置成功”);

  配置完成=1;

  休息; // 退出循环

  }

  切换LED();

  }

  if (config_done==1)

  中断;

  }

  }

  // 关闭 LED

  digitalWrite(16, HIGH);

  // 等待 IP 地址分配

  while(WiFi.status() != WL_CONNECTED)

  {

  delay(50);

  }

  // 显示 WiFi 连接数据

  Serial.println(“”);

  WiFi.printDiag(串行);

  // 显示分配给我们设备的 IP 地址

  Serial.println(WiFi.localIP());

  }

  void loop()

  {

  // 无事可做!

  }

  无效切换LED()

  {

  静态int pinStatus = LOW;

  如果(pinStatus==HIGH)

  pinStatus=LOW;

  否则

  pinStatus=HIGH;

  数字写入(16,pinStatus);

  }

  必须将草图加载并编译到先前配置为支持ESP8266 系列板的Arduino IDE环境中。在启动构建之前,请确保工具菜单中的 Erase Flash:“Sketch+WiFi 设置”选项已启用。此选项会删除任何以前存储的用于访问 WiFi 网络的凭据。

  该应用程序

  要配置设备,我们将使用可从 Google Play 免费下载的ESP8266 SmartConfig 应用程序。安装后,确保移动设备连接到您要连接 ESP8266 的同一 WiFi 网络。在应用程序的主窗口中,检查网络 SSID 是否正确,然后在下面的文本框中输入密码。然后按页面底部的 CONFIRM 按钮,将帧长度字段中编码的 SSID 和密码信息发送到如上所述的 ESP8266。

  几秒钟后,我们将获得智能设备成功配置的确认,如应用程序和串行监视器上的日志所示。

  此时您可以按下确认按钮并关闭应用程序,除非您想将智能设备连接到另一个 WiFi 网络或更改访问凭据(SSID 和/或密码),否则将不再需要此操作。从现在开始,ESP8266 可以独立连接到 WiFi 网络,使用通过 SmartConfig 接收并存储在内部 eeprom 内存中的信息。

  项目跟进

  本文中的草图旨在作为开发完整智能家居设备项目的基础。虽然这些方面将在后面的文章中更详细地讨论,但我们已经可以突出显示我们可以对项目进行的一些扩展。首先,可以通过在 WiFi 连接之后的阶段插入能够处理来自远程客户端的连接请求的 Web 服务器来修改草图。因此,可以通过任何智能手机、平板电脑或 PC 与智能设备进行交互:我们只需使用互联网浏览器连接到设备即可。下一步可能是将继电器连接到 ESP8266 板并远程控制连接到它们的负载的开/关,添加温度、湿度、亮度、RGB 或其他传感器。所有这些设备都将以简单有效的方式远程控制。以同样的方式操作,我们可以构建一个智能插座或 WiFi 灯。

  结论

  我们在本文中已经看到,通过几个简单的步骤,可以通过 SmartConfig 协议配置普通的 ESP8266 卡,使其连接到所需的 WiFi 网络,而无需修改电路板上的固件。该操作构成了构建完整智能家居应用程序的基础和基本要求。在以后的文章中,我们将看到如何通过创建一个完整的操作智能设备来扩展这个项目。

  审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分