使用ESP8266的ADC采样,测量3.3V基准下100K的NTC热敏电阻测温代码
时间: 2024-11-28 15:26:30 浏览: 26
ESP8266是一种常用的微控制器,常用于物联网应用中,它的模拟输入口ADC可以用来采集电压信号。NTC热敏电阻在温度变化时其阻值会相应变化,通过测量这个电阻的电压降可以推算出温度。
以下是一个简单的示例代码,使用了Arduino IDE编写的ESP8266库,假设ADC通道0连接到NTC电阻上:
```c++
#include <ESP8266WiFi.h>
#include <OneWire.h> // 如果用的是DS18B20温度传感器
#include <Adafruit_Temperature_Sensor.h>
// NTC热敏电阻相关的数据,假设Rref = 100K欧姆
const int ADC_CHANNEL = 0;
const float Rref = 100000.0f; // 100k欧姆
const float Vref = 3.3f; // ESP8266的供电电压
Adafruit_NeoPixel led(1, D4); // LED用于显示温度状态
void setup() {
Serial.begin(9600);
if (pinMode(ADC_CHANNEL, INPUT) == LOW) {
// 配置ADC
adc.begin(ADC_CHANNEL);
}
// 初始化温度传感器或者其他通信模块(如WiFi)
}
void loop() {
// 读取ADC样本
int adcValue = analogRead(ADC_CHANNEL);
// 将ADC值转换为电阻值
float resistance = (float)Vref * Rref / adcValue;
// 根据公式计算温度(这里假设线性关系)
float temperature_Celsius = 1 / (log(resistance / Rref) * (1/Temperature::Constants::BETA));
// 显示温度并处理
led.setColor(cRGB(255 * tempToColor(temperature_Celsius), 0, 0)); // 红色表示高温
Serial.println("Temperature: " + String(temperature_Celsius) + " °C");
// 适当延时防止频繁采样
delay(1000);
}
// 转换温度为颜色指数
int tempToColor(float temp) {
return map(temp, -273.15, 100, 0, 255);
}
阅读全文