祖一康,徐妙婧
(1.黃岡師范學(xué)院 機電工程學(xué)院,湖北 黃州 438000;2.黃岡師范學(xué)院 電子信息學(xué)院,湖北 黃州 438000)
?
基于STM32的溫濕度采集系統(tǒng)設(shè)計
祖一康1,徐妙婧2
(1.黃岡師范學(xué)院 機電工程學(xué)院,湖北 黃州 438000;2.黃岡師范學(xué)院 電子信息學(xué)院,湖北 黃州 438000)
摘要基于STM32F103ZET6單片機設(shè)計了一個溫濕度采集系統(tǒng),該系統(tǒng)采用數(shù)字式溫濕度傳感器DHT11采集環(huán)境的溫度和濕度值,將采集的值在帶有中文字庫的液晶顯示器LCD12864上顯示,通過串口將溫濕度值發(fā)送到上位機,在上位機中采用Visual Basic 6.0編寫溫濕度值顯示界面。給出了溫濕度采集系統(tǒng)的硬件和軟件設(shè)計方法,并通過實驗進行了驗證,實驗結(jié)果表明,系統(tǒng)結(jié)構(gòu)簡單,能夠?qū)崿F(xiàn)對環(huán)境溫濕度值的采集和實時顯示。
關(guān)鍵詞STM32;溫濕度;LCD12864;Visual Basic 6.0
溫度和濕度值是重要的物理參數(shù),例如精密機械加工、實驗室、溫室大棚、糧庫、重要活動場所、會議室、居住場所等都需要對溫度和濕度進行實時采集和控制,因此設(shè)計溫濕度采集系統(tǒng)具有重要意義。文中采用溫濕度傳感器DHT11獲取溫度和濕度值,結(jié)合STM32F103ZET6單片機、帶中文字庫LCD12864液晶顯示器、Visual Basic 6.0構(gòu)建溫濕度采集系統(tǒng)。
1系統(tǒng)總體設(shè)計和工作原理
溫濕度采集系統(tǒng)的總體架構(gòu)如圖1所示。系統(tǒng)分為溫濕度采集模塊、顯示模塊、串行通信模塊、上位機遠程顯示模塊。STM32F103ZET6單片機讀取數(shù)字式溫濕度傳感器DHT11獲取的環(huán)境溫濕度值,并通過GPIO口驅(qū)動帶中文字庫的液晶顯示器LCD12864顯示溫濕度值,通過USART1經(jīng)電平轉(zhuǎn)換后與PC機串行通信,實現(xiàn)遠程實時顯示。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
圖2 DHT11與STM32F103連接圖
2硬件電路設(shè)計
采用廣州奧松電子有限公司生產(chǎn)的數(shù)字式溫濕度傳感器DHT11進行溫濕度檢測,其濕度測量范圍為20%~90%RH,濕度測量精度為±5.0%RH,溫度測量范圍為0~50 ℃,溫度測量精度為±1.0 ℃,其數(shù)據(jù)由8位濕度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)、8位溫度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)和8位校驗和數(shù)據(jù)構(gòu)成,其中小數(shù)部分讀數(shù)為0,用于以后擴展[1]。DHT11與STM32F103連接如圖2所示。DHT11的1號引腳接3.3V電源,2號引腳經(jīng)4.7k上拉電阻與STM32F103ZET6單片機的PG11引腳相連,3號引腳懸空,4號引腳接地。
采用帶中文字庫的LCD12864顯示DHT11采集的溫濕度值。LCD12864具有128列,64行,內(nèi)置8192個16×16點陣漢字和128個16×8點陣字符;具有串行和并行2種通信方式[2],本文選擇并行通信方式,其與STM32F103ZET6單片機連接如圖3所示。
圖3 LCD1286連接圖
LCD12864的控制引腳RS、R/W、E(使能)、RESET分別于STM32F103GPIO中的PC10~PC13引腳相連接;數(shù)據(jù)線DB0~DB7分別于STM32F103GPIO中的PD0~PD7引腳相連接。
3系統(tǒng)軟件設(shè)計
系統(tǒng)軟件設(shè)計內(nèi)容包括溫濕度檢測程序、溫濕度值顯示程序、串行通信程序以及上位機顯示程序等。
數(shù)字式溫濕度傳感器DHT11與STM32F103ZET6單片機的PG11引腳相連,對DHT11的讀寫遵循一定的通信時序[1,3]。在使用GPIO的PG11引腳時需要對其初始化,PG11作為輸入引腳時將其工作模式設(shè)置為浮空(GPIO_Mode_IN_FLOATING)輸入模式;作為輸出引腳時將其工作模式設(shè)置為推挽輸出(GPIO_Mode_Out_PP)模式,速度設(shè)置為50MHz。讀取DHT11溫濕度值后需對數(shù)值進行數(shù)據(jù)校驗,即判斷校驗和是否等于8位濕度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)、8位溫度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)的和,如果相等,則數(shù)據(jù)傳輸正確,將溫濕度值傳送給LCD12864和通過串口發(fā)送到上位機。
利用帶中文字庫的LCD12864顯示溫濕度值,采用并行工作方式,所以其PSB管腳接+5V。在使用STM32F103的GPIO,需要對相應(yīng)的引腳初始化,文中使用PC10~PC13作為控制信號輸出引腳、使用PD0~PD7引腳作為數(shù)據(jù)輸出引腳,將這些引腳初始化為推挽輸出(GPIO_Mode_Out_PP)模式,速度設(shè)置為10MHz??山柚A(yù)處理指令使程序簡化,程序如下:
//控制管腳定義
#define RSGPIO_Pin_10
#define RWGPIO_Pin_11
#define ENGPIO_Pin_12
#define RSTGPIO_Pin_13
//控制管腳輸出0或1
#define LCD_RS(x) x ? GPIO_SetBits (GPIOC, RS): GPIO_ResetBits (GPIOC, RS)
#define LCD_RW(x) x ? GPIO_SetBits (GPIOC, RW): GPIO_ResetBits (GPIOC, RW)
#define LCD_EN(x) x ? GPIO_SetBits(GPIOC,EN): GPIO_ResetBits(GPIOC,EN)
#define LCD_RST(x) x ? GPIO_SetBits(GPIOC,RST): GPIO_ResetBits(GPIOC,RST)
LCD12864的數(shù)據(jù)管腳與PD的低8位相連,可以利用函數(shù)GPIO_Write(GPIOD,LCDTemp)對LCD12864寫數(shù)據(jù)或命令。
待顯示的溫濕度值需要分解為單個字符以ASCII碼的形式在LCD12864上顯示。設(shè)tempH、tempT分別用來存放濕度和溫度的值,數(shù)組dis[4]用于存放待顯示的數(shù),具體代碼如下:
dis[0]=tempH/10+0x30 //濕度十位的ASCII碼
dis[1]= tempH%10+0x30 //濕度個位的ASCII碼
dis[2]=tempT/10+0x30 //溫度十位的ASCII碼
dis[3]= tempT%10+0x30 //溫度個位的ASCII碼
系統(tǒng)采用串口1與上位機通信,STM32F103ZET6單片機的串口1是由PA9、PA10端口復(fù)用構(gòu)成,PA9對應(yīng)USART1_TX,PA10對應(yīng)USART1_RX,采用全雙工模式,故需將PA9管腳配置為復(fù)用推挽輸出(GPIO_Mode_AF_PP)模式,將PA10管腳配置為浮空輸入(GPIO_Mode_IN_FLOATING)模式。串口工作在中斷方式下,當(dāng)接收到上位機發(fā)送的數(shù)據(jù)產(chǎn)生中斷,串口配置可參考文獻[4]、[5]。串口向上位機發(fā)送數(shù)據(jù)程序如下:
void send (u8 dat)
{
USART_SendData(USART1,dat); //發(fā)送數(shù)據(jù)
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); //判斷是否發(fā)送完成
USART_ClearFlag(USART1,USART_FLAG_TC); //清除發(fā)送標(biāo)志位
}
串口中斷處理函數(shù)如下:
void USART1_IRQHandler()
{
u8 Res;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) //判斷是否有數(shù)據(jù)
{
Res=USART_ReceiveData(USART1); //接收數(shù)據(jù)
if(Res==0x01) //判斷上位機發(fā)送的是0x01還是0x02
enable=1; //若為0x01,向上位機發(fā)送溫濕度值
else if(Res==0x02)
enable=0; //若為0x02,停止向上位機發(fā)送溫濕度值
}
}
上位機采用Visual Basic 6.0編寫監(jiān)測界面,采用MSComm控件實現(xiàn)串口通信功能[6]。MSComm控件OnComm事件接收STM32F103ZET6單片機發(fā)送的溫濕度值的程序如下[7]:
Private Sub MSComm1_OnComm()
Dim data As Variant
Dim B() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
data= MSComm1.Input ‘接收串口溫濕度值
MSComm1.InBufferCount = 0
B() = data
Text1.Text = B(0) ‘顯示溫度值
Text2.Text = B(1) ‘顯示濕度值
End Select
End Sub
4系統(tǒng)實現(xiàn)
采用Keil μVision 4編寫程序,編譯成HEX文件后下載到STM32F103ZET6單片機中與上位機聯(lián)合調(diào)試,運行結(jié)果如圖4所示,其中圖(a)為LCD12864顯示的溫濕度值,圖(b)為上位機觀測界面。在串口設(shè)置中選擇串口,點擊“打開串口”按鈕,指示燈為綠色,則串口打開。點擊“啟動”,上位機向STM32F103ZET6單片機發(fā)送0x01,下位機接收后向上位機發(fā)送溫濕度值并顯示;點擊“停止”按鈕,上位機向下位機發(fā)送0x02,下位機停止向上位機發(fā)送溫濕度值;點擊“退出”按鈕,退出溫濕度采集觀測系統(tǒng)。
基于STM32F103ZET6單片機和VB設(shè)計了溫濕度采集系統(tǒng)。該系統(tǒng)用數(shù)字式溫濕度傳感器DHT11采集溫濕度、LCD12864顯示溫濕度,STM32F103ZET6單片機和上位機采用串口通信。實驗結(jié)果表明,系統(tǒng)結(jié)構(gòu)簡單、運行穩(wěn)定、操作方便,能夠?qū)崿F(xiàn)對環(huán)境溫濕度的采集,具有良好的市場應(yīng)用前景。
參考文獻:
[1]倪天龍.單總線傳感器DHT11在溫濕度測控中的應(yīng)用[J].單片機與嵌入式系統(tǒng)應(yīng)用,2010,(6):60-62.
[2]胡洪波,梁書劍,張愛民,等.基于ST7920的12864液晶的使用方法研究[J].山西電子技術(shù),2011(6):82-84.
[3]李長有,王文華.基于DHT11溫濕度測控系統(tǒng)設(shè)計[J].機床與液壓,2013,41(13):107-108.
[4]張立勛,李雪偉,唐小景.STM32與LabVIEW串行通信的設(shè)計[J].煤礦機械,2011,32(5):215-217.
[5]張洋,劉軍,嚴漢宇.原子教你玩STM32(庫函數(shù)版)[M].北京:北京航空航天大學(xué)出版社,2013.
[6]李江全,魏中巖,姚帥,等.單片機通信與控制應(yīng)用編程實例[M].北京:中國電力出版社,2012.
[7]祖一康,徐妙婧.一種基于單片機和VB的多點溫度監(jiān)測系統(tǒng)設(shè)計[J].長江大學(xué)學(xué)報(自科版),2014,11(19):50-53.
編輯王菊平
Design of temperature and humidity acquisition system based on STM32
ZU Yi-kang1, XU Miao-jing2
(1. College of Mechanical & Electronic Engineering, Huanggang Normal University, Huangzhou 438000, Hubei,China;2.School of Electronic Information, Huanggang Normal University, Huangzhou 438000, Hubei, China)
AbstractA temperature and humidity data acquisition system was designed based on STM32F103ZET6 singlechip, the digital temperature and humidity sensor DHT11 was used to gather the environment temperature and humidity value, the collection values were displayed on the LCD12864 which with Chinese font, through the serial port to the temperature and humidity values were sent to the host computer through the serial port , the Visual Basic 6.0 was used to program the temperature and the humidity display interface in the computer. The hardware and software design methods were given, the system of temperature and humidity was validated by experiment, the experimental results show that, the system has the advantages of simple structure, can realize the environmental temperature and humidity value acquisition and real time display.
Key wordsSTM32; temperature and humidity; LCD12864; Visual Basic 6.0
基金項目黃岡師范學(xué)院科研 (2014022603)。
作者簡介祖一康,男,江蘇宿遷人,講師,碩士,主要研究方向為網(wǎng)絡(luò)化控制、智能檢測與控制。
收稿日期2015-04-27
doi10.3969/j.issn.1003-8078.2015.06.16
中圖分類號TP274
文獻標(biāo)志碼A
文章編號1003-8078(2015)06-0060-04