恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

ESP32+DS18B20+OLED:从零构建物联网温度显示系统

  • 首页
  • 资讯中心
  • /
  • ESP32+DS18B20+OLED:从零构建物联网温度显示系统

相关资讯

同一人声明公证办理流程是怎样的?从材料准备到出证,零跑腿办理攻略 2026/8/20 22:19:02
Flirt项目部署指南:GitHub与邮件列表双向同步自动化集成 2026/8/20 22:19:02
Java大厂面试核心:JVM、并发编程与系统设计实战 2026/8/20 22:19:02

最新资讯

写论文软件哪个好?书匠策AI让我发现:毕业论文可以“流水线式”生产
AI写论文哪个软件最好?拆解完书匠策AI的毕业论文功能,我发现了“好工具”和“真工具”的区别
详解AUTOSAR:WdgM监督图、容错状态机与复位决策机制(拓展篇—29)
电子设计基础--认识元器件--三极管、MOS管
文献综述还在“复制粘贴拼凑”?书匠策AI把这个体力活变成了“智慧拼图游戏”
英特尔自动驾驶战略解析:从Mobileye收购看芯片巨头的产业卡位

今日推荐

类模板模板参数的全部使用场景
多态的理解,虚函数表的理解
C++ 类编译器自动生成的默认函数 | 拷贝构造函数 vs 拷贝赋值运算符(赋值构造)

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

ESP32+DS18B20+OLED:从零构建物联网温度显示系统

