51单片机使用 ESP8266获取网络天气

51单片机使用 ESP8266获取网络天气

ESP8266在硬件区域中是很常见的一款外设,而对于初学者来说,使用ESP8266是比较困难的,但熟悉了它的AT指令就会简单很多

本文章主要介绍51单片机使用ESP8266进行获取网络信息

在使用之前,必须先在串口进行相关调试

连接网络后发送

AT+CIPSTART=“TCP”,“api.seniverse.com”,80

AT+CIPSEND=115

ok >GET https://api.seniverse.com/v3/weather/now.json?key=SXHYpmO63Tt2tNMFu&location=shenzhen&language=zh-Hans&unit=c

发送数据一定要确定好字节数,不然需要多次发送

我使用的是心知天气API
目前有很多支持API接口的,小伙伴们可以自习百度搜索

接下来会接收到

+IPD,267:{“results”:[{“location”:{“id”:“WS10730EM8EV”,“name”:“娣卞湷”,“country”:“CN”,“path”:“娣卞湷,娣卞湷,骞夸笢,涓浗”,“timezone”:“Asia/Shanghai”,“timezone_offset”:“+08:00”},“now”:{“text”:“灏忛洦”,“code”:“13”,“temperature”:“28”},“last_update”:“2020-08-05T12:50:00+08:00”}]}CLOSED

其中 code是天气代码 这就是我们需要获取的数据

在51中,无法全部接收数据(数组定义太大,导致AT发送乱码)
因此需要判断一个标识位

我选择的是 ‘:’
在此是第13个,所以判断13个: 后开始接收数据

代码如下

void time0() interrupt 4
{
	uchar ch;
	if(RI)
	{
		RI = 0;
		ch = SBUF;
		
		if(ch == ':')
		{
			count++;
		}

		else if(ch == '\r')
		{
//			get_Flag = 1;
			ES_pos = 0;
			count = 0;
		}
		
		if(count == 13 || count == 14)    //天气和温度在第13个:后面
		{
			str_1[ES_pos] = ch;
			ES_pos++;
		}
		else if(count == 15)
		{
			get_Flag = 1;
		}
		else
		{
			ES_pos = 0;
		}
		
	}
}

//连接核心代码```


```c
/*是否连接   用于判断是否和服务器连接*/
bit isConnect()
{
	bit sta = 0;
	
	uchar a,b;
	
	a = ES_GetByte();
	b = ES_GetByte();
	
	if(a == 'C' || b == 'O')  //CONNECT
	{
		sta = 1;
	}
	else if(a == 'A' || b == 'L')  //ALeary
	{
		sta = 1;
	}
	return sta;
}


/*发送连接AT指令*/
void ES_ConnectInit()
{   
	ES_SendStr2(AT_str,37);
	ES_delayms(10000);
	//getMessage();
}

/*发送获取天气指令*/
void ES_ConnectGet()
{
	bit sta = 0;
	//连接远程服务端
	uint i = 0;
	do{
		ES_SendStr2(AT_str1,43);
		ES_delayms(100);
		i++;
		sta = isConnect();
	}while(sta == 0 && i < 10);
	
	//发送115个字节
	ES_SendStr2(AT_str2,16);

	ES_delayms(3000);
	//发送api接口信息
	ES_SendStr(AT_str3);
}


/*发送指令并获取回显信息*/
void ES_ConnectDeal()
{
//	showStr("AB");
	ES_ConnectGet();

	ES_GetStr();

}

之后我们只需要将接收到的数据进行判断就能获取网络天气信息等

若有相关AT指令引发的错误,请查看我的上一篇AT错误内容

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值