RM新时代网站-首页

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

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

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

基于STM32+華為云IoT設(shè)計的森林火災預警系統(tǒng)

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-05-27 11:04 ? 次閱讀

1. 功能介紹

自從地球上出現(xiàn)森林以來,每年平均發(fā)生森林火災超過20萬次。森林火災不僅燒毀樹木,直接減少森林面積,而且嚴重破壞森林結(jié)構(gòu)和森林環(huán)境,導致森林生態(tài)系統(tǒng)失衡,森林生物量下降,生產(chǎn)力下降,牲畜減少和鳥類減少,甚至犧牲一些重要東西。高強度的火災會破壞土壤的化學和物理性質(zhì),降低水的積累和土壤的滲透性,使部分林區(qū)地下水位升高而潰敗,造成沼澤;此外,通過焦化和使土壤表面變暖,也會加速焦土的干燥,導致雜草過度生長。近年來,世界各地每年都會發(fā)生許多火災。大多數(shù)國家的火災直接損失超過國民經(jīng)濟總量的0.2%。事實上,除了直接的經(jīng)濟死亡和財產(chǎn)損失外,火災后還有重大的間接損失,因此,有必要發(fā)展和加強防火和火災報警。

這篇文章就采用華為云iot物聯(lián)網(wǎng)平臺快速搭建一個森林火災預警聯(lián)動控制系統(tǒng)模型模擬演示檢測到森林火災之后,如何快速上報到云平臺,向關(guān)聯(lián)的指定服務器發(fā)送數(shù)據(jù)報告,并自動向抽水泵發(fā)送指令,打開開關(guān)抽水滅火。

硬件平臺介紹:

MCU: STM32F103ZET6

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

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

火焰檢測: 采用火焰檢測傳感器

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

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

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

溫濕度檢測傳感器: DHT11

供電方式: 電池+太陽能供電

image-20211216130803917image-20211216131002483image-20211216131052593

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

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

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

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

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

image-20211216132213984

(2)選擇免費試用。

image-20211216132309521

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

image-20211216132345247

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

image-20211216132509131image-20211216132533613

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

image-20211216132638488image-20211216132732615

(6)選擇添加屬性

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

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

image-20211216132805214image-20211216133014884

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

image-20211216133149523

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

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

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

image-20211216133613130

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

image-20211216133732017

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

image-20211216133826107

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

image-20211216133959732

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

image-20211216134057410

最后點擊確定即可。

image-20211216134118325

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

image-20211216134203782

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

(1)在設(shè)備頁面,選擇注冊設(shè)備,選擇自己的對應的產(chǎn)品,設(shè)備標識碼一般填自己設(shè)備的硬件標號。

image-20211216134405763

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

image-20211216134607368
{
    "device_id": "61bacdc02b2aa20288c5a094_QQ1126626497",
    "secret": "1126626497"
}

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

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

image-20211216134848977image-20211216134919535
{
    "device_id": "61bad0564d9b020287193be2_QQ1126626497",
    "secret": "1126626497"
}

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

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

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

image-20211216135050235

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

(1)火警預警裝置生成登錄參數(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. 上報屬性格式與主題訂閱格式

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

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

在總覽選項頁面,點擊多協(xié)議接入選項,就能看到了。

image-20211216135837598image-20211216135851238

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

域名是:

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

如果你的設(shè)備不能解析域名,也可以直接填I(lǐng)P地址

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

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

image-20211216140240432

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

火警預警裝置:

格式: $oc/devices/{device_id}/sys/messages/down
//訂閱主題: 平臺下發(fā)消息給設(shè)備
$oc/devices/61bacdc02b2aa20288c5a094_QQ1126626497/sys/messages/down


格式: $oc/devices/{device_id}/sys/properties/report
//設(shè)備上報數(shù)據(jù)
$oc/devices/61bacdc02b2aa20288c5a094_QQ1126626497/sys/properties/report

滅火裝置:

格式: $oc/devices/{device_id}/sys/messages/down
//訂閱主題: 平臺下發(fā)消息給設(shè)備
$oc/devices/61bad0564d9b020287193be2_QQ1126626497/sys/messages/down


格式: $oc/devices/{device_id}/sys/properties/report
//設(shè)備上報數(shù)據(jù)
$oc/devices/61bad0564d9b020287193be2_QQ1126626497/sys/properties/report

(3)第三個問題是:上報屬性時,數(shù)據(jù)格式是什么?

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

image-20211216140717400image-20211216140735400

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

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

service_id 示設(shè)備服務的ID。

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

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

火警預警裝置上傳的數(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è)備測試

(1)登錄火警預警裝置

image-20211216141809888image-20211216141856616

(2)滅火裝置登錄

image-20211216141923441image-20211216141948165

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

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

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

image-20211216142148394

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

image-20211216142249199

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

image-20211216142529016

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

image-20211216142623146image-20211216142708172

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

image-20211216142901663image-20211216142911499

(4)測試效果

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

image-20211216143206075

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

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

image-20211216143255757

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

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

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

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

代碼校對較多,這里只貼出核心代碼,需要完整工程的在評論區(qū)留言。

1. SIM800C.c

這是SIM800C的配置代碼

#include "sim800c.h"

/*
函數(shù)功能:向SIM800C模塊發(fā)送指令
函數(shù)參數(shù):
				char *cmd  發(fā)送的命令
			  char *check_data 檢測返回的數(shù)據(jù)
返回值: 0表示成功 1表示失敗
*/
u8 SIM800C_SendCmd(char *cmd,char *check_data)
{
   u16 i,j;
   for(i=0;i<5;i++) //測試的總次數(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++) //等待的時間(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); //一次的時間
      }
   }
   return 1;
}


