0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用CW32单片机通过ESP8266连接OneNET物联网平台

武汉芯源半导体 来源:武汉芯源半导体 2023-11-09 14:32 次阅读

一、简介



1.这期视频向大家介绍如何使用CW32单片机通过ESP8266连接OneNET物联网平台,发送温湿度数据到平台,并接受平台的云控制。

二、所需物料


2.本实验使用到了CW32-48F大学计划开发板、DHT11温湿度传感器模块、ESP8266WIFI模块及Keil5开发环境。


3.接线:根据原理图,把模块连接到开发板上


(1)ESP8266WIFI模块:


开发板上预留了该模块接口,通过串口向ESP8266写入指令。

8967bbb6-7ec9-11ee-939d-92fbcf53809c.png


(2)DHT11模块:开发板上预留了该模块接口

896b7580-7ec9-11ee-939d-92fbcf53809c.png


4.(1)MQTT协议介绍:


MQTT是一种轻量级的发布/订阅消息传输协议,常用于物联网领域。它的特点是简化和减少了网络流量,可以高效地进行数据传输。在本次应用中,我们将使用MQTT协议进行数据上传。


(2)OneNET代码介绍:


在使用OneNet平台时,我们需要使用TCP协议进行连接。首先需要设置好TCP协议的相关参数,然后通过POST方法将温湿度数据上传到OneNet平台中。在上传数据时需要使用OneNet平台提供的API接口进行数据传输。


注:#define PROID"XXX" //xxx产品ID


#define ACCESS_KEY "XXX" //xxx为acess_key访问密钥


#define DEVICE_NAME"XXX" //xxx为设备名称


8978373e-7ec9-11ee-939d-92fbcf53809c.png


898fedd4-7ec9-11ee-939d-92fbcf53809c.png


三、核心代码

main.c

