目录
1.安装配置库
首先需要安装配置库文件,显示屏一共需要配置两个库,温湿度计一共需要配置1个库。
还有两个SPI和Wire库这个是arduino IDE自带的硬件层面的库,不需要配置,安装arduino IDE之后就自动配置好了,不需要额外的配置。
接下来我们安装Adafruit_SSD1306库。
跑到arduino库管理器,搜索SSD1306,安装搜到的第二个库,如下图:
安装完成后就可以了。
然后配置Adafruit_GFX库,如下图(这个可以在github下载):
2.汉字取模
用PCtoLCD2002这个取模工具,如下图:
找到文字模式,如下图:
取模汉字时配置如下:
3.代码
这个代码可以显示温湿度,可以用电位器调节温度报警阈值,当实际温度小于报警阈值,则蜂鸣器报警,代码如下:
//包含库文件
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define OLED_RESET 4
#define beep 3
//新建显示屏对象
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
//新建dht对象
DHT dht(2, DHT11);
//汉字取模
//温
static const unsigned char PROGMEM wen[]= {
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 unsigned char PROGMEM du[]= {
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 unsigned char PROGMEM shi[]= {
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 unsigned char PROGMEM C[]= {
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
};
//报警阈值
int baojing=0;
void setup()
{
//初始化温湿度传感器
dht.begin();
//初始化显示屏
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//初始化串口
Serial.begin(9600);
//清屏
display.clearDisplay();
//设置字体大小
display.setTextSize(2);
display.setTextColor(INVERSE);
//初始化蜂鸣器控制IO口
pinMode(beep,OUTPUT);
digitalWrite(beep,LOW);
}
void loop()
{
float h=2.0;
float t=3.0;
//采集报警阈值
baojing=map(analogRead(A0),0,1023,-40,60);
//读取温度
h = dht.readHumidity();
//读取湿度
t = dht.readTemperature();
//检查是否读取温湿度成功
if (isnan(h) || isnan(t) ) {
Serial.println(F("Failed to read from DHT sensor!"));
//return;
}
display.clearDisplay();//清屏
Serial.println("End");
display.setTextColor(WHITE);//开像素点发光
display.clearDisplay();//清屏
//显示汉字“温度”
display.drawBitmap(0, 0, wen, 16, 16, 1); //画出字符对应点阵数据
display.drawBitmap(16, 0, du, 16, 16, 1);
//在32,4坐标处显示冒号
display.setCursor(32,4);
display.print(":");
//在42,2坐标处显示温度
display.setCursor(42,2);
display.print(t);
//显示℃符号
display.drawBitmap(106,2,C,16,16,1);//x坐标0,y坐标0,宽度,高度,编码word1
//显示汉字“湿度”
display.drawBitmap(0, 18, shi, 16, 16, 1); //画出字符对应点阵数据
display.drawBitmap(16, 18, du, 16, 16, 1); //画出字符对应点阵数据
display.setCursor(32,19);
display.print(":");
display.setCursor(42,20);
display.print(int(h));
display.setCursor(72,20);
display.print("%");
//显示报警阈值
display.setCursor(0,40);
display.print("Tem:"); // write something to the internal memory
display.setCursor(46,40);
display.print(baojing); // write something to the internal memory
display.drawBitmap(80,40,C,16,16,1);//x坐标0,y坐标0,宽度,高度,编码word1
Serial.println("hello world");
display.display();
//如果温度小于报警阈值,则蜂鸣器报警
if(int(t)<baojing)
{
digitalWrite(beep,HIGH);
Serial.println("beep high");
}
else
{
digitalWrite(beep,LOW);
Serial.println("beep low");
}
delay(1000);
}
显示效果如下: