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

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

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

基于STM32設(shè)計(jì)的森林火災(zāi)預(yù)警系統(tǒng)(聯(lián)動(dòng)控制+SIM800C+華為云IoT)

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-07-11 16:34 ? 次閱讀

1. 功能介紹

隨著全球氣候變化和人類活動(dòng)的增加,森林火災(zāi)成為了一個(gè)嚴(yán)重的環(huán)境問(wèn)題。及早發(fā)現(xiàn)和迅速響應(yīng)火災(zāi)事件對(duì)于減少火災(zāi)的損失至關(guān)重要。為了實(shí)現(xiàn)對(duì)森林火災(zāi)的快速預(yù)警和聯(lián)動(dòng)控制,決定利用華為云IoT物聯(lián)網(wǎng)平臺(tái)來(lái)搭建一個(gè)高效的系統(tǒng)模型。

該系統(tǒng)模型的目標(biāo)是在檢測(cè)到森林火災(zāi)后,能夠快速將火災(zāi)信息上報(bào)到云平臺(tái),并與指定的服務(wù)器進(jìn)行數(shù)據(jù)報(bào)告的交互。同時(shí),系統(tǒng)還能自動(dòng)向抽水泵發(fā)送指令,打開開關(guān)以進(jìn)行抽水滅火操作。通過(guò)這樣的聯(lián)動(dòng)控制系統(tǒng),可以實(shí)現(xiàn)快速響應(yīng)和減少火災(zāi)對(duì)森林和生態(tài)環(huán)境的破壞。

該系統(tǒng)模型的核心是華為云IoT物聯(lián)網(wǎng)平臺(tái),它提供了豐富的功能和服務(wù),包括設(shè)備接入、數(shù)據(jù)采集、消息通信、云端數(shù)據(jù)存儲(chǔ)和分析等。我們可以利用該平臺(tái)的能力來(lái)接收來(lái)自火災(zāi)檢測(cè)設(shè)備的數(shù)據(jù),并通過(guò)云端的數(shù)據(jù)分析和處理來(lái)實(shí)現(xiàn)火災(zāi)預(yù)警和聯(lián)動(dòng)控制。

當(dāng)火災(zāi)檢測(cè)設(shè)備檢測(cè)到火災(zāi)時(shí),會(huì)通過(guò)無(wú)線通信將火災(zāi)信息發(fā)送到華為云IoT物聯(lián)網(wǎng)平臺(tái)。云平臺(tái)接收到信息后,會(huì)立即進(jìn)行處理并將火災(zāi)報(bào)告發(fā)送給指定的服務(wù)器。服務(wù)器可以根據(jù)報(bào)告中的信息采取相應(yīng)的措施,如調(diào)度抽水泵進(jìn)行滅火操作。

通過(guò)這個(gè)系統(tǒng)模型,可以實(shí)現(xiàn)對(duì)森林火災(zāi)的快速預(yù)警和聯(lián)動(dòng)控制,大大提高了火災(zāi)應(yīng)對(duì)的效率和準(zhǔn)確性。同時(shí),利用華為云IoT物聯(lián)網(wǎng)平臺(tái)的強(qiáng)大功能,可以靈活地?cái)U(kuò)展和定制系統(tǒng),以適應(yīng)不同規(guī)模和需求的森林火災(zāi)防控工作。

硬件平臺(tái)介紹:

MCU: STM32F103ZET6

物聯(lián)網(wǎng)云平臺(tái): 華為IOT云平臺(tái)

氣體檢測(cè)傳感器: MQ2-煙霧傳感器、MQ135-空氣質(zhì)量檢測(cè)傳感器

火焰檢測(cè): 采用火焰檢測(cè)傳感器

抽水機(jī): 采用直流電機(jī)模擬水泵,打開開關(guān)抽水噴水滅火

上網(wǎng)網(wǎng)卡: 采用GSM模塊SIM800C,使用的是物聯(lián)網(wǎng)專用卡,包年只能上網(wǎng)這種。

與云端服務(wù)器的通信協(xié)議: 終端設(shè)備采用MQTT3.1.1協(xié)議與華為云服務(wù)器進(jìn)行登錄連接。

溫濕度檢測(cè)傳感器: DHT11

供電方式: 電池+太陽(yáng)能供電

image-20211216130803917

image-20211216131002483

image-20211216131052593

為了演示聯(lián)動(dòng)控制,火警(煙霧)檢測(cè)裝置和滅火(直流電機(jī))裝置分為兩個(gè)獨(dú)立的設(shè)備,分別連接上云端。

火警檢測(cè)裝置連接上物聯(lián)網(wǎng)服務(wù)器之后,可以在服務(wù)器上配置數(shù)據(jù)處理規(guī)則,如果煙霧濃度超標(biāo),可以自動(dòng)向滅火裝置發(fā)送指令,進(jìn)行滅火操作。服務(wù)器收到火警檢測(cè)裝置上傳的煙霧濃度、空氣質(zhì)量等數(shù)據(jù)后,可以向自己的私有服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù),方便自己服務(wù)器收到數(shù)據(jù)后做分析存儲(chǔ)處理,比如: 向指定郵箱發(fā)送郵件、手機(jī)APP推送通知欄、向指定用戶推送短消息提示等等。

