51单片机ESP8266
一、MQTT透传AT固件
安信可提供的烧录WiFi固件工具:
链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72
安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB
经过测试,选择这个不可以,因为是4MB 的,上述用到的两款 ESP8266 是 1MB(8Mbit)flash的模组,应该使用
二、如何刷固件
手头有的 ESP8266:
烧录工具
可直接连接使用(ESP-01S 和 ESP-01均可使用)
需要注意这个模块仅仅只是转接口,而不能实现向上面那个烧录模块一样完成烧录(ESP-01S 和 ESP-01均可使用)。
TTL 转 USB 下载器,
可以使用,但是,经过测试,(测试接线方法如下)
我只完成了对 ESP-01S 的烧写(烧录过程中需要上电提示时,需要将 3.3V 重插拔),对 ESP-01 操作无效。
后查阅资料后,还需要将 EN 接 3.3 V,即:
烧录软件设置:
烧录好之后的测试连接:
对于ESP-01S ,只需要将 IO0 那根线去掉,即四根线:
对于ESP-01 ,需要将 IO0 那根线去掉,EN 还需要加上,即五根线:
AT 测试使用串口助手即可。(已上传 CSDN)。
上图中的软件也不是那么好用,不推荐了。。。。
三、MQTT服务器
MQTT服务器测试链接: https://www.emqx.com/zh/mqtt/public-mqtt5-broker
将
将域名:broker.emqx.io放到网址转 IP 地址链接: https://ip138.com/中解析出 ip 地址,方便在代码中进行使用。
解析结果如下:
用第一个 ip 地址就可行(不好用,用然也物联的 test.ranye-iot.net(47.92.129.18))。
需要下载证书并安装。
四、AT 指令
程序中涉及到的 AT 指令
AT\r\n
AT+RESTORE\r\n
ATE0\r\n
AT+MQTTUSERCFG=0,1,"clientld","admin","admin",0,0,""\r\n
AT+MQTTCONN=0,"3.82.39.163",1883,0\r\n
AT+MQTTSUB=0,"esp8266_rxd",1\r\n
AT+MQTTPUB=0,"esp8266_txd","{\"LAMP\":\"OFF\"}",0,0\r\n
AT+CWMODE=1\r\n
乐鑫 Espressif 官方提供的 AT 指令使用手册和说明的链接: https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/index.html
知识点
Station 模式 和 SoftAP 模式
五、程序
安信可提供的基于 STM32 AT指令开发的链接: https://docs.ai-thinker.com/esp8266/examples/at_demo
视频教程作者就是根据上面的示例代码进行修改,然后在 STC12C5A60S2 + ESP8266 上实现了。
下面是总结的思路流程(这里作为程序1):
程序1 的流程是:
1、发送恢复出厂默认设置指令将模块恢复成出厂设置:AT+RESTORE
2、关闭回显:ATE0
3、选择 ESP8266 的工作模式:AT+CWMODE=1
4、ESP8266 连接外部的 WiFi,AT+CWJAP= “pSSID”,“pPassWord”
5、MQTT配置用户属性 AT+MQTTUSERCFG=0,1,“clientld”,“admin”,“admin”,0,0,“”
6、连接 MQTT 服务器:AT+MQTTCONN=0,“3.82.39.163”,1883,0
7、订阅指定连接的 MQTT 主题,可重复多次订阅不同的 topic:AT+MQTTSUB=0,“esp8266_rxd”,1
8、while 主循环中实现定时发布:如果连接上了MQTT服务器,就定时发布信息:AT+MQTTPUB=0,“esp8266_txd”,“{“LAMP”:“OFF”}”,0,0
程序配网
此外,还有智能配网的操作演示,有两种方式:ESP-Touch 和 Airkiss,
使用串口助手直接操作 ESP8266 模块,可用。
此外,根据自身的开发经验,有下面的使用体会:
操作过机智云平台的基于 ESP8266 的项目(远程宠物室),可以使用两种方式进行配网,通过按键(长按和短按),不同配网方式,有指示灯提示。由于此种印象,就有了使用按键进行配网的想法。而在示例代码中,要么是在初始化部分将网给配好,要么是使用多个 while(1) 循环的方式(配置联网成功后才接着执行最后的 while(1) 函数体),并没有结合按键的配网方式。因此,如果要想使用按键来进行配网,则不太清楚如何操作了。
因此,暂缓按键结合配网的实现方式,而是仍然通过串口命令的方式来进行(也就是在示例程序的基础上进行修改)。
程序2 的流程是:
1、模块复位:AT+RST
2、关闭回显:ATE0
3、选择ESP8266的工作模式:AT+CWMODE=1
4、查询WIFI连接状态:AT+CWJAP?
如果返回结果是 +CWJAP: 或者 WIFI GOT IP,说明连接成功。
否则,尝试连接在程序中设置好的 WiFi ,如果连接成功就退出。否则,就尝试配网的方式。
5、配网部分程序如下:
while(esp8266_GetWifi_Stat("AT+CWJAP?\r\n", "+CWJAP:", "WIFI GOT IP")== 0){printf("Connecting to WiFi...\r\n");//说明没有连接上网络,先尝试连接在程序中设置好的WiFiif(esp8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD)){printf("1-Join AP OK.\r\n");}else{esp8266_SetSmartMode();if(esp8266_Net_Mode_Choose(STA)){printf("2-SET STA OK.\r\n");if(esp8266_Send_AT_Cmd("AT+CWAUTOCONN=1\r\n", "OK")){printf("3-AT+CWAUTOCONN=1 OK.\r\n");if(esp8266_Send_AT_Cmd("AT+CWSTARTSMART=3\r\n", "OK")){printf("4-AT+CWSTARTSMART=3 OK.\r\n");if(esp8266_WiteConnect("smartconfig connected wifi")){if(esp8266_Send_AT_Cmd("AT+CWSTOPSMART\r\n", "OK")){printf("5-AT+CWSTOPSMART OK.\r\n");}else{printf("6-AT+CWSTOPSMART Fail.\r\n");goto start;}}}}}}
}printf("WiFi Connection Successful.\r\n");
bit esp8266_WiteConnect(char *ack1)
{bit ack = 0;unsigned int config_Delay = 5;do{if(recv_flag){recv_flag = 0;if(strstr((const char*)recv_buf,ack1)){ack = 1;printf("Wite Connect Success.\r\n");recv_buf[recv_cnt] = '\0';printf("%s\r\n", recv_buf);memset(recv_buf, 0, recv_cnt);recv_cnt = 0;break;}else{recv_buf[recv_cnt] = '\0';printf("%s\r\n", recv_buf);memset(recv_buf, 0, recv_cnt);recv_cnt = 0;}}Delay_Xms(1000);}while(config_Delay--);return ack;
}
/**************************查询 WiFi 连接状态***************************/
bit esp8266_GetWifi_Stat(char *cmd, char *ack1, char *ack2)
{bit ack = 0;unsigned int config_Delay = 3;uart2_SendString(cmd);printf("Detecting WiFi status...\r\n");do{if(recv_flag){recv_flag = 0;if(strstr((const char*)recv_buf,ack1)|| strstr((const char*)recv_buf,ack2)){ack = 1;recv_buf[recv_cnt] = '\0';printf("%s\r\n", recv_buf);memset(recv_buf, 0, recv_cnt);recv_cnt = 0;break;}else{printf("WIFI DISCONNECT.\r\n");memset(recv_buf, 0, recv_cnt);recv_cnt = 0;}}Delay_Xms(1000);}while(config_Delay--);return ack;
}
6、MQTT配置用户属性 AT+MQTTUSERCFG=0,1,“clientld”,“admin”,“admin”,0,0,“”
7、连接 MQTT 服务器:AT+MQTTCONN=0,“3.82.39.163”,1883,0
8、订阅指定连接的 MQTT 主题,可重复多次订阅不同的 topic:AT+MQTTSUB=0,“esp8266_rxd”,1
9、while 主循环中实现定时发布:如果连接上了MQTT服务器,就定时发布信息:AT+MQTTPUB=0,“esp8266_txd”,“{“LAMP”:“OFF”}”,0,0
程序中有个地方:
if(esp8266_Send_AT_Cmd("AT+RESTORE\r\n", "OK"))
{printf("RESTORE OK\r\n");
}
RESTORE是恢复出厂设置,应该改成复位(RST)
if(esp8266_Send_AT_Cmd("AT+RST\r\n", "OK"))
{printf("RST OK\r\n");
}
在 MQTT 客户端软件中的操作如下:
MQTT服务器如上图所示。程序中的 client_id 是 clientID,所以不能再用这个了,我就另外起了个名字:MQTT_FX_Client 。
在程序中,订阅了 esp8266_rxd,
因此,点击 Publish 后,串口能够接收到:
与此同时,程序还会向 esp8266_txd 每隔一段时间发送数据,
相关文章:

