esp8266 上传数据到 乐联网

一.配置乐联网

1 注册账号

2 我的设备->添加新设备,其他,标识02

image.png

3 传感器与控制器,

3.1 添加新控制器 E0

image.png

3.2 添加新的传感器 P1

image.png

4 使用乐联网测试数据上传流程

测试API网址http://www.lewei50.com/dev/apitest/3

4.1 找到Userkey

image.png

4.2 测试

image.png

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连接容易断开,下次发数据还要重新建立连接
    image.png

//开机自动进入透传 并且连接到乐联网,可不设置
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是传感器的标识,后面的值是要上传的值

image.png

//1.数据长度就是最后一句JSON数据的字节长度
//2.JSON前面的的一行新行必不可少
//一次可以上传多个数据,但是这些传感器必须在同一个设备下,因为第一句已经写了01/02……
//还需要注意两次POST请求的间隔至少10s,不能太过频繁的请求。

image.png

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 思路代码

  1. 首先串口发送命令,然后延时时间在500ms左右, 这段时间就是串口中断会自动接收串口received数据, 同时将数据保存到buffer里面,
  2. 延时时间到,开始分析buffer里面的数据,如果buffer里面含有想要的数据,就确定通信完整, 提取need data进行处理
  3. 例如 发送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”}]}}&^!

发布了97 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_32460819/article/details/104011590