2. 創(chuàng)建產(chǎn)品(火警預(yù)警裝置)

打開官網(wǎng)鏈接: https://www.huaweicloud.com/s/JeeJqeiBlOe9kSU

(1)選擇設(shè)備接入IotTDA選項(xiàng)。

image-20211216132213984

(2)選擇免費(fèi)試用。

image-20211216132309521

(3)在產(chǎn)品頁(yè)面選擇創(chuàng)建新的產(chǎn)品。

image-20211216132345247

(4)填入產(chǎn)品信息,創(chuàng)建產(chǎn)品

image-20211216132509131

image-20211216132533613

(5)選擇自己剛才創(chuàng)建的產(chǎn)品,創(chuàng)建數(shù)據(jù)模型,點(diǎn)擊自定義模型

image-20211216132638488

image-20211216132732615

(6)選擇添加屬性

這個(gè)添加的屬性就是設(shè)備端上報(bào)的數(shù)據(jù)類型。 比如: MQ2煙霧傳感器檢測(cè)的煙霧數(shù)據(jù)值類型。

在這個(gè)頁(yè)面上還有一個(gè)添加命令的功能,這是用于云端下發(fā)指令給設(shè)備端使用的。當(dāng)前這個(gè)設(shè)備是火警檢測(cè)裝置,只需要上報(bào)數(shù)據(jù)給服務(wù)器,不需要下發(fā)指令,這里就只需要添加屬性就行了。

image-20211216132805214

image-20211216133014884

根據(jù)自己的設(shè)備的具體情況填寫即可,如果上報(bào)的數(shù)據(jù)有多種類型就創(chuàng)建多個(gè)屬性。

image-20211216133149523

3. 創(chuàng)建產(chǎn)品(滅火裝置)

創(chuàng)建的流程和上面一樣,這是多增加了一個(gè)命令下發(fā)的功能,方便云端遠(yuǎn)程控制電機(jī)開啟和關(guān)閉,實(shí)現(xiàn)滅火功能。

(1)創(chuàng)建產(chǎn)品

image-20211216133613130

(2)產(chǎn)品創(chuàng)建完畢之后,添加服務(wù)器ID

image-20211216133732017

(3)添加屬性,電機(jī)屬性是可以讀可以寫的,范圍設(shè)置為0和1,只能開關(guān)

image-20211216133826107

(4)添加命令,這個(gè)命令用于云端遠(yuǎn)程向設(shè)備下發(fā)指令,設(shè)備收到指令后可以做出相應(yīng)的邏輯處理

image-20211216133959732

接著選擇新增輸入參數(shù)

image-20211216134057410

最后點(diǎn)擊確定即可。

image-20211216134118325

現(xiàn)在產(chǎn)品已經(jīng)創(chuàng)建完畢。

image-20211216134203782

4. 創(chuàng)建設(shè)備(火警預(yù)警裝置)

(1)在設(shè)備頁(yè)面,選擇注冊(cè)設(shè)備,選擇自己的對(duì)應(yīng)的產(chǎn)品,設(shè)備標(biāo)識(shí)碼一般填自己設(shè)備的硬件標(biāo)號(hào)。

image-20211216134405763

(2)設(shè)備創(chuàng)建成功之后會(huì)彈出彈窗,點(diǎn)擊保存并關(guān)閉,會(huì)自動(dòng)彈出下載窗口,是個(gè)文本文件,存放了密匙信息

image-20211216134607368

{
     "device_id": "61bacdc02b2aa20288c5a094_QQ1126626497",
     "secret": "1126626497"
 }

5. 創(chuàng)建設(shè)備(滅火裝置)

流程與上面火警預(yù)警裝置設(shè)備一樣的。

image-20211216134848977

image-20211216134919535

{
     "device_id": "61bad0564d9b020287193be2_QQ1126626497",
     "secret": "1126626497"
 }

6. 生成MQTT協(xié)議登錄ID和密匙

設(shè)備創(chuàng)建完成接來(lái)下生成MQTT登錄賬號(hào)、密匙,方便設(shè)備登錄云端平臺(tái)。

官網(wǎng)工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

image-20211216135050235

填入剛才創(chuàng)建設(shè)備時(shí),保存下載文件里的信息,對(duì)著彈窗填入,最后生成了ID、用戶名、密碼參數(shù),用于MQTT協(xié)議登錄使用。

(1)火警預(yù)警裝置生成登錄參數(shù)

image-20211216135238336

ClientId  61bacdc02b2aa20288c5a094_QQ1126626497_0_0_2021121605
 Username  61bacdc02b2aa20288c5a094_QQ1126626497
 Password  43ed43bcbddc48772694fc2b18ec1112170f4d6cc52fbf1e01401c2ea1748475

(2)滅火裝置

image-20211216135404330

ClientId 61bad0564d9b020287193be2_QQ1126626497_0_0_2021121605
 Username 61bad0564d9b020287193be2_QQ1126626497
 Password 43ed43bcbddc48772694fc2b18ec1112170f4d6cc52fbf1e01401c2ea1748475

7. 上報(bào)屬性格式與主題訂閱格式

