51+esp8266+onenet最快上手教程(附实测代码)

花了大半天时间终于从零实现了通过esp8266与onenet的自由交换数据,学会了以后才感觉白白浪费了好多时间走了许多弯路,但这也应该是大多数刚刚接触物联网都会茫然的地方,作为菜鸟的我就斗胆给萌新们大概梳理一下整体思路!
物联网最最基础的一步就是将单片机中的数据发送到onenet云服务器中然后再读出来。中介就是最火热的wifi模块esp8266。那么就需要对这三个分别配置。

1.配置onenet服务器:

这个可以参考b站一位up主的视频,或者自行百度再或者直接看官方文档。一般步骤是 注册账号,开发者中心,创建产品(开始先用最简单的HTTP协议),创建设备,添加数据流模板。细节还请参考具体文档

2.配置esp8266

这个网上一找一大堆,有时候会迷糊,建议直接看官方的AT指令使用,然后找到 透传那一块,讲的特别清楚。所谓透传,其实就是指当你开启透传的时候,你的esp8266收发的数据就是单片机串口的。

3.配置51单片机

知道了透传原理以后,配置单片机其实完全就是对esp8266写各种AT指令,配置好透传模式后就是对单片机串口的写和读了。这一部分参见代码。

4.关于HTTP协议的种种问题

这方面我也实在是不太懂,最重要的就是格式,onenet云对于http协议有明确的格式规定,尤其要注意换行。esp8266向onenet云发送的数据有两类。一是发送数据流POST,再一个就是获得数据流GET,具体如下

POST /devices/88888888(设备ID)/datapoints?type=3 HTTP/1.1
 api-key:(设备的api-key)
 Host:api.heclodus.com
 Content-Length:11{“temp”:30}``
GET /devices/88888888/datastreams/temp HTTP/1.1
 api-key:
 Host:api.heclodus.com
 Connection:close

这一部分请参考b站视频,特别详细!

物联网lstm变分自编码 物联网 代码_HTTP

到这里基本上都设置好了,剩下的都是写代码了,这里放几段

void ESP8266_SendCmd(u8 *pbuf)
{
	while(*pbuf!='\0') //遇到空格跳出循环	
	{
		UART_SendByte(*pbuf);
		delay_10us(2);
		pbuf++;	
	}
	delay_10us(2);
	UART_SendByte('\r');//回车
	delay_10us(2);
	UART_SendByte('\n');//换行
	delay_ms(1000);
}
void Send_Data_To_OneNet(u8 *send_temp,u16 num)
{  ESP8266_SendCmd1("POST");	UART_SendByte(' ');delay_10us(2);	ESP8266_SendCmd1("/devices/*******/datapoints?type=3");	UART_SendByte(' ');delay_10us(2);	ESP8266_SendCmd1("HTTP/1.1");	UART_SendByte('\r');//回车delay_10us(2);	UART_SendByte('\n');//换行delay_10us(2);	ESP8266_SendCmd1("api-key:**************");	UART_SendByte('\r');//回车delay_10us(2);	UART_SendByte('\n');//换行delay_10us(2);	ESP8266_SendCmd1("Host:api.heclodus.com");	UART_SendByte('\r');//回车delay_10us(2);	UART_SendByte('\n');//换行delay_10us(2);	ESP8266_SendCmd1("Content-Length:11");	UART_SendByte('\r');//回车delay_10us(2);	UART_SendByte('\n');//换行delay_10us(2);	UART_SendByte('\r');//回车delay_10us(2);	UART_SendByte('\n');//换行delay_10us(2);	ESP8266_SendCmd1("{");	ESP8266_SendCmd1("\"");	ESP8266_SendCmd1(send_temp);	ESP8266_SendCmd1("\":");    UART_SendByte(48+num/10);delay_10us(2);	UART_SendByte(48+num%10);delay_10us(2);	ESP8266_SendCmd1("}");	UART_SendByte('\r');//回车delay_10us(2);	UART_SendByte('\n');//换行delay_10us(2);	UART_SendByte('\r');//回车delay_10us(2);	UART_SendByte('\n');//换行delay_10us(2);
}

这个程序的移植性还是挺高的,整个程序只需要改几个io口和无线密码等就够了,相信接触过单片机的小伙伴们都能看懂的。

以后学习了别的通信协议和stm32的物联网技术后再更新文章!

完整代码网址
https://pan.baidu.com/s/11Jku-vHefLD5Q0PXJc_g5g