在这个项目中,我们将制作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
+关注
关注
119文章
6180浏览量
223827 -
湿度计
+关注
关注
0文章
16浏览量
11019 -
温度计
+关注
关注
6文章
404浏览量
78426 -
Arduino
+关注
关注
187文章
6464浏览量
186646
发布评论请先 登录
相关推荐
评论