51单片机ESP8266
一、MQTT透传AT固件 安信可提供的烧录WiFi固件工具: 链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72 安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB 经过测试,选择这个不可以…...

php 源码加密保护 bease方案
推荐使用 php-bease 这个免费开源方案。 有一说一,这个项目上次更新时间是2021年… 多好的项目呀。 作者说在 php5.1 ~ php7.2 上都测试过。 源码地址: C源码: https://github.com/liexusong/php-beast dll版: https://github…...

FFMPEG解析ts流
三篇相关联的文章: ffmpeg下HLS解析过程-CSDN博客TS文件格式详解及解封装过程-CSDN博客 FFMPEG解析ts流-CSDN博客 一、简介 关于TS格式解析,可以参考《TS文件格式详解及解封装过程-CSDN博客》,本文主要代码部分解读。建议大家熟读iso138…...

Java基础-实现猜数字小游戏
1. 实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字; 2. 要求用户从控制台输入数字,若输入的数字比随机数小,则提示太小了;若输入的数字比随机数大,则提示太大了,若输入的数字与随机数相同…...

爬虫(一)
1. HTTP协议与WEB开发 1. 什么是请求头请求体,响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(…...

【软件测试】学习笔记-Nginx 在系统架构中的作用
本篇文章你探讨 Nginx 在应用架构中的作用,并从性能测试角度看如何利用 Nginx 数据统计用户访问量。 Nginx 重要的两个概念 代理 首先要来解释一下什么是代理,正向代理和反向代理是什么意思?各自作用是什么?不少同学经常听到这…...

鸿蒙开发【应用开发基础知识】
应用开发介绍 1. 项目说明 通过OpenHarmony提供的Stage模型和ArkUI的eTS声明式开发规范,结合简单的Demo,分享学习OpenHarmony/docs/application-dev[应用开发文档] 2. 主要功能 目录标题展示,目录列表展示点击目录列表,查看列…...

腾讯云幻兽帕鲁4核16G14M服务器性能测评和价格
腾讯云幻兽帕鲁服务器4核16G14M配置,14M公网带宽,限制2500GB月流量,系统盘为220GB SSD盘,优惠价格66元1个月,277元3个月,支持4到8个玩家畅玩,地域可选择上海/北京/成都/南京/广州,腾…...

Linux第一个小程序——进度条
目录 回车和换行 缓冲区 设计倒计时 进度条(多文件操作) Version1:进度条 Version2:应用场景进度条 Version3:升级彩色进度条 回车和换行 回车\r:r 回车,回到当前行的行首,而…...

(N-141)基于springboot,vue网上拍卖平台
开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…...

深入了解Figure的结构与层次
深入了解Figure的结构与层次 一 Matplotlib中的Figure1.1 Figure的概念和作用:1.2.创建Figure对象:1.3 Figure的属性和方法: 二 子图(Axes)的角色与创建2.1 子图(Axes)的概念:2.2 创建子图的方法:2.3 Axes的…...

c语言基础6
1.逗号表达式 逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果。 我们来看下面的一个代码: int main() {int a 1;int b 2;int ret (a > b, a b 2, b, b a 1);p…...

kotlin sum 与 sumOf
kotlin 中 sum 的作用: 计算一个列表里面数字的总和: val numbers listOf(1, 2, 3, 4, 5) val sum numbers.sum() println("The sum is: $sum") // 打印结果: The sum is: 15 kotlin中sumOf的作用: 也是计算一个列表里面数字…...

php怎么输入一个变量,http常用的两种请求方式getpost(ctf基础)
php是网页脚本语言,网页一般支持两种提交变量的方式,即get和post get方式传参 直接在网页URL的后面写上【?a1027】,如果有多个参数则用&符号连接, 如【?a10&b27】 post方式传参 需要借助插件,ctfer必备插…...

Spring Boot 项目配置文件
文章目录 配置文件的作用properties基本语法读取文件信息缺点 yml基本语法优点配置不同数据类型字符串类型的写法 配置对象配置集合 读取配置文件的几种方法EnvironmentPropertySource使用原生方式读取 设置不同环境的配置文件 配置文件的作用 整个项目中重要的数据都是在配置…...

学校“数据结构”课程Project—扩展功能(自主设计)
目录 一、设想功能描述 想法缘起 目标功能 二、问题抽象 三、算法设计和优化 1. 易想的朴素搜索 / dp 搜索想法 动态规划(dp)想法 2. 思考与优化 四、算法实现 五、结果示例 附:使用的地图API 一、设想功能描述 想法缘起 OSM 导出…...

从0开始搭建若依微服务项目 RuoYi-Cloud(保姆式教程 一)
掌握陌生项目解读技巧 掌握若依(RuoYi-Cloud)框架 掌握SpringCloud Alibaba体系项目开发套路,结合我之前所有企业项目来学习就知道有多么简单。 一、框架介绍 1. 简介 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空…...

【Chrome】浏览器怎么清除缓存并强制刷新
文章目录 1、正常刷新:正常刷新网页,网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新:忽略缓存刷新,重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据...

Android创建保存Excel文件
Android开发生成保存Excel文件,首先下载两个jar包。下载地址:Android读写Excel文件的两个jar包资源-CSDN文库 poi-3.12-android-a.jar poi-ooxml-schemas-3.12-20150511-a.jar 把jar包放在app的libs文件夹下,引用jar我一般都在build.gradle的…...

Selenium + Django + Echarts 实现亚马逊商品数据可视化爬虫项目
最近完成了1个爬虫项目,记录一下自己的心得。 项目功能简介 根据用户输入商品名称、类别名称,使用Selenium, BS4等技术每天定时抓取亚马逊商品数据,使用Pandas进行数据清洗后保存在MySql数据库中. 使用Django提供用户端功能,显…...

【深度学习】初识深度学习
初识深度学习 什么是深度学习 关系: #mermaid-svg-7QyNQ1BBaD6vmMVi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7QyNQ1BBaD6vmMVi .error-icon{fill:#552222;}#mermaid-svg-7QyNQ1BBaD6vmMVi .err…...

探索 Xind3 生态系统,解锁铭文资产的新玩法
铭文市场的兴起,不仅是新资产发行方案向市场的代表,更是新资产革命的代表。通过“公平启动”的方式,任何人都可以按照先到先得的原则“铸造”资产。虽然这看起来是意识形态上的新升级,但实际上最火的铭文风潮是由CEX引发的。 我们…...

js有哪些内置对象?
在 JavaScript 中,内置对象可以分为三类:原始值的包装对象、构造函数和其他对象。这里列举一些常见的内置对象及其方法: 原始值的包装对象: String:字符串类型的包装对象,有 charAt、concat、indexOf、repl…...

拦截器的简单使用
拦截器的简单使用 拦截器的使用创建拦截器preHandle 目标方法执行前执行postHandle 目标方法执行后执行afterCompletion 视图渲染后执行 拦截器使用场景返回值注册拦截器运用拦截器 拦截器的使用 创建拦截器 首先,我们需要创建一个拦截器器的类,并且需要继承自HandlerIntercep…...

【gmsh源码阅读】OCC对象绑定tag及获取几何与网格映射关系
一、Tag是什么? gmsh中的几何模型相对于OCC的模型增加了id编号,也叫tag,在gmsh中可以显示出来。在gmsh中,点、线、面、体都有Tag,以方便对其查找定位查找。在OCC中TopoDS_Shape只有几何与拓扑结构,没有唯一…...

【RTP】webrtc 学习3: webrtc对h264的rtp解包
rtp_rtcp\source\video_rtp_depacketizer_h264.cc【RTP】webrtc 学习2: webrtc对h264的rtp打包 中分析了打包过程的代码,这样再来看解析过程的源码就容易多了:本代码主要基于m79,m98类似。这里注明了jitterbuffer 会再次 做 解析stap-a 变为NAL units解析ParseFuaNalu 第一…...

幻兽帕鲁服务器多少钱?4核16G支持32人在线吗?
4核16G服务器是幻兽帕鲁Palworld推荐的配置,阿里云和腾讯云均推出针对幻兽帕鲁的4核16G服务器,阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月,腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。云服务器吧yunfuwuqiba.com分享…...

AD/DA(模数数模转换)
文章目录 前言一、介绍部分介绍AD/DA硬件电路模型硬件电路ADC模块DAC模块ADC0809DAC0832 运算放大器(运放)运放电路 DA原理两种不同的DA转换器 AD原理部分AD/DA性能指标XPT2046介绍主要功能XPT2046时序结构控制字节解释单端模式配置表 二、实例使用AD读取…...

Docker数据卷挂载(以容器化Mysql为例)
数据卷 数据卷是一个虚拟目录,是容器内目录与****之间映射的桥梁 在执行docker run命令时,使用**-v 本地目录:容器目录**可以完成本地目录挂载 eg.Mysql容器的数据挂载 1.在根目录root下创建目录mysql及三个子目录: cd ~ pwd m…...

YOLOv8-Seg改进:注意力系列篇 | non-local自注意力,助力小目标分割
🚀🚀🚀本文改进:non-local自注意力,助力小目标分割 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家自研模块助力分割;…...