產(chǎn)品設(shè)備、MQTT登錄參數(shù)都到位了,接下來(lái)需要了解設(shè)備向服務(wù)器上報(bào)數(shù)據(jù)時(shí),如何上報(bào),格式是怎么樣的。

(1)第一個(gè)問(wèn)題是:華為云IoT物聯(lián)網(wǎng)服務(wù)器的IP和端口號(hào)是多少?

在總覽選項(xiàng)頁(yè)面,點(diǎn)擊多協(xié)議接入選項(xiàng),就能看到了。

image-20211216135837598

image-20211216135851238

如果選擇MQTT協(xié)議接入:

域名是: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
 如果你的設(shè)備不能解析域名,也可以直接填I(lǐng)P地址 121.36.42.100
 端口號(hào): 1883

(2)第二個(gè)問(wèn)題是:發(fā)布數(shù)據(jù)的主題和訂閱數(shù)據(jù)的主題怎么填?

在產(chǎn)品頁(yè)面,選擇自己的產(chǎn)品,進(jìn)去之后就能看到主題的格式介紹頁(yè)面了。

image-20211216140240432

為了方便后續(xù)復(fù)制粘貼,這里總結(jié)下格式:

火警預(yù)警裝置:

格式: $oc/devices/{device_id}/sys/messages/down
 //訂閱主題: 平臺(tái)下發(fā)消息給設(shè)備
 $oc/devices/61bacdc02b2aa20288c5a094_QQ1126626497/sys/messages/down
 ?
 ?
 格式: $oc/devices/{device_id}/sys/properties/report
 //設(shè)備上報(bào)數(shù)據(jù)
 $oc/devices/61bacdc02b2aa20288c5a094_QQ1126626497/sys/properties/report

滅火裝置:

格式: $oc/devices/{device_id}/sys/messages/down
 //訂閱主題: 平臺(tái)下發(fā)消息給設(shè)備
 $oc/devices/61bad0564d9b020287193be2_QQ1126626497/sys/messages/down
 ?
 ?
 格式: $oc/devices/{device_id}/sys/properties/report
 //設(shè)備上報(bào)數(shù)據(jù)
 $oc/devices/61bad0564d9b020287193be2_QQ1126626497/sys/properties/report

(3)第三個(gè)問(wèn)題是:上報(bào)屬性時(shí),數(shù)據(jù)格式是什么?

官方文檔介紹: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html

image-20211216140717400

image-20211216140735400

總結(jié)下格式: 上報(bào)的數(shù)據(jù)就是JSON格式,一次性可以上傳多個(gè)屬性數(shù)據(jù),JSON數(shù)組里按照順序增加即可。

重要的字段含義解釋:這兩個(gè)字段后面的數(shù)據(jù)需要自己根據(jù)自己的設(shè)備產(chǎn)品去填充的。

service_id 示設(shè)備服務(wù)的ID。
 ?
 properties 是設(shè)備服務(wù)的屬性列表,具體字段在設(shè)備關(guān)聯(lián)的產(chǎn)品模型中定義。

火警預(yù)警裝置上傳的數(shù)據(jù):

{"services": [{"service_id": "MQ2","properties":{"MQ2":100}}]}

image-20211216141244291

滅火裝置上傳的數(shù)據(jù):

{"services": [{"service_id": "motor","properties":{"motor":1}}]}

image-20211216141331531

8. 使用MQTT客戶端模擬設(shè)備測(cè)試

(1)登錄火警預(yù)警裝置

image-20211216141809888

image-20211216141856616

(2)滅火裝置登錄

image-20211216141923441

image-20211216141948165

可以看到,設(shè)備已經(jīng)成功登錄服務(wù)器,完成了數(shù)據(jù)上報(bào)。這也證明服務(wù)器端設(shè)備創(chuàng)建已經(jīng)全部OK,正常。

9. 配置設(shè)備聯(lián)動(dòng)

(1)創(chuàng)建規(guī)則

image-20211216142148394

(2)填寫規(guī)則信息

image-20211216142249199

(3)添加觸發(fā)條件,選擇需要處理數(shù)據(jù)的設(shè)備,設(shè)置條件:當(dāng)煙霧濃度大于等于100就觸發(fā)

image-20211216142529016

(4)添加執(zhí)行動(dòng)作,當(dāng)煙霧濃度超過(guò)100就下發(fā)指令給滅火裝置

image-20211216142623146

image-20211216142708172

(3)最后點(diǎn)擊創(chuàng)建規(guī)則,生效規(guī)則

image-20211216142901663

image-20211216142911499

(4)測(cè)試效果

使用兩個(gè)MQTT客戶端分別模擬火警預(yù)警裝置和滅火裝置,當(dāng)煙霧濃度超過(guò)100時(shí),查看滅火裝置是否收到云端下發(fā)的指令。

image-20211216143206075

10. 數(shù)據(jù)轉(zhuǎn)發(fā)

如果數(shù)據(jù)需要轉(zhuǎn)發(fā)到其他地方,可以自己創(chuàng)建規(guī)則配置。

image-20211216143255757

11. 硬件設(shè)備測(cè)試

設(shè)備端采用GSM模塊SIM800C完成上網(wǎng)功能,主控MCU采用STM32F103ZET6。

