基于ESP8266上云实验
ESP8266篇
由于AT固件的配置过于麻烦,所以使用了MQTT固件进行配置。
ESP8266 - MQTT固件
由于购买回来的ESP8266-01S默认的是AT固件,现在需要用到MQTT指令,所以需要将其刷到AT固件
MQTT 固件 : https://docs.ai-thinker.com/_media/1471_esp8266-at_mqtt-1m.zip
刷固件软件 :https://docs.ai-thinker.com/_media/flash_download_tool_v3.8.5_1.zip
将以上两个文件均下载,保存。
打开刷固件软件 - 选择ESP8266 -> DOWNLOADTOLL -> 将固件包导入
其余配置如图所示,配置完可以点击START
遇到的问题
RST和INT0需用杜邦线接地,然后把RST悬空。点击START后,会显示等待上电同步,需插拔一下3.3V电源线,然后就能跑起来
设置SPI SPEED 为 20Mhz 和 SPI MODE 为 DIO、 波特率为115200
没有勾选固件,也是能跑,但跑了个寂寞
刷完固件,需重新启动一下,然后通过串口查询当前的固件版本 AT+GMR
ESP8266 - MQTT配置指令
指令 |
|
配置 STA 模式 |
AT+CWMODE=1 |
连接路由器 |
AT+CWJAP="wifi_Name","wifi_Password" |
配置MQTT属性 |
AT+MQTTUSERCFG=0,1,"clientID","username","password",0,0,"" |
连接制定的 MQTT broker |
AT+MQTTCONN=0,"47.111.117.220",1883,0 |
查询 MQTT 连接状态 |
AT+MQTTCONN? |
订阅 topic 数据 |
AT+MQTTSUB=0,"topicName",1 |
发布 topic 数据 |
AT+MQTTPUB=0,"topicName","payload",1,0 |
指令解析
MQTT AT Commands — ESP-AT 用户指南 文档 (espressif.com)
AT+CWMODE : 查询/设置WI-FI模式
功能 |
命令 |
响应 |
查询 ESP 设备的 Wi-Fi 模式 |
AT+CWMODE? |
+CWMODE: mode OK |
设置 ESP 设备的 Wi-Fi 模式 |
AT+CWMODE= mode [, auto_connect ] |
OK |
mode :模式
0: 无 Wi-Fi 模式,并且关闭 Wi-Fi RF
1: Station 模式
2: SoftAP 模式
3: SoftAP+Station 模式
auto_connect :切换 ESP 设备的 Wi-Fi 模式时(例如,从 SoftAP 或无 Wi-Fi 模式切换为 Station 模式或 SoftAP+Station 模式),是否启用自动连接 AP 的功能,默认值:1。参数缺省时,使用默认值,也就是能自动连接。
0: 禁用自动连接 AP 的功能
1: 启用自动连接 AP 的功能,若之前已经将自动连接 AP 的配置保存到 flash 中,则 ESP 设备将自动连接 AP
AT+CWJAP : 连接AP
功能 |
命令 |
响应 |
查询与 ESP Station 连接的 AP 信息 |
AT+CWJAP? |
+CWJAP: ssid , bssid , channel , rssi , pci_en , reconn_interval , listen_interval , scan_mode , pmf OK |
设置 ESP Station 需连接的 AP |
AT+CWJAP=[ ssid ],[ pwd ][,][, pci_en ][,][, listen_interval ][,][, jap_timeout ][,] |
WIFI CONNECTED - WIFI GOT IP -OK [WIFI GOT IPv6 LL] - [WIFI GOT IPv6 GL] |
+CWJAP: error code ERROR |
参数
ssid :目标 AP 的 SSID
如果 SSID 和密码中有 ,、"、\ 等特殊字符,需转义
pwd :密码最长 64 字节 ASCII
ssid :目标 AP 的 SSID
如果 SSID 和密码中有 ,、"、\\ 等特殊字符,需转义
pwd :密码最长 64 字节 ASCII
listen_interval :监听 AP beacon 的间隔,单位为 AP beacon 间隔,默认值:3,范围:[1,100]
listen_interval :监听 AP beacon 的间隔,单位为 AP beacon 间隔,默认值:3,范围:[1,100]
error code :错误码,仅供参考
1: 连接超时
2: 密码错误
3: 无法找到目标 AP
4: 连接失败
其它值: 发生未知错误
AT+MQTTUSERCFG:设置 MQTT 用户属性
功能 |
命令 |
响应 |
设置 MQTT 用户属性 |
AT+MQTTUSERCFG= LinkID , scheme , "client_id" , "username" , "password" , cert_key_ID , CA_ID , "path" |
OK |
参数
LinkID :当前仅支持 link ID 0。
scheme :由于 ESP8266 内存限制,不支持 MQTT over TLS,即 scheme 只能取 1 或 6。
1: MQTT over TCP;
2: MQTT over TLS(不校验证书);
3: MQTT over TLS(校验 server 证书);
4: MQTT over TLS(提供 client 证书);
5: MQTT over TLS(校验 server 证书并且提供 client 证书);
6: MQTT over WebSocket(基于 TCP);
7: MQTT over WebSocket Secure(基于 TLS,不校验证书);
8: MQTT over WebSocket Secure(基于 TLS,校验 server 证书);
9: MQTT over WebSocket Secure(基于 TLS,提供 client 证书);
10: MQTT over WebSocket Secure(基于 TLS,校验 server 证书并且提供 client 证书)。
client_id :MQTT 客户端 ID,最大长度:256 字节。
username :用户名,用于登陆 MQTT broker,最大长度:64 字节。
password :密码,用于登陆 MQTT broker,最大长度:64 字节。
cert_key_ID :证书 ID,目前 ESP-AT 仅支持一套 cert 证书,参数为 0。
CA_ID :CA ID,目前 ESP-AT 仅支持一套 CA 证书,参数为 0。
path :资源路径,最大长度:32 字节。
AT+MQTTCONN:连接 MQTT Broker
功能 |
命令 |
响应 |
查询 ESP 设备已连接的 MQTT broker |
AT+MQTTCONN? |
+MQTTCONN: LinkID , state , scheme "host" , port , "path" , reconnect OK |
连接 MQTT Broker |
AT+MQTTCONN= LinkID , "host" , port , reconnect |
OK |
参数¶
LinkID :当前仅支持 link ID 0。
host :MQTT broker 域名,最大长度:128 字节。
port :MQTT broker 端口,最大端口:65535。
path :资源路径,最大长度:32 字节。
reconnect :
0: MQTT 不自动重连;
1: MQTT 自动重连,会消耗较多的内存资源。
state :MQTT 状态:
0: MQTT 未初始化;
1: 已设置 AT+MQTTUSERCFG;
2: 已设置 AT+MQTTCONNCFG;
3: 连接已断开;
4: 已建立连接;
5: 已连接,但未订阅 topic;
6: 已连接,已订阅过 topic。
scheme :
1: MQTT over TCP;
2: MQTT over TLS(不校验证书);
3: MQTT over TLS(校验 server 证书);
4: MQTT over TLS(提供 client 证书);
5: MQTT over TLS(校验 server 证书并且提供 client 证书);
6: MQTT over WebSocket(基于 TCP);
7: MQTT over WebSocket Secure(基于 TLS,不校验证书);
8: MQTT over WebSocket Secure(基于 TLS,校验 server 证书);
9: MQTT over WebSocket Secure(基于 TLS,提供 client 证书);
10: MQTT over WebSocket Secure(基于 TLS,校验 server 证书并且提供 client 证书)。
AT+MQTTSUB:订阅 MQTT Topic
功能 |
命令 |
响应 |
查询已订阅的 topic |
AT+MQTTSUB? |
+MQTTSUB: LinkID , state , "topic1" , qos +MQTTSUB: LinkID , state , "topic2" , qos +MQTTSUB: LinkID , state , "topic3" , qos ... OK |
订阅指定 MQTT topic 的指定 QoS,支持订阅多个 topic |
AT+MQTTSUB= LinkID , "topic" , qos |
OK |
当 AT 接收到已订阅的 topic 的 MQTT 消息时 |
+MQTTSUBRECV: LinkID , "topic" , data_length ,data |
|
若已订阅过该 topic,则返回 |
ALREADY SUBSCRIBE |
参数
LinkID :当前仅支持 link ID 0。
state :MQTT 状态:
0: MQTT 未初始化;
1: 已设置 AT+MQTTUSERCFG;
2: 已设置 AT+MQTTCONNCFG;
3: 连接已断开;
4: 已建立连接;
5: 已连接,但未订阅 topic;
6: 已连接,已订阅过 MQTT topic。
topic :订阅的 topic。
qos :订阅的 QoS。
AT+MQTTPUB:发布 MQTT 消息(字符串)
功能 |
命令 |
响应 |
通过 topic 发布 MQTT 字符串 消息 |
AT+MQTTPUB= LinkID , "topic" , "data" , qos , retain |
OK |
参数
LinkID :当前仅支持 link ID 0。
topic :MQTT topic,最大长度:128 字节。
data :MQTT 字符串消息。
qos :发布消息的 QoS,参数可选 0、1、或 2,默认值:0。
retain :发布 retain。
说明
每条 AT 命令的总长度不能超过 256 字节。
本命令不能发送数据 \0,若需要发送该数据,请使用 AT+MQTTPUBRAW 命令。
MQTT服务器篇
该篇是基于云服务器而编写,需要自己搭建。
系统 : CentOS 7 (Linux)
需进入终端,依次输入以下命令
步骤 |
命令 |
|
1 |
配置 EMQX Yum 源 |
curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash |
2 |
安装 EMQX |
sudo yum install emqx -y |
3 |
启动 EMQX |
sudo systemctl start emqx |
终端
然后需要开放端口 18083
我是阿里云的服务器,则需要在实例那找到安全组,然后去开放 0.0.0.0/0 端口范围18083/18083
然后 u 服务器的IP地址 + 18083 /u 就可以进入
EMQX Dashboard管理后台
默认账号 : admin 默认密码 : public
至此,服务器配置已基本配置完成
MQTT测试工具 MQTTX
Directory listing for MQTTX: / | EMQ (emqx.com)
可以通过测试工具去测试是否成功
遇到的问题
端口未开放,需要根据之前的步骤开启对应的端口
每个端口都有对应的方法,需要查阅EMQX的监听器,不然连接不成功,特别是SSL
MQTT 微信小程序篇
小程序基于mqtt.js进行开发( 基本步骤 略~~ )
mqtt.js : https://cdn.bootcdn.net/ajax/libs/mqtt/4.1.0/mqtt.min.js
WebSocket connection to ‘ws://xxxxx‘ failed问题解决办法
将其放在utils 文件下
首先
在微信公众平台添加socket地址
微信开发者工具
js文件
引用
var mqtt= require('../../utils/mqtt.js');
var client = 0 ;
var app = getApp();
渲染页面 - 自加载
/生命周期函数--监听页面加载/onLoad(options) {this.connectmqtt();},
MQTT连接
// MQTT 连接connectmqtt:function(){var that = thisif ( app.MQTT_CONNECT_FLAG == 1 ) return;const options={connectTimeout:4000,clientId: 'wx_' + parseInt(Math.random() 100 + 800, 10),username:'',//测试可以为空password:'',//测试可以为空}try {client=mqtt.connect('wxs://你的soket地址/mqtt',options)client.on('connect',(e)= {//console.log('服务器连接成功')client.subscribe(this.data.Subscribe_Name,{qos:0},function(err){if(!err){console.log('订阅成功')wx.showToast({title: '连接成功',icon :"success"})that.setData({Connect_Flag:1,Subscribe_Flag :1})app.MQTT_CONNECT_FLAG = 1;app.MQTT_Subscribe_FLAG = 1;}})})//信息监听client.on('message',function(topic,massage){console.log('收到'+massage.toString())that.setData({Resecive_Msg :JSON.parse(massage).msg})})client.on('reconnect',(error)= {console.log('正在重连',error)wx.showToast({title: '正在重连',icon :"error"})})client.on('error',(error)= {//console.log('连接失败',error)wx.showToast({title: '连接失败',icon :"error"})})} catch (error) {}},
取消连接
Not_connectmqtt(){if ( app.MQTT_CONNECT_FLAG == 0 ) return;var that = this ;that.setData({Connect_Flag:0})app.MQTT_CONNECT_FLAG = 0;client.end()wx.showToast({title: '断开连接成功'})},
订阅主题
Book_Sub(){if (this.data.Subscribe_Flag) return;client.subscribe(this.data.Subscribe_Name)wx.showToast({title: '主题订阅成功'})this.setData({Subscribe_Flag:1})app.MQTT_Subscribe_FLAG = 1;},
取消订阅
UnBook_Sub(){if (!this.data.Subscribe_Flag) return;this.setData({Subscribe_Flag:0})app.MQTT_Subscribe_FLAG = 0;client.unsubscribewx.showToast({title: '取消订阅成功'})}
页面初始数据
data: {Connect_Flag : app.MQTT_CONNECT_FLAG,Subscribe_Name:"Temperture",Subscribe_Flag:app.MQTT_Subscribe_FLAG,Resecive_Msg :'',},
wxml文件
!--pages/WuLian/WuLian.wxml-- view style="margin-top: 50px;" /view !-- 未连接 -- button wx:if="{{!Connect_Flag}}" class="msg" bindtap="connectmqtt" 连接 /button !-- 连接 -- button wx:if="{{Connect_Flag}}" class="msg" bindtap="Not_connectmqtt" 取消连接 /button !-- 订阅主题 -- input style=" margin:20rpx ; border: 1px solid rgb(199, 199, 199); border-radius: 8rpx; height: 50rpx; padding: 10rpx;" type="text" placeholder="默认主题 {{Subscribe_Name}}"bindinput="Subscribe_Name"/ !-- 连接 -- button wx:if="{{!Subscribe_Flag }}" class="msg" bindtap="Book_Sub" 订阅主题 /button button wx:if="{{Subscribe_Flag }}" class="msg" bindtap="UnBook_Sub" 取消订阅 /button text style="display: block; border: 1px solid rgb(194, 194, 194); margin: 10rpx; padding: 10rpx; height: 50px; width: 90%; border-radius: 5px;" 接送到的信息 : {{Resecive_Msg}} /text
遇到的问题
由于微信小程序 均需要SSL证书,所以连接MQTT必须要用SSL
由于安卓端不能使用网址+端口方式访问,So 需要用宝塔反向代理,映射到对应端口
同个订阅名字才可以bb
配置文件
proxy_pass http://127.0.0.1:8085;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;
至此,ESP8266上云基本完成。
Follow me
基于ESP8266上云实验相关推荐
- 基于ESP8266+华为云数据监控模块
1.下载ArduinoIDE,版本无所谓,我用的是2.0.0 2.IDE 中文件->首选项 ->设置->其他开发板管理器,http://arduino.esp8266.com/sta ...
- 基于ESP8266的阿里云远程实时温度监控
基于ESP8266的阿里云远程实时温度监控 基于ESP8266的远程实时温度监控 基于ESP8266的远程实时温度监控系统,通过ESP8266开发板采集DHT11温湿度传感器的数据,在连接WIFI接入 ...
- 基于STM32单片机采集数据数据上云
前言 以往采集数据均是采用Arduino开发板.esp32wifi模块等,本次实验采用的是STM32单片机,STM32系列基于专为要求高性能.低成本.低功耗的嵌入式应用专门设计的ARM Cortex- ...
- 【stm32c8t6+esp8266上传温湿度到Onenet云平台】
stm32c8t6+esp8266上传温湿度到Onenet云平台 最近做的一个小项目中需要将获取的数据到云平台,我选择的是onenet平台,下面会根据个人学习过程分享如何使用onenet平台以及如何通 ...
- openEuler实验-基于openEuler的云景平台文件管理系统
一些常见的Linux命令 目录 前言 实验目的 实验内容 实验知识点 实验环境 实验分析 系统登录和电源管理 1)使用login命令登录系统 2)退出openEuler 3)退出当前的shell 软件 ...
- 基于消息队列 RocketMQ 的大型分布式应用上云较佳实践
作者|绍舒 审核&校对:岁月.佳佳 编辑&排版:雯燕 前言 消息队列是分布式互联网架构的重要基础设施,在以下场景都有着重要的应用: 应用解耦 削峰填谷 异步通知 分布式事务 大数据处理 ...
- 基于消息队列 RocketMQ 的大型分布式应用上云最佳实践
简介:Apache RocketMQ 作为阿里巴巴开源的支撑万亿级数据洪峰的分布式消息中间件,在众多行业广泛应用.在选型过程中,开发者一定会关注开源版与商业版的业务价值对比. 那么,今天就围绕着商业版 ...
- 基于消息队列 RocketMQ 的大型分布式应用上云实践
简介: Apache RocketMQ 作为阿里巴巴开源的支撑万亿级数据洪峰的分布式消息中间件,在众多行业广泛应用.在选型过程中,开发者一定会关注开源版与商业版的业务价值对比. 那么,今天就围绕着商业 ...
- 基于云存储网关的Veeam备份归档上云方案
前言 面对数据可靠性和合规性要求的不断增长,只备份一份数据已经不能满足用户对于数据可靠性的需求.传统备份厂商的异地备份方案是将用户生产环境里的数据备份至不同机柜或者异地机房来保护数据,规避单机房存在的 ...
最新文章
- Python标准库01 正则表达式(re包)
- 【nodejs原理源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)
- 单片机关于RAM的作用
- SQL Server on Linux的文件和目录结构
- 如何快速实现 Wordpress 博客域名更换?
- J2EE的13个规范之(二) JDBC 及其使用
- Bootstrap3 源代码样式
- 【Luogu1363】幻想迷宫
- 微信昵称包含emoji表情,保存异常
- RTCM-SSR信息读取与解码
- vmstat 命令详解
- android 定时器 误差,运动会计时器(PC+安卓)版本
- 《青春无烦恼》基督之灵爱
- 怎么把线稿提取出来_用ps如何提取线稿图?简单教程轻松搞定
- PyGobject(十九)布局容器之Alignment
- 谷歌搜索 site命令 指定网站搜索
- quartus II SignalTap 在线调试
- 【MATLAB教程案例53】CNN卷积神经网络的MATLAB编程学习和实现,以手势识别为例进行仿真分析
- 外包公司干了不到 3 个月,我离职了
- 在互联网上提问应该注意什么?
热门文章
- 线路板基础知识详细解析
- STL优先队列实现堆(模板 附力扣题目)
- 【单片机】Keil5如何新建工程
- c语言输入身高体重 计算体重指数,体重指数的计算公式正确的是
- CANOe系列讲解 - 搭建CANOe工程
- 2018通达信l2服务器源码,[通达信] 通达信L2正版DDX指标美化
- Android中富文本用法包括点击事件处理
- 全国计算机软件985专业排名,全国计算机软件专业大学排名TOP20,清华居然不是第一!...
- CAD绘图技巧:快速测量CAD图纸中图形的面积与周长
- erdas裁剪影像_在arcgis、ERDAS下如何进行影像图裁剪