STM32使用ESP8266模块AT指令连接心知天气API获取天气信息

这篇具有很好参考价值的文章主要介绍了STM32使用ESP8266模块AT指令连接心知天气API获取天气信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于之前使用STM32单片机来开发一些物联网的小项目,接触到了WIFI模块ESP8266,所以写下来记录一下。本文主要介绍的是STM32通过发送AT指令集来控制ESP8266 WIFI模块连接WiFi并与心知天气API建立TCP连接获取天气信息。

一、硬件连接

ESP8266我使用的是正点原子的ATK-ESP8266,已经提前烧录好AT指令集固件,至于固件的烧录可以参考正点原子的教程或者去安可信官网查找相关资料即可。STM32单片机设计有USB转串口即可。

STM32 VCC    ->  ESP8266 VCC
STM32 TXD2   ->  ESP8266 RXD
STM32 RXD2   ->  ESP8266 TXD
STM32 GND    ->  ESP8266 GND

这里用到了两组串口,USART1用于打印调试信息到电脑的串口助手中;USART2用于主控与ESP8266的通信。串口配置代码直接沿用了正点原子提供的。在这里就不贴出来了。


二、连接WiFi

ESP8266有三种WiFi模式,分别是station模式,AP模式和station+AP模式。简单来说,station模式就是8266作为连接WiFi的设备;AP模式就是8266作为提供WiFi的设备,相当于手机的热点功能。连接WiFi最简单的步骤就两步:8266为station模式和连接WiFi。

设置WiFi模式

设置WiFi模式的AT指令有AT+CWMODEAT+CWMODE_CURAT+CWMODE_DEF。后面两种指令的区别是后缀为DEF的指令会将设置保存到flash中,重新上电不需要再次设置。第一种不带后缀的指令,官方文档写的是不建议使用,所以就用最后一种就行了。以下是官方文档的具体说明STM32使用ESP8266模块AT指令连接心知天气API获取天气信息


连接WiFi

连接WiFi指令和设置WiFi模式指令一样有三个版本,这里使用AT+CWJAP_DEF来说明。
STM32使用ESP8266模块AT指令连接心知天气API获取天气信息
ssid是你要连接WiFi的名字,pwd是密码,bssid是当有多个相同名字WiFi区分用的。值得注意的是,WiFi名字或者密码有特殊符号要使用\进行转义。
所以,连接WiFi只需要发送以下指令即可:

//设置为station模式
AT+CWMODE_DEF=1\r\n
//连接WiFi
AT+CWJAP_DEF="你的WiFi名","你的WiFi密码"\r\n

三、建立TCP连接

TCP连接这里以连接心知天气获取天气信息为例。主要为3步:与心知天气网站建立TCP连接,开启透传,发送GET请求获取天气信息。

心知天气

