0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用CW32單片機通過ESP8266連接OneNET物聯(lián)網(wǎng)平臺

武漢芯源半導(dǎo)體 ? 來源:武漢芯源半導(dǎo)體 ? 2023-11-09 14:32 ? 次閱讀

一、簡介



1.這期視頻向大家介紹如何使用CW32單片機通過ESP8266連接OneNET物聯(lián)網(wǎng)平臺,發(fā)送溫濕度數(shù)據(jù)到平臺,并接受平臺的云控制。

二、所需物料


2.本實驗使用到了CW32-48F大學(xué)計劃開發(fā)板、DHT11溫濕度傳感器模塊、ESP8266WIFI模塊及Keil5開發(fā)環(huán)境。


3.接線:根據(jù)原理圖,把模塊連接到開發(fā)板上


(1)ESP8266WIFI模塊:


開發(fā)板上預(yù)留了該模塊接口,通過串口向ESP8266寫入指令。

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


(2)DHT11模塊:開發(fā)板上預(yù)留了該模塊接口

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


4.(1)MQTT協(xié)議介紹:


MQTT是一種輕量級的發(fā)布/訂閱消息傳輸協(xié)議,常用于物聯(lián)網(wǎng)領(lǐng)域。它的特點是簡化和減少了網(wǎng)絡(luò)流量,可以高效地進行數(shù)據(jù)傳輸。在本次應(yīng)用中,我們將使用MQTT協(xié)議進行數(shù)據(jù)上傳。


(2)OneNET代碼介紹:


在使用OneNet平臺時,我們需要使用TCP協(xié)議進行連接。首先需要設(shè)置好TCP協(xié)議的相關(guān)參數(shù),然后通過POST方法將溫濕度數(shù)據(jù)上傳到OneNet平臺中。在上傳數(shù)據(jù)時需要使用OneNet平臺提供的API接口進行數(shù)據(jù)傳輸。


注:#define PROID"XXX" //xxx產(chǎn)品ID


#define ACCESS_KEY "XXX" //xxx為acess_key訪問密鑰


#define DEVICE_NAME"XXX" //xxx為設(shè)備名稱


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


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


三、核心代碼

main.c

