怎么使用esp8266WiFi模块,js连接mqtt,实现简单的智能家居控制?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么使用esp8266WiFi模块,js连接mqtt,实现简单的智能家居控制?相关的知识,希望对你有一定的参考价值。

如果您是想通过esp8266WiFi模块的MQTT协议来实现智能家居控制的话,可以了解一下支持MQTT协议的esp8266WiFi模块,比如SKYLAB的WG219/WG229以及WG231。

MQTT WiFi模块

MQTT 最初由 IBM 于上世纪 90 年代晚期发明和开发。它最初的用途是将石油管道上的传感器与卫星相链接。顾名思义,它是一种支持在各方之间异步通信的消息协议。异步消息协议在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息队列毫无关系,而是使用了一个发布和订阅的模型。在 2014 年末,它正式成为了一种 OASIS 开放标准,而且在一些流行的编程语言中受到支持(通过使用多种开源实现)。

物联网设备选择MQTT协议的原因分析

物联网 (IoT) 设备必须连接互联网。通过连接到互联网,设备就能相互协作,以及与后端服务协同工作。互联网的基础网络协议是 TCP/IP。MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的,已成为 IoT 通信的标准。

MQTT 是一种轻量级的、灵活的网络协议,致力于为 IoT 开发人员实现适当的平衡:

1、这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现。

2、它的灵活性使得为 IoT 设备和服务的多样化应用场景提供支持成为可能。

WG219

WG219是一款基于ESP8266芯片方案的小尺寸低功耗低成本串口WiFi模块,符合802.11b / g / n 无线模块标准,支持UART-WiFi -以太网数据传输。专为移动设备和物联网应用设计,可将用户的物理设备连接到WiFi无线网络上,进行互联网或局域网通信,实现联网功能。

WG229

WG229是一款基于ESP8266芯片方案的小尺寸低功耗低成本串口WiFi模块,符合802.11b / g / n 无线模块标准,支持UART-WiFi -以太网数据传输。专为移动设备和物联网应用设计,可将用户的物理设备连接到WiFi无线网络上,进行互联网或局域网通信,实现联网功能。另外WG229仅需要通过出串口使用AT指令控制,就能满足大部分的网络功能需求。WG229高性能、低功耗、低成本、支持串口透传等特性,使得WG229在高集成、低功耗自动化和传感器解决方案的理想解决方案,WG229和LCS6260 Pin对Pin兼容,可替代ESP8266方案的ESP-12F。

支持MQTT协议的IoT UART接口WiFi模块也都是支持对接云端服务的。LCS6260支持对接阿里云、涂鸦云,WG219/WG229/WG231支持对接阿里云。

参考技术A 开发资源
1、Esp8266 Wi-Fi模块
2、机智云串口调试软件
3、51单片机或者STM32单片机或者其它单片机
4、Windows 10

