基于STM32的(NB-IOT(BC26))溫濕度監(jiān)測系統(tǒng)

基于STM32的(NB-IOT(BC26))溫濕度監(jiān)測系統(tǒng)

閑來無事,用手頭STM32做個項目。

成品功能:STM32采集溫度、濕度數(shù)據(jù),顯示在屏幕上,通過NB-IOT(BC26)模塊連接阿里云物聯(lián)網(wǎng)平臺接受數(shù)據(jù)并實時監(jiān)控。


材料

  • STM32ZET6開發(fā)板(戰(zhàn)艦V3)
  • TFT顯示屏(戰(zhàn)艦有我用的2.7寸的)
  • NB-IOT(BC26)模塊
  • DHT11溫濕度模塊
  • 杜邦線
  • 用keil5進行開發(fā)

開始制作。

制作過程

首先從板子測溫濕度開始

DHT11溫濕度模塊

原子哥有DHT11例程,所以直接在此基礎(chǔ)上進行開發(fā)

下載上之后這是效果。

阿里云物聯(lián)網(wǎng)平臺

先到阿里云物聯(lián)網(wǎng)平臺注冊一個設(shè)備。

  1. 進入阿里云官網(wǎng)搜索物聯(lián)網(wǎng)平臺,現(xiàn)在可以免費注冊一個。
  2. 點擊設(shè)備接入服務(wù)


    在這里插入圖片描述
  3. 點擊創(chuàng)建產(chǎn)品
    在這里插入圖片描述
  4. 聯(lián)網(wǎng)方式要選擇蜂窩(4G)網(wǎng)絡(luò)
    在這里插入圖片描述
  5. 點擊添加設(shè)備輸入設(shè)備名稱
    在這里插入圖片描述
  6. 選中該設(shè)備之后,點擊查看DeviceSecret碼
    在這里插入圖片描述
  7. 記錄這三個碼后邊有用
    在這里插入圖片描述
  8. 在設(shè)備中查看要發(fā)布信息的地址(下邊的屬性上報)
    在這里插入圖片描述
  9. 查看信息的標(biāo)識符,既傳送信息的頭部
    在這里插入圖片描述
  10. 阿里云物聯(lián)網(wǎng)平臺接受的是json格式,所以數(shù)據(jù)發(fā)送的格式為:
    AT+QMTPUB=0,0,0,0,"/sys/a1Xi4HdVogd/mzh001/thing/event/property/post","
    {"id":"26","version":"1.0","params": { "CurrentTemperature":{"value":32},"GeoLocation":{"E":123,"W":234} }, "method":"thing.event.property.post"}"

NB-IOT(BC26)模塊

先用USB轉(zhuǎn)TTL,用串口助手,用AT指令進行調(diào)整

這是用到的AT指令


在這里插入圖片描述

硬件連接:BC26的VIN接TTL的5V,BC26的GND接TTL的地,BC26的RX接TTL的TX,BC26的TX接TTL的RX,跳線帽短接BC26的PWR和3.3V

注意地和電千萬不能接錯,會燒壞器件?。。?br> 接好后插電腦上,連接串口助手(我用原子哥的XCOME)。

指令 返回 說明
AT OK 模塊正常,可正常實現(xiàn)收發(fā)
AT+CIMI 460043331505555 查詢是否有卡
AT+CSQ 1~31 信號強度
AT+CGATT? +CGATT: 1 查詢網(wǎng)絡(luò)注冊情況
AT+CGPADDR=1 +CGPADDR: 1,10.68.55.555 查詢是否分配IP地址
AT+QMTCFG="aliauth",0,"a1Xi4HdV4gd","mz4001","c538f1eb6deb2020c83579bac4444405" OK 配置 MQTT 可選參數(shù)
AT+QMTOPEN=0,"iot-as-mqtt.cn-shanghai.aliyuncs.com",1883 +QMTOPEN: 0,0 打開 MQTT 客戶端網(wǎng)絡(luò)
AT+QMTCONN=0,"test21115" +QMTCONN: 0,0,0 連接客戶端至 MQTT 服務(wù)器
AT+QMTPUB=0,0,0,0,"/sys/a1Xi4HdVogd/mzh001/thing/event/property/post","{"id":"26","version":"1.0","params":{"Temperature":{"value":32}},"method":"thing.event.property.post"}" +QMTPUB: 0,0,0 發(fā)布消息

接著用串口助手發(fā)送這些指令進行調(diào)試。


在這里插入圖片描述

在這里插入圖片描述