/*
函數(shù)  功能:GSM模塊初始化檢測
函數(shù)返回值:1表示模塊檢測失敗,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("查詢模塊型號成功!%s\r\n",USART2_RX_BUFF);
		
	  DelayMs(1000);
		DelayMs(1000);
		if(SIM800C_SendCmd("AT+CNUM\r\n","+CNUM:"))return 5;
		else printf("獲取本機號碼成功!%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:電話號碼
					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ā)送的手機號
		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é)束符號
		return 0;
}


/*
函數(shù)功能:NTP網(wǎng)絡(luò)同步時間
*/
void SIM800C_NtpUpdate(void)
{  
	 SIM800C_SendCmd("AT+SAPBR=3,1,"Contype","GPRS"\r\n","OK");//配置承載場景1
	 SIM800C_SendCmd("AT+SAPBR=3,1,"APN","CMNET"\r\n","OK");
	 SIM800C_SendCmd("AT+SAPBR=1,1\r\n","OK");                     //激活一個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服務器和本地時區(qū)(32時區(qū) 時間最準確)
   SIM800C_SendCmd("AT+CNTP\r\n","+CNTP: 1");                    //同步網(wǎng)絡(luò)時間
	 printf("同步網(wǎng)絡(luò)時間:%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)閉移動場景 
	 if(SIM800C_SendCmd("AT+CGCLASS="B"\r\n","OK"))return 1;				//設(shè)置GPRS移動臺類別為B,支持包交換和數(shù)據(jù)交換 
	 if(SIM800C_SendCmd("AT+CGDCONT=1,"IP","CMNET"\r\n","OK"))return 2;//設(shè)置PDP上下文,互聯(lián)網(wǎng)接協(xié)議,接入點等信息
	 if(SIM800C_SendCmd("AT+CGATT=1\r\n","OK"))return 3;					//附著GPRS業(yè)務
	 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ù)來源)
	 return 0;
}

/*
函數(shù)功能: 連接TCP服務器
函數(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)閉移動場景 
	 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];
	//準備發(fā)送數(shù)據(jù)
	 if(SIM800C_SendCmd("AT+CIPSEND\r\n",">")==0)
	 {
		  //發(fā)送數(shù)據(jù)
			USART_X_SendData(USART2,data,len);
		  //發(fā)送結(jié)束符號
		  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)境檢測系統(tǒng)
//   時間      : 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時鐘*/
	RCC->APB2ENR|=1<<9; 		//開啟ADC1時鐘
	RCC->APB2RSTR|=1<<9;		//開啟復位時鐘
	RCC->APB2RSTR&=~(1<<9); //關(guān)閉復位時鐘
		
	/*3. 配置ADC的預分頻器*/
	RCC->CFGR&=~(0x3<<14); //清空預分頻
	RCC->CFGR|=0x2<<14;    //12MHZ
	
	/*4. 配置ADC CR1基本寄存器*/
	ADC1->CR1&=~(0xF<<16); //0000:獨立模式
	ADC1->CR2|=1<<23;      //1:啟用溫度傳感器和VREFINT。
	//ADC1->CR2|=1<<22;    //1:開始轉(zhuǎn)換規(guī)則通道。
	ADC1->CR2|=1<<20;      //1:使用外部事件啟動轉(zhuǎn)換
	ADC1->CR2|=0x7<<17;    //111: SWSTART
	ADC1->CR2&=~(1<<11);   //0:右對齊;
	ADC1->CR2&=~(1<<1);    //0:單次轉(zhuǎn)換模式;
	
	/*5. 配置ADC規(guī)則序列寄存器*/
	ADC1->SQR1&=~(0xF<<20); //0000: 1個轉(zhuǎn)換
	ADC1->SMPR2|=0x7<<3;    //配置通道1 111: 239.5周期
	ADC1->SMPR1|=0x7<<18;   //配置通道16 111: 239.5周期
		
	ADC1->CR2|=1<<0;        //1:開啟ADC并啟動轉(zhuǎn)換。
	ADC1->CR2|=1<<3;        //1:初始化校準寄存器。
	ADC1->CR2|=1<<2;        //1:開始校準
	while(ADC1->CR2&1<<2){} //等待校準結(jié)束
}


