1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 用Arduino结合OLED DHT11测量温湿度

用Arduino结合OLED DHT11测量温湿度

时间:2023-10-05 05:05:51

相关推荐

用Arduino结合OLED DHT11测量温湿度

用Arduino结合OLED、DHT11测量温湿度

1.项目起因

最近买了一块温湿度传感器DHT11,想着结合之前买的OLED屏幕和arduino nano 单片机来搭建一个将温湿度传感器DHT11测量到的数据,通过arduino处理后,在OLED屏幕上显示出来,得到一个即时温湿度显示的效果。

2.硬件准备

arduino单片机1

DHT11温湿度传感器1

OLED屏幕1

面包板1

杜邦线若干

3.硬件连接

本人使用的OLED屏幕分别有4个引脚,GND、VCC、SCL、SDA,分别接到单片机的GND、5V、A5、A4四个引脚上。温湿度传感器DHT11有3个引脚,VCC、DAT、GND,分别接到单片机的3V3、D10、GND三个引脚上。

单片机通电,下面是软件部分,注入灵魂。

4.软件部分

先贴上项目完整代码,已验证可行。

#include <DFRobot_DHT11.h>#include "U8glib.h"#define DHT11_PIN 10//设置D10引脚为DHT11数据采集端DFRobot_DHT11 DHT;U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);void draw(void) {u8g.setFont(u8g_font_unifont);//设置在OLED屏幕显示的字体u8g.drawStr( 40, 12, "Welcome!");u8g.drawStr( 20, 30, "temp:");u8g.setPrintPos(60,30);u8g.print(DHT.temperature);//显示温度u8g.drawStr( 80, 30, "C");u8g.drawPixel(78,20);u8g.drawStr( 20, 50, "humi:");u8g.setPrintPos(60,50);u8g.print(DHT.humidity);//显示湿度u8g.drawStr( 80, 50, "%");}void setup(){Serial.begin(115200);//串口调试的波特率为115200if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {u8g.setColorIndex(255);// white}else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {u8g.setColorIndex(3); // max intensity}else if ( u8g.getMode() == U8G_MODE_BW ) {u8g.setColorIndex(1); // pixel on}else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {u8g.setHiColorByRGB(255,255,255);}}void loop(){DHT.read(DHT11_PIN);Serial.print("temp:");Serial.print(DHT.temperature);//串口显示温度Serial.print(" humi:");Serial.println(DHT.humidity);//串口显示湿度delay(1000);u8g.firstPage(); do {draw();//在OLED屏幕上显示} while( u8g.nextPage() );// rebuild the picture after some delaydelay(50);}

首先说明:

Arduino代码主要分为两个部分,void setup(),void loop()。

void setup()是Arduino运行初的初始设置,只在程序一开始执行一遍。

void loop()是Arduino循环执行的部分。

本项目中需要用到DHT11和OLED屏幕,所以需要用到"DFRobot_DHT11.h"和"U8glib.h"这两个库文件。

注意:DHT.read(DHT11_PIN)这条语句最好放在loop()循环中,循环一次,收集一次数据。不要放入draw()函数中,会反复出现初始值(225),怀疑是每次在draw()函数中DHT11模块要重启一次,然后直接将初始值显示出来了。放到draw()函数外面则功能正常。

具体代码解释已在注释中注明,有疑惑或者错误欢迎私信。

5.最终效果

6.改进计划

后面有时间可以画好PCB,将器件焊接上去,3D打印外壳,做成可以日常使用的物品。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。