說明:

  1. 數(shù)據(jù)5要結(jié)合你的阿里云物聯(lián)平臺中的7的三個碼ProductKey、DeviceNameDeviceSecret。
  2. 數(shù)據(jù)6要結(jié)合阿里云地址和端口,一般設(shè)置這個就可以。
  3. 數(shù)據(jù)7是登陸請求,這個名字一般沒什么要求,只要不重復(fù)即可。
  4. 數(shù)據(jù)8要注意中間那個地址就是阿里云物聯(lián)網(wǎng)平臺8中那個屬性上報的topic地址。后邊的params要結(jié)合json數(shù)據(jù)格式以及阿里云物聯(lián)網(wǎng)平臺9中的標(biāo)識符,數(shù)據(jù)要注意阿里云物聯(lián)網(wǎng)平臺9中的數(shù)據(jù)格式。
  5. 最后返回+QMTPUB: 0,0,0表示發(fā)送成功。
  6. 到阿里云物聯(lián)網(wǎng)平臺查看數(shù)據(jù)。點擊設(shè)備點擊查看,點擊物聯(lián)網(wǎng)數(shù)據(jù),可以打開實時更新。
    在這里插入圖片描述
  7. 數(shù)據(jù)出現(xiàn)問題,可以到日志中查看問題原因。
    在這里插入圖片描述
  8. 設(shè)備物聯(lián)網(wǎng)模型中出現(xiàn)我們上傳的數(shù)據(jù)就表示成功了。

這樣USB轉(zhuǎn)TTL單獨調(diào)試就成功了。

接下來將這些放到板子中實現(xiàn)自動化。

板載上傳數(shù)據(jù)

移植墨子號STM32F103RC的例程

  1. 首先在DHT11例程的基礎(chǔ)上,將printf函數(shù)改為串口2,方便連接。初始化串口2。
//重定義fputc函數(shù)
int fputc(int ch, FILE *f)
{      
    while((USART2->SR&0X40)==0);//串口2輸出,循環(huán)發(fā)送直到發(fā)送完畢
    USART2->DR = (u8) ch;      
    return ch;
}
  1. 移植BC26初始化以及連接函數(shù)。
void OPEN_BC26(void)
{
   char *strx;
    printf("AT\r\n"); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OK
    printf("AT\r\n"); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OK
   if(strx==NULL)
    {
        delay_ms(300);
        delay_ms(300);
        delay_ms(300);
        delay_ms(300);  
    }
    printf("AT\r\n"); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OK
    printf("ATE0&W\r\n"); //關(guān)閉回顯
    delay_ms(300); 
    LED0=0;
    printf("AT+QMTDISC=0\r\n");//關(guān)閉連接 
    delay_ms(300);
    printf("AT+QMTCLOSE=0\r\n");
    delay_ms(300); 
}

3.main()函數(shù)中初始化

    OPEN_BC26();//對BC26開機
    BC26_Init();//對BC26初始化
    MQTT_Init();//連接阿里云

板子串口返回+QMTOPEN: 0,0表示連接成功。

  1. 將需要傳送的值通過aliyunMQTT_PUBdata(temp,humi);函數(shù)發(fā)送到MTQQ準(zhǔn)備函數(shù)中。
  2. 接收之后通過
//訪問阿里云需要提交的數(shù)據(jù)
u8 Mqttaliyun_Savedata_tm(u8 *t_payload,u8 temp,u8 humi)
{
    char json[]="{\"id\":\"26\",\"version\":\"1.0\",\"params\":{\"CurrentTemperature\":{\"value\":%d},\"CurrentHumidity\":{\"value\":%d}},\"method\":\"thing.event.property.post\"}";    
    char t_json[200];
    unsigned short json_len;
    sprintf(t_json, json, temp, humi);
    json_len = strlen(t_json)/sizeof(char);
    memcpy(t_payload, t_json, json_len);
    return json_len;
}

函數(shù)包裝成需要提交的數(shù)據(jù)JSON格式。

  1. 發(fā)送數(shù)據(jù)并查看返回值
void aliyunMQTT_PUBdata(u8 temp,u8 humi)
{
     u8 t_payload[200],len,t_payload_1[200],len_1;;
     printf("AT+QMTPUB=0,0,0,0,%s\r\n",PubTopic);//發(fā)布主題
     delay_ms(300);
     len=Mqttaliyun_Savedata_tm(t_payload,temp,humi);
     t_payload[len]=0;
     printf("%s",t_payload);
  while((USART2->SR&0X40)==0){}//循環(huán)發(fā)送知道發(fā)送完畢
     USART2->DR = (u8) 0x1A;    
     delay_ms(100);
     strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//看下返回狀態(tài)
  while(strx==NULL)
    {
        strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//看下返回狀態(tài)
    }
    Clear_Buffer(); 
}
  1. 查看串口助手返回
    +QMTPUB: 0,0,0
    :0.0},"HoldingTemperature":13,"Diu":0},"method":"thing.event.property.post"}
    OK這個表示成功。
  2. 到阿里云物聯(lián)網(wǎng)平臺查看設(shè)備。打開設(shè)備實時更新,可以看到數(shù)據(jù)更新正常。
    在這里插入圖片描述

最后附上完整的項目文件。自行下載。

這個項目到這里就算完了。
還有很多不足的地方,希望大佬可以指正。也希望和愛好者交流學(xué)習(xí)。

禁止轉(zhuǎn)載?。?!
QQ:2039723308
VX:Shiboven

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容