任意只要能上網(wǎng)的設(shè)備都可以使用當(dāng)前代碼連接服務(wù)器,因?yàn)楫?dāng)前模擬的是戶外設(shè)備,只能采用GSM模塊上網(wǎng)。

如果是智能家居,屋里小區(qū)的設(shè)備,有WIFI的可以采用ESP8266這些無(wú)線網(wǎng)卡。

項(xiàng)目工程源碼: https://download.csdn.net/download/xiaolong1126626497/81993720

1. SIM800C.c

這是SIM800C的配置代碼

#include "sim800c.h"
 ?
 /*
 函數(shù)功能:向SIM800C模塊發(fā)送指令
 函數(shù)參數(shù):
                 char *cmd  發(fā)送的命令
               char *check_data 檢測(cè)返回的數(shù)據(jù)
 返回值: 0表示成功 1表示失敗
 */
 u8 SIM800C_SendCmd(char *cmd,char *check_data)
 {
    u16 i,j;
    for(i=0;i< 5;i++) //測(cè)試的總次數(shù)
    {
       USART2_RX_FLAG=0;
       USART2_RX_CNT=0;
             memset(USART2_RX_BUFF,0,sizeof(USART2_RX_BUFF));
             USART_X_SendString(USART2,cmd); //發(fā)送指令
       for(j=0;j< 500;j++) //等待的時(shí)間(ms單位)
       {
           if(USART2_RX_FLAG)
           {
               USART2_RX_BUFF[USART2_RX_CNT]='\\0';
               if(strstr((char*)USART2_RX_BUFF,check_data))
               {
                   return 0;
               }
               else break;
           }
           delay_ms(20); //一次的時(shí)間
       }
    }
    return 1;
 }
 ?
 ?
 /*
 函數(shù)  功能:GSM模塊初始化檢測(cè)
 函數(shù)返回值:1表示模塊檢測(cè)失敗,0表示成功
 */
 u8 SIM800C_InitCheck(void)
 {
       if(SIM800C_SendCmd("AT\\r\\n","OK"))return 1;
       else printf("SIM800模塊正常!\\r\\n");
       
         if(SIM800C_SendCmd("ATE0\\r\\n","OK"))return 2;
       else printf("設(shè)置模塊不回顯成功!\\r\\n");
     
         if(SIM800C_SendCmd("AT+CGMI\\r\\n","OK"))return 3;
         else printf("查詢制造商名稱成功!%s\\r\\n",USART2_RX_BUFF);
     
         if(SIM800C_SendCmd("AT+CGMM\\r\\n","OK"))return 4;
         else printf("查詢模塊型號(hào)成功!%s\\r\\n",USART2_RX_BUFF);
         
       DelayMs(1000);
         DelayMs(1000);
         if(SIM800C_SendCmd("AT+CNUM\\r\\n","+CNUM:"))return 5;
         else printf("獲取本機(jī)號(hào)碼成功!%s\\r\\n",USART2_RX_BUFF);
       /* 返回格式如下:
         +CNUM: "","+8613086989413",145,7,4
         OK
         */
         return 0;
 }
 ?
 /*
 函數(shù)  功能:GSM模塊短信模式設(shè)置
 函數(shù)返回值:0表示模塊設(shè)置成功
 */
 u8 SIM800C_SetNoteTextMode(void)
 {
         if(SIM800C_SendCmd("AT+CSCS="GSM"\\r\\n","OK"))return 1;// "GSM"字符集
         else printf("短信GSM字符集設(shè)置成功!\\r\\n");
     
       if(SIM800C_SendCmd("AT+CMGF=1\\r\\n","OK"))return 2; //文本模式
         else printf("短信文本模式設(shè)置成功!\\r\\n");
         return 0;
 }
 ?
 /*
 函數(shù)功能:發(fā)送短信
 函數(shù)參數(shù):
                     num:電話號(hào)碼
                     text:短信內(nèi)容
 函數(shù)返回值:0表示發(fā)送成功
 */
 u8 SIM800C_SendNote(u8 *num,u8 *text,u16 len)
 {
         char data[50];
         char send_buf[2];
         sprintf(data,"AT+CMGS="%s"\\r\\n",num);
         if(SIM800C_SendCmd(data," >"))return 1; //設(shè)置發(fā)送的手機(jī)號(hào)
         USART_X_SendData(USART2,text,len);     //發(fā)送短信內(nèi)容
     
         send_buf[0] = 0x1a;
         send_buf[1] = '\\0';
       if(SIM800C_SendCmd(send_buf,"+CMGS"))return 2; //發(fā)送結(jié)束符號(hào)
         return 0;
 }
 ?
 ?
 /*
 函數(shù)功能:NTP網(wǎng)絡(luò)同步時(shí)間
 */
 void SIM800C_NtpUpdate(void)
 {  
      SIM800C_SendCmd("AT+SAPBR=3,1,"Contype","GPRS"\\r\\n","OK");//配置承載場(chǎng)景1
      SIM800C_SendCmd("AT+SAPBR=3,1,"APN","CMNET"\\r\\n","OK");
      SIM800C_SendCmd("AT+SAPBR=1,1\\r\\n","OK");                     //激活一個(gè)GPRS上下文
    DelayMs(5);
    SIM800C_SendCmd("AT+CNTPCID=1\\r\\n","OK");                     //設(shè)置CNTP使用的CID
      SIM800C_SendCmd("AT+CNTP="202.120.2.101",32\\r\\n","OK");     //設(shè)置NTP服務(wù)器和本地時(shí)區(qū)(32時(shí)區(qū) 時(shí)間最準(zhǔn)確)
    SIM800C_SendCmd("AT+CNTP\\r\\n","+CNTP: 1");                    //同步網(wǎng)絡(luò)時(shí)間
      printf("同步網(wǎng)絡(luò)時(shí)間:%s\\r\\n",USART2_RX_BUFF);
 }
 ?
 ?
 /*
 函數(shù)功能:GPRS數(shù)據(jù)通信初始化
 返 回 值: 0表示成功
 */
 u8 SIM800C_GPRS_Init(void)
 {
      SIM800C_SendCmd("AT+CIPCLOSE=1\\r\\n","CLOSE OK");   //關(guān)閉連接
      SIM800C_SendCmd("AT+CIPSHUT\\r\\n","SHUT OK");       //關(guān)閉移動(dòng)場(chǎng)景 
      if(SIM800C_SendCmd("AT+CGCLASS="B"\\r\\n","OK"))return 1;              //設(shè)置GPRS移動(dòng)臺(tái)類別為B,支持包交換和數(shù)據(jù)交換 
      if(SIM800C_SendCmd("AT+CGDCONT=1,"IP","CMNET"\\r\\n","OK"))return 2;//設(shè)置PDP上下文,互聯(lián)網(wǎng)接協(xié)議,接入點(diǎn)等信息
      if(SIM800C_SendCmd("AT+CGATT=1\\r\\n","OK"))return 3;                    //附著GPRS業(yè)務(wù)
      if(SIM800C_SendCmd("AT+CIPCSGP=1,"CMNET"\\r\\n","OK"))return 4;        //設(shè)置為GPRS連接模式
      if(SIM800C_SendCmd("AT+CIPHEAD=1\\r\\n","OK"))return 5;                  //設(shè)置接收數(shù)據(jù)顯示IP頭(方便判斷數(shù)據(jù)來(lái)源)
      return 0;
 }
 ?
 /*
 函數(shù)功能: 連接TCP服務(wù)器
 函數(shù)參數(shù): 
                 ipaddr:ip地址
                 port:端口 
 返 回 值: 0表示成功,其他值表示失敗
 */
 u8 SIM800C_Connect_TCP_Server(char *ipaddr,char *port)
 {
      char cmd_buff[100];
      SIM800C_SendCmd("AT+CIPCLOSE=1\\r\\n","CLOSE OK");   //關(guān)閉連接
      SIM800C_SendCmd("AT+CIPSHUT\\r\\n","SHUT OK");       //關(guān)閉移動(dòng)場(chǎng)景 
      sprintf(cmd_buff,"AT+CIPSTART="TCP","%s","%s"\\r\\n",ipaddr,port);
      if(SIM800C_SendCmd(cmd_buff,"OK"))return 1;        //發(fā)起連接
      return 0;
 }
 ?
 ?
 /*
 函數(shù)功能: TCP客戶端模式下發(fā)送數(shù)據(jù)
 返 回 值: 0表示成功,其他值表示失敗
 */
 u8 SIIM800C_TCP_SendData(u8 *data,u32 len)
 {
      char send_buf[2];
     //準(zhǔn)備發(fā)送數(shù)據(jù)
      if(SIM800C_SendCmd("AT+CIPSEND\\r\\n"," >")==0)
      {
           //發(fā)送數(shù)據(jù)
             USART_X_SendData(USART2,data,len);
           //發(fā)送結(jié)束符號(hào)
           DelayMs(50);
           send_buf[0] = 0x1a;
           send_buf[1] = '\\0';
           if(SIM800C_SendCmd(send_buf,"SEND OK"))return 2;
           else  return 0;
      }
      return 1;
 }

