在本教程中,我將介紹如何將DHT11濕度和溫度傳感器與基于STM32F103C8T6 MCU的STM32 Blue Pill Board接口。DHT11傳感器的值由STM32讀取,并顯示在I2C LCD顯示屏上。
介紹
傳感器是很小的設備,可以彌合原始模擬世界與MCU的數字世界之間的鴻溝。傳感器可以非常簡單,例如非常著名的LM35溫度傳感器,也可以是一些復雜的數學單元,例如MPU6050陀螺儀和加速度計組合傳感器。
簡單或復雜,傳感器是許多消費,汽車,機器人和工業應用中的關鍵部分,如果不集成適當的傳感器就無法完成某些應用。
讓我們從工業應用程序擴展到日常項目和業余愛好者。氣象站是一個非常普遍且受歡迎的項目,無論是物聯網應用還是常規字符LCD應用。
此類氣象站項目的關鍵組成部分是能夠檢測與天氣相關的參數(如溫度,濕度等)。DHT11濕度和溫度傳感器就是這些類型項目的設備。
我已經在一個名為“ Arduino上的DHT11濕度傳感器”的Arduino項目中使用了DHT11傳感器(第一條推文)。在該項目中,我已將DHT11傳感器與Arduino接口,計算了溫度和濕度值,并將其顯示在16×2 LCD顯示器上。我在這里也會做同樣的事情,但是這次我將把DHT11濕度和溫度傳感器連接到STM32F103C8T6 MCU的接口上。
DHT11溫濕度傳感器
DHT11及其兄弟DHT22是便宜但高度可靠的濕度和溫度傳感器。DHT22的范圍和精度略優于DHT11,但這種擴展范圍和更嚴格的精度是有代價的。除此之外,兩個傳感器的外觀相似,且引腳和連接性相同。因此,從現在開始,我們將專注于該項目的傳感器,即DHT11。
它是一種超低成本傳感器,具有電阻型濕度測量組件,NTC型溫度測量組件和8位微控制器,可將兩個測量組件的數據轉換為數字值。
在Arduino – DHT11教程中,我談到了傳感器的工作原理以及如何解釋來自串行的數據。我建議您參考該項目以獲取有關此傳感器的更多信息。
另外,在該項目中,我沒有為DHT11濕度和溫度傳感器使用任何專用的庫,而是嘗試了自己的代碼。僅作更改,我將使用Adafruit開發的DHT庫。
將DHT11濕度和溫度傳感器與STM32F103C8T6連接
在繼續進行操作之前,我必須提醒您DHT11傳感器數據表中的某些內容。它表示,必須借助5KΩ電阻將DHT11傳感器與微控制器(在這種情況下為STM32)之間的單條數據線拉高。
因此,在購買DHT11傳感器時,請嘗試購買包含所述上拉電阻器(甚至是一些通電LED)的模塊。由于不需要任何其他組件,因此使DHT11濕度和溫度傳感器與STM32F103C8T6的連接變得更加容易。
要記住的另一件事是,我使用了I2C LCD,即基于PCF8574模塊的I2C GPIO擴展器模塊,具有良好的舊16×2 LCD顯示屏。我已經在專用項目“將I2C LCD與STM32F103C8T6接口”中實現了相同的功能。有關更多信息,請參考該項目。
所需組件
基于STM32F103C8T6 MCU的STM32藍色藥丸板
DHT11溫濕度傳感器
16×2液晶顯示器
PCF8574 I2C液晶模塊
5KΩ電阻器(可選,如果DHT11模塊上有電阻,則不需要)
連接線
電路圖
下圖顯示了將DHT11濕度和溫度傳感器與基于STM32F103C8T6 MCU的STM32藍色藥丸板接口的電路圖。
連接說明
首先,將DHT11 Sensor的VCC和GND引腳分別連接到+ 5V和GND。然后將傳感器的數據引腳連接到STM32板的引腳PA1。
來到LCD時,將PCF8574 I2C LCD模塊插入LCD的背面,并將PCF8574模塊的SDA和SCL引腳分別連接到STM32板的PB7和PB6引腳。同樣,將I2C LCD模塊的VCC和GND引腳連接到+ 5V和GND。
編程STM32以連接DHT11
在繼續之前,請確保您已經確定了I2C LCD教程中提到的PCF8574模塊的從站地址。您可以將以下代碼用于相同的代碼。
#include
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
}
void loop()
{
byte error, address;
int I2CDevices;
Serial.println(“Scanning for I2C Devices…”);
I2CDevices = 0;
for (address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print(“I2C device found at address 0x”);
if (address < 16)
Serial.print(“0″);
Serial.print(address, HEX);
Serial.println(” !”);
I2CDevices++;
}
else if (error == 4)
{
Serial.print(“Unknown error at address 0x”);
if (address < 16)
Serial.print(“0”);
Serial.println(address, HEX);
}
}
if (I2CDevices == 0)
Serial.println(“No I2C devices found ”);
else
Serial.println(“**** ”);
delay(5000);
}
現在,未來的實際程序,首先從下載DHT庫這個鏈接。解壓縮zip文件并將其內容復制到本地Arduino安裝的library文件夾中。該路徑通常是“ C: Program Files(x86) Arduino libraries”。
然后,在程序中,將DHT的數據引腳定義為PA1,并將DHT傳感器的類型定義為DHT11或DHT22。通過提及從機地址,列數和行數來聲明具有LiquidCrystal_I2C庫功能的I2C LCD。現在,您可以使用各自的“開始”功能初始化LCD和DHT11傳感器。
現在,獲取兩個浮點值,并從傳感器獲取濕度和溫度讀數。最后,在LCD上打印這些值。
源代碼
#include
#include
#include
#define DHTPIN PA1
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
byte degree_symbol[8] =
{
0b00111,
0b00101,
0b00111,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
lcd.begin();
dht.begin();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(“Electronics Hub”);
lcd.setCursor(0,1);
lcd.print(“DHT11 with STM32”);
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Temp = “);
lcd.setCursor(0,1);
lcd.print(“Humid = “);
lcd.createChar(0, degree_symbol);
lcd.setCursor(12,0);
lcd.write(0);
lcd.print(“C”);
lcd.setCursor(14,1);
lcd.print(“%”);
}
void loop()
{
float hum = dht.readHumidity();
float tem = dht.readTemperature();
lcd.setCursor(7,0);
lcd.print(tem);
lcd.setCursor(8,1);
lcd.print(hum);
}
結論
此處實現了一個簡單的項目,用以演示DHT11濕度和溫度傳感器與基于STM32F103C8T6 MCU的STM32 Blue Pill Board的接口。
-
傳感器
+關注
關注
2561文章
52199瀏覽量
761843 -
溫度傳感器
+關注
關注
48文章
3009瀏覽量
157590 -
STM32
+關注
關注
2283文章
10986瀏覽量
361375
原文標題:如何將DHT11濕度和溫度傳感器與STM32F103C8T6連接
文章出處:【微信號:aidanpianji,微信公眾號:單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
基于STM32F103C8T6控制多路VL53L0X激光測距傳感器
基于STM32F103C8T6 ADXL345 加速度傳感器的計步器設計指南和代碼
【正點原子STM32H7R3開發套件試用體驗】DS18B20、DHT11溫濕度采集
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11數字溫濕度傳感器
dht11溫濕度傳感器工作原理介紹
DHT11溫度傳感器測量范圍與精度
ds18b20溫度傳感器和dht11的區別
學STM32為什么首選F103C8T6?

評論