0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

李泳瑜 来源:我不吃鱼 作者:我不吃鱼 2022-07-28 08:02 次阅读

智能家居设备正变得越来越普遍,这要归功于远程控制的可能性和配置的便利性。灯、智能插头、恒温器和气象站只是智能家居设备中最常见的一些例子,如今主要配备 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 网络,而无需修改电路板上的固件。该操作构成了构建完整智能家居应用程序的基础和基本要求。在以后的文章中,我们将看到如何通过创建一个完整的操作智能设备来扩展这个项目。

审核编辑:郭婷

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

    关注

    38

    文章

    7141

    浏览量

    161973
  • WIFI
    +关注

    关注

    81

    文章

    5159

    浏览量

    199409
  • 智能家居
    +关注

    关注

    1912

    文章

    9145

    浏览量

    179315
收藏 人收藏

    评论

    相关推荐

    nodemcu和esp8266是什么关系?

    是芯片在esp8266芯片加上4MB spi flash变成esp-12模块;再在esp-12模块加上底板,加上USB转串口就变成NodeM
    的头像 发表于 10-20 14:53 2253次阅读
    nodemcu和<b class='flag-5'>esp8266</b>是什么关系?

    机智云AIoT+ESP8266+物联网智能家居控制系统

    本文介绍的智能家居控制系统是由嘉应学院管嘉诚等人设计开发完成。该系统通过ESP8266与机智云物联网平台的服务器互联,使用智能手表远程控制解决老式
    的头像 发表于 08-05 08:13 456次阅读
    机智云AIoT+<b class='flag-5'>ESP8266</b>+物联网<b class='flag-5'>智能家居</b>控制系统

    IoT毕设 | 机智云AIoT+ESP8266+物联网智能家居控制系统

    本文介绍的智能家居控制系统是由嘉应学院管嘉诚等人设计开发完成。该系统通过 ESP8266 与机智云物联网平台的服务器互联,使用智能手表远程控制解决老式
    的头像 发表于 08-04 18:15 831次阅读
    IoT毕设 | 机智云AIoT+<b class='flag-5'>ESP8266</b>+物联网<b class='flag-5'>智能家居</b>控制系统

    ESP8266结构原理 ESP8266智能家居控制系统设计案例

      摘要:该设计完成了基于ESP8266智能家居控制系统,该系统通过局域网完成对家居设备的组网,能实现对室内环境中温湿度和可燃气体浓度的检测,用户可以通过终端电子
    发表于 07-20 14:32 2次下载

    采用ESP8266和Philips Hue的智能家居自动化灯

    电子发烧友网站提供《采用ESP8266和Philips Hue的智能家居自动化灯.zip》资料免费下载
    发表于 07-11 14:32 0次下载
    采用<b class='flag-5'>ESP8266</b>和Philips Hue的<b class='flag-5'>智能家居</b>自动化灯

    基于STM32设计的智能家居控制系统(华为云IOT)

    设计了一款基于华为云物联网平台的智能家居控制系统,硬件采用了STM32和ESP8266的组合,实现了设备的上云连接。
    的头像 发表于 07-11 13:58 2042次阅读
    基于STM32设计的<b class='flag-5'>智能家居</b>控制系统(华为云IOT)

    ESP8266的RFID智能门锁

    电子发烧友网站提供《带ESP8266的RFID智能门锁.zip》资料免费下载
    发表于 07-06 10:07 0次下载
    带<b class='flag-5'>ESP8266</b>的RFID<b class='flag-5'>智能</b>门锁

    如何将ESP8266 NodeMCU用作WiFi无线电

    电子发烧友网站提供《如何将ESP8266 NodeMCU用作WiFi无线电.zip》资料免费下载
    发表于 07-05 11:37 1次下载
    <b class='flag-5'>如何将</b><b class='flag-5'>ESP8266</b> NodeMCU用作WiFi无线电

    灵活的ESP8266ESP32初始设备配置

    电子发烧友网站提供《灵活的ESP8266ESP32初始设备配置.zip》资料免费下载
    发表于 06-19 16:15 2次下载
    灵活的<b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32初始<b class='flag-5'>设备</b>配置

    智能家居:带Alexa和Amazon Echo的ESP8266/ESP32

    电子发烧友网站提供《智能家居:带Alexa和Amazon Echo的ESP8266/ESP32.zip》资料免费下载
    发表于 06-19 10:46 0次下载
    <b class='flag-5'>智能家居</b>:带Alexa和Amazon Echo的<b class='flag-5'>ESP8266</b>/<b class='flag-5'>ESP</b>32

    ESP8266初次如何实现无线通信(基于电脑与ESP8266)

    一.需要的软件及硬件 1.软件 2.硬件 二.ESP8266的使用 .ESP8266的介绍 2.ESP8266进行初始AT指令的配置步骤 三.所用软件安装分享 ESP8266
    发表于 05-30 09:53 14次下载
    <b class='flag-5'>ESP8266</b>初次如何实现无线通信(基于电脑与<b class='flag-5'>ESP8266</b>)

    如何利用ESP8266构建自动植物浇水系统?

    最近在网上看到很多人在做智能家居设备,引起了我的兴趣,于是就做了一个可以上网的自动浇水神器。我的设备的编程基于 DFRobot 自动浇水套件。采用ESP8266模块,浇花套件可以实现实
    发表于 05-22 07:16

    ESP8266如何将NodeMCU连接到局域网?

    我正在研究 ESP8266 ESP-12E WiFi 模块来打开和关闭 LED。 是的,我能够在 Wifiserver 和 NodeMCU 的帮助下打开/关闭 LED。 问题是我想将 NodeMCU
    发表于 05-16 08:49

    如何将ESP8266连接到Google表格?

    我正在尝试通过 ESP8266 模块数据从 arduino 连接到 google 表格。我没有使用节点 mcu,这是大多数教程的基础。我有一个连接到 arduino mega
    发表于 05-08 08:13

    如何将额外数据从lwip传输到ESP8266WiFiSTA?

    ,这对我说 IDE 没有使用 WiFiClient 因此它必须使用 ESP8266WiFiSTA 而不是但现在我迷路了如何将额外数据从 lwip 传输到 ESP8266WiFiSTA 或者我是否在正确的地方寻找。
    发表于 05-08 06:08