STM32通过串口2使用ESP8266WIFI模块连接新大陆云平台

2023-11-04

目录

使用硬件:

分步骤:配置TCP连接,连接WIFI

1.使用ESP8266的复位引脚进行复位

2.发送基本AT指令

3.连接新大陆

4.新大陆云平台显示在线及上传数据测试成功

5.串口显示

5.涉及的函数

发生AT检测WIFI模块错误,如图,代码运行停留在了.AT,在while中一直循环,没有往下跑了,这种情况一般将复位引脚使用一下就可以解决。


使用硬件:

1.核心板:STM32F103C8T6

2.WIFI模块:ESP-01S

3.温湿度传感器:DHT22

4.使用云平台:新大陆云平台

分步骤:配置TCP连接,连接WIFI

1.使用ESP8266的复位引脚进行复位

复位操作:将ESP8266WIFI模块的RST引脚接到对应的GPIO口;下面代码中写的是GPIOA0,

配置好结构体,对引脚高地电平反转延迟输出一下就复位了。(不是必要操作,但是最好进行一下,详情见文章最后)

2.发送基本AT指令

#define ESP8266_WIFI_INFO		"AT+CWJAP=\"00\",\"30025200\"\r\n"
#define ESP8266_ONENET_INFO		"AT+CIPSTART=\"TCP\",\"121.37.241.174\",8700\r\n"  //新大陆云平台
#define ESP8266_ONENET_INFO		"AT+CIPSTART=\"TCP\",\"183.230.40.39\",6002\r\n"   //移动onenet

ESP8266_SendCmd("AT\r\n", "OK");//检测WIFI模块
ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK")//STA模式
ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK")//AT+CWDHCP=1,1:启用 SoftAP 的 DHCP,响应返回:OK(本设置命令与设置静态 IP 地址的命令会相互影响,如 AT+CIPSTA 和 AT+CIPAP)
ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP")//AT+CWJAP="WIFI 热点名称","密码":连接当前环境中的WIFI热点
ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT")//AT+CIPSTART="TCP","xxx.xxx.xxx.xxx",xxxx:建立 TCP 连接

/**
	************************************************************
	************************************************************
	************************************************************
	*	文件名: 	esp8266.c
	*
	*	作者: 		张继瑞
	*
	*	日期: 		2017-05-08
	*
	*	版本: 		V1.0
	*
	*	说明: 		ESP8266的简单驱动
	*
	*	修改记录:	
	************************************************************
	************************************************************
	************************************************************
**/

void ESP8266_Init(void)
{
	
	GPIO_InitTypeDef GPIO_Initure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

	//ESP8266复位引脚
	GPIO_Initure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Initure.GPIO_Pin = GPIO_Pin_0;					//GPIOA1
	GPIO_Init(GPIOA, &GPIO_Initure);
	
	GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
	delay_ms(250);
	GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
	delay_ms(500);
	
	ESP8266_Clear();
	
	UsartPrintf(USART_DEBUG, "1. AT\r\n");
	while(ESP8266_SendCmd("AT\r\n", "OK"))
		delay_ms(500);
	
	UsartPrintf(USART_DEBUG, "2. CWMODE\r\n");
	while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
		delay_ms(500);
	
	UsartPrintf(USART_DEBUG, "3. AT+CWDHCP\r\n");
	while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
		delay_ms(500);
	
	UsartPrintf(USART_DEBUG, "4. CWJAP\r\n");
	while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
		delay_ms(500);
	
	UsartPrintf(USART_DEBUG, "5. CIPSTART\r\n");
	while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
		delay_ms(500);
	
	UsartPrintf(USART_DEBUG, "6. ESP8266 Init OK\r\n");

}

3.连接新大陆

#define DeviceID "xxxxxxxxxxx"//设备表标识
#define SecretKey "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"//密钥

memset(IPDATA,0x00,200);
	sprintf((char *)IPDATA,"{\"t\":1,\"device\":\"%s\",\"key\":\"%s\",\"ver\":\"v1.1\"}\r\n",DeviceID,SecretKey);
	int datalen=strlen(IPDATA);//计算数据长度
	memset(IPDATALEN,0x00,200);
	sprintf((char *)IPDATALEN,"AT+CIPSEND=%d\r\n",datalen);
	
	while(ESP8266_SendCmd(IPDATALEN, "OK"))//发送数据包长度
		delay_ms(500);
	UsartPrintf(USART_DEBUG, "7. nlecloud 连接中...\r\n");	
	
	while(ESP8266_SendCmd(IPDATA, "{\"status\":0,\"t\":2}"))//发送握手连接报文
		delay_ms(500);
	UsartPrintf(USART_DEBUG, "8. nlecloud 连接成功\r\n");

	while(ESP8266_SendCmd("AT+CIPSEND=69\r\n", "OK"))
		delay_ms(500);
	UsartPrintf(USART_DEBUG, "9. ESP8266 Init OK\r\n");
	
	while(ESP8266_SendCmd("{\"t\": 3,\"datatype\":1,\t\"datas\": {\"tmp\":20.8,\"hum\":89  } ,\"msgid\": 123}"
		, "{\"msgid\":123,\"status\":0,\"t\":4}"))//传感器数据上传测试
		delay_ms(500);
	
	UsartPrintf(USART_DEBUG, "10. ESP8266 Init OK\r\n");
	memset(IPDATA,0x00,200);

