資料詳見:http://m.izizhuan.cn/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();
- }
復制代碼
|