2. adc.c

這是煙霧傳感器的ADC通道配置代碼。

//////////////////////////////////////////////////////////////////////////////////   
 //  功能描述   : 智能環(huán)境檢測(cè)系統(tǒng)
 //   時(shí)間      : 20190605
 //   版本      : v3.3
 //             版權(quán)所有,盜版必究。
 //Copyright(C) DS小龍哥 2016 - 2020
 ///////////////////////////////////////////////////////////////////////////////////
 #include "adc.h"
 ?
 /*
 函數(shù)功能: ADC1的初始化
 規(guī)則通道方式
 */
 void ADC1_Init(void)
 {
       /*1. 配置ADC采集輸入的IO口*/
     RCC- >APB2ENR |= 1 < < 3;//PB
     GPIOB- >CRL &= 0xFFFFFFF0;
     GPIOB- >CRL |= 0x00000000;//配置PB0為模擬輸入模式
     
     /*2.配置ADC1時(shí)鐘*/
     RCC- >APB2ENR|=1< 9;         //開啟ADC1時(shí)鐘
     RCC- >APB2RSTR|=1< 9;        //開啟復(fù)位時(shí)鐘
     RCC- >APB2RSTR&=~(1< 9); //關(guān)閉復(fù)位時(shí)鐘
         
     /*3. 配置ADC的預(yù)分頻器*/
     RCC- >CFGR&=~(0x3< 14); //清空預(yù)分頻
     RCC- >CFGR|=0x2< 14;    //12MHZ
     
     /*4. 配置ADC CR1基本寄存器*/
     ADC1- >CR1&=~(0xF< 16); //0000:獨(dú)立模式
     ADC1- >CR2|=1< 23;      //1:?jiǎn)⒂?a href="http://www.ttokpm.com/tags/溫度傳感器/" target="_blank">溫度傳感器VREFINT。
     //ADC1- >CR2|=1< 
     ADC1- >CR2|=1< 20;      //1:使用外部事件啟動(dòng)轉(zhuǎn)換
     ADC1- >CR2|=0x7< 17;    //111: SWSTART
     ADC1- >CR2&=~(1< 11);   //0:右對(duì)齊;
     ADC1- >CR2&=~(1< 1);    //0:?jiǎn)未无D(zhuǎn)換模式;
     
     /*5. 配置ADC規(guī)則序列寄存器*/
     ADC1- >SQR1&=~(0xF< 20); //0000: 1個(gè)轉(zhuǎn)換
     ADC1- >SMPR2|=0x7< 3;    //配置通道1 111: 239.5周期
     ADC1- >SMPR1|=0x7< 18;   //配置通道16 111: 239.5周期
         
     ADC1- >CR2|=1< 0;        //1:開啟ADC并啟動(dòng)轉(zhuǎn)換。
     ADC1- >CR2|=1< 3;        //1:初始化校準(zhǔn)寄存器。
     ADC1- >CR2|=1< 2;        //1:開始校準(zhǔn)
     while(ADC1- >CR2&1< 2){} //等待校準(zhǔn)結(jié)束
 }
 ?
 ?
 /*
 函數(shù)功能: 獲取指定通道的ADC值
 函數(shù)參數(shù): u8 ch  通道號(hào)
 */
 u16 ADC1_GetCHx(u8 ch)
 {
         ADC1- >SQR3&=0xFFFFFFE0;   //00000
       ADC1- >SQR3|=ch< 0;        //規(guī)則序列中的第1個(gè)轉(zhuǎn)換
         ADC1- >CR2|=1< 22;         //1:開始轉(zhuǎn)換規(guī)則通道。
         while(!(ADC1- >SR&1< 1)){} //等待轉(zhuǎn)換完成
         return ADC1- >DR;          //返回接收到的數(shù)據(jù)值
 }