主要设计思路
一句话概括:将esp8266 Wi-Fi 模块连接上能上网的路由器(手机开热点作为路由器也行),连接过程需要做一些配置,以跟机智云平台对接。之后智能终端(手机或平板)跟Wi-Fi模块绑定后即可远程或者局域网控制设备。
简易介绍机智云官方提供的文档资料
机智云给开发者提供了大量开发支持,如开源的安卓/苹果SDK、APP等,开发者直接在开源的架构上二次开发即可,从而减少开发工作量。文档中心提供大量的接入教程,非常详细,此处不再重复说明。
机智云官方文档中心链接:http://docs.gizwits.com/zh-cn/overview/overview.html
步骤一:
我们要将自己的Wi-Fi模组跟机智云对接,必须对Wi-Fi模组烧录机智云官方给的GAgen固件。硬件厂商对硬件智能化的第一步是让设备能够联网,GAgent是机智云提供的一款兼容国内主流Wi-Fi模块、移动网络模块的模组系统。硬件厂商只需理解如何与GAgent进行通讯即可。
详细教程链接地址:http://docs.gizwits.com/zh-cn/GCP/wmodule/ESP8266.html#ESP8266
步骤二:
在机智云平台注册一个属于自己的账号。
1、创建产品
2、创建数据点
3、根据需求选择MCU开发或者SOC开发。MCU开发就是在51/STM32等单片机开发,代码可自动生成,不需要懂协议即可开发。SOC开发是指直接在ESP8266上开发。注意:自动生成的代码,MCU运行环境至少要有2K的RAM左右的大小,如果是普通的51单片机,RAM一般不足1K,STC15系列有2K大小的RAM,STM32基本所有系列RAM大小都超过2K。如果RAM不够的单片机,就需要自己懂协议,才能开发。协议其实也挺简单,无非就是一些你发数据包,我解析后回复给你数据,有来有往。
4、手机安装机智云开源的APP,进行调试测试
5、.......
详细教程:http://docs.gizwits.com/zh-cn/quickstart/UseMCU.html
步骤三:
建议直接使用机智云封装好的协议,直接自动生成包含协议相关的代码,前提是,你得保证你的单片机拥有超过2K的RAM大小空间。如果不满足RAM大小的单片机,则自己根据协议文档编写代码,通信协议在《开发向导》里下载,如图下所示。
根据文档协议写测试代码的时候,可以不着急在单片机上测试,机智云提供了一个串口调试助手,可在这里先测试好。
机智云机智云串口工具使用文档:http://docs.gizwits.com/zh-cn/deviceDev/%E4%B8%B2%E5%8F%A3%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.html
关于单片机上的应用开发,不管开发什么产品,协议上报数据格式都是固定不变的。遇到问题多看机智云官方给的教程即可解决绝大部分问题。
参考技术B

    去乐鑫官方网站,它家做的ESP8266芯片,所以什么资料都有

    强大的乐鑫论坛8266源码,APP源码都有下载,还有现成的固件和APP,烧录好就能远程控制

    AT,SDK看你学会了哪一种,随你自己发挥

    百度吧,网址不好发

检查 Wifi NVS 数据

【中文标题】检查 Wifi NVS 数据【英文标题】:Checking Wifi NVS data 【发布时间】:2021-04-03 09:11:59 【问题描述】:

这是我的情况:

Wifi NVS 闪存已启用。 我正在使用 esp_wifi_get_config 来查看 wifi 配置是否保存在 NVS 中。我的代码是:

wifi_config_t conf;
 ret = esp_wifi_get_config(ESP_IF_WIFI_STA, &conf);
if (ret == ESP_OK)
    

  ESP_LOGI(TAG, "Wifi configuration already stored in flash partition called NVS");
ESP_LOGI(TAG, "%s" ,conf.sta.ssid);
ESP_LOGI(TAG, "%s" ,conf.sta.password);
    
else
    

ESP_LOGI(TAG, "Wifi configuration not found in flash partition called NVS.");    
    configure_wifi();
    

它按预期工作。然后我擦除然后使用 nvs_flash_erase(); 初始化我的 nvs; nvs_flash_init();在上面写的代码之前。现在我的输出是

I (697) Wifi station: Wifi configuration already stored in flash partition called NVS

I (707) Wifi station:

I (707) Wifi station:

我的方法对吗?如果不是,那么在配置wifi之前检查Wifi nvs数据的正确方法是什么?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,发现无法通过检查返回值来检查从 nvs 加载 wifi_config 是否成功。

我通过检查来自 NVS 的数据的字符串长度解决了这个问题,通常在擦除闪存后填充为 0xff。

wifi_config_t wifi_config;
esp_wifi_get_config(ESP_IF_WIFI_STA, &wifi_config);

//You could check if more values are set but I figured out that only ssid
//or password is necessary to check against
if(strlen(&wifi_config.sta.ssid) == 0 || strlen(&wifi_config.sta.password) == 0) 
    //do here your error handling
 else 
    //use sucessfully retreived wifi_config
    esp_wifi_set_config(WIFI_IF_STA, &wifi_config));

【讨论】:

以上是关于怎么使用esp8266WiFi模块,js连接mqtt,实现简单的智能家居控制?的主要内容,如果未能解决你的问题,请参考以下文章

ESP8266 WIFI模块连接外网问题

Esp8266-12F无线模块,怎样连接智慧节点?还需要刷固件吗?怎么刷?

如何单片机通过wifi模块ESP8266连接外网web网页。

ESP8266串口怎么连接外部设备?

打算用51单片机和ESP8266wifi模块做个无线传数据的东西,但是不知道怎么控制wifi模块发送数据

ESP8266 WIFI模块可以直接链接arduino吗