发布时间:2026/8/20 22:24:02
ESP32+DS18B20+OLED:从零构建物联网温度显示系统 1. 项目缘起为什么用ESP32做温度显示如果你手头正好有一块ESP32开发板又恰好有一个温度传感器那么把它们组合起来做一个实时温度显示器几乎是每个嵌入式爱好者都会尝试的“Hello World”项目。这听起来简单但背后涉及的知识点却非常扎实从硬件接口的连接到传感器数据读取再到数据的处理和显示最后是代码的编写与调试。整个过程能让你快速上手ESP32的开发流程理解物联网设备数据采集与呈现的基本逻辑。我最初做这个项目是因为想给家里的鱼缸做一个水温监控。市面上的成品要么太贵要么功能冗余。手头闲置的ESP32 DevKit和DS18B20传感器正好派上用场。这个项目最吸引人的地方在于它麻雀虽小五脏俱全。你不仅能学会如何驱动一个具体的传感器还能掌握如何将数据可视化无论是通过串口打印还是连接OLED/LCD屏幕。这对于后续开发更复杂的项目比如环境监测站、智能恒温箱等是一个绝佳的起点。基于网络上的热门搜索词如“ESP32温湿度”、“Arduino IDE ESP32”、“OLED-LCD”等可以看出大家对这个基础但实用的组合非常感兴趣。本文将围绕“使用ESP32评估板测量并显示温度”这一核心手把手带你从零开始完成硬件连接、软件配置、代码编写到最终实现的完整过程。我会重点分享在实操中容易踩的坑和那些教程里不会写的细节确保你一次成功。2. 硬件选型与连接不只是插上线那么简单工欲善其事必先利其器。在开始写代码之前我们需要把硬件平台搭建好。这个环节看似简单但连接错误或选型不当会导致后续调试困难重重。2.1 核心控制器ESP32开发板详解ESP32本身是一个功能强大的芯片而我们通常使用的是集成了芯片、电源管理、USB转串口等外围电路的“开发板”或“评估板”。市面上常见的ESP32开发板型号繁多如ESP32-DevKitC、NodeMCU-32S、Wemos D1 R32等。对于本项目它们基本都可以胜任核心是找到板载的GPIO引脚。你需要重点关注以下几个引脚3.3V 和 GND为传感器和显示屏提供电源。绝对不要连接到5V引脚否则很可能烧毁设备。GPIO引脚用于数据通信。ESP32的多数GPIO都可用但有些有特殊功能如用于串口烧录的GPIO0、GPIO2。建议选择一些“普通”的引脚例如GPIO4、GPIO5、GPIO16、GPIO17等。EN使能引脚复位或使能芯片通常不需要连接。注意不同型号的开发板其引脚排列可能不同。务必找到你手头开发板的官方引脚定义图这是避免接错线的第一步。例如NodeMCU-32S的引脚标号D1, D2...与ESP32芯片的实际GPIO号GPIO16, GPIO17...有一个映射关系在代码中你需要使用芯片的GPIO号。2.2 温度传感器选型DS18B20 vs DHT11这是关键选择。根据热词“esp32温湿度”很多人会想到DHT11。但这里我强烈推荐使用DS18B20作为入门首选原因如下精度与稳定性DS18B20的典型精度为±0.5°C而DHT11为±2°C。对于温度显示哪怕是1°C的误差观感也很明显。接口简单DS18B20采用单总线1-Wire协议仅需一根数据线外加电源和地线即可通信节省GPIO资源。DHT11也是单总线但其时序要求更严格在ESP32上偶尔会出现读取失败。抗干扰能力DS18B20支持长距离布线且每个传感器有全球唯一的64位ID支持在一根总线上挂载多个传感器扩展性极佳。DHT11则不支持。因此本项目将以DS18B20为例。如果你只有DHT11原理相通但库函数和代码需要调整。DS18B20硬件连接你需要一个4.7kΩ的上拉电阻。连接方式如下DS18B20 VDD 引脚- ESP32 3.3VDS18B20 GND 引脚- ESP32 GNDDS18B20 DQ数据引脚- ESP32 某个GPIO例如 GPIO4在DQ引脚和3.3V之间连接一个4.7kΩ的电阻。这是单总线协议的要求用于在总线空闲时将其拉至高电平。2.3 显示设备选型OLED与LCD如何抉择数据显示部分根据热词“OLED-LCD”我们有两种主流选择I2C接口的OLED屏和并口/SPI/I2C接口的LCD屏。I2C OLED0.96英寸128x64这是我个人最推荐的选择。优点功耗极低显示对比度高自发光接口简单仅需SDA和SCL两根线有大量成熟的图形库如Adafruit_GFX, U8g2支持容易显示中文和图形。缺点尺寸较小。连接OLED的VCC接3.3VGND接GNDSDA接ESP32的GPIO21默认I2C SDASCL接GPIO22默认I2C SCL。务必确认你的OLED屏工作电压是3.3V如果是5V屏接3.3V可能不亮接5V则会损坏ESP32的I2C接口。LCD例如1602, 2004带I2C转接板优点显示面积大内容直观在强光下可视性好。缺点功耗较高通常需要背光。如果使用并口会占用大量GPIO使用I2C转接板则和OLED一样方便但显示效果较为单一难以显示自定义图形。对于本项目一个能清晰显示数字和简单单位如“℃”的OLED屏完全足够且更具科技感。因此后续代码将以I2C OLED为例。最终硬件连接清单ESP32开发板 x1DS18B20温度传感器 x14.7kΩ电阻 x10.96英寸 I2C OLED屏 x1杜邦线母对母若干Micro-USB数据线用于供电和烧录x13. 软件环境搭建避开Arduino IDE的版本陷阱硬件准备就绪后我们需要一个地方编写和上传代码。Arduino IDE因其简单易用成为很多人的首选但围绕它的热词如“arduino ide下载”、“arduino ide 2.0”、“arduino ide打不开一直转”也说明了其坑点不少。3.1 Arduino IDE的安装与ESP32支持包添加首先建议从Arduino官网下载Arduino IDE 2.x版本如2.3.10。新版本编辑器更友好代码提示和串口监视器更好用。如果遇到“打不开一直转”通常是旧版本残留或Java环境问题彻底卸载旧版并重新安装新版一般能解决。安装好IDE后关键一步是添加ESP32的开发板支持。Arduino IDE默认是没有ESP32的。打开Arduino IDE点击“文件” - “首选项”。在“附加开发板管理器网址”中填入以下网址如果已有其他网址用逗号隔开https://espressif.github.io/arduino-esp32/package_esp32_index.json点击“确定”。点击“工具” - “开发板” - “开发板管理器...”。在搜索框中输入“esp32”找到由“Espressif Systems”提供的“ESP32”开发板包点击安装。这个过程需要下载大量文件请保持网络通畅并耐心等待。这是很多新手卡住的地方。3.2 开发板与端口选择安装完成后在“工具” - “开发板”中选择你的ESP32型号例如“ESP32 Dev Module”。如果你不确定选择“ESP32 Dev Module”通常兼容性最好。然后将ESP32通过USB线连接到电脑。在“工具” - “端口”中会多出一个新的串口如COM3, COM4或/dev/ttyUSB0。选择它。注意如果插入ESP32后没有出现新端口可能是缺少USB转串口芯片如CH340, CP2102的驱动。你需要根据开发板上的转换芯片型号去官网下载并安装对应的驱动程序。这是另一个常见坑点。3.3 安装必要的库文件我们需要两个库来驱动DS18B20和OLED屏。安装DS18B20库点击“工具” - “管理库...”搜索“DallasTemperature”选择由“Miles Burton...”开发的版本进行安装。这个库依赖于“OneWire”库通常会自动安装。如果没有请同样搜索并安装“OneWire”库。安装OLED驱动库同样在库管理中搜索“Adafruit SSD1306”并安装。它通常也会提示安装依赖库“Adafruit GFX Library”一并安装。这个库支持多种OLED控制器通用性很强。至此软件环境就搭建好了。比起复杂的ESP-IDFArduino库的方式让我们可以更关注应用逻辑本身。4. 代码实战从读取到显示的完整逻辑环境配好我们就可以开始编写核心代码了。我会逐段解释并说明为什么这么写。4.1 库引入与引脚定义#include Wire.h // I2C通信库ESP32内置 #include Adafruit_GFX.h // 图形库 #include Adafruit_SSD1306.h // OLED驱动库 #include OneWire.h // 单总线协议库 #include DallasTemperature.h // DS18B20驱动库 // 定义OLED屏幕参数128x64像素 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // 如果屏幕有复位引脚则填对应GPIO否则填-1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, Wire, OLED_RESET); // 定义DS18B20数据引脚 #define ONE_WIRE_BUS 4 // 初始化单总线对象和传感器对象 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(oneWire);代码解析首先引入所有必需的库。Wire是ESP32硬件I2C的底层驱动。Adafruit_SSD1306对象display是我们操作屏幕的句柄。参数OLED_RESET设为-1是因为我们使用的通用I2C模块通常没有引出复位引脚或者内部已处理。将DS18B20的数据线连接到GPIO4并创建对应的协议和传感器对象。DallasTemperature库封装了复杂的单总线时序和DS18B20指令让我们用简单的函数就能读取温度。4.2setup()函数初始化一切void setup() { // 初始化串口用于调试输出 Serial.begin(115200); Serial.println(ESP32 Temperature Display Boot...); // 初始化OLED显示屏 if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F(SSD1306 allocation failed)); for(;;); // 如果初始化失败程序停在这里 } Serial.println(OLED Init OK.); // 清屏并设置默认显示属性 display.clearDisplay(); display.setTextSize(2); // 设置字体大小 display.setTextColor(SSD1306_WHITE); // 设置字体颜色白色 display.setCursor(0, 0); // 设置起始光标位置 display.display(); // 将缓冲区内容刷到屏幕上 // 初始化温度传感器 sensors.begin(); Serial.println(DS18B20 Init OK.); // 可选设置传感器分辨率9-12位位数越高精度越高但转换越慢 sensors.setResolution(12); // 设置为12位精度 }代码解析与避坑Serial.begin(115200)是调试的“眼睛”。务必打开串口监视器右上角放大镜图标并将波特率设置为115200才能看到打印信息。display.begin(SSD1306_SWITCHCAPVCC, 0x3C)是初始化OLED。0x3C是大部分I2C OLED屏的默认地址。如果屏幕不亮首先检查这个地址是否正确。你可以使用一个简单的I2C扫描程序来确认地址。sensors.begin()会搜索单总线上的设备。如果串口打印出“DS18B20 Init OK.”但后续读不到数据很可能是硬件连接问题上拉电阻没接或接错、线序错误。setResolution(12)将传感器精度设为最高0.0625°C分辨率。在12位精度下温度转换时间最长约750ms在loop()中读取时需要给予足够延迟。4.3loop()函数核心循环与数据显示void loop() { // 1. 向传感器发送温度转换请求非阻塞式传感器自己进行转换 sensors.requestTemperatures(); // 2. 等待转换完成。12位精度下需要至少750ms这里等待1秒确保完成。 delay(1000); // 3. 从传感器读取温度值 float tempC sensors.getTempCByIndex(0); // 获取总线上第一个索引0传感器的摄氏温度 // 4. 检查读数是否有效 if(tempC ! DEVICE_DISCONNECTED_C) { // 在串口打印温度值用于调试 Serial.print(Temperature: ); Serial.print(tempC); Serial.println( °C); // 在OLED屏幕上显示温度 display.clearDisplay(); // 清空屏幕缓冲区 display.setCursor(0, 0); // 光标回到左上角 display.print(Temp: ); display.print(tempC, 1); // 显示温度保留1位小数 display.println( C); // 如果你想显示华氏温度可以取消下面一行的注释 // display.print(Fah: ); // display.print(DallasTemperature::toFahrenheit(tempC), 1); // display.println( F); display.display(); // 将缓冲区内容更新到屏幕 } else { Serial.println(Error: Could not read temperature data); // 屏幕上也可以显示错误信息 display.clearDisplay(); display.setCursor(0, 0); display.print(Sensor); display.setCursor(0, 20); display.print(Error!); display.display(); } // 5. 间隔一段时间后再次读取例如每5秒一次 delay(4000); // 加上前面的1秒总共约5秒一个循环 }代码解析与核心技巧requestTemperatures()这个函数是“发令枪”它命令传感器开始进行温度转换。这是一个非阻塞操作函数调用后立即返回传感器在后台进行模拟到数字的转换。delay(1000)这是至关重要的一步。在发出转换命令后必须等待足够长的时间让传感器完成转换。对于12位精度的DS18B20官方手册要求至少750ms。如果不等够时间就去读取你会得到一个过时的或者错误的数据。很多读取失败的问题都源于此。getTempCByIndex(0)读取索引为0的传感器温度。如果你在总线上挂了多个DS18B20可以通过getTempCByIndex(1)、(2)等来读取。DEVICE_DISCONNECTED_C是一个错误值通常是-127用于判断读取是否成功。OLED显示优化display.print()是在内存缓冲区中写数据display.display()才是真正刷新到屏幕。因此你可以先在缓冲区组合好所有要显示的内容清屏、设置光标、打印多行文本等最后调用一次display.display()这样可以避免屏幕闪烁。循环间隔整个loop()的周期是delay(1000) delay(4000) 5秒。对于温度显示来说这个更新频率足够了。你可以根据实际需要调整。5. 烧录、调试与功能扩展代码写完后点击Arduino IDE左上角的“上传”按钮向右的箭头。IDE会先编译代码然后通过USB线烧录到ESP32中。观察下方控制台的输出信息。5.1 常见烧录问题排查上传失败提示“Timed out waiting for packet header”或“Failed to connect to ESP32”检查端口确认选择了正确的COM口。手动进入下载模式有些板子需要手动进入烧录模式。在上传前按住开发板上的“BOOT”或“FLASH”按钮不放然后短暂按一下“EN”或“RST”按钮随后松开“BOOT”按钮。这时再点击上传。这是ESP32烧录的经典操作。降低上传波特率在“工具” - “Upload Speed”中尝试降低波特率如改为“921600”或“115200”。编译失败提示找不到头文件检查库是否安装正确。在“项目” - “加载库” - “管理库”中确认DallasTemperature和Adafruit SSD1306已安装。有时需要重启Arduino IDE。5.2 串口监视器调试上传成功后打开串口监视器。你应该能看到“ESP32 Temperature Display Boot...”等初始化信息然后每隔5秒打印一次温度值。如果看不到数据或显示“Error”请按以下步骤排查检查硬件连接断电后用万用表通断档仔细检查每一根杜邦线是否连通VCC、GND、数据线是否接对。重点检查DS18B20的4.7kΩ上拉电阻是否接在DQ和3.3V之间。检查传感器地址修改代码在setup()函数的sensors.begin()后添加Serial.print(Found ); Serial.print(sensors.getDeviceCount(), DEC); Serial.println( devices.);如果打印出“Found 0 devices.”说明总线没有检测到任何DS18B20肯定是硬件连接问题。检查I2C地址如果OLED不亮编写一个I2C扫描程序来确认屏幕地址。你可以在网上找到很多ESP32 I2C扫描的示例代码。5.3 项目功能扩展思路基础功能实现后你可以基于此进行无限扩展添加湿度传感器结合热词“esp32温湿度”可以增加一个DHT22或SHT30传感器同时在OLED上显示温度和湿度。无线传输与远程查看利用ESP32的Wi-Fi功能将温度数据通过MQTT协议发送到服务器如Home Assistant、阿里云物联网平台或者创建一个简单的Web服务器在手机浏览器上就能查看温度。这对应了热词“wifi mqtt 完全笔记 —— esp32”。数据记录与显示使用SPIFFS或SD卡模块将温度数据按时间戳记录下来并可以通过OLED显示历史曲线需要更复杂的图形库支持。添加报警功能当温度超过或低于设定阈值时让ESP32控制一个蜂鸣器响起或点亮一个LED灯。低功耗优化如果你的设备是电池供电可以让ESP32在大部分时间进入深度睡眠Deep Sleep每隔一段时间唤醒、测量、发送数据、再睡眠极大延长续航。这个简单的温度显示项目就像一颗种子包含了物联网应用的根、茎、叶。从硬件的信号采集到软件的数据处理再到最终的信息呈现你走过的每一步都是构建更复杂智能设备不可或缺的经验。动手做一遍遇到的每一个问题并解决它你的理解会比只看十篇教程都要深刻。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号