资料详见:http://www.51hei.com/bbs/dpj-240451-1.html
- /*
- 下面是一个基于Arduino的温湿度监测系统的完整代码,它使用DHT11传感器测量环境温湿度,并通过OLED显示屏(SSD1306驱动,I2C接口)
- 以中文显示这些信息。
- 这个代码需要以下库的支持:
- 1. Adafruit SSD1306库 - 用于控制OLED显示屏
- 2. Adafruit GFX库 - 图形基础库
- 3. DHT传感器库 - 用于读取DHT11传感器数据
- 4,硬件连接方面,DHT11的数据引脚连接到Arduino的数字引脚2,OLED显示屏使用I2C接口连接(SDA接A4,SCL接A5)。
- 5:功能描述:上电显示“温湿度系监测初始化中…………”如检温湿度传感器正常则直接跳到温湿度显示界面,
- 如检测到温湿度传感器异常则一直停留在“传感器读取失败!”界面,直到传感器正常后才跳回到温湿度显示界面。
- */
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- #include <DHT.h>
- // OLED显示屏定义
- #define SCREEN_WIDTH 128
- #define SCREEN_HEIGHT 64
- #define OLED_RESET -1
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
- // DHT11传感器定义
- #define DHTPIN 2
- #define DHTTYPE DHT11
- DHT dht(DHTPIN, DHTTYPE);
- // 中文字符点阵数据(温度、湿度、摄氏度等符号)
- const unsigned char wen[] PROGMEM = {
- 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,
- /*"温"*/
- };
- const unsigned char shi[] PROGMEM = {
- 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,
- /*"湿"*/
- };
- const unsigned char du[] PROGMEM = {
- 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,
- };
- /*"度"*/
- const unsigned char dian[] PROGMEM = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,
- /*":"*/
- };
- const unsigned char mei[] PROGMEM = {
- 0x10,0x00,0x1F,0xFC,0x20,0x00,0x20,0x00,0x5F,0xF0,0x90,0x10,0x12,0x10,0x11,0x10,
- 0xFF,0xFE,0x20,0x10,0x22,0x10,0x21,0x10,0x3F,0xFC,0x00,0x10,0x00,0xA0,0x00,0x40,
- /*"每"*/
- };
- const unsigned char er[] PROGMEM = {
- 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,
- /*"2"*/
- };
- const unsigned char miao[] PROGMEM = {
- 0x08,0x20,0x1C,0x20,0xF0,0x20,0x10,0xA8,0x10,0xA4,0xFC,0xA2,0x11,0x22,0x31,0x20,
- 0x3A,0x24,0x54,0x24,0x54,0x28,0x90,0x08,0x10,0x10,0x10,0x20,0x10,0xC0,0x13,0x00,
- /*"秒",0*/
- };
- const unsigned char zhong[] PROGMEM = {
- 0x10,0x20,0x10,0x20,0x3C,0x20,0x20,0x20,0x41,0xFC,0xBD,0x24,0x11,0x24,0x11,0x24,
- 0xFD,0x24,0x11,0xFC,0x11,0x24,0x10,0x20,0x14,0x20,0x18,0x20,0x10,0x20,0x00,0x20,
- /*"钟"*/
- };
- const unsigned char geng[] PROGMEM = {
- 0x00,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,
- 0x21,0x08,0x21,0x08,0x3F,0xF8,0x11,0x00,0x0A,0x00,0x06,0x00,0x19,0xC0,0xE0,0x3E,
- /*"更"*/
- };
- const unsigned char xin[] PROGMEM = {
- 0x10,0x00,0x08,0x04,0x7F,0x78,0x00,0x40,0x22,0x40,0x14,0x40,0xFF,0x7E,0x08,0x48,
- 0x08,0x48,0x7F,0x48,0x08,0x48,0x2A,0x48,0x49,0x48,0x88,0x88,0x28,0x88,0x11,0x08,
- /*"新"*/
- };
- const unsigned char yi[] PROGMEM = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*"一"*/
- };
- const unsigned char ci[] PROGMEM = {
- 0x00,0x80,0x40,0x80,0x20,0x80,0x20,0xFC,0x01,0x04,0x09,0x08,0x0A,0x40,0x14,0x40,
- 0x10,0x40,0xE0,0xA0,0x20,0xA0,0x21,0x10,0x21,0x10,0x22,0x08,0x24,0x04,0x08,0x02,
- /*"次"*/
- };
- const unsigned char jian[] PROGMEM = {
- 0x04,0x40,0x24,0x40,0x24,0x7C,0x24,0x40,0x24,0x90,0x24,0x88,0x25,0x08,0x04,0x00,
- 0x00,0x00,0x3F,0xF8,0x24,0x48,0x24,0x48,0x24,0x48,0x24,0x48,0xFF,0xFE,0x00,0x00,
- /*"监"*/
- };
- const unsigned char ce[] PROGMEM = {
- 0x00,0x04,0x27,0xC4,0x14,0x44,0x14,0x54,0x85,0x54,0x45,0x54,0x45,0x54,0x15,0x54,
- 0x15,0x54,0x25,0x54,0xE5,0x54,0x21,0x04,0x22,0x84,0x22,0x44,0x24,0x14,0x08,0x08,
- /*"测"*/
- };
- const unsigned char xi[] PROGMEM = {
- 0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
- 0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00,
- /*"系"*/
- };
- const unsigned char tong[] PROGMEM = {
- 0x10,0x40,0x10,0x20,0x20,0x20,0x23,0xFE,0x48,0x40,0xF8,0x88,0x11,0x04,0x23,0xFE,
- 0x40,0x92,0xF8,0x90,0x40,0x90,0x00,0x90,0x19,0x12,0xE1,0x12,0x42,0x0E,0x04,0x00,
- /*"统"*/
- };
- const unsigned char chu[] PROGMEM = {
- 0x20,0x00,0x10,0x00,0x01,0xFC,0xFC,0x44,0x08,0x44,0x10,0x44,0x10,0x44,0x34,0x44,
- 0x58,0x44,0x94,0x44,0x14,0x44,0x10,0x84,0x10,0x84,0x11,0x04,0x12,0x28,0x14,0x10,
- /*"初"*/
- };
- const unsigned char chi[] PROGMEM = {
- 0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x40,0xFC,0x48,0x24,0x84,0x25,0xFE,0x24,0x82,
- 0x24,0x00,0x48,0xFC,0x28,0x84,0x10,0x84,0x28,0x84,0x44,0x84,0x80,0xFC,0x00,0x84,
- /*"始"*/
- };
- const unsigned char hua[] PROGMEM = {
- 0x08,0x80,0x08,0x80,0x08,0x84,0x10,0x88,0x10,0x90,0x30,0xA0,0x30,0xC0,0x50,0x80,
- 0x91,0x80,0x12,0x80,0x14,0x80,0x10,0x82,0x10,0x82,0x10,0x82,0x10,0x7E,0x10,0x00,
- /*"化"*/
- };
- const unsigned char zhong1[] PROGMEM = {
- 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
- 0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
- /*"中"*/
- };
- const unsigned char dian3[] PROGMEM = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*"…"*/
- };
- const unsigned char chuan[] PROGMEM = {
- 0x08,0x40,0x08,0x40,0x08,0x40,0x13,0xF8,0x10,0x40,0x30,0x80,0x37,0xFE,0x50,0x80,
- 0x91,0x00,0x13,0xF8,0x10,0x08,0x11,0x10,0x10,0xA0,0x10,0x40,0x10,0x20,0x10,0x20,
- /*"传"*/
- };
- const unsigned char gan[] PROGMEM = {
- 0x00,0x28,0x00,0x24,0x3F,0xFE,0x20,0x20,0x2F,0xA4,0x20,0x24,0x2F,0xA8,0x28,0x98,
- 0x28,0x92,0x4F,0xAA,0x40,0x46,0x80,0x82,0x01,0x00,0x48,0x84,0x48,0x12,0x87,0xF2,
- /*"感"*/
- };
- const unsigned char qi[] PROGMEM = {
- 0x00,0x00,0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x20,0x01,0x10,0xFF,0xFE,
- 0x02,0x80,0x0C,0x60,0x30,0x18,0xC0,0x06,0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,
- /*"器"*/
- };
- const unsigned char du1[] PROGMEM = {
- 0x00,0x20,0x20,0x20,0x11,0xFC,0x10,0x20,0x00,0x20,0x03,0xFE,0xF0,0x02,0x10,0x94,
- 0x10,0x50,0x11,0x10,0x10,0x90,0x13,0xFE,0x14,0x28,0x18,0x44,0x10,0x82,0x03,0x02,
- /*"读"*/
- };
- const unsigned char qu[] PROGMEM = {
- 0x00,0x00,0xFF,0x80,0x22,0xFC,0x22,0x44,0x3E,0x44,0x22,0x44,0x22,0x44,0x3E,0x44,
- 0x22,0x28,0x22,0x28,0x27,0xA8,0xFA,0x10,0x42,0x10,0x02,0x28,0x02,0x44,0x02,0x82,
- /*"取"*/
- };
- const unsigned char xi1[] PROGMEM = {
- 0x01,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x3F,0xF8,0x21,0x00,0x41,0x00,0x01,0x00,
- 0xFF,0xFE,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06,
- /*"失"*/
- };
- const unsigned char bai[] PROGMEM = {
- 0x00,0x40,0x7C,0x40,0x44,0x40,0x54,0x80,0x54,0xFE,0x55,0x08,0x56,0x88,0x54,0x88,
- 0x54,0x88,0x54,0x50,0x54,0x50,0x10,0x20,0x28,0x50,0x24,0x88,0x45,0x04,0x82,0x02,
- /*"败"*/
- };
- const unsigned char tan1[] PROGMEM = {
- 0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
- 0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
- /*"!"*/
- };
- const unsigned char duc[] PROGMEM = {
- 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,
- /*"℃"*/
- };
- void setup() {
- Serial.begin(9600);
- // 初始化OLED
- if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
- Serial.println(F("SSD1306 display allocation failed"));
- for(;;);
- }
- display.clearDisplay();
- // 初始化DHT传感器
- dht.begin();
- // 显示欢迎信息
- display.drawBitmap(0, 0, wen, 16, 16, SSD1306_WHITE);
- display.drawBitmap(16, 0, shi, 16, 16, SSD1306_WHITE);
- display.drawBitmap(32, 0, du, 16, 16, SSD1306_WHITE);
- display.drawBitmap(46, 0, jian, 16, 16, SSD1306_WHITE);
- display.drawBitmap(62, 0, ce, 16, 16, SSD1306_WHITE);
- display.drawBitmap(78, 0, xi, 16, 16, SSD1306_WHITE);
- display.drawBitmap(94, 0, tong, 16, 16, SSD1306_WHITE);
- display.drawBitmap(110, 0, chu, 16, 16, SSD1306_WHITE);
- display.drawBitmap(0, 17, chi, 16, 16, SSD1306_WHITE);
- display.drawBitmap(16, 17, hua, 16, 16, SSD1306_WHITE);
- display.drawBitmap(32, 17, zhong1, 16, 16, SSD1306_WHITE);
- display.drawBitmap(46, 17, dian3, 16, 16, SSD1306_WHITE);
- display.drawBitmap(63, 17, dian3, 16, 16, SSD1306_WHITE);
- display.display();
- delay(2000);
- }
- void loop() {
- // 等待传感器稳定
- delay(2000);
- // 读取温度和湿度
- float h = dht.readHumidity();
- float t = dht.readTemperature();
- // 检查是否读取成功
- if (isnan(h) || isnan(t))
- {
- Serial.println("Failed to read from DHT sensor!");
- display.clearDisplay();
- display.drawBitmap(0, 0, chuan, 16, 16, SSD1306_WHITE);
- display.drawBitmap(16, 0, gan, 16, 16, SSD1306_WHITE);
- display.drawBitmap(34, 0, qi, 16, 16, SSD1306_WHITE);
- display.drawBitmap(51, 0, du1, 16, 16, SSD1306_WHITE);
- display.drawBitmap(68, 0, qu, 16, 16, SSD1306_WHITE);
- display.drawBitmap(85, 0, xi1, 16, 16, SSD1306_WHITE);
- display.drawBitmap(102, 0, bai, 16, 16, SSD1306_WHITE);
- display.drawBitmap(119, 0, tan1, 16, 16, SSD1306_WHITE);
- display.display();
- return;
- }
- // 显示温湿度信息
- display.clearDisplay();
- // 显示温度
- display.drawBitmap(0, 0, wen, 16, 16, SSD1306_WHITE);
- display.setTextSize(2);
- display.drawBitmap(17, 0, du, 16, 16, SSD1306_WHITE);
- display.setTextSize(2);
- display.drawBitmap(34, 0, dian, 8, 16, SSD1306_WHITE);
- display.setTextSize(2);
- display.drawBitmap(114, 0, duc, 16, 16, SSD1306_WHITE);
- display.setTextColor(SSD1306_WHITE);
- display.setCursor(48, 0);
- display.print(t);
- /**display.setTextSize(2);
- display.setCursor(112, 0);
- display.print("C");
- */
- // 显示湿度
- display.drawBitmap(0, 24, shi, 16, 16, SSD1306_WHITE);
- display.setTextSize(2);
- display.drawBitmap(17, 24, du, 16, 16, SSD1306_WHITE);
- display.setTextSize(2);
- display.drawBitmap(34, 24, dian, 8, 16, SSD1306_WHITE);
- display.setTextSize(2);
- display.setTextColor(SSD1306_WHITE);
- display.setCursor(48, 25);
- display.print(h);
- display.setTextSize(2);
- display.setCursor(116, 25);
- display.print("%");
-
- // 显示更新时间提示
- display.drawBitmap(0, 46, mei, 16, 16, SSD1306_WHITE);
- display.drawBitmap(17, 46, er, 8, 16, SSD1306_WHITE);
- display.drawBitmap(26, 46, miao, 16, 16, SSD1306_WHITE);
- display.drawBitmap(43, 46, zhong, 16, 16, SSD1306_WHITE);
- display.drawBitmap(60, 46, geng, 16, 16, SSD1306_WHITE);
- display.drawBitmap(77, 46, xin, 16, 16, SSD1306_WHITE);
- display.drawBitmap(96, 46, yi, 16, 16, SSD1306_WHITE);
- display.drawBitmap(113, 46, ci, 16, 16, SSD1306_WHITE);
- display.display();
- }
复制代码
|