一.配置乐联网
1 注册账号
2 我的设备->添加新设备,其他,标识02
3 传感器与控制器,
3.1 添加新控制器 E0
3.2 添加新的传感器 P1
4 使用乐联网测试数据上传流程
测试API网址http://www.lewei50.com/dev/apitest/3
4.1 找到Userkey
4.2 测试
4.3 结果
二. 硬件配置1 串口控制
1 将esp8266连接到串口,打开串口工具
2 运行下面命令进行配置,每次返回的数据都是OK
AT+RST //复位
AT+CIPMODE=1 //STA模式
AT+CIPMUX=0 //单连接模式
AT+CWMODE=1 //透传模式
AT+CWJAP="iQOO","1234567890" //连接WiFi 这里是WiFi和密码
-
每次post间隔10s以上,再一次发数据运行下面两行代码就好了
AT+CIPSTART=“TCP”,“api.lewei50.com”,80 //与乐联网建立TCP连接
AT+CIPSEND //进入透传开始发送数据 -
这里使用透传模式有一个好处 就是一般不会轻易断开连接,如果不使用透传模式,TCP连接容易断开,下次发数据还要重新建立连接
//开机自动进入透传 并且连接到乐联网,可不设置
AT+SAVETRANSLINK=1,“api.lewei50.com”,80,“TCP”
POST /api/V1/gateway/UpdateSensors/02 HTTP/1.1#HTTP前面有个空格,02是设备标识
userkey: eb0dc27079ee48c9aca4325caaa0e2a7#冒号后面有一个空格
Host: open.lewei50.com#冒号后面有空格
Content-Length: 28#[{"Name":"P1","Value":23.6}]的长度
Connection: close#冒号后面有空格
# 这里的回车不能忽略
[{"Name":"P1","Value":23.6}]#这个长度是28个字符 P1是传感器的标识,后面的值是要上传的值
//1.数据长度就是最后一句JSON数据的字节长度
//2.JSON前面的的一行新行必不可少
//一次可以上传多个数据,但是这些传感器必须在同一个设备下,因为第一句已经写了01/02……
//还需要注意两次POST请求的间隔至少10s,不能太过频繁的请求。
POST /api/V1/gateway/UpdateSensors/02 HTTP/1.1
userkey: eb0dc27079ee48c9aca4325caaa0e2a7
Host: open.lewei50.com
Content-Length: 28
Connection: close
[{"Name":"P1","Value":15.6}]
三. 硬件配置2 STM32控制
1 串口
串口 | 引脚 |
---|---|
usart3 | B10接esp_R |
B11接esp_T |
注意 使用的是正点原子系列 F103
串口初始化和引脚初始化忽略,
2 思路代码
- 首先串口发送命令,然后延时时间在500ms左右, 这段时间就是串口中断会自动接收串口received数据, 同时将数据保存到buffer里面,
- 延时时间到,开始分析buffer里面的数据,如果buffer里面含有想要的数据,就确定通信完整, 提取need data进行处理
- 例如 发送at 返回at ok ,那么发送at后等待延时500s,确定buffer内容包含at ok即为通信成功
代码如下:
1 发送命令接收命令-通信部分
u8 atk_8266_send_cmd(char *cmd,u8 *ack,u16 waittime)
{
USART3_RX_STA=0; //清空接收
memset(USART3_RX_BUF,0,sizeof(USART3_RX_BUF));//清除buffer
printf3("%s\r\n",cmd); //发送命令
delay_ms(400); //等待设备返回信息
if(strstr((const char*)USART3_RX_BUF,(const char*)ack)) //判断字符串ack是否是buf的子串
{
printf("ack:%s ..end\r\n",USART3_RX_BUF);
return 0;
}else{
printf("未得到想要的数据\r\n");
return 1;
}
printf("超时!!!\r\n");
return 1;
}
接下来是eso8266的TCP与物联网通信的程序
2 初始化模块为sta模式, 即wifi的终端模式
void atc_8266_wifista_init(void){
char p[50]="";
sprintf(p, "AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);
// 设置模块STA模式
while(atk_8266_send_cmd("AT+CWMODE=1","OK",20)){
delay_ms(500);
printf("设置STA模式失败\r\n");
}; //DHCP服务器关闭(仅AP模式有效)
printf("设置STA模成功\r\n");
delay_ms(100);
//设置完完毕后需要重启模块进行有效
atk_8266_send_cmd("AT+RST","OK",20);
delay_ms(900);
printf("重启成功\r\n");
//连接wifi
while(atk_8266_send_cmd("AT+CWJAP?",wifista_ssid,20)){
printf("未连接wifi正在建立连接\r\n");
atk_8266_send_cmd(p,"OK",1000);
};
printf("连接目标路由器成功\r\n");
delay_ms(500);
}
3 乐联网接收数据的格式
void lewei_send(float value)
{
char p[100]="";
sprintf((char*)p,"[{\"Name\":\"P1\",\"Value\":%0.1f}]\r\n",value);//测试数据
u3_printf("POST /api/V1/gateway/UpdateSensors/02 HTTP/1.1\r\n");
u3_printf("userkey: eb0dc27079ee48c9aca4325caaa0e2a7\r\n");
u3_printf("Host: open.lewei50.com\r\n");
u3_printf("Content-Length: %d\r\n",strlen(p)-2); //-2是因为后面的/r/n
u3_printf("Connection: close\r\n");
u3_printf("\r\n");
if(atk_8266_send_cmd(p,"true",20)){
printf("数据发送失败\r\n");
lewei_send(value);//数据发送失败一直发
};
}
4 发送数据到乐联网,修改乐联网上面的数据
void atk_8266_wifista_TCP_client(void){
atk_8266_send_cmd("AT+CIPMUX=0","OK",20); //开启单连接
atk_8266_send_cmd("AT+CIPMODE=1","OK",20); //开启透传模式
while(atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"api.lewei50.com\",80","OK",1000)){
printf("登录目标服务器失败,\r\n");
};printf("登录目标服务器成功,下面进行数据传输\r\n");
while(atk_8266_send_cmd("AT+CIPSEND","OK",200)); //开始传输
printf("开始传输数据了...\r\n");
lewei_send(15.2);
while(1);
}
3 反向传输, 乐联网控制单片机
上一节添加添加新控制器 E0,本节继续通过esp8266 STA模式连接wifi, TCP客户端模式, 访问物联网, 使用物联网反向数据传输
1 建立乐联网连接,乐联网控制单片机led亮灭
首先在物联网控制器列表中增加
char cmd_get_data[]="{\"method\":\"update\",\"gatewayNo\":\"02\,\"userkey\":\"eb0dc27079ee48c9aca4325caaa0e2a7\"}&^!";
void atk_8266_wifista_TCP_client(void){
atk_8266_send_cmd("AT+CIPMUX=0","OK",20); //开启单连接
atk_8266_send_cmd("AT+CIPMODE=1","OK",20); //开启透传模式
while(atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"TCP.lewei50.com\",9960","OK",1000)){
printf("登录目标服务器失败,\r\n");
};printf("登录目标服务器成功,下面进行数据传输\r\n");
while(atk_8266_send_cmd("AT+CIPSEND","OK",200)); //开始传输
USART3_RX_STA=0;
memset(USART3_RX_BUF,0,sizeof(USART3_RX_BUF));//清除buffer
printf3("%s",cmd_get_data);
delay_ms(900);
//此时已经有数据返回
/*
返回信息:{"f":"message","p1":"ok"}&^!
此时登陆乐联网,刷新一下控制器列表,然后此时还会返回信息如下
{"method":"send","gatewayNo":"02","userkey":"eb0dc27079ee48c9aca4325caaa0e2a7","f":"getAllSensors"}&^!
意思是:你需要给我发送一个你的数据,我才能进行修改你的数据,比如你给我发送一个1,我才能让你改为0
发送命令告诉他:我的K0当前为1 打开状态
{"method":"response","result":{"successful":true,"message":"ok!Q","data":[{"id":"K0","value":"1"}]}}&^!
此时网页上会显示value, 红灯亮起
message表示修改后页面提示信息, 不用更改,
*/
printf3("%s",cmd_get_data);
delay_ms(900);
while (1){
atk_8266_send_data("{\"method\":\"response\",\"result\":{\"successful\":true,\"message\":\"ok!\",\"data\":[{\"id\":\"K0\",\"value\":\"1\"}]}}&^!","ok",200);
delay_ms(500);
}
while(1);
}
命令汇总
STA
TCP-client
AT+CWMODE=1
AT+RST
AT+CWJAP=“iQOO”,“1234567890”
AT+CIPMUX=0
AT+CIPMODE=1
下面给乐联网上传数据
AT+CIPSTART=“TCP”,“api.lewei50.com”,80
AT+CIPSEND
POST /api/V1/gateway/UpdateSensors/02 HTTP/1.1
userkey: eb0dc27079ee48c9aca4325caaa0e2a7
Host: open.lewei50.com
Content-Length: 28
Connection: close
[{“Name”:“P1”,“Value”:15.6}]
下面给乐联网上传数据,并得到物联网的控制信息
AT+CIPSTART=“TCP”,“TCP.lewei50.com”,9960
AT+CIPSEND
{“method”:“update”,“gatewayNo”:“02”,“userkey”:“eb0dc27079ee48c9aca4325caaa0e2a7”}&^!
打开网址,查看那个传感器,
{“method”:“response”,“result”:{“successful”:true,“message”:“ok!Q”,“data”:[{“id”:“K0”,“value”:“1”}]}}&^!