祖一康,徐妙婧
(1.黃岡師范學(xué)院 機(jī)電工程學(xué)院,湖北 黃州 438000;2.黃岡師范學(xué)院 電子信息學(xué)院,湖北 黃州 438000)
?
基于STM32的溫濕度采集系統(tǒng)設(shè)計(jì)
祖一康1,徐妙婧2
(1.黃岡師范學(xué)院 機(jī)電工程學(xué)院,湖北 黃州 438000;2.黃岡師范學(xué)院 電子信息學(xué)院,湖北 黃州 438000)
摘要基于STM32F103ZET6單片機(jī)設(shè)計(jì)了一個(gè)溫濕度采集系統(tǒng),該系統(tǒng)采用數(shù)字式溫濕度傳感器DHT11采集環(huán)境的溫度和濕度值,將采集的值在帶有中文字庫的液晶顯示器LCD12864上顯示,通過串口將溫濕度值發(fā)送到上位機(jī),在上位機(jī)中采用Visual Basic 6.0編寫溫濕度值顯示界面。給出了溫濕度采集系統(tǒng)的硬件和軟件設(shè)計(jì)方法,并通過實(shí)驗(yàn)進(jìn)行了驗(yàn)證,實(shí)驗(yàn)結(jié)果表明,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,能夠?qū)崿F(xiàn)對(duì)環(huán)境溫濕度值的采集和實(shí)時(shí)顯示。
關(guān)鍵詞STM32;溫濕度;LCD12864;Visual Basic 6.0
溫度和濕度值是重要的物理參數(shù),例如精密機(jī)械加工、實(shí)驗(yàn)室、溫室大棚、糧庫、重要活動(dòng)場(chǎng)所、會(huì)議室、居住場(chǎng)所等都需要對(duì)溫度和濕度進(jìn)行實(shí)時(shí)采集和控制,因此設(shè)計(jì)溫濕度采集系統(tǒng)具有重要意義。文中采用溫濕度傳感器DHT11獲取溫度和濕度值,結(jié)合STM32F103ZET6單片機(jī)、帶中文字庫LCD12864液晶顯示器、Visual Basic 6.0構(gòu)建溫濕度采集系統(tǒng)。
1系統(tǒng)總體設(shè)計(jì)和工作原理
溫濕度采集系統(tǒng)的總體架構(gòu)如圖1所示。系統(tǒng)分為溫濕度采集模塊、顯示模塊、串行通信模塊、上位機(jī)遠(yuǎn)程顯示模塊。STM32F103ZET6單片機(jī)讀取數(shù)字式溫濕度傳感器DHT11獲取的環(huán)境溫濕度值,并通過GPIO口驅(qū)動(dòng)帶中文字庫的液晶顯示器LCD12864顯示溫濕度值,通過USART1經(jīng)電平轉(zhuǎn)換后與PC機(jī)串行通信,實(shí)現(xiàn)遠(yuǎn)程實(shí)時(shí)顯示。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
圖2 DHT11與STM32F103連接圖
2硬件電路設(shè)計(jì)
采用廣州奧松電子有限公司生產(chǎn)的數(shù)字式溫濕度傳感器DHT11進(jìn)行溫濕度檢測(cè),其濕度測(cè)量范圍為20%~90%RH,濕度測(cè)量精度為±5.0%RH,溫度測(cè)量范圍為0~50 ℃,溫度測(cè)量精度為±1.0 ℃,其數(shù)據(jù)由8位濕度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)、8位溫度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)和8位校驗(yàn)和數(shù)據(jù)構(gòu)成,其中小數(shù)部分讀數(shù)為0,用于以后擴(kuò)展[1]。DHT11與STM32F103連接如圖2所示。DHT11的1號(hào)引腳接3.3V電源,2號(hào)引腳經(jīng)4.7k上拉電阻與STM32F103ZET6單片機(jī)的PG11引腳相連,3號(hào)引腳懸空,4號(hào)引腳接地。
采用帶中文字庫的LCD12864顯示DHT11采集的溫濕度值。LCD12864具有128列,64行,內(nèi)置8192個(gè)16×16點(diǎn)陣漢字和128個(gè)16×8點(diǎn)陣字符;具有串行和并行2種通信方式[2],本文選擇并行通信方式,其與STM32F103ZET6單片機(jī)連接如圖3所示。
圖3 LCD1286連接圖
LCD12864的控制引腳RS、R/W、E(使能)、RESET分別于STM32F103GPIO中的PC10~PC13引腳相連接;數(shù)據(jù)線DB0~DB7分別于STM32F103GPIO中的PD0~PD7引腳相連接。
3系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)內(nèi)容包括溫濕度檢測(cè)程序、溫濕度值顯示程序、串行通信程序以及上位機(jī)顯示程序等。
數(shù)字式溫濕度傳感器DHT11與STM32F103ZET6單片機(jī)的PG11引腳相連,對(duì)DHT11的讀寫遵循一定的通信時(shí)序[1,3]。在使用GPIO的PG11引腳時(shí)需要對(duì)其初始化,PG11作為輸入引腳時(shí)將其工作模式設(shè)置為浮空(GPIO_Mode_IN_FLOATING)輸入模式;作為輸出引腳時(shí)將其工作模式設(shè)置為推挽輸出(GPIO_Mode_Out_PP)模式,速度設(shè)置為50MHz。讀取DHT11溫濕度值后需對(duì)數(shù)值進(jìn)行數(shù)據(jù)校驗(yàn),即判斷校驗(yàn)和是否等于8位濕度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)、8位溫度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)的和,如果相等,則數(shù)據(jù)傳輸正確,將溫濕度值傳送給LCD12864和通過串口發(fā)送到上位機(jī)。
利用帶中文字庫的LCD12864顯示溫濕度值,采用并行工作方式,所以其PSB管腳接+5V。在使用STM32F103的GPIO,需要對(duì)相應(yīng)的引腳初始化,文中使用PC10~PC13作為控制信號(hào)輸出引腳、使用PD0~PD7引腳作為數(shù)據(jù)輸出引腳,將這些引腳初始化為推挽輸出(GPIO_Mode_Out_PP)模式,速度設(shè)置為10MHz??山柚A(yù)處理指令使程序簡(jiǎn)化,程序如下:
//控制管腳定義
#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)對(duì)LCD12864寫數(shù)據(jù)或命令。
待顯示的溫濕度值需要分解為單個(gè)字符以ASCII碼的形式在LCD12864上顯示。設(shè)tempH、tempT分別用來存放濕度和溫度的值,數(shù)組dis[4]用于存放待顯示的數(shù),具體代碼如下:
dis[0]=tempH/10+0x30 //濕度十位的ASCII碼
dis[1]= tempH%10+0x30 //濕度個(gè)位的ASCII碼
dis[2]=tempT/10+0x30 //溫度十位的ASCII碼
dis[3]= tempT%10+0x30 //溫度個(gè)位的ASCII碼
系統(tǒng)采用串口1與上位機(jī)通信,STM32F103ZET6單片機(jī)的串口1是由PA9、PA10端口復(fù)用構(gòu)成,PA9對(duì)應(yīng)USART1_TX,PA10對(duì)應(yīng)USART1_RX,采用全雙工模式,故需將PA9管腳配置為復(fù)用推挽輸出(GPIO_Mode_AF_PP)模式,將PA10管腳配置為浮空輸入(GPIO_Mode_IN_FLOATING)模式。串口工作在中斷方式下,當(dāng)接收到上位機(jī)發(fā)送的數(shù)據(jù)產(chǎn)生中斷,串口配置可參考文獻(xiàn)[4]、[5]。串口向上位機(jī)發(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) //判斷上位機(jī)發(fā)送的是0x01還是0x02
enable=1; //若為0x01,向上位機(jī)發(fā)送溫濕度值
else if(Res==0x02)
enable=0; //若為0x02,停止向上位機(jī)發(fā)送溫濕度值
}
}
上位機(jī)采用Visual Basic 6.0編寫監(jiān)測(cè)界面,采用MSComm控件實(shí)現(xiàn)串口通信功能[6]。MSComm控件OnComm事件接收STM32F103ZET6單片機(jī)發(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)實(shí)現(xiàn)
采用Keil μVision 4編寫程序,編譯成HEX文件后下載到STM32F103ZET6單片機(jī)中與上位機(jī)聯(lián)合調(diào)試,運(yùn)行結(jié)果如圖4所示,其中圖(a)為L(zhǎng)CD12864顯示的溫濕度值,圖(b)為上位機(jī)觀測(cè)界面。在串口設(shè)置中選擇串口,點(diǎn)擊“打開串口”按鈕,指示燈為綠色,則串口打開。點(diǎn)擊“啟動(dòng)”,上位機(jī)向STM32F103ZET6單片機(jī)發(fā)送0x01,下位機(jī)接收后向上位機(jī)發(fā)送溫濕度值并顯示;點(diǎn)擊“停止”按鈕,上位機(jī)向下位機(jī)發(fā)送0x02,下位機(jī)停止向上位機(jī)發(fā)送溫濕度值;點(diǎn)擊“退出”按鈕,退出溫濕度采集觀測(cè)系統(tǒng)。
基于STM32F103ZET6單片機(jī)和VB設(shè)計(jì)了溫濕度采集系統(tǒng)。該系統(tǒng)用數(shù)字式溫濕度傳感器DHT11采集溫濕度、LCD12864顯示溫濕度,STM32F103ZET6單片機(jī)和上位機(jī)采用串口通信。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、運(yùn)行穩(wěn)定、操作方便,能夠?qū)崿F(xiàn)對(duì)環(huán)境溫濕度的采集,具有良好的市場(chǎng)應(yīng)用前景。
參考文獻(xiàn):
[1]倪天龍.單總線傳感器DHT11在溫濕度測(cè)控中的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010,(6):60-62.
[2]胡洪波,梁書劍,張愛民,等.基于ST7920的12864液晶的使用方法研究[J].山西電子技術(shù),2011(6):82-84.
[3]李長(zhǎng)有,王文華.基于DHT11溫濕度測(cè)控系統(tǒng)設(shè)計(jì)[J].機(jī)床與液壓,2013,41(13):107-108.
[4]張立勛,李雪偉,唐小景.STM32與LabVIEW串行通信的設(shè)計(jì)[J].煤礦機(jī)械,2011,32(5):215-217.
[5]張洋,劉軍,嚴(yán)漢宇.原子教你玩STM32(庫函數(shù)版)[M].北京:北京航空航天大學(xué)出版社,2013.
[6]李江全,魏中巖,姚帥,等.單片機(jī)通信與控制應(yīng)用編程實(shí)例[M].北京:中國(guó)電力出版社,2012.
[7]祖一康,徐妙婧.一種基于單片機(jī)和VB的多點(diǎn)溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].長(zhǎng)江大學(xué)學(xué)報(bào)(自科版),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
基金項(xiàng)目黃岡師范學(xué)院科研 (2014022603)。
作者簡(jiǎn)介祖一康,男,江蘇宿遷人,講師,碩士,主要研究方向?yàn)榫W(wǎng)絡(luò)化控制、智能檢測(cè)與控制。
收稿日期2015-04-27
doi10.3969/j.issn.1003-8078.2015.06.16
中圖分類號(hào)TP274
文獻(xiàn)標(biāo)志碼A
文章編號(hào)1003-8078(2015)06-0060-04