cc2530单片机用esp01使用http协议上传数据到onenet平台

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。HTTP 是一种无状态 (stateless) 协议, HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率。,所以在单片机中利用HTTP协议是简单的数据上传协议。

首先要利用AT指令配置esp01,具体可以在官方教程里面搜索。

这里我使用的是协议栈的串口二对esp进行配置。

具体代码为

void IOTInit(void)//初始化MQTT
{
  unsigned char SendATData[200];
    
  switch(IOT_Status.Status)
  {
     case 3:
      memset(SendATData,0,200);
      sprintf((char *)SendATData,"AT+CWJAP=\"%s\",\"%s\"\r\n",LYSSID,LYPASSWD);//链接到路由器
      HalUARTWrite(1,SendATData,osal_strlen((char *)SendATData));
      HalUARTWrite(0,SendATData,osal_strlen((char *)SendATData));
      HalUARTWrite(0,"Connect To WiFi Route...\r\n",26);
      
      break;
      
    case 4:
      HalUARTWrite(1,"AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n",sizeof("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n"));//设置登录到MQTT服务器
      //IOT_Status.Status=5;//等待数据返回,调整到串口接收函数处理 获取到6
      break;
      
    case 5:
      memset(SendATData,0,200);
      sprintf((char *)SendATData,"AT+CIPSEND\r\n");
      HalUARTWrite(1,SendATData,osal_strlen((char *)SendATData));//设置登录
      //IOT_Status.Status=7;//等待数据返回,去串口函数处理函数进行判断反馈
      break;  
  }
}

void IOT_RecdataPut(void)//对IOT返回的数据内容进行解析

  char *strx;
  

  switch(IOT_Status.Status)
  {
    case 0:
      strx=strstr((const char*)uartbuf2,(const char*)"OK");//返回OK,表明通讯正常c s t x
       if(strx)
       {
         LCD_P8x16Str(0, 4, "CONNET MODULE OK");
         IOT_Status.Status=1;
       }
      break;
      
      case 1:
      strx=strstr((const char*)uartbuf2,(const char*)"OK");//设置下模式3
       if(strx)
       {
         //LCD_P8x16Str(0, 4, "SIMCARD NUM [OK]");
         LCD_P8x16Str(0, 4, "SET MODE 3  [OK]");
         IOT_Status.Status=2;
       }
       break;
         
      case 2:
      strx=strstr((const char*)uartbuf2,(const char*)"OK");//设置模块为 透传模式 发送json到oennet
       if(strx)
       {
         //LCD_P8x16Str(0, 4, "REGISTER NET[OK]");
         LCD_P8x16Str(0, 4, "TRANSPARNET [OK]");
         IOT_Status.Status=3;
       } 
      break;  
    
       case 3://判断登录服务器情况
        strx=strstr((const char*)uartbuf2,(const char*)"OK");//CSTX链接到路由器反馈,要上外网必须让WiFi去链接到路由器
       if(strx)
       {
         //LCD_P8x16Str(0, 4, "CONNECT CLOUD OK");
         LCD_P8x16Str(0, 4, "CONNECT Route OK");
         IOT_Status.Status=4;//此时需要发布登录
       } 
      break;   
    
       case 4://查看登录情况返回
       strx=strstr((const char*)uartbuf2,(const char*)"OK");//ONENET登录成功,可以发布订阅数据了
       if(strx)
       {
          LCD_P8x16Str(0, 4, "CONNECT CLOUD OK");
          IOT_Status.Status=5;//此时就可以发数据了
       } 
      break;
    
     case 5://查看发布数据情况
     strx=strstr((const char*)uartbuf2,(const char*)"OK");//发布数据成功c s t x
     if(strx)
     {
        LCD_P8x16Str(0, 4, "SEND CLOUD DATA.");
        IOT_Status.Status=6;//此时就可以发数据了
        //isBUSY = 0;
     }
     else
     {
        //HalUARTWrite(0,"**SEND DATA FAILURE\r\n",21);
        LCD_P8x16Str(0, 4, "SEND CLOUD DATA*");
        IOT_Status.Status=6;//此时就可以发数据了
        //isBUSY = 0;
     }
     
    break;
  }
  
       
}

这两个就是配置esp01连接到WiFi和网站的具体代码,可以定义一个事件循环执行知道全部成功。

然后再数据发送中按照一定格式发送。

 memset(RevData,0,256);      //统计组成字符串串口打印
            sprintf(RevData,"POST /devices/%s/datapoints?type=3 HTTP/1.1\r\napi-key:%s\r\nHost:api.heclouds.com\r\n",devid,devkey);
            HalUARTWrite(0,(unsigned char *)RevData,osal_strlen(RevData));  
            HalUARTWrite(1,(unsigned char *)RevData,osal_strlen(RevData));
            
            memset(strTemp,0,256);      //统计组成字符串串口打印
            sprintf(strTemp,"{\"temp%d\":%d,\"humi%d\":%d,\"light%d\":%d,\"CO2%d\":%d,\"soilhum%d\":%d}",id,temp,id,humi,id,sensor1,id,sensor2,id,sensor3);
            
            memset(RevData,0,256);      //统计组成字符串串口打印
            sprintf(RevData,"Content-Length:%d\r\n\r\n%s",osal_strlen(strTemp),strTemp);
            
            HalUARTWrite(0,(unsigned char *)RevData,osal_strlen(RevData));     
            HalUARTWrite(1,(unsigned char *)RevData,osal_strlen(RevData));

并且再我的代码中定义了变量可以方便更改和直接使用

#define  devkey   "snlOQBRYB19DJiZFfhrFaC4YQTY="   //onenet平台产品apikey
#define  devid    "1074546285"                      //onenet平台设备id
#define  LYSSID   "Redmi"                      // 修改你路由器的SSId
#define  LYPASSWD "123456789"                   // 修改你路由器的密码

有需要的可以去我的资源里面去下载 cc2530通过esp01上传数据到onenet资源-CSDN文库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值