/*
函數(shù)功能: 獲取指定通道的ADC值
函數(shù)參數(shù): u8 ch  通道號
*/
u16 ADC1_GetCHx(u8 ch)
{
		ADC1->SQR3&=0xFFFFFFE0;   //00000
	  ADC1->SQR3|=ch<<0;        //規(guī)則序列中的第1個轉(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

這是溫濕度檢測代碼。

//////////////////////////////////////////////////////////////////////////////////	 
//  功能描述   : 智能環(huán)境檢測系統(tǒng)
//   時間      : 20190605
//   版本      : v3.3
//             版權(quán)所有,盜版必究。
//Copyright(C) DS小龍哥 2016 - 2020
///////////////////////////////////////////////////////////////////////////////////
#include "dht11.h"
#include "delay.h"

/*
復位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);     //主機拉高20~40us
}

/*
等待DHT11的回應
返回1:未檢測到DHT11的存在
返回0:存在
*/
u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	DHT11_IO_IN();//SET INPUT	 
    while (DHT11_DQ_IN&&retry<100)//DHT11會拉低40~80us
	{
		retry++;
		delay_us(1);
	};	 
	if(retry>=100)return 1;
	else retry=0;
    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后會再次拉高40~80us
	{
		retry++;
		delay_us(1);
	};
	if(retry>=100)return 1;	    
	return 0;
}

/*
從DHT11讀取一個位
返回值:1/0
*/
u8 DHT11_Read_Bit(void) 			 
{
 	u8 retry=0;
	while(DHT11_DQ_IN&&retry<100)//等待變?yōu)榈碗娖?	{
		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讀取一個字節(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 同時檢測DHT11的存在
返回1:不存在
返回0:存在  
*/  	 
u8 DHT11_Init(void)
{
	RCC->APB2ENR|=1<<2;    //使能PORTG口時鐘 
	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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 預警系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    273

    瀏覽量

    16058
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

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

    關(guān)注

    187

    文章

    4202

    瀏覽量

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

    關(guān)注

    3

    文章

    2445

    瀏覽量

    17407
收藏 人收藏

    評論

    相關(guān)推薦

    基于STM32設(shè)計的森林火災預警系統(tǒng)(聯(lián)動控制+SIM800C+華為IoT)

    這篇文章就采用華為iot物聯(lián)網(wǎng)平臺快速搭建一個森林火災預警聯(lián)動控制系統(tǒng)模型,模擬演示檢測到
    的頭像 發(fā)表于 07-11 16:34 ?1571次閱讀
    基于<b class='flag-5'>STM32</b>設(shè)計的<b class='flag-5'>森林火災</b><b class='flag-5'>預警系統(tǒng)</b>(聯(lián)動控制+SIM800C+<b class='flag-5'>華為</b><b class='flag-5'>云</b><b class='flag-5'>IoT</b>)

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

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

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

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

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

    我國的輸電線路大多都是架空的,跨越了山區(qū)、河流、湖泊、大橋,實現(xiàn)了城鄉(xiāng)通電。但是森林火災的頻繁發(fā)生,不僅燒毀了我們孕育多年的林業(yè)資源,而且還危害了架空于山林中的輸電線路。輸電線路給我們生活供電帶來
    發(fā)表于 10-25 14:03

    基于Cortex_M3的森林火災監(jiān)測WSN節(jié)點的設(shè)計

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

    基于支持向量機的森林火災預測研究

    定位的延遲和掃描儀高昂的設(shè)備成本和維護成本,這些方案不能用來解決所有的情況。然而,研究表明氣象因素對森林火災有重要的影響。因此,有不少的學者建立森林火災預測系統(tǒng)并將氣象數(shù)據(jù)納入量化指標體系。隨機計算機的迅速
    發(fā)表于 01-02 16:50 ?0次下載

    森林火災實時監(jiān)測與預警系統(tǒng)詳解

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

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

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

    森林火災探測系統(tǒng)的構(gòu)建

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

    TinyML空中森林火災探測

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

    應用案例 | 基于STM32WL的森林火災探測解決方案,可實現(xiàn)戶外運行15年

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

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

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

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

    行為的發(fā)現(xiàn)是否及時,火情分析是否準確合理,決策措施是否得當,為此國內(nèi)外都在為預防、減少和控制森林火災而努力。 為了有效控制森林火災,提高火情預警準確率,降低勞動等成本以及外界因素帶來的影響,有必要利用先進的技
    的頭像 發(fā)表于 08-07 10:06 ?180次閱讀

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

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

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

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