心知天气是提供天气信息的API,可以使用GET请求获取JSON格式的天气信息,有免费的版本可用,非常适合嵌入式应用的开发。具体文档说明和账号申请可自行官网查看(https://www.seniverse.com) 。心知天气会为每个账户提供公钥和私钥,这里我们只用到私钥,只需替代掉接口网址中your_api_key为自己的私钥即可。

https://api.seniverse.com/v3/weather/now.json?key=your_api_key&location=zhaoqing&language=en&unit=c

STM32使用ESP8266模块AT指令连接心知天气API获取天气信息


建立TCP连接

建立TCP,UDP或SSL连接使用指令AT+CIPSTART,具体参数如下:
STM32使用ESP8266模块AT指令连接心知天气API获取天气信息
因为我们要使用透传与网站通信,所以TCP必须设置为单连接;连接类型为TCP;远端IP可以是心知天气的具体IP地址,也可以用域名api.seniverse.com来代替;心知天气提供该服务的端口号是80端口。最后,建立TCP连接的AT指令是:

//建立TCP连接,参数为 连接类型 远端IP 远端端口号
AT+CIPSTART="TCP","api.seniverse.com",80\r\n

开启透传

开启透传首先要使用AT+CIPMODE=mode设置传输模式,mode为0是普通传输模式,mode为1是透传模式。设置完成后使用指令AT+CIPSEND开始传输,具体指令参数说明如下:
STM32使用ESP8266模块AT指令连接心知天气API获取天气信息
开启透传后无需写发送数据的长度,直接发送AT+CIPSEND即可,8266返回>即表示成功进入透传,此时无法再发送AT指令,发送的字符将会被当做数据全部发送给对方。若要退出透传返回AT指令模式,则要单独发送+++,注意这里无需换行。

//设置传输模式为透传模式
AT+CIPMODE=1\r\n
//开始透传
AT+CIPSEND\r\n
//退出透传
+++

GET请求

在进入透传之后就可以发送我们的GET请求。在GET和空格后加上要访问的接口地址就可以获取到网站返回给我们的天气信息了。记得更改私钥和在后面加上换行。

GET https://api.seniverse.com/v3/weather/now.json?key=your_api_key&location=zhaoqing&language=en&unit=c\r\n

STM32使用ESP8266模块AT指令连接心知天气API获取天气信息文章来源地址https://www.toymoban.com/news/detail-404016.html


四、核心代码

//检测接收到的应答
uint8_t* Check_Command(char *str)
{
	char *strx = 0;
	if(USART2_RX_STA&0X8000)		//接收到一次数据了
	{ 
		USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
		strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
	}
	return (uint8_t *)strx;
}

//向8266发送命令
//cmd:发送的命令字符串
//ack:期待的应答结果
//waittime:等待时间(单位:10ms)
//返回值:1,发送成功(得到了期待的应答结果)
//       0,发送失败
uint8_t Send_Command(char *cmd, char *ack, uint8_t waittime)
{
	uint8_t res=1; 
	USART2_RX_STA=0;
	u2_printf("%s\r\n",cmd);	//发送命令
	if(ack&&waittime)		//需要等待应答
	{
		while(--waittime)	//等待倒计时
		{
			HAL_Delay(10);
			if(USART2_RX_STA&0X8000)//接收到期待的应答结果
			{
				if(Check_Command(ack))
				{
					printf("ack:%s\r\n",(uint8_t*)USART2_RX_BUF);
					break;//得到有效数据 
				}
				USART2_RX_STA=0;
			} 
		}
		if(waittime==0)res=0; 
	}
	return res;
}

//向8266发送数据
void Send_Data(char *data)
{
	USART2_RX_STA=0;
	u2_printf("%s",data);	//发送数据
}

char Rcv_Str[1024] = "NULL";

//建立TCP连接,并开启透传
void TCP_Connect()
{
	Send_Command("AT+CIPSTART=\"TCP\",\"api.seniverse.com\",80","OK",50);
	HAL_Delay(500);
	//查询是否成功建立连接,成功则开启透传发送数据
	if(Send_Command("AT+CIPSTATUS","TCP",20))
	{
		Send_Command("AT+CIPMODE=1","OK",20);	//设置为透传模式
		Send_Command("AT+CIPSEND",">",20);	//开启透传
		HAL_Delay(1000);
		//发送GET请求
		Send_Data("GET https://api.seniverse.com/v3/weather/now.json?key=SJhnSCUV2ASZsxCzh&location=zhaoqing&language=zh-Hans&unit=c\r\n");
		HAL_Delay(1000);
		strcpy(Rcv_Str,(const char*)USART2_RX_BUF);	//将接收到的返回数据复制
	}
}

//退出透传,断开TCP连接
void TCP_Disconnect(void)
{
	//退出发送模式
	while((USART2->SR&0X40)==0);	//等待发送空
	USART2->DR='+';      
	HAL_Delay(15);					//大于串口组帧时间(10ms)
	while((USART2->SR&0X40)==0);	//等待发送空
	USART2->DR='+';      
	HAL_Delay(15);					//大于串口组帧时间(10ms)
	while((USART2->SR&0X40)==0);	//等待发送空
	USART2->DR='+';      
	HAL_Delay(1000);					//等待1s
	while(!Send_Command("AT","OK",20))//退出透传判断.
	{
		HAL_Delay(200);
	}
	//关闭透传模式
	Send_Command("AT+CIPMODE=0","OK",20);
	//断开TCP连接
	Send_Command("AT+CIPCLOSE","OK",20);
}
//主函数
int main(void)
{    
	HAL_Init();
    SystemClock_Config();
	USART1_Init(115200);
	USART2_Init(115200);
	
	HAL_Delay(1000);
	//测试ESP8266模块是否正常
	if(Send_Command("AT","OK",10))
	{
		printf("ESP8266 Is Ready\r\n");
	}
	else
	{
		printf("ESP8266 Not Ready\r\n");
	}
	//如果WIFI不是Station模式,则设置为Station模式
	if(!Send_Command("AT+CWMODE_DEF?","1",20))
	{
		Send_Command("AT+CWMODE_DEF=1","OK",20);
	}
	//查询WIFI是否连接,未连接则连接
	if(Send_Command("AT+CWJAP_DEF?","No AP",20))
	{
		HAL_Delay(500);
		Send_Command("AT+CWJAP_DEF=\"BieLai\",\"12345678\"","OK",50);
	}	
	HAL_Delay(1000);
	TCP_Connect();	//建立TCP连接
	printf("%s",Rcv_Str);	//打印网站返回的信息
	TCP_Disconnect();	//断开TCP连接
	
	while(1)
	{
		HAL_Delay(1000);		
	}

到了这里,关于STM32使用ESP8266模块AT指令连接心知天气API获取天气信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32---ESP8266的基础 AT 指令、基础 Wi-Fi 功能 AT 指令、TCP/IP 功能 AT 指令

    (常用基础AT指令)主要了解其中指令AT、AT+RST、ATE:   (1)当参数是ATE1时,显示: (2)当参数是ATE0时,显示:   说明: (1) Station 模式: 模块相当于一个客户端,可以链接到其他路由器发出的WIFI信号。 (2) SoftAP模式(软路由模式):模块本身相当于一个路由器,其他设备可

    2024年02月04日
    浏览(37)
  • STM32发送数据ESP8266固件烧录MQTT和AT指令调试与链接OneNET

    STM32连接ESP8266发送数据到OneNET平台 1.硬件型号:ESP8266-01s 和 USBTTL转接口模块 2.固件:1471_esp8266-at_mqtt-1m(MQTT透传AT固件(固件号:1471)) 3.固件烧录工具:flash_download_tool_3.9.4 固件下载和烧录工具均可在安信可官网下载安信可AT固件下载 本文章使用的是XCOM V2.6 串口助手 4.On

    2024年02月04日
    浏览(56)
  • STM32通过串口2使用ESP8266WIFI模块连接新大陆云平台

    目录 使用硬件: 分步骤:配置TCP连接,连接WIFI 1.使用ESP8266的复位引脚进行复位 2.发送基本AT指令 3.连接新大陆 4.新大陆云平台显示在线及上传数据测试成功 5.串口显示 5.涉及的函数 发生AT检测WIFI模块错误,如图,代码运行停留在了.AT,在while中一直循环,没有往下跑了,这种

    2024年04月24日
    浏览(48)
  • stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

    (示例:stm32f103c8t6+esp 01s 串口A T 指令模式) 流程简介:       本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令处理,在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进

    2024年02月02日
    浏览(35)
  • STM32-连接wifi模块(esp8266)

    目录 1. ESP8266模块介绍 1.1. 系统结构图 1.2. 功能介绍  1.3. AT指令说明  2. STM32连接ESP8266 3. ESP8266示例 3.1. ESP8266透传模式  3.2. ESP8266上传数据例程 乐鑫智能互联平台——ESP8266 拥有高性能无线 SOC,是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行,也可以作为 slave 搭

    2024年01月16日
    浏览(59)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码) --3. STM32硬件连接+keil代码修改

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年02月05日
    浏览(40)
  • <ESP8266>WIFI模块AT指令浅学

    人生如逆旅,我亦是行人。 缩写 意思 AT(automatic transmission) 自动变速器 WiFi 无线网 AP(Access Point) 无线访问接入点,无线路由器等类设备的统称 AP 模式 无线接入点模式 RST(TCP协议的 6 个标志之一) 表示重置连接、复位连接 TCP 传输控制协议 UDP 用户数据报协议 SSL 安全套

    2024年02月04日
    浏览(53)
  • STM32+ESP8266(AT固件)连接阿里云物联网 保姆级教学(附代码)--1.创建产品和设备

    提示:这里是从实际应用如何使用教学配置,未从原理讲解,适合小白从零开始到成功,比较有成就感 STM32+ESP8266(AT固件)连接阿里云物联网系列保姆级教学 1. 创建产品和设备 2. 设置产品Topic数据和功能定义设备物模型数据显示 3. 硬件连接+代码修改 4. Web数据可视化 5.功能

    2024年04月25日
    浏览(63)
  • ESP8266+STM32+MQTT发送数据到阿里云服务器(三、配置ESP8266模块并测试连接)

    1、固件烧录器 2、固件 3、串口工具 4、ESP866模块 5、USB转TTL模块 (以上软件工具文末分享的链接有,硬件请淘宝自行购买) 硬件如下图: 1、按照下面对照关系进行接线 USB转TTL ESP8266 3.3V 3V3 GND GND RX TX TX RX IO0 GND 2、打开固件烧录工具图标 3、点击“ OK ” 4、在出现的界面中,

    2024年03月23日
    浏览(42)
  • STM32系列(HAL库)——使用ESP8266-01S物联网模块连接Onenet云平台上报DHT11温湿度

    本篇主要讲解如何使用ESP8266-01S物联网模块连接Onenet云平台,并上报DHT11模块的温湿度数据。本文单片机主控采用STM32F405RGT6,使用其他主控的话基本要求有2个串口,一个串口用于调试使用,另一个用于ESP模块通讯。 1.软件 CubeMX Keil5 串口调试助手 Onenet云平台账户 2.硬件 STM32开

    2024年02月02日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包