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站视频,特别详细!
到这里基本上都设置好了,剩下的都是写代码了,这里放几段
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