3. DHT11.c

這是溫濕度檢測(cè)代碼。

//////////////////////////////////////////////////////////////////////////////////   
 //  功能描述   : 智能環(huán)境檢測(cè)系統(tǒng)
 //   時(shí)間      : 20190605
 //   版本      : v3.3
 //             版權(quán)所有,盜版必究。
 //Copyright(C) DS小龍哥 2016 - 2020
 ///////////////////////////////////////////////////////////////////////////////////
 #include "dht11.h"
 #include "delay.h"
 ?
 /*
 復(fù)位DHT1
 */
 void DHT11_Rst(void)       
 {                 
       DHT11_IO_OUT();   //SET OUTPUT
     DHT11_DQ_OUT=0;     //拉低DQ
     delay_ms(20);       //拉低至少18ms
     DHT11_DQ_OUT=1;     //DQ=1 
       delay_us(30);     //主機(jī)拉高20~40us
 }
 ?
 /*
 等待DHT11的回應(yīng)
 返回1:未檢測(cè)到DHT11的存在
 返回0:存在
 */
 u8 DHT11_Check(void)       
 {   
     u8 retry=0;
     DHT11_IO_IN();//SET INPUT    
     while (DHT11_DQ_IN&&retry< 100)//DHT11會(huì)拉低40~80us
     {
         retry++;
         delay_us(1);
     };   
     if(retry >=100)return 1;
     else retry=0;
     while (!DHT11_DQ_IN&&retry< 100)//DHT11拉低后會(huì)再次拉高40~80us
     {
         retry++;
         delay_us(1);
     };
     if(retry >=100)return 1;     
     return 0;
 }
 ?
 /*
 從DHT11讀取一個(gè)位
 返回值:1/0
 */
 u8 DHT11_Read_Bit(void)              
 {
     u8 retry=0;
     while(DHT11_DQ_IN&&retry< 100)//等待變?yōu)榈碗娖?span>
     {
         retry++;
         delay_us(1);
     }
     retry=0;
     while(!DHT11_DQ_IN&&retry< 100)//等待變高電平
     {
         retry++;
         delay_us(1);
     }
     delay_us(40);//等待40us
     if(DHT11_DQ_IN)return 1;
     else return 0;         
 }
 ?
 ?
 /*
 從DHT11讀取一個(gè)字節(jié)
 返回值:讀到的數(shù)據(jù)
 */
 u8 DHT11_Read_Byte(void)    
 {        
   u8 i,dat;
   dat=0;
     for(i=0;i< 8;i++) 
     {
         dat< <=1; 
         dat|=DHT11_Read_Bit();
   }                         
   return dat;
 }
 ?
 /*
 從DHT11讀取一次數(shù)據(jù)
 temp:溫度值(范圍:0~50°)
 humi:濕度值(范圍:20%~90%)
 返回值:0,正常;1,讀取失敗
 */
 u8 DHT11_Read_Data(u8 *temp,u8 *humi)    
 {        
     u8 buf[5];
     u8 i;
     DHT11_Rst();
     if(DHT11_Check()==0)
     {
         for(i=0;i< 5;i++)//讀取40位數(shù)據(jù)
         {
             buf[i]=DHT11_Read_Byte();
         }
         if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
         {
             *humi=buf[0];
             *temp=buf[2];
         }
     }else return 1;
     return 0;       
 }
 ?
 ?
 /*
 初始化DHT11的IO口 DQ 同時(shí)檢測(cè)DHT11的存在
 返回1:不存在
 返回0:存在  
 */       
 u8 DHT11_Init(void)
 {
     RCC- >APB2ENR|=1< 2;    //使能PORTG口時(shí)鐘 
     GPIOA- >CRL&=0XFF0FFFFF;//PORTG.11 推挽輸出
     GPIOA- >CRL|=0X00300000;
     GPIOA- >ODR|=1< 5;      //輸出1                    
     DHT11_Rst();
     return DHT11_Check();
 }

