Firebeetle 2 C5做PT100温度计:宽范围测温

2026-11-07 09:34:03 25阅读

继续使用Firebeetle 2 ESP32 C5来制作一个宽范围的温度计。

硬件

PT100温度探头:这是一种铂电阻温度传感器(RTD):利用铂的电阻随温度近似线性变化来测温。0°C 时电阻为 100Ω,每升高 1°C 电阻增加约 0.385Ω。C5 内置 ADC 是 12 位 ADC,直接用ESP32 C5的ADC来读取这个温度探头,误差太大了,不合适。所以这里增加一个MAX31865芯片模块:DI&MIKRO MIKROE-2815。

MAX31865模块与PT100接线

连线

使用杜邦线,将模块进行连接。OLED屏幕走I2C总线,MAX31865走SPI总线。PT100的三根线:红:R+;红:F+;蓝:F- 。

Firebeetle 2 ESP32 C5DI&MIKRO MIKROE-2815OLED
9I2C_SDA
10I2C_SCL
2SPI_CS
23SPI_SCK
24SPI_MOSI
25SPI_MISO

接线表与模块特写

系统实现

编程依然使用ArduinoIDE。首先添加MAX31865的库,这样就不用再从底层实现MAX31865的读取了。

OLED屏幕显示温度读数

参考着官方的例程,使用SPI初始化MAX31865,然后在主循环里,读取当前温度信息,在OLED屏幕上显示即可。

#include "Wire.h"
#include "U8g2lib.h"
#include "Adafruit_MAX31865.h"

// FireBeetle 2 ESP32-C5 硬件 I2C 引脚(OLED)
#define SDA_PIN 9
#define SCL_PIN 10

// MIKROE-2815 (MAX31865) SPI 引脚
#define CS_PIN    2
#define MOSI_PIN  24
#define MISO_PIN  25
#define SCK_PIN   23

// MIKROE-2815 板载参考电阻与实际测得的 RREF 值
#define RREF      470
#define RNOMINAL  100.0

// SSD1306 128x64,硬件 I2C,全缓冲模式,不使用复位引脚
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, SCL_PIN, SDA_PIN);

// 软件 SPI 方式(CS, MOSI, MISO, SCK)
Adafruit_MAX31865 max31865(CS_PIN, MOSI_PIN, MISO_PIN, SCK_PIN);

void setup() {
  // 初始化 OLED(0x7A 为跳线调整后的 I2C 写入地址)
  u8g2.setI2CAddress(0x7A);
  Wire.begin(SDA_PIN, SCL_PIN);
  u8g2.begin();

  // 三线制 PT100;若为两线制改为 MAX31865_2WIRE
  max31865.begin(MAX31865_3WIRE);
  max31865.enable50Hz(true); // 50Hz 滤波
}

void loop() {
  uint16_t raw = max31865.readRTD();
  float temp = max31865.calculateTemperature(raw, RNOMINAL, RREF);

  char num[16];
  sprintf(num, "%.1f", temp);

  u8g2.clearBuffer();

  // 大号数字
  u8g2.setFont(u8g2_font_inb24_mf);
  int wnum = u8g2.getStrWidth(num);
  int xnum = (128 - wnum) / 2;
  u8g2.drawStr(xnum, 42, num);

  // 数字后接“度”字
  u8g2.setFont(u8g2_font_unifont_t_chinese3);
  u8g2.drawUTF8(xnum + wnum + 4, 42, "度");

  u8g2.sendBuffer();
  delay(500);
}

这里需要注意一下“RREF”这个常量的值。例程中给的是430,对应为DI&MIKRO MIKROE-2815模块上的电阻值。可以使用万用表去测量一下对应的电阻,我这个模块,可以看见丝印标识着470Ω。所以这个常量就填写为470。如果填写的不对,测量出来的温度就会有偏差。

低温冰水混合物测试

效果展示
办公室的室温

沸水100度校准测试

从水房接满一杯热水。嗯,感觉这个热水不够烫啊!

宽范围测温实测数据


作者:aramy
链接:https://www.aiddithome.com/p/167b9f15373649.html
本作遵循 [CC BY 4.0 署名] 许可,版权归作者所有。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
4条评论
拆开看看再说
1楼 · 15小时前

MAX31865走SPI是正解,C5的ADC直读PT100误差确实没法看

刷着刷着入坑了
2楼 · 15小时前

红R+红F+蓝F-的三线接法写清楚了,省得翻手册

入门没多久的新手
3楼 · 15小时前

冰水混合物加沸水两点校准,思路朴素但管用

线比代码多
4楼 · 15小时前

期待看宽范围实测数据,高低温段线性如何