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 网络,而无需修改电路板上的固件。该操作构成了构建完整智能家居应用程序的基础和基本要求。在以后的文章中,我们将看到如何通过创建一个完整的操作智能设备来扩展这个项目。

审核编辑:郭婷

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

    关注

    39

    文章

    7769

    浏览量

    172436
  • WIFI
    +关注

    关注

    82

    文章

    5543

    浏览量

    214795
  • 智能家居
    +关注

    关注

    1945

    文章

    10056

    浏览量

    198034
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于STM32与机智云的智能家居系统(完整项目)

    显示、ESP8266-01S接入云端,实现手机APP远程监测、模式切换、手动/自动控制与报警提醒。本文设计基于STM32F103C8T6与机智云的智能家居控制系统
    的头像 发表于 05-15 18:04 191次阅读
    基于STM32与机智云的<b class='flag-5'>智能家居</b>系统(完整项目)

    智能家居与IoT设备如何选择无线模块?ESP32-C5 两大模块详解

    ESP32-C5-WROOM-1 与 ESP32-C5-MINI-1 都基于新一代 WiFi 6 多协议无线平台,具备 Bluetooth LE、Zigbee 和 Thread 等丰富连接能力,能够满足智能家居、工业物联网
    发表于 04-08 14:14

    ESP8266系列】WT8266-S3模组规格书

    概述ESP-07S(WT8266-S3)Wi-Fi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的
    的头像 发表于 02-05 18:04 326次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S3模组规格书

    ESP8266系列】WT8266-S5模组规格书

    概述ESP-12F(WT8266-S5)WiFi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需
    的头像 发表于 02-05 18:03 530次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S5模组规格书

    ESP8266系列】WT8266-S6模组规格书

    ESP-12S(WT8266-S6)Wi-Fi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求
    的头像 发表于 02-05 18:03 476次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S6模组规格书

    ESP8266系列】WT8266-S1模组产品介绍

    WT8266-S1WiFi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求。该模块核心处理器ESP82
    的头像 发表于 01-29 18:22 794次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S1模组产品介绍

    ESP8266系列】WT8266-S6模组产品介绍

    ESP-12S(WT8266-S6)Wi-Fi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求
    的头像 发表于 01-29 18:22 554次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S6模组产品介绍

    多控制模式的智能家居系统设计

    随着物联网技术的发展,智能家居的需求不断增加,但仍存在设备兼容性差和成本高等问题。本文提出了一种基于STM32单片机的多模式智能家居控制系统,该系统通过温湿度、光照强度和烟雾浓度传感器与OLED
    的头像 发表于 01-15 18:01 966次阅读
    多控制模式的<b class='flag-5'>智能家居</b>系统设计

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!【往期精选】十年嵌入式最深的痛,不是Bug,而是抓不到日志!vivo宣布原生支持HomeAssistant生态设备接入(含
    的头像 发表于 01-10 10:01 1767次阅读
    无需安装!在浏览器里就能玩转<b class='flag-5'>ESP</b>32/<b class='flag-5'>ESP8266</b>,这个神器绝了!

    基于芯源CW32 MCU智能家居照明控制系统设计与实现

    。 光照传感器:用于检测环境亮度,自动调节灯光亮度。 Wi-Fi模块(如ESP8266):实现与手机应用或智能音箱的无线通信,远程控制照明系统。 继电器模块:控制灯光的开关。 按键/触摸面板:用户在本地可以
    发表于 12-03 06:06

    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

    【应用】国产26MHz频率晶振应用于物联网WIFI物联网模块(串口转WiFi模块),Espressif(乐鑫)ESP8285/ESP8266芯片匹配测试OKESP8285其实是ESP8266的升级版
    的头像 发表于 11-21 15:37 5096次阅读
    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) <b class='flag-5'>ESP</b>8285/<b class='flag-5'>ESP8266</b>芯片案例

    ESP8266ESP32开发板常见的2种下载方式

    ESP32和ESP8266是性价比很高而且使用较为广泛的的Wi-Fi模块,在物联网(IoT)领域的DIY项目中可以首先考虑这2款产品。 两款芯片都属于32位处理器。ESP32是低功耗双核80MHz
    的头像 发表于 11-10 20:30 1568次阅读
    <b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32开发板常见的2种下载方式

    ESP8266ESP32开发板常见的2种下载方式

    协议,完整的 TCP/IP 协议栈以及蓝牙协议栈。用户可以使用这两款模块为现有的设备添加WIFI联网功能或蓝牙(ESP32),轻松的构建独立的网络控制器和远程控制监控设备ESP8266
    发表于 10-24 18:04

    基于智能家居项目 完结散花

    一、项目目标通过机智云平台,快速实现以下功能:MCU+ESP8266实现单点控制实现多点控制(如多个按键控制一个设备)实现MCU数据上报至云端实现获取网络时间(NTP)二、机智云平台简介机智云
    的头像 发表于 07-31 18:03 781次阅读
    基于<b class='flag-5'>智能家居</b>项目  完结散花

    STM32+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    本教程详细介绍如何将STM32微控制器与ESP8266Wi-Fi模块连接到机智云平台,实现温湿度数据的上传与继电器的远程控制。通过此过程,您将学会如何配置机智云平台,烧录ESP8266
    的头像 发表于 07-15 18:54 1636次阅读
    STM32+<b class='flag-5'>esp8266</b>连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)