51单片机ESP8266

news2024/9/29 11:29:26

一、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");
		//说明没有连接上网络,先尝试连接在程序中设置好的WiFi
		if(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 每隔一段时间发送数据,

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.jmeter非GUI命令及Beanshell组件

一、非GUI(界面)命令详解 1. -n 使用非gui方式,不能单独使用,必须和-t(指定jmeter的脚本)一起用。 #cmd命令行模式下,进入存放测试jmx文件的目录下 jmeter -n -t hello.jmx只会生成一个log日…

linux clickhouse 安装

1、官网下载clickhouse安装包 下载地址, clickhouse分lts和stable版本,lts是长期版本,一般选择安装lts版本。 其中clickhouse-server是clickhouse服务,就是用来访问数据存储数据,clickhouse-client是用来通过命令访问数…

Windows11 鼠标拖动文件到CMD控制终端窗口无效,无法显示具体文件路径

对于某些用户来说,他们可能会在Windows 11上遇到鼠标拖动文件到CMD控制终端时,无法显示具体文件路径的情况。 系统更新,习惯基础操作无效了,真的有点烦,不会提问就无计可施。 果然善于提问,才有果子吃 问…

Java日期和时间学习记录2

1、Java的LocalDate类当前时间往未来几天和过去时间几天 import java.time.LocalDate;public class Main {public static void main(String[] args) {// 获取当前日期LocalDate currentDate LocalDate.now();System.out.println("当前日期:" currentDa…

Go 定时器:如何避免潜在的内存泄漏陷阱

这篇文章将探讨的是 Go 中如何高效使用 timer,特别是与select 一起使用时,如何防止潜在的内存泄漏问题。 引出问题 先看一个例子,我们在 Go 中的 select 使用定时器,实现为消息监听加上超时能力。 核心代码,如下所示…

java安装,从java1.8升级到java11.0,java,javac,javaw,javaws,jdk,jre

最近在学习 PyFlink,需要安装Java11环境,但是本机已经安装了java1.8,在升级的过程中遇到了一些问题,在这里记录一下。 windows下安装JDK11 下载JDK11:https://www.oracle.com/java/technologies/downloads/#java11-w…

MyBatis入门基础篇

MyBatis基础篇 MyBatis是一款优秀的特久层框架,用于简化JDBC开发。其是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。由于MyBatis中的大部分API参数与数据库事务息息相…

详细介绍 Go 中如何实现 bitset

文章目录 bitset 结构元素位置代码实现构造函数BitSet 的方法基础方法containsclearadd 集合方法computeSize方法定义intersectuniondifference 遍历集合的元素总结 最近尝试在 B 站录些小视频,我的 B 站主页。录视频当是为了彻底搞懂某个知识点的最后一步吧&#x…

【C++】stack、queue的使用及模拟实现

目录 一、stack1.1 stack的使用1.2 stack的模拟实现 二、queue2.1 queue的使用2.2 queue的模拟实现 一、stack 1.1 stack的使用 stack是一种容器适配器,它的特点是后进先出,只能在容器的一端进行插入和删除操作。 stack的使用很简单,主要有…

代码随想录算法训练营31期day4,力扣24+19+02.07+142

24,动指针 class Solution { public:ListNode* swapPairs(ListNode* head) {//建立虚拟头结点auto dummynew ListNode(-1);dummy->nexthead;for(auto pdummy;p->next&&p->next->next;){auto ap->next;auto ba->next;p->nextb;a->n…

图像旋转角度计算并旋转

#!/usr/bin/python3 # -*- coding: utf-8 -*- import cv2 import numpy as np import timedef Rotate(img, angle0.0,fill0):"""旋转:param img:待旋转图像:param angle: 旋转角度:param fill:填充方式,默认0黑色填充:return: img: 旋转后…

【保驾护航】HarmonyOS应用开发者基础认证-题库

通过系统化的课程学习,熟练掌握DevEco Studio,ArkTS,ArkUI,预览器,模拟器,SDK等HarmonyOS应用开发的关键概念,具备基础的应用开发能力。 考试说明 1、考试需实名认证,请在考前于个…

林浩然的政治学奇幻漂流——幽默诙谐解读马基雅维利

林浩然的政治学奇幻漂流——幽默诙谐解读马基雅维利 Lin Haoran’s Whimsical Exploration of Machiavelli’s Political World 在一个阳光明媚的周末,我们的主人公林浩然同学决定穿越历史长河,踏上一场充满智识与笑声的探索之旅,目的地是文艺…

NineData和泽拓数据库产品Klustron完成产品兼容互认证

近日,云原生智能数据管理平台NineData和泽拓昆仑分布式数据库产品Klustron完成产品兼容互认证。经过严格的联合测试,双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。 本次玖章算术与泽拓科技的携力合作,在双方共同的努力下&a…

nextjs中beforePopState使用

在某些情况下,希望监听popstate并在路由器对其进行操作之前执行某些操作。可以使用beforePopState。 在Next.js中,beforePopState是一个可选的生命周期函数,用于在浏览器的历史记录发生更改之前执行一些操作。具体来说,beforePopS…

DP读书:在常工院的2023年度总结

DarrenPig的年度总结 这是最好的时代,这是最坏的时代。——狄更斯 这是最好的时代,这是最坏的时代。——狄更斯 这是最好的时代,这是最坏的时代。——狄更斯 一、2023我的感受 不就是2023吗,不就是一年的经历吗,大家…

18 python快速上手

面向对象进阶 面向对象进阶1.成员1.1 变量易错点 & 面试题 1.2 方法1.3 属性 2.成员修饰符3.对象嵌套4.特殊成员总结 各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! 面向对象进阶 目标:掌握面向对象进阶相关知识…

【JavaEE】网络编程 TCP/UDP

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

WorkPlus移动应用管理平台,助力企业实现高效移动办公

在移动办公成为当今工作方式的主流趋势下,管理和运营企业移动应用成为了提高工作效率和数据安全的重要环节。而移动应用管理平台作为实现移动办公高效管理的关键工具,WorkPlus以其领先的性能和全面的功能,助力企业实现高效移动办公。 为何选…