4.新大陆云平台显示在线及上传数据测试成功

5.串口显示

5.涉及的函数

//==========================================================
//	函数名称:	ESP8266_WaitRecive
//
//	函数功能:	等待接收完成
//
//	入口参数:	无
//
//	返回参数:	REV_OK-接收完成		REV_WAIT-接收超时未完成
//
//	说明:		循环调用检测是否接收完成
//==========================================================
_Bool ESP8266_WaitRecive(void)
{

	if(esp8266_cnt == 0) 							//如果接收计数为0 则说明没有处于接收数据中,所以直接跳出,结束函数
		return REV_WAIT;
		
	if(esp8266_cnt == esp8266_cntPre)				//如果上一次的值和这次相同,则说明接收完毕
	{
		esp8266_cnt = 0;							//清0接收计数
			
		return REV_OK;								//返回接收完成标志
	}
		
	esp8266_cntPre = esp8266_cnt;					//置为相同
	
	return REV_WAIT;								//返回接收未完成标志

}
//==========================================================
//	函数名称:	ESP8266_SendCmd
//
//	函数功能:	发送命令
//
//	入口参数:	cmd:命令
//				res:需要检查的返回指令
//
//	返回参数:	0-成功	1-失败
//
//	说明:		
//==========================================================
_Bool ESP8266_SendCmd(char *cmd, char *res)
{
	
	unsigned char timeOut = 200;

	Usart_SendString(USART2, (unsigned char *)cmd, strlen((const char *)cmd));
	
	while(timeOut--)
	{
		if(ESP8266_WaitRecive() == REV_OK)							//如果收到数据
		{
			if(strstr((const char *)esp8266_buf, res) != NULL)		//如果检索到关键词
			{
				ESP8266_Clear();									//清空缓存
				
				return 0;
			}
		}
		
		delay_ms(10);
	}
	
	return 1;

}
//==========================================================
//	函数名称:	ESP8266_Clear
//
//	函数功能:	清空缓存
//
//	入口参数:	无
//
//	返回参数:	无
//
//	说明:		
//==========================================================
void ESP8266_Clear(void)
{

	memset(esp8266_buf, 0, sizeof(esp8266_buf));
	esp8266_cnt = 0;

}

发生AT检测WIFI模块错误,如图,代码运行停留在了.AT,在while中一直循环,没有往下跑了,这种情况一般将复位引脚使用一下就可以解决。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32通过串口2使用ESP8266WIFI模块连接新大陆云平台 的相关文章

  • opencv-python 银行卡卡号识别

    模板 银行卡 主要思路 用遮盖法 将无关紧要的上面和下面部分截掉 保留银行卡号差不多的位置 然后用opencv做图像处理 得到四个 连着数字的小框框 然后再在四个小框框里面提取出每一个单个的数字和模板里面的数字进行对比 难点是 如何使用op