審核編輯:湯梓紅

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

    關(guān)注

    0

    文章

    241

    瀏覽量

    15910
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8700

    瀏覽量

    84537
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352452
  • IOT
    IOT
    +關(guān)注

    關(guān)注

    186

    文章

    4096

    瀏覽量

    195079
  • 華為云
    +關(guān)注

    關(guān)注

    3

    文章

    2343

    瀏覽量

    17102
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)對(duì)監(jiān)控區(qū)域煙霧、溫度等環(huán)境數(shù)據(jù)的實(shí)時(shí)監(jiān)測(cè)的TMS320F28335森林火災(zāi)預(yù)警系統(tǒng)怎么設(shè)計(jì)?

    本帖最后由 一只耳朵怪 于 2018-5-22 14:40 編輯 該設(shè)計(jì)是一種森林火災(zāi)預(yù)警系統(tǒng),通過(guò)對(duì)監(jiān)控區(qū)域煙霧、溫度等環(huán)境數(shù)據(jù)的實(shí)時(shí)監(jiān)測(cè),利用CAN總線方式傳送到監(jiān)控終端,實(shí)現(xiàn)區(qū)域監(jiān)控。
    發(fā)表于 05-22 08:43

    輸電線路防山火智能預(yù)警系統(tǒng),光電感應(yīng)山火實(shí)時(shí)監(jiān)測(cè)預(yù)警

    ,深圳市特力康科技有限公司專門研發(fā)了一款輸電線路防山火智能預(yù)警系統(tǒng),該系統(tǒng)有多光譜紅外探火雷達(dá),主要用于監(jiān)測(cè)山火突發(fā)狀況,根據(jù)輻射特性識(shí)別林火,不論白天、夜間24小時(shí)都可以工作,當(dāng)系統(tǒng)
    發(fā)表于 10-14 13:45

    輸電線路防山火監(jiān)控預(yù)警系統(tǒng),山火隱患紅外監(jiān)測(cè)

    我國(guó)的輸電線路大多都是架空的,跨越了山區(qū)、河流、湖泊、大橋,實(shí)現(xiàn)了城鄉(xiāng)通電。但是森林火災(zāi)的頻繁發(fā)生,不僅燒毀了我們?cè)杏嗄甑牧謽I(yè)資源,而且還危害了架空于山林中的輸電線路。輸電線路給我們生活供電帶來(lái)
    發(fā)表于 10-25 14:03

    基于Cortex_M3的森林火災(zāi)監(jiān)測(cè)WSN節(jié)點(diǎn)的設(shè)計(jì)

    基于Cortex_M3的森林火災(zāi)監(jiān)測(cè)WSN節(jié)點(diǎn)的設(shè)計(jì)
    發(fā)表于 09-28 17:21 ?6次下載
    基于Cortex_M3的<b class='flag-5'>森林火災(zāi)</b>監(jiān)測(cè)WSN節(jié)點(diǎn)的設(shè)計(jì)

    森林火災(zāi)實(shí)時(shí)監(jiān)測(cè)與預(yù)警系統(tǒng)詳解

    侵害,嚴(yán)重威脅和損害森林生態(tài)和人類生命財(cái)產(chǎn)安全。因此,研究森林火災(zāi)特征并提供相應(yīng)的防治與控制技術(shù),為其設(shè)計(jì)合理的火災(zāi)自動(dòng)監(jiān)控報(bào)警
    發(fā)表于 06-03 15:45 ?1.4w次閱讀
    <b class='flag-5'>森林火災(zāi)</b>實(shí)時(shí)監(jiān)測(cè)與<b class='flag-5'>預(yù)警系統(tǒng)</b>詳解

    基于STM32+華為IoT設(shè)計(jì)的森林火災(zāi)預(yù)警系統(tǒng)

    自從地球上出現(xiàn)森林以來(lái),每年平均發(fā)生森林火災(zāi)超過(guò)20萬(wàn)次。森林火災(zāi)不僅燒毀樹木,直接減少森林面積,而且嚴(yán)重破壞森林結(jié)構(gòu)和
    的頭像 發(fā)表于 05-27 11:04 ?2699次閱讀
    基于<b class='flag-5'>STM32</b>+<b class='flag-5'>華為</b><b class='flag-5'>云</b><b class='flag-5'>IoT</b>設(shè)計(jì)的<b class='flag-5'>森林火災(zāi)</b><b class='flag-5'>預(yù)警系統(tǒng)</b>

    基于物聯(lián)網(wǎng)的森林火災(zāi)探測(cè)系統(tǒng)

    森林火災(zāi)森林中常見(jiàn)的危害,對(duì)野生動(dòng)物和環(huán)境造成很大危害。如果可以在森林地區(qū)部署一個(gè)強(qiáng)大的系統(tǒng)來(lái)檢測(cè)火災(zāi)并提醒消防當(dāng)局立即采取行動(dòng),則可以避
    發(fā)表于 07-28 17:09 ?2155次閱讀
    基于物聯(lián)網(wǎng)的<b class='flag-5'>森林火災(zāi)</b>探測(cè)<b class='flag-5'>系統(tǒng)</b>

    森林火災(zāi)探測(cè)系統(tǒng)的構(gòu)建

    在這個(gè)項(xiàng)目中,在 Arduino UNO 和 GSM Shield 的幫助下構(gòu)建了一個(gè)森林火災(zāi)探測(cè)系統(tǒng),用于 SMS 警報(bào)。
    發(fā)表于 12-02 15:59 ?1次下載

    基于Gboard Pro 800森林火災(zāi)探測(cè)系統(tǒng)

    在這個(gè)項(xiàng)目中,在 Arduino UNO 和 GSM Shield 的幫助下構(gòu)建了一個(gè)森林火災(zāi)探測(cè)系統(tǒng),用于 SMS 警報(bào)。
    發(fā)表于 12-06 10:11 ?0次下載

    TinyML空中森林火災(zāi)探測(cè)

    電子發(fā)燒友網(wǎng)站提供《TinyML空中森林火災(zāi)探測(cè).zip》資料免費(fèi)下載
    發(fā)表于 02-09 11:06 ?0次下載
    TinyML空中<b class='flag-5'>森林火災(zāi)</b>探測(cè)

    應(yīng)用案例 | 基于STM32WL的森林火災(zāi)探測(cè)解決方案,可實(shí)現(xiàn)戶外運(yùn)行15年

    應(yīng)用案例 | 基于STM32WL的森林火災(zāi)探測(cè)解決方案,可實(shí)現(xiàn)戶外運(yùn)行15年
    的頭像 發(fā)表于 09-28 17:40 ?783次閱讀
    應(yīng)用案例 | 基于<b class='flag-5'>STM32</b>WL的<b class='flag-5'>森林火災(zāi)</b>探測(cè)解決方案,可實(shí)現(xiàn)戶外運(yùn)行15年

    基于ZigBee的森林火災(zāi)監(jiān)測(cè)系統(tǒng)設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于ZigBee的森林火災(zāi)監(jiān)測(cè)系統(tǒng)設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-23 09:07 ?4次下載
    基于ZigBee的<b class='flag-5'>森林火災(zāi)</b>監(jiān)測(cè)<b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)

    ?華瑞通森林火災(zāi)監(jiān)控預(yù)警方案,五大優(yōu)勢(shì)你了解嗎?

    行為的發(fā)現(xiàn)是否及時(shí),火情分析是否準(zhǔn)確合理,決策措施是否得當(dāng),為此國(guó)內(nèi)外都在為預(yù)防、減少和控制森林火災(zāi)而努力。 為了有效控制森林火災(zāi),提高火情預(yù)警
    的頭像 發(fā)表于 08-07 10:06 ?43次閱讀

    淺談基于AI的充電樁火災(zāi)預(yù)警系統(tǒng)的應(yīng)用展望

    程瑜 安科瑞電氣股份有限公司 上海嘉定 201801 摘要: 為了及時(shí)發(fā)現(xiàn)和預(yù)防充電樁火災(zāi),基于人工智能的火災(zāi)預(yù)警系統(tǒng)備受關(guān)注。本文針對(duì)該問(wèn)題展開研究,通過(guò)綜述充電樁火災(zāi)的發(fā)生原因、現(xiàn)
    的頭像 發(fā)表于 08-13 14:21 ?209次閱讀
    淺談基于AI的充電樁<b class='flag-5'>火災(zāi)</b><b class='flag-5'>預(yù)警系統(tǒng)</b>的應(yīng)用展望

    ?森林火災(zāi)監(jiān)控預(yù)警系統(tǒng),這五大功能是基礎(chǔ)根本

    生態(tài)災(zāi)難。控制森林火災(zāi)是世界性的困擾難題,備受各國(guó)林業(yè)、環(huán)境保護(hù)等有關(guān)行政機(jī)構(gòu)的高度重視。也正是如此,各國(guó)家以及國(guó)內(nèi)個(gè)地方政府部門不惜發(fā)重金購(gòu)買各種功能的森林火災(zāi)監(jiān)控預(yù)警系統(tǒng)設(shè)備,為的
    的頭像 發(fā)表于 08-23 10:01 ?140次閱讀