一、项目背景

在嵌入式开发与电子小制作中,常需要采集环境温度并直观显示 。结合 Arduino 开发板、DS18B20 温度传感器和 OLED 显示屏,可快速搭建简易温度监测系统,还能添加个性化信息(如学号、姓名 ),适合学生课程实践、电子爱好者入门探索 。

二、硬件准备

  • Arduino 开发板:如 Arduino Nano,作为主控单元协调各模块工作 。
  • DS18B20 温度传感器:单总线数字温度传感器,测温范围广、精度较高,适合环境温度采集 。
  • 0.96 寸 I2C 通信 OLED 显示屏(SSD1306 驱动):用于直观显示温度及个性化信息,I2C 通信方式接线简洁 。
  • 杜邦线:用于连接各硬件模块引脚。

三、硬件连接

(一)DS18B20 接线

  • VCC:接 Arduino 5V 引脚,为传感器供电 。
  • GND:接 Arduino GND 引脚,实现共地 。
  • DQ(数据引脚):接 Arduino 数字引脚 2(代码中可按需修改 ),通过单总线与主控通信 。

(二)OLED 显示屏接线(I2C 模式 )

  • VCC:接 Arduino 3V3 引脚 。
  • GND:接 Arduino GND 引脚 。
  • SCL(时钟线):接 Arduino A5 引脚 。
  • SDA(数据线):接 Arduino A4 引脚 。

四、软件实现(Arduino 代码 )

(一)库依赖安装

打开 Arduino IDE,通过 项目 → 加载库 → 管理库,搜索并安装以下库:

  • OneWire :用于 DS18B20 单总线通信 。
  • DallasTemperature :简化 DS18B20 温度读取逻辑 。
  • Adafruit_GFX :Adafruit 图形库,提供 OLED 显示基础绘图功能 。
  • Adafruit_SSD1306 :针对 SSD1306 驱动 OLED 屏的专用库 。

(二)完整代码

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// DS18B20 数据引脚定义
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// OLED 屏参数定义(0.96 寸 128×64 分辨率 )
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT, &Wire, -1);

// 个性化信息(替换为实际学号、姓名 )
const char* studentID = “你的学号”;
const char* studentName = “你的姓名”;

void setup() {
Serial.begin(9600);
sensors.begin(); // 初始化 DS18B20 传感器

// 初始化 OLED 屏,地址 0x3C(若屏地址不同需修改 )
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F(“OLED 初始化失败!”));
while(1); // 初始化失败则死循环提示
}
display.clearDisplay(); // 清屏
display.setTextSize(1); // 设置字体大小
display.setTextColor(WHITE); // 设置字体颜色为白色
}

void loop() {
sensors.requestTemperatures(); // 触发温度采集
float temperature = sensors.getTempCByIndex(0); // 获取温度值(默认第一个传感器 )

display.clearDisplay(); // 清屏准备刷新内容

// 显示学号
display.setCursor(0, 0);
display.print("ID: ");
display.println(studentID);

// 显示姓名
display.setCursor(0, 10);
display.print("name: ");
display.println(studentName);

// 显示温度
display.setCursor(0, 20);
display.print(“temperature: “);
display.print(temperature);
display.println(” °C”);

display.display(); // 刷新 OLED 屏显示内容
delay(1000); // 延迟 1 秒,周期性采集显示
}

四、图片展示
OLED显示屏内容

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