在這個項目中,我們將制作Arduino OLED溫度計和濕度計。我們將從DHT22傳感器讀取溫度和濕度,然后我們將在OLED屏幕上顯示數據。
OLED代表有機發光二極管,它們有多種不同尺寸可供選擇。我們要使用的尺寸是128X64(1.3英寸)。 OLED通過SPI和I2C通信與Arduino配合使用,但在我們的項目中,我們將使用SPI通信。
電路圖
首先,我們將OLED與Arduino連接起來。 OLED可以連接到I2C中的Arduino以及SPI。以I2C方式連接OLED的連接更容易,但SPI通信比I2C更快。因此,我們將使用SPI將OLED與Arduino連接起來。按照以下方式將OLED與Arduino連接:
將OLED上的CS引腳連接到Arduino上的引腳10
將OLED上的DC引腳連接到Arduino上的引腳9
將OLED上的RST引腳連接到Arduino上的引腳8
將OLED上的D1或CLK引腳連接到Arduino上的引腳11
將OLED上的D0或DIN引腳連接到引腳13在Arduino
我們已將OLED連接到引腳13,11,10,9和8,因為這些引腳用于SPI通信。接下來,將DHT22與Arduino連接。 DHT22傳感器與Arduino的連接如下:
將DHT22上的VCC連接到Arduino上的5V引腳
將DHT22上的GND連接到Arduino上的GND
將DHT22的數據引腳連接到Arduino上的引腳7
Arduino代碼
#include #include“DHT.h “#define DHTPIN 7 #define DHTTYPE DHT22 DHT傳感器(DHTPIN,DHTTYPE); U8GLIB_SH1106_128X64 oled(13,11,10,9,8); void setup(){sensor.begin(); oled.firstPage(); do {oled.setFont(u8g_font_fur14);//設置字體大小//在OLED上打印數據oled.drawStr(20,15,“歡迎”); oled.drawStr(40,40,“To”); oled.drawStr(5,60,“DIYHACKING “); } while(oled.nextPage()); delay(5000);} void loop(){float h = sensor.readHumidity();//讀取濕度值float t = sensor.readTemperature();//讀取溫度值float fah = sensor.readTemperature(true);//讀取Fahrenheitif中的溫度(isnan(h)|| isnan(t)|| isnan(fah)){//檢查我們是否收到值或notSerial.println(“無法讀取DHT傳感器!”); return;} float heat_index = sensor.computeHeatIndex(fah,h);//計算Fahrenheitfloat中的熱指數heat_indexC = sensor.convertFtoC(heat_index);//在Celsiusoled.firstPage()中計算熱量指數; do {oled.setFont(u8g_font_fub11);//設置字體大小//在OLBled.drawStr上打印數據(0,15,“Temp:”); oled.drawStr(0,40,“Hum:”); oled.drawStr(0,60,“嗨:“); oled.setPrintPos(72,15);//設置尺寸以打印temperatureoled.print(t,0); oled.println(“C”); oled.setPrintPos(72,40);//設置尺寸以打印humidoled.print(h,0); oled.println(“%”); oled.setPrintPos(72,60);//設置尺寸以打印熱量indexoled.print(heat_indexC,0); oled.println(“%”);} while(oled。 nextPage()); delay(2000); }
代碼說明
首先,我們包括DHT22傳感器和OLED的庫。 ‘ U8glib ’庫適用于OLED,它使代碼非常簡單。我們將使用“ U8glib ”庫的功能顯示OLED上的數據。
#include #include“DHT.h”接下來,我們定義了連接DHT22傳感器數據引腳的引腳,然后定義了DHT傳感器的類型。市場上還有一些其他類型的DHT傳感器。之后,我們初始化了連接OLED的引腳。
#define DHTPIN 7 #define DHTTYPE DHT22 DHT傳感器(DHTPIN,DHTTYPE); U8GLIB_SH1106_128X64 oled(13 ,11,10,9,8); 在設置功能中,我們給出命令以開始從DHT22傳感器接收值。然后我們設置字體并在OLED上打印“歡迎DIYHACKING”5秒鐘。如果您不喜歡,可以更改字體大小。你可以在這里找到不同的字體大小。
sensor.begin(); oled.firstPage(); do {oled.setFont(u8g_font_fur14);//設置字體大小//在OLED上打印數據oled.drawStr(20,15,“歡迎”); oled.drawStr(40,40,“To”); oled.drawStr(5,60,“DIYHACKING “); } while(oled.nextPage()); delay(5000);} 在循環函數中,我們從DHT22傳感器讀取濕度和溫度值,然后我們使用溫度計算熱量指數濕度。
float h = sensor.readHumidity();//讀取濕度值float t = sensor.readTemperature();//讀取溫度值float fah = sensor.readTemperature(true);//讀取Fahrenheitif中的溫度(isnan(h)|| isnan(t)|| isnan(fah)){//檢查我們是否收到值或notSerial.println(“無法讀取DHT傳感器!”); return; float heat_index = sensor.computeHeatIndex(fah,h);//計算Fahrenheitfloat中的熱指數heat_indexC = sensor.convertFtoC(heat_index);//以攝氏度計算熱指數最后,我們再次設置字體大小并在OLED上打印溫度,濕度和熱指數。您可以按照上面討論的鏈接更改字體大小,也可以在不同的維度設置數據。
oled.firstPage(); do {oled.setFont(u8g_font_fub11);//設置字體大小//在OLBED.drawStr上打印數據(0,15,“Temp:”); oled.drawStr(0,40,“Hum:”); oled.drawStr(0,60,“嗨:“); oled.setPrintPos(72,15);//設置尺寸以打印temperatureoled.print(t,0); oled.println(“C”); oled.setPrintPos(72,40);//設置尺寸以打印humidoled.print(h,0); oled.println(“%”); oled.setPrintPos(72,60);//設置尺寸以打印熱量indexoled.print(heat_indexC,0); oled.println(“%”);} while(oled。 nextPage()); delay(2000); }
-
OLED
+關注
關注
121文章
6358瀏覽量
233645 -
濕度計
+關注
關注
0文章
17瀏覽量
11198 -
溫度計
+關注
關注
6文章
410瀏覽量
79900 -
Arduino
+關注
關注
190文章
6526瀏覽量
196927
發布評論請先 登錄
浮思特 | 電子溫度計單片機如何選型?ABOV單片機提供幾點很關鍵!
標準鉑電阻溫度計與高精度測溫儀的重要作用
用于智能溫度計的MG127藍牙芯片方案
藍牙溫度計的理想儲能解決方案:永銘超級電容
功耗創新低!涂鴉產品級Zigbee 3.0溫濕度計開發包,開箱即用、完全開源
用樹莓派RP2350 DIY 桌面動態溫濕度計
樹莓派RP2350 - 桌面動態溫濕度計
基于Arduino的OLED溫度計濕度計的制作教程
評論