标签:# <标签:0 x00007fc40dd6f438 >

我有一个ESP-32 Wi-Fi模块- Lolin32和一个Benetech GM8904 UART风速表
风速表使用说明的完整版本在这里
我把4根电线从风速表连接到控制器。

изображение

我将黑线连接到GND,绿色RX连接到GPIO3,白色TX连接到GPIO1,红色电源连接到5V

изображениеизображениеизображение

изображениеизображение

代码Yaml在EspHome

esphome: name: anemometer platform: ESP32 board: lolin32 includes: - windsonic.h captive_portal: wifi: ssid: **** password: ********* ap: ssid: "${device_name}" password: "*******" logger: baud_rate: 0 # hardware_uart: UART1 api: password: !secret wifi_api reboot_timeout: 0s ota: password: !GPIO3 baud_rate: 19200传感器:-平台:自定义lambda: |-自动my_windsonic =新的Windsonic(id(wind));App.register_component (my_windsonic);返回{my_windsonic - > winddirection_sensor my_windsonic - > windspeed_sensor};传感器:name:“风向”unit_of_measurement:“gr”# accuracy_decimal: 3图标:mdi:罗盘-玫瑰- name:“风速”unit_of_measurement:“ms”accuracy_decimal: 3图标:mdi:weather-windy

winsonic .h文件中的代码(在\config\esphome目录中)

#include "esphome.h" #include " Sensor .h" class Windsonic: public PollingComponent, public UARTDevice {public: Windsonic(UARTComponent *parent): PollingComponent(1000), UARTDevice(parent) {} Sensor *winddirection_sensor = new Sensor();Sensor *windspeed_sensor = new Sensor();void setup() override {// nothing to do here} void update() override{//使用Arduino API读取数据,例如String line = readStringUntil('\n');字符串r = line。substring (7, 10);String s = line。substring(13、19);浮风向= r.toFloat();浮动风速= s.toFloat();winddirection_sensor - > publish_state (winddirection); windspeed_sensor->publish_state(windspeed); winddirection = 0; windspeed = 0; r = ""; s = ""; } };

我的日志:

INFO Reading configuration /config/esphome/Anemometr.yaml…INFO从风速表开始日志输出。本地使用esphome API信息连接到风速表。local:6053 (192.168.1.3) INFO Successfully connected to风速表成功连接。[11:21:38][C][wifi:303]: SSID: [redacted] [11:21:38][C][wifi:304]: IP Address: 192.168.1.3 [11:21:38][C][wifi:306]: BSSID: [redacted] [11:21:38][C][wifi:307]: Hostname: ' anemmeter ' [11:21:38][C][wifi:311]: Signal strength:[C][wifi:318]:网关:192.168.1.2 [11:21:38][C][wifi:318]: DNS1: 192.168.1.2 [11:21:38][C][wifi:318]: DNS2: 0.0.0.0 [11:21:39][E][uart_esp32:147]: Reading from UART timed out at byte 0!传感器:[11:21:39][D][092]:“风向”:发送状态0.00000 gr 0小数精度[11:21:39][D][传感器:092]:“风速”:发送状态0.00000女士3小数精度[11:21:39][C] [uart_esp32:088]: UART总线:[11:21:39][C] [uart_esp32:090]: TX销:GPIO1 [11:21:39] [C] [uart_esp32:093]: RX销:GPIO3 [11:21:39][C][uart_esp32:096]: RX Buffer Size: 256 [11:21:39][C][uart_esp32:096]: Baud Rate: 19200 Baud [11:21:39][C][uart_esp32:097]: Data Bits: 8 [11:21:39][C][uart_esp32:097]: Parity: NONE [11:21:39][C][uart_esp32:097]: Stop Bits: 1

怎么了?
为什么数据不是来自UART?

这里描述了一个非常相似的情况帖子.最后的解决方案是使用UART1。
我读过有关它的书,尝试过各种方法。
将uart1添加到yaml记录器代码
GPIO 1.3改为16.17…
我发现UART1需要使用GPIO10和GPIO11的信息,但是我找不到它们在ESP板上的位置。
也许你需要用一个电阻器?

我在这方面还太缺乏经验,请帮助。

rx和tx前后颠倒。一个设备的接收器就是另一个设备的发射机。