随机推荐

  • 关于PCB走线及过孔的过流能力

    一 关于PCB走线的过流能力 PCB走线的过流能力都与哪些因素有关 目前考虑有走线线宽 铜箔厚度 走线长度 温升这些因素 下面我们逐个分析及整体分析 1 走线线宽 铜箔厚度以及走线长度对过流能力的影响 通过网上的收集及整理 统计出了下面的表
  • Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现

    今天是2013年的最后一天了 这里首先提前祝大家新年快乐 同时 本篇文章也是我今年的最后一篇文章了 因此我想要让它尽量有点特殊性 比起平时的文章要多一些特色 记得在今年年初的时候 我写的第一篇文章是模仿360手机卫士的桌面悬浮窗效果 那么为
  • 在Vue组件中使用js(script标签)转换13位UTC格式的时间戳

    声明 代码来源AI 非本人原创 经测试实际可用
  • websocket-sdk 解决本地服务与浏览器之间的连接, 以及浏览器与服务器之间的数据传输

    最近由于项目业务需求 需要利用websocket完成本地服务与浏览器之间的数据传输 为了满足这个需求 这里自行封装了websocket sdk 这个工具 一 首先介绍下websocket sdk 它的作用 websocket sdk 已经处
  • 十条法则,让企业减少90%的勒索病毒攻击,勒索病毒解密,数据恢复

    建立完善的安全管理体系 企业应该建立完善的安全管理体系 包括安全策略 安全培训 应急响应等 确保每个员工都了解安全意识和操作规范 定期备份数据 企业需要建立定期备份机制 备份关键数据和系统 确保在发生勒索病毒攻击时 能够迅速恢复数据和系统
  • std::shared_ptr 与普通指针的转换

    shared ptr 是一个类 用模板支持很多类型 1 shared ptr到普通指针 shared ptr
  • Avalonia UI程序打包为deb安装包

    目录 相关依赖安装 打包前操作 进行打包 关于快捷方式的说明 相关依赖安装 全局安装打包工具 dotnet tool install global dotnet deb 向工程中安装相关打包依赖 将CMD命令行或PowerShell定位到工
  • jmeter常用插件介绍

    jmeter作为一个开源的接口性能测试工具 其本身的小巧和灵活性给了测试人员很大的帮助 但其本身作为一个开源工具 相比于一些商业工具 比如LoadRunner 在功能的全面性上就稍显不足 这篇博客 就介绍下jmeter的第三方插件jmete
  • C# 线程调用主线程中的控件

    由于项目的需要 最近几天一直在做串口和数据库 由于C 使用的时间不长 所以在编写代码和调试的过程中总是遇到意想不到的问题 比如在使用串口接收数据的时候 在接收数据事件中想把接收的数据放入一个textbox作显示 但是明明非常简单的代码 在编
  • 7-5 两个有序链表序列的交集 (20分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−

    7 5 两个有序链表序列的交集 20分 已知两个非降序链表序列S1与S2 设计函数构造出S1与S2的交集新链表S3 输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔
  • Intellij IDE 安装Golang插件出现GO SDK报错

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 很多Java同学都是使用IDEA的 当然也可以直接使用 Gogland至少现在还是免费 谁也不知道什么时候又要收费了 所以我们选择了IDEA使用插件方式支持Golang的开
  • 规则引擎Drools使用 第十五篇 Spring Boot整合Drools

    在实际开发中 主要使用的还是以Spring Boot为主 所有下面介绍下Spring Boot整合Drools Spring Boot整合Drools 引入依赖
  • 数据结构-图

    目录 问题 A 邻接矩阵存储的图 节点的出度和入度计算 附加代码模式 问题 B 算法7 12 有向无环图的拓扑排序 问题 C 有向图是否存在环 问题 D 是否为有效的拓扑序列 问题 E 案例6 2 6 最短工期 问题 F 图 节点的最早发生
  • 生信技能树——GEO芯片数据的合并

    GSE83521和GSE89143数据合并 1 下载数据 rm list ls library GEOquery library stringr gse GSE83521 eSet1 lt getGEO GSE83521 destdir g
  • linux 中写汇编,Linux 中的汇编语言(一)

    在阅读Linux源代码时 你可能碰到一些汇编语言片段 有些汇编语言出现在以 S为扩展名的汇编文件中 在这种文件中 整个程序全部由汇编语言组成 有些汇编命令出现在以 c为扩展名的C文件中 在这种文件中 既有C语言 也有汇编语言 我们把出现在C
  • 对接微信公众号的流程

    前言 最近对接一个新的微信公众号 功能比较简单 但是不熟悉微信公众号对接流程的同学可能需要花些时间阅读官方文档和调试 笔者对接过程也是一波三折 于是把流程分享出来帮助没有对接过的同学 对接流程 首先 开发微信公众号的相关功能一般是公司新申请
  • tkmybatis自定义xml报错

    刚刚再写一个项目 然后项目使用的是tk mybatis 后面我有在项目中引入了mybatis plus 想使用公司的自动生成类的文件 当引入进来后 我以为一切都是水到渠成的 当一执行 它给我报个这个错 我一看这个先去配置文件看了下 配置的路
  • 常用C#代码

    常用C 代码 获取系统路径 1 获取电脑的路径 string dir Environment GetFolderPath Environment SpecialFolder DesktopDirectory 获取系统桌面目录路径 strin
  • sql注入基础

    0x01sql语句基础 1 select语句 格式 select from table 从table表中获取字段信息 select from table where 在满足where后的条件下查询字段信息 2 insert语句 格式 ins
  • STM32通过串口2使用ESP8266WIFI模块连接新大陆云平台

    目录 使用硬件 分步骤 配置TCP连接 连接WIFI 1 使用ESP8266的复位引脚进行复位 2 发送基本AT指令 3 连接新大陆 4 新大陆云平台显示在线及上传数据测试成功 5 串口显示 5 涉及的函数 发生AT检测WIFI模块错误 如