int main(void)
{ 
 unsigned short timeCount = 0; //发送间隔变量 
 unsigned char *dataPtr = NULL;
 
 Hardware_Init();    //初始化外围硬件
  while(DHT11_Init())  //检测DHT11
  Delay_ms(200);
 ESP8266_Init();     //初始化ESP8266
 UsartPrintf(USART_DEBUG, "Connect MQTTs Server...
");
 while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT")) //ESP8266联网
  Delay_ms(500);
 UsartPrintf(USART_DEBUG, "NET_OK
"); 
 while(OneNet_DevLink())   //接入OneNET
  Delay_ms(500);
 OneNET_Subscribe();   //订阅消息传输,允许接受下发指令
 TFTShowString(0,0,"   OneNET   "); //界面
 TFTShowString(1,0," 智能物联平台 ");
 TFTShowString(3,0,"humidity:  %");
 TFTShowString(4,0,"temperature: C");
 while(1)
 {
  if(++timeCount >= 50)         
  {
   DHT11_Read_Data(&temperature,&humidity); //读取温湿度值 
   TFTShowNumber(3,10,humidity);
   TFTShowNumber(4,12,temperature);
   UsartPrintf(USART_DEBUG,"TEMP:%d HUMI:%d
",temperature,humidity);
   UsartPrintf(USART_DEBUG, "OneNet_SendData
");
   OneNet_SendData();    //数据上传
   timeCount = 0;
   ESP8266_Clear();  //清除缓存
  } 
 
  dataPtr = ESP8266_GetIPD(0); //接收OneNET平台返回的数据
  if(dataPtr != NULL)
   OneNet_RevPro(dataPtr); //确认返回数据,执行下发命令
 
  Delay_ms(10);
 }
}
Onenet.c:
#define PROID   "3OB4R7cKCw"    //产品ID(名称)
#define ACCESS_KEY  "n7GptYNpf9U97zHTz2ltc1Pvy4GB+0MXsU1nKel9ixc=" //产品访问密钥
#define DEVICE_NAME  "111"   //设备ID(名称)
void OneNet_RevPro(unsigned char *cmd)
{
 char *req_payload = NULL;
 char *cmdid_topic = NULL;
 unsigned short topic_len = 0;
 unsigned short req_len = 0;
 unsigned char qos = 0;
 static unsigned short pkt_id = 0;
 unsigned char type = 0;
 short result = 0;
 char *dataPtr = NULL;
 char numBuf[10];
 int num = 0;
 
 type = MQTT_UnPacketRecv(cmd);
 switch(type)
 {
  case MQTT_PKT_PUBLISH:                //接收的Publish消息
 
   result = MQTT_UnPacketPublish(cmd, &cmdid_topic, &topic_len, &req_payload, &req_len, &qos, &pkt_id);
   if(result == 0)
   {
    char *data_ptr = NULL;
    UsartPrintf(USART_DEBUG, "topic: %s, topic_len: %d, payload: %s, payload_len: %d
", cmdid_topic, topic_len, req_payload, req_len);
    data_ptr = strstr(cmdid_topic, "request/");         //查找cmdid
    if(data_ptr)
    {
     char topic_buf[80], cmdid[40];
 
     data_ptr = strchr(data_ptr, '/');
     data_ptr++;
 
     memcpy(cmdid, data_ptr, 36);           //复制cmdid
     cmdid[36] = 0;
     snprintf(topic_buf, sizeof(topic_buf), "$sys/%s/%s/cmd/response/%s",
               PROID, DEVICE_NAME, cmdid);
     OneNET_Publish(topic_buf, "ojbk");          //回复命令
    }
   }
   case MQTT_PKT_PUBACK:              //发送Publish消息,平台回复的Ack
     if(MQTT_UnPacketPublishAck(cmd) == 0)
    UsartPrintf(USART_DEBUG, "Tips: MQTT Publish Send OK
");
  break;
  case MQTT_PKT_SUBACK:                //发送Subscribe消息的Ack
 
   if(MQTT_UnPacketSubscribe(cmd) == 0)
    UsartPrintf(USART_DEBUG, "Tips: MQTT Subscribe OK
");
   else
    UsartPrintf(USART_DEBUG, "Tips: MQTT Subscribe Err
");
  break;
  default:
   result = -1;
  break;
 }
 
 ESP8266_Clear();         //清空缓存
 
 if(result == -1)
  return;
 
 dataPtr = strchr(req_payload, ':');     //搜索':'
 if(dataPtr != NULL)     //如果找到了
 {
  dataPtr++;
  while(*dataPtr >= '0' && *dataPtr <= '9')    //判断是否是下发的命令控制数据
    {
      numBuf[num++] = *dataPtr++;
    }
    numBuf[num] = 0;
    num = atoi((const char *)numBuf);        //转为数值形式
    if(strstr((char *)req_payload, "light"))    //搜索"light",判断":"后面的数值进行控制
    {
      if(num == 1)                //控制数据如果为1,代表开
      {
        UsartPrintf(USART_DEBUG, "接收到1
");
        //开灯
        PA07_SETLOW();
        TFTShowString(5,0,"light: ON ");
      }
      else if(num == 0)              //控制数据如果为0,代表关
      {
        UsartPrintf(USART_DEBUG, "接收到0
");
        //关灯
        PA07_SETHIGH();
        TFTShowString(5,0,"light: OFF");
      }
    }
  }
  if(type == MQTT_PKT_CMD || type == MQTT_PKT_PUBLISH)
  {
    MQTT_FreeBuffer(cmdid_topic);
    MQTT_FreeBuffer(req_payload);
  }
}
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2547

    文章

    50545

    浏览量

    751492
  • 单片机
    +关注

    关注

    6031

    文章

    44507

    浏览量

    632476
  • 物联网
    +关注

    关注

    2902

    文章

    44196

    浏览量

    370789
  • CW32
    +关注

    关注

    1

    文章

    182

    浏览量

    561

原文标题:【CW32】基于CW32的物联网应用

文章出处:【微信号:武汉芯源半导体,微信公众号:武汉芯源半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于esp8266连接联网问题

    esp8266怎么连接上互联网,以实现远程通过3G网控制esp8266来控制单片机工作。
    发表于 07-30 22:06

    基于ONENET平台实现的远程温控

    温控设备开关APP描述绑定设备:输入ONENET平台上对应的设备ID和KEY联网配置:输入WiFi名称和密码,配置ESP8266连接到路由器
    发表于 11-04 15:23

    STM32F4/F1+ESP8266连接OneNET的主要问题有哪些

    STM32F4/F1+ESP8266是怎样与OneNET进行连接的?STM32F4/F1+ESP8266连接
    发表于 10-25 08:15

    将OLED显示屏与NodeMCU ESP8266连接的方法

    /thread-1183-1-1.html在本篇文章中,我们将OLED显示屏与NodeMCU ESP8266连接。 NodeMCU是一个开源的联网
    发表于 11-01 09:17

    怎样去控制基于STM32单片机ESP8266连接服务器呢

    ESP8266 station模式的操作逻辑流程是怎样的?怎样去控制基于STM32单片机ESP8266连接服务器呢?
    发表于 11-08 07:26

    STM32+ESP8266+MQTT协议如何连接OneNet联网平台

    STM32+ESP8266+MQTT协议如何连接OneNet联网平台
    发表于 12-02 06:52

    使用esp8266实现STM32联网(最简单USART方法)

    到电脑上的java程序 这一篇 esp8266与STM32连接,电脑通过STM32配置esp8266实现联网发送数据具体流程如下图 2=
    发表于 11-22 11:51 1.2w次阅读

    51单片机通过ESP8266模块与手机进行通讯

    51单片机通过ESP8266模块与手机进行通讯WIFI 工作方式:1.AP模式 提供热点2.Station模式 作为设备接入热点3.同时支持配置通过USB转TTL模块把
    发表于 11-12 12:06 34次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>通过</b><b class='flag-5'>ESP8266</b>模块与手机进行通讯

    51单片机通过WIFI模块ESP8266控制四路继电器

    目录一、系统方案二、硬件设计三、单片机软件设计四、Android APP软件设计一、系统方案手机APP通过ESP8266 WIFI模块与51单片机通信控制四路继电器。下位
    发表于 11-23 16:51 43次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>通过</b>WIFI模块<b class='flag-5'>ESP8266</b>控制四路继电器

    基于51单片机+DHT11温湿度模块+ESP8266模块+上传oneNET APP显示+LCD1602显示

    基于51单片机+ESP8266上传oneNET平台 APP显示基本介绍器件51单片机ESP8266
    发表于 11-23 16:51 70次下载
    基于51<b class='flag-5'>单片机</b>+DHT11温湿度模块+<b class='flag-5'>ESP8266</b>模块+上传<b class='flag-5'>oneNET</b> APP显示+LCD1602显示

    基于STM32单片机ESP8266联网阿里云的远程控制LED系统

    模块USB转TTL模块3.3V供电设备一、整体思路:①:首先STM32单片机通过ESP8266模块连接路由器进而和阿里云建立TCP连接②:在
    发表于 12-24 19:20 42次下载
    基于STM32<b class='flag-5'>单片机</b><b class='flag-5'>ESP8266</b><b class='flag-5'>物</b><b class='flag-5'>联网</b>阿里云的远程控制LED系统

    ESP8266通过MQTT协议连接ONENET

    ESP8266通过MQTT协议连接ONENET一、设计目标二、ONENET平台搭建三、硬件准备四
    发表于 01-12 19:58 53次下载
    <b class='flag-5'>ESP8266</b><b class='flag-5'>通过</b>MQTT协议<b class='flag-5'>连接</b><b class='flag-5'>ONENET</b>

    51单片机通过WIFI模块ESP8266控制四路继电器

    手机APP通过ESP8266 WIFI模块与51单片机通信控制四路继电器。下位单片机ESP8266
    发表于 02-09 09:34 131次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>通过</b>WIFI模块<b class='flag-5'>ESP8266</b>控制四路继电器

    使用WIFI模块ESP8266连接单片机与上位通信

    ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi(串口-无线)模块,此处使用的是正点原子团队自主开发的ATK-ESP-01模块。该模块通过串口与 单片机
    发表于 05-09 10:50 15次下载
    使用WIFI模块<b class='flag-5'>ESP8266</b><b class='flag-5'>连接单片机</b>与上位<b class='flag-5'>机</b>通信

    使用Firebase的ESP8266联网平台

    电子发烧友网站提供《使用Firebase的ESP8266联网平台.zip》资料免费下载
    发表于 07-03 09:54 0次下载
    使用Firebase的<b class='flag-5'>ESP8266</b><b class='flag-5'>物</b><b class='flag-5'>联网</b><b class='flag-5'>平台</b>