求教大佬
开发环境:斐讯T1+冬瓜HAOS , ESP-32S+SHT30温湿度传感器
设备数据采集正常但是在ESPHome界面中只有一个参数
后台日志
ESPHome截图
yaml代码如下:
esphome:
name: th
friendly_name: "大棚温湿度传感器"
on_loop:
then:
- lambda: |-
while (id(uart_bus).available()) {
uint8_t c;
if (id(uart_bus).read_byte(&c)) {
// 1. 存入缓冲区,限制长度防溢出
if (id(rx_buffer).length() < 128) {
id(rx_buffer) += (char)c;
}
// 2. 仅识别 \n 作为结束符,过滤 \r 干扰
if (c == '\n') {
// 移除缓冲区中所有 \r 字符
id(rx_buffer).erase(std::remove(id(rx_buffer).begin(), id(rx_buffer).end(), '\r'), id(rx_buffer).end());
if (id(rx_buffer).length() > 0) {
float h_val, t_val;
bool parse_ok = false;
// 匹配 SHT30 输出格式 R:020.8RH 026.3C
if (sscanf(id(rx_buffer).c_str(), "R:%fRH %fC", &h_val, &t_val) == 2) {
parse_ok = true;
} else if (sscanf(id(rx_buffer).c_str(), "%fRH %fC", &h_val, &t_val) == 2) {
parse_ok = true;
}
// 解析成功才同时推送温湿度数据
if (parse_ok) {
id(sensor_humidity).publish_state(h_val);
id(sensor_temperature).publish_state(t_val);
ESP_LOGD("sensor_data", "湿度: %.1f%% | 温度: %.1f°C", h_val, t_val);
} else {
ESP_LOGW("parse_error", "数据格式不匹配: %s", id(rx_buffer).c_str());
}
// 清空缓冲区准备下一次接收
id(rx_buffer).clear();
}
}
}
}
# ESP32 硬件平台配置(必须存在)
esp32:
board: esp32dev
framework:
type: arduino
# 全局变量:串口接收缓冲区
globals:
- id: rx_buffer
type: std::string
initial_value: '""'
# WiFi 配置 - 替换为你的实际 WiFi 信息
wifi:
ssid: "Xiaomi_65D4"
password: "Xiaomi_65D4"
ap:
ssid: "TH-Fallback-AP"
password: "12345678"
# API:ESPHome 与 Home Assistant 通信核心
api:
# OTA 无线更新
ota:
- platform: esphome
# 日志配置:调试用,查看数据解析情况
logger:
level: DEBUG
baud_rate: 115200
hardware_uart: UART0 # 避免和业务 UART 冲突
# UART 配置:匹配 SHT30 串口参数
uart:
id: uart_bus
tx_pin: GPIO22 # ESP32 TX → SHT30 RX
rx_pin: GPIO21 # ESP32 RX → SHT30 TX
baud_rate: 9600
data_bits: 8
stop_bits: 1
parity: NONE
# Web 服务:浏览器直接查看数据
web_server:
port: 80
# ========== 关键修改:禁用实体自动过滤 ==========
sensor:
# 湿度传感器
- platform: template
name: "大棚湿度_001" # 加后缀避免重名
id: sensor_humidity_001
unit_of_measurement: "%"
accuracy_decimals: 1
device_class: humidity
state_class: measurement
entity_category: diagnostic
disabled_by_default: false
# 温度传感器
- platform: template
name: "大棚温度_001" # 加后缀避免重名
id: sensor_temperature_001
unit_of_measurement: "°C"
accuracy_decimals: 1
device_class: temperature
state_class: measurement
entity_category: diagnostic
disabled_by_default: false
第一次搞,没什么经验,还望各位前辈不吝赐教!!! |