在SSD1306屏幕上展示温湿度和光线强度使用ESP8266驱动

162 阅读2分钟

前言

相信很多小伙伴和我一样初学,有很多模块看了网课之后实际应用有很多问题发现跟着网课做都能实现,到了自己想要去做功能的时候发现并没有想象中的得心应手

我最近正在尝试用各种模块来实现我的自动化小菜园,目前呢进展还算顺利,今天成功将几个模块合并起来并成功运行了,每个步骤我都有添加注释各位可以自行添加和删减尝试

硬件 开发板我使用的是ESP8266 温湿度模块是DH11 光敏模块就是常见的模块只接了AO口,因为我需要模拟信号后面增加菜园的补光策略

2da76a315f6c5b5f8e14db8019c3db4.jpg

#include <Wire.h> // 引用I2C总线库
#include <Adafruit_GFX.h> // 引用OLED屏幕绘图库
#include <Adafruit_SSD1306.h> // 引用OLED屏幕驱动库
#include <DHT.h> // 引用DHT11温湿度传感器库

#define OLED_ADDR 0x3C // 定义OLED屏幕的I2C地址
#define OLED_WIDTH 128 // 定义OLED屏幕的宽度
#define OLED_HEIGHT 64 // 定义OLED屏幕的高度

#define SCL D1 // 定义SCL引脚(时钟线)的引脚号
#define SDA D2 // 定义SDA引脚(数据线)的引脚号
#define LIGHT_PIN A0 // 定义光敏模块的引脚号

#define DHT_PIN D3 // 定义DHT11传感器的引脚号
#define DHT_TYPE DHT11 // 定义DHT11传感器的型号

Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT, &Wire, OLED_ADDR); // 创建OLED屏幕对象
DHT dht(DHT_PIN, DHT_TYPE); // 创建DHT11传感器对象

void setup() {
  pinMode(SCL, OUTPUT); // 设置SCL引脚(时钟线)为输出模式
  pinMode(SDA, OUTPUT); // 设置SDA引脚(数据线)为输出模式
  
  // 初始化I2C总线
  Wire.begin(SDA, SCL);
  
  // 初始化OLED屏幕
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR); // 初始化OLED屏幕,设置电源和I2C地址
  display.clearDisplay(); // 清除屏幕上的内容
  display.setTextColor(WHITE); // 设置文本颜色为白色
  
  // 初始化DHT11温湿度传感器
  dht.begin();
}

void loop() {
  int lightValue = analogRead(LIGHT_PIN); // 读取光敏模块数据
  float temperature = dht.readTemperature(); // 读取温度值
  float humidity = dht.readHumidity(); // 读取湿度值
  
  showValue(lightValue, temperature, humidity); // 展示数值
  delay(1000); // 延迟3秒
}

void showValue(int light, float temp, float humi) {
  display.clearDisplay(); // 清除屏幕上的内容
  display.setTextSize(2); // 设置文本大小为2倍
  display.setCursor(0, 0); // 设置文本光标的位置
  display.print("Light: "); // 显示"Light: "文本
  display.println(light); // 显示光敏模块的数值
  display.print("Temp: "); // 显示"Temp: "文本
  display.print(temp); // 显示温度值
  display.println("C"); // 显示单位"C"
  display.print("Humi: "); // 显示"Humi: "文本
  display.print(humi); // 显示湿度值
  display.println("%"); // 显示单位"%"
  display.display(); // 刷新屏幕,将显示内容更新到OLED屏幕上
}