int main(void)
{ 
 unsigned short timeCount = 0; //發(fā)送間隔變量 
 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聯(lián)網(wǎng)
  Delay_ms(500);
 UsartPrintf(USART_DEBUG, "NET_OK
"); 
 while(OneNet_DevLink())   //接入OneNET
  Delay_ms(500);
 OneNET_Subscribe();   //訂閱消息傳輸,允許接受下發(fā)指令
 TFTShowString(0,0,"   OneNET   "); //界面
 TFTShowString(1,0," 智能物聯(lián)平臺 ");
 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();    //數(shù)據(jù)上傳
   timeCount = 0;
   ESP8266_Clear();  //清除緩存
  } 
 
  dataPtr = ESP8266_GetIPD(0); //接收OneNET平臺返回的數(shù)據(jù)
  if(dataPtr != NULL)
   OneNet_RevPro(dataPtr); //確認返回數(shù)據(jù),執(zhí)行下發(fā)命令
 
  Delay_ms(10);
 }
}
Onenet.c:
#define PROID   "3OB4R7cKCw"    //產(chǎn)品ID(名稱)
#define ACCESS_KEY  "n7GptYNpf9U97zHTz2ltc1Pvy4GB+0MXsU1nKel9ixc=" //產(chǎn)品訪問密鑰
#define DEVICE_NAME  "111"   //設(shè)備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);           //復(fù)制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");          //回復(fù)命令
    }
   }
   case MQTT_PKT_PUBACK:              //發(fā)送Publish消息,平臺回復(fù)的Ack
     if(MQTT_UnPacketPublishAck(cmd) == 0)
    UsartPrintf(USART_DEBUG, "Tips: MQTT Publish Send OK
");
  break;
  case MQTT_PKT_SUBACK:                //發(fā)送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') ? ?//判斷是否是下發(fā)的命令控制數(shù)據(jù)
 ? ?{
 ? ? ?numBuf[num++] = *dataPtr++;
 ? ?}
 ? ?numBuf[num] = 0;
 ? ?num = atoi((const char *)numBuf); ? ? ? ?//轉(zhuǎn)為數(shù)值形式
 ? ?if(strstr((char *)req_payload, "light")) ? ?//搜索"light",判斷":"后面的數(shù)值進行控制
 ? ?{
 ? ? ?if(num == 1) ? ? ? ? ? ? ? ?//控制數(shù)據(jù)如果為1,代表開
 ? ? ?{
 ? ? ? ?UsartPrintf(USART_DEBUG, "接收到1
");
 ? ? ? ?//開燈
 ? ? ? ?PA07_SETLOW();
 ? ? ? ?TFTShowString(5,0,"light: ON ");
 ? ? ?}
 ? ? ?else if(num == 0) ? ? ? ? ? ? ?//控制數(shù)據(jù)如果為0,代表關(guān)
 ? ? ?{
 ? ? ? ?UsartPrintf(USART_DEBUG, "接收到0
");
 ? ? ? ?//關(guān)燈
 ? ? ? ?PA07_SETHIGH();
 ? ? ? ?TFTShowString(5,0,"light: OFF");
 ? ? ?}
 ? ?}
 ?}
 ?if(type == MQTT_PKT_CMD || type == MQTT_PKT_PUBLISH)
 ?{
 ? ?MQTT_FreeBuffer(cmdid_topic);
 ? ?MQTT_FreeBuffer(req_payload);
 ?}
}
審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2545

    文章

    50445

    瀏覽量

    751031
  • 單片機
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631960
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2900

    文章

    44061

    瀏覽量

    370191
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    174

    瀏覽量

    549

原文標題:【CW32】基于CW32的物聯(lián)網(wǎng)應(yīng)用

文章出處:【微信號:武漢芯源半導(dǎo)體,微信公眾號:武漢芯源半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于esp8266連接聯(lián)網(wǎng)問題

    esp8266怎么連接上互聯(lián)網(wǎng),以實現(xiàn)遠程通過3G網(wǎng)控制esp8266來控制單片機工作。
    發(fā)表于 07-30 22:06

    基于ONENET平臺實現(xiàn)的遠程溫控

    溫控設(shè)備開關(guān)APP描述綁定設(shè)備:輸入ONENET平臺上對應(yīng)的設(shè)備ID和KEY聯(lián)網(wǎng)配置:輸入WiFi名稱和密碼,配置ESP8266連接到路由器
    發(fā)表于 11-04 15:23

    STM32F4/F1+ESP8266連接OneNET的主要問題有哪些

    STM32F4/F1+ESP8266是怎樣與OneNET進行連接的?STM32F4/F1+ESP8266連接
    發(fā)表于 10-25 08:15

    將OLED顯示屏與NodeMCU ESP8266連接的方法

    /thread-1183-1-1.html在本篇文章中,我們將OLED顯示屏與NodeMCU ESP8266連接。 NodeMCU是一個開源的聯(lián)網(wǎng)
    發(fā)表于 11-01 09:17

    怎樣去控制基于STM32單片機ESP8266連接服務(wù)器呢

    ESP8266 station模式的操作邏輯流程是怎樣的?怎樣去控制基于STM32單片機ESP8266連接服務(wù)器呢?
    發(fā)表于 11-08 07:26

    STM32+ESP8266+MQTT協(xié)議如何連接OneNet聯(lián)網(wǎng)平臺

    STM32+ESP8266+MQTT協(xié)議如何連接OneNet聯(lián)網(wǎng)平臺?
    發(fā)表于 12-02 06:52

    使用esp8266實現(xiàn)STM32聯(lián)網(wǎng)(最簡單USART方法)

    到電腦上的java程序 這一篇 esp8266與STM32連接,電腦通過STM32配置esp8266實現(xiàn)聯(lián)網(wǎng)發(fā)送數(shù)據(jù)具體流程如下圖 2=
    發(fā)表于 11-22 11:51 ?1.2w次閱讀

    51單片機通過ESP8266模塊與手機進行通訊

    51單片機通過ESP8266模塊與手機進行通訊WIFI 工作方式:1.AP模式 提供熱點2.Station模式 作為設(shè)備接入熱點3.同時支持配置通過USB轉(zhuǎn)TTL模塊把
    發(fā)表于 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控制四路繼電器

    目錄一、系統(tǒng)方案二、硬件設(shè)計三、單片機軟件設(shè)計四、Android APP軟件設(shè)計一、系統(tǒng)方案手機APP通過ESP8266 WIFI模塊與51單片機通信控制四路繼電器。下位
    發(fā)表于 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
    發(fā)表于 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聯(lián)網(wǎng)阿里云的遠程控制LED系統(tǒng)

    模塊USB轉(zhuǎn)TTL模塊3.3V供電設(shè)備一、整體思路:①:首先STM32單片機通過ESP8266模塊連接路由器進而和阿里云建立TCP連接②:在
    發(fā)表于 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'>聯(lián)網(wǎng)</b>阿里云的遠程控制LED系統(tǒng)

    ESP8266通過MQTT協(xié)議連接ONENET

    ESP8266通過MQTT協(xié)議連接ONENET一、設(shè)計目標二、ONENET平臺搭建三、硬件準備四
    發(fā)表于 01-12 19:58 ?53次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>通過</b>MQTT協(xié)議<b class='flag-5'>連接</b><b class='flag-5'>ONENET</b>

    51單片機通過WIFI模塊ESP8266控制四路繼電器

    手機APP通過ESP8266 WIFI模塊與51單片機通信控制四路繼電器。下位單片機、ESP8266
    發(fā)表于 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(串口-無線)模塊,此處使用的是正點原子團隊自主開發(fā)的ATK-ESP-01模塊。該模塊通過串口與 單片機
    發(fā)表于 05-09 10:50 ?15次下載
    使用WIFI模塊<b class='flag-5'>ESP8266</b><b class='flag-5'>連接單片機</b>與上位<b class='flag-5'>機</b>通信

    使用Firebase的ESP8266聯(lián)網(wǎng)平臺

    電子發(fā)燒友網(wǎng)站提供《使用Firebase的ESP8266聯(lián)網(wǎng)平臺.zip》資料免費下載
    發(fā)表于 07-03 09:54 ?0次下載
    使用Firebase的<b class='flag-5'>ESP8266</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>平臺</b>