『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 221|回复: 5

[求助] 用两线太阳能NTC温度传感器接ESP32开发板连ESPHOME温度测量.

[复制链接]

1

主题

1

帖子

22

积分

新手上路

Rank: 1

积分
22
金钱
21
HASS币
0
发表于 2024-11-4 20:12:33 | 显示全部楼层 |阅读模式
本帖最后由 wd1981 于 2024-11-4 20:14 编辑

用的是ESPHOME官方NTC传感器示例修改的,修改烧录后所测温度始终为一个固定值(而且也远远不对),所用代码如下:sensor:  
# 配置 NTC 传感器的温度读取
  - platform: ntc
    sensor: resistance_sensor
    calibration:
      b_constant: 3950
      reference_temperature: 25°C
      reference_resistance: 10kOhm
    name: "NTC Temperature"

  # 配置电阻传感器
  - platform: resistance
    id: resistance_sensor
    sensor: source_sensor
    configuration: DOWNSTREAM
    resistor: 10kOhm
    name: "Resistance Sensor"

  # 配置ADC传感器
  - platform: adc
    id: source_sensor
    pin: 34  # ADC 引脚
    update_interval: 10s  # 设定更新频率

# 配置 GPIO 开关,用于控制 NTC 供电
switch:
  - platform: gpio
    pin: GPIO15  # 使用 GPIO 15 供电
    id: ntc_vcc

# 配置定时器以周期性测量温度
interval:
  - interval: 20s
    then:
      - switch.turn_on: ntc_vcc  # 打开 GPIO 供电
      - component.update: source_sensor  # 读取 ADC 值
      - switch.turn_off: ntc_vcc  # 关闭 GPIO 供电

同样的接线,使用ARDUINO进行编程,却可以获取温度,代码如下:
include <Arduino.h>

// 定义热敏电阻参数
const float R_NOMINAL = 10000.0; // 标称阻值(欧姆)
const float B_VALUE = 3950.0;    // B常数
const float T_NOMINAL = 25.0 + 273.15; // 标称温度(开尔文)
const float SERIES_RESISTANCE = 10000.0; // 串联电阻(欧姆)

// 定义ADC引脚
const int ADC_PIN = 34;

void setup() {
  Serial.begin(115200);
  pinMode(ADC_PIN, INPUT);
}

void loop() {
  // 读取ADC值
  int adcValue = analogRead(ADC_PIN);

  // 计算电压
  float voltage = (adcValue / 4095.0) * 3.3;

  // 计算阻值
  float resistance = (voltage * SERIES_RESISTANCE) / (3.3 - voltage);

  // 计算温度(摄氏度)
  float temperature = 1 / ((log(resistance / R_NOMINAL) / B_VALUE) + (1 / T_NOMINAL)) - 273.15;

  // 输出结果
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" °C, Voltage: ");
  Serial.print(voltage);
  Serial.print(" V, Resistance: ");
  Serial.print(resistance);
  Serial.println(" ohms");

  // 等待1秒
  delay(1000);
}


请问为什么ESPHOME里的温度获取不正确?ESPHOME里想实现ARDUINO中温度读取的值应该怎么进行代码修改?




回复

使用道具 举报

10

主题

1328

帖子

4238

积分

论坛元老

Rank: 8Rank: 8

积分
4238
金钱
2910
HASS币
0
发表于 2024-11-4 21:32:03 | 显示全部楼层
我也没搞定,后来放弃了,坐等大佬解答,
回复

使用道具 举报

55

主题

299

帖子

5045

积分

元老级技术达人

积分
5045
金钱
4736
HASS币
80
发表于 2024-11-5 01:17:31 来自手机 | 显示全部楼层
既然设置了周期性供电引脚,就不要给adc配置周期更新,二选一
回复

使用道具 举报

5

主题

97

帖子

1939

积分

论坛DIY达人

积分
1939
金钱
1842
HASS币
0
发表于 2024-11-5 09:18:32 | 显示全部楼层
好像是esp32开发板和esp32核心的ADC引脚对应的采样电压不一样导致的。
回复

使用道具 举报

5

主题

97

帖子

1939

积分

论坛DIY达人

积分
1939
金钱
1842
HASS币
0
发表于 2024-11-5 09:18:43 | 显示全部楼层
本帖最后由 kittyme 于 2024-11-5 11:45 编辑

0
回复

使用道具 举报

16

主题

178

帖子

924

积分

高级会员

Rank: 4

积分
924
金钱
746
HASS币
0
发表于 2024-11-7 19:42:30 | 显示全部楼层
我原来也不行,后来google一下代码,实装可用,但测量出来温度总是±0.3℃,你参考一下
sensor: 
  - platform: ntc
    sensor: resistance_sensor
    calibration:
      b_constant: 3950
      reference_temperature: 25°C
      reference_resistance: 10kOhm
    name: NTC Temperature B Constant

  - platform: resistance
    id: resistance_sensor
    sensor: source_sensor
    configuration: DOWNSTREAM
    resistor: 10kOhm
    name: Resistance Sensor

  - platform: adc
    id: source_sensor
    pin: 
      number: GPIO06
      mode:
        input: true
        pullup: true
    attenuation: auto

interval:
  - interval: 10s
    then:
      - switch.turn_on: ntc_vcc
      - component.update: source_sensor
      - switch.turn_off: ntc_vcc

switch:
  - platform: gpio
    pin: 
      number: GPIO15
      mode: 
        output: true 
    id: ntc_vcc


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-21 23:29 , Processed in 0.281117 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表