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

admin 2024年4月28日09:56:00评论3 views字数 5828阅读19分25秒阅读模式

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

首先,来看看实际的效果怎样吧!Arduino 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的接口。在多设备时,建议串联电路。Arduino OLED显示温湿度及土壤湿度

代码

#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   --*/
  0x000x000x230xF80x120x080x120x080x830xF80x420x080x420x080x130xF8,
  0x100x000x270xFC0xE40xA40x240xA40x240xA40x240xA40x2F0xFE0x000x00,
};
 
static const uint8_t PROGMEM shi[] = {
  /*--  文字:  湿  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x000x000x270xF80x140x080x140x080x870xF80x440x080x440x080x170xF8,
  0x110x200x210x200xE90x240x250x280x230x300x210x200x2F0xFE0x000x00,
};
 
static const uint8_t PROGMEM du[] = {
  /*--  文字:  度  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x010x000x000x800x3F0xFE0x220x200x220x200x3F0xFC0x220x200x220x20,
  0x230xE00x200x000x2F0xF00x240x100x420x200x410xC00x860x300x380x0E,
};
 
static const uint8_t PROGMEM ssd[] = {
  /*--  文字:  ℃  --*/
  /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  0x600x000x910xF40x960x0C0x6C0x040x080x040x180x000x180x000x180x00,
  0x180x000x180x000x180x000x080x000x0C0x040x060x080x010xF00x000x00,
};
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( 00216, xiao);
 u8g.drawBitmapP( 160216, yao);
 u8g.drawBitmapP( 320216, zi);
 u8g.drawBitmapP( 480216, da);
 u8g.drawBitmapP( 640216, biao);
 u8g.drawBitmapP( 800216, ge);
 u8g.drawBitmapP( 1616216, tu);
 u8g.drawBitmapP( 3216216, rang);
 u8g.drawBitmapP( 1632216, wen);
 u8g.drawBitmapP( 3232216, du);
 u8g.drawBitmapP( 1648216, shi);
 u8g.drawBitmapP( 3248216, du);
 u8g.setPrintPos(4845);
    u8g.print(":" );
 u8g.setPrintPos(4830);
    u8g.print(":" );
//u8g.drawStr( 20, 30, ":");
u8g.setPrintPos(60,45);
u8g.print(DHT.temperature);//显示温度
u8g.drawStr( 8045"C");
u8g.drawPixel(78,20);

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

}

代码说明

安装库

需要添加两个库U8glibDFRobot_DHT11

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

关于汉字编码

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

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

原文始发于微信公众号(kali笔记):Arduino OLED显示温湿度及土壤湿度

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月28日09:56:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Arduino OLED显示温湿度及土壤湿度https://cn-sec.com/archives/2693807.html

发表评论

匿名网友 填写信息