首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Arduino OLED显示温湿度及土壤湿度

Arduino OLED显示温湿度及土壤湿度

作者头像
逍遥子大表哥
发布2025-07-28 17:24:27
发布2025-07-28 17:24:27
12000
代码可运行
举报
文章被收录于专栏:kali blogkali blog
运行总次数:0
代码可运行

本期教程,我们来说说怎样通过Arduino将DHT11 和土壤湿度传感器的数据通过OLED屏幕显示出来。.

首先,来看看实际的效果怎样吧!

准备

  • Arduino开发板
  • 0.96 OLED屏幕
  • DHT11温湿度传感器
  • 土壤传感器

线路连接

OLED屏幕

GND-->GND

VCC-->3.3V

SCL-->SCL

SDA-->SDA

DHT11线路

GND-->GND

VCC-->3.3V

DATA-->D10

土壤传感器

GND-->GND

VCC-->3.3V

A0-->A0

注意:Arduino开发板,只有两个GND3v的接口。在多设备时,建议串联电路。

代码

代码语言:javascript
代码运行次数:0
运行
复制
#include <DFRobot_DHT11.h>
#include "U8glib.h"
#define DHT11_PIN 10//设置D10引脚为DHT11数据采集端
int moistureSensorPin = A0; // 定义传感器连接的引脚
DFRobot_DHT11 DHT;
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
static const uint8_t PROGMEM wen[] = {
  /*--  文字:  温  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x00, 0x00, 0x23, 0xF8, 0x12, 0x08, 0x12, 0x08, 0x83, 0xF8, 0x42, 0x08, 0x42, 0x08, 0x13, 0xF8,
  0x10, 0x00, 0x27, 0xFC, 0xE4, 0xA4, 0x24, 0xA4, 0x24, 0xA4, 0x24, 0xA4, 0x2F, 0xFE, 0x00, 0x00,
};
 
static const uint8_t PROGMEM shi[] = {
  /*--  文字:  湿  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x00, 0x00, 0x27, 0xF8, 0x14, 0x08, 0x14, 0x08, 0x87, 0xF8, 0x44, 0x08, 0x44, 0x08, 0x17, 0xF8,
  0x11, 0x20, 0x21, 0x20, 0xE9, 0x24, 0x25, 0x28, 0x23, 0x30, 0x21, 0x20, 0x2F, 0xFE, 0x00, 0x00,
};
 
static const uint8_t PROGMEM du[] = {
  /*--  文字:  度  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x01, 0x00, 0x00, 0x80, 0x3F, 0xFE, 0x22, 0x20, 0x22, 0x20, 0x3F, 0xFC, 0x22, 0x20, 0x22, 0x20,
  0x23, 0xE0, 0x20, 0x00, 0x2F, 0xF0, 0x24, 0x10, 0x42, 0x20, 0x41, 0xC0, 0x86, 0x30, 0x38, 0x0E,
};
 
static const uint8_t PROGMEM ssd[] = {
  /*--  文字:  ℃  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x60, 0x00, 0x91, 0xF4, 0x96, 0x0C, 0x6C, 0x04, 0x08, 0x04, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00,
  0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0C, 0x04, 0x06, 0x08, 0x01, 0xF0, 0x00, 0x00,
};
static const uint8_t PROGMEM tu[] = {
  /*--  文字: 土  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,
  0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,
};
static const uint8_t PROGMEM rang[] = {
  /*--  文字: 壤  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x20,0x40,0x27,0xFC,0x20,0x00,0x23,0xB8,0xF2,0xA8,0x23,0xB8,0x21,0x10,0x27,0xFC,
  0x21,0x10,0x27,0xFC,0x31,0x10,0xEF,0xFE,0x41,0x28,0x03,0x10,0x0D,0x48,0x01,0x86,
};
static const uint8_t PROGMEM xiao[] = {
  /*--  文字: 逍  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x00,0x40,0x22,0x48,0x11,0x48,0x11,0x50,0x00,0x40,0x03,0xF8,0xF2,0x08,0x12,0x08,
  0x13,0xF8,0x12,0x08,0x12,0x08,0x13,0xF8,0x12,0x08,0x12,0x28,0x2A,0x10,0x47,0xFE,
};
static const uint8_t PROGMEM yao[] = {
  /*--  文字: 遥  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x00,0x3C,0x23,0xC0,0x10,0x04,0x12,0x44,0x01,0x28,0x01,0xFC,0xF2,0x20,0x10,0x20,
  0x13,0xFE,0x10,0x20,0x11,0x24,0x11,0x24,0x11,0x24,0x11,0xFC,0x28,0x00,0x47,0xFE,

};
static const uint8_t PROGMEM zi[] = {
  /*--  文字: 子  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x00,0xFF,0xFE,
  0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,

};
static const uint8_t PROGMEM da[] = {
  /*--  文字: 大  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,
  0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06,

};
static const uint8_t PROGMEM biao[] = {
  /*--  文字: 表  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,
  0xFF,0xFE,0x05,0x00,0x08,0x88,0x18,0x50,0x28,0x20,0xC9,0x18,0x0A,0x06,0x0C,0x00,

};
static const uint8_t PROGMEM ge[] = {
  /*--  文字: 哥  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x00,0x00,0x7F,0xFC,0x00,0x10,0x1F,0x90,0x10,0x90,0x10,0x90,0x1F,0x90,0x00,0x00,
  0xFF,0xFE,0x00,0x10,0x1F,0x90,0x10,0x90,0x10,0x90,0x1F,0x90,0x00,0x50,0x00,0x20,

};


void setup(){
  Serial.begin(115200);//串口调试的波特率为115200
   if ( 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 delay
  delay(50);
}
void draw(void) {
u8g.setFont(u8g_font_unifont);//设置在OLED屏幕显示的字体
//u8g.drawStr( 40, 12, "Welcome!");
 u8g.drawBitmapP( 0, 0, 2, 16, xiao);
 u8g.drawBitmapP( 16, 0, 2, 16, yao);
 u8g.drawBitmapP( 32, 0, 2, 16, zi);
 u8g.drawBitmapP( 48, 0, 2, 16, da);
 u8g.drawBitmapP( 64, 0, 2, 16, biao);
 u8g.drawBitmapP( 80, 0, 2, 16, ge);
 u8g.drawBitmapP( 16, 16, 2, 16, tu);
 u8g.drawBitmapP( 32, 16, 2, 16, rang);
 u8g.drawBitmapP( 16, 32, 2, 16, wen);
 u8g.drawBitmapP( 32, 32, 2, 16, du);
 u8g.drawBitmapP( 16, 48, 2, 16, shi);
 u8g.drawBitmapP( 32, 48, 2, 16, du);
 u8g.setPrintPos(48, 45);
    u8g.print(":" );
 u8g.setPrintPos(48, 30);
    u8g.print(":" );
//u8g.drawStr( 20, 30, ":");
u8g.setPrintPos(60,45);
u8g.print(DHT.temperature);//显示温度
u8g.drawStr( 80, 45, "C");
u8g.drawPixel(78,20);

//u8g.drawStr( 20, 50, "humi:");
u8g.setPrintPos(60,60);
u8g.print(DHT.humidity);//显示湿度
u8g.drawStr( 80, 60, "%");
int moistureValue = analogRead(moistureSensorPin); // 读取传感器的模拟值
  // 将模拟值转换为土壤湿度百分比
int moisturePercent = map(moistureValue, 1024, 0, 0, 100);
u8g.setPrintPos(60,30);
u8g.print(moisturePercent);//显示湿度
u8g.drawStr( 80, 30, "%");
u8g.setPrintPos(48, 60);
    u8g.print(":" );

}

代码说明

安装库

需要添加两个库U8glibDFRobot_DHT11

U8glib

DFRobot_DHT11

关于汉字编码

本文中,我用了U8g这个库。是不能直接输出汉字的。而U8g2可以。在后期我会更新代码。因此,我们需要一款字模提取工具。将汉字提模后,以点阵的形式写入代码。

BREAK AWAY

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kali笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备
  • 线路连接
  • 代码
  • 代码说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档