我试图让custom_component在ESPHome上工作,
我将尝试获得一个仪器,通过rs232 ttl适配器在NMEA 0183(它不是GPS)发送数据到uart上的esp32。

我有点卡住了,我刚来这个平台。

到目前为止,我做了以下工作:
从我的YAML文件:

uart: id: wind tx_pin: GPIO1 rx_pin: GPIO3 baud_rate: 19200 custom_component: - lambda: |- auto Windsonic = new Windsonic(id(wind));返回{Windsonic - > retning Windsonic - > hastighet};

从我的Windsonic.h文件中

#include "esphome.h" class Windsonic: public Component, public UARTDevice {public: Windsonic(UARTComponent *parent): UARTDevice(parent) {} float rening = 0;hastight = 0;void setup() override {// nothing to do here} void loop() override{//使用Arduino API读取数据,例如String line = readStringUntil('\n');retning = parse_float(线。substring(8、10));hastighet = parse_float(线。substring(15、19));} // etc // void update() override {// rening ->publish_state(rening);/ / hastighet - > publish_state (hastighet);/ /}};

从我的编译日志:

src / main.cpp: 113:3:警告:多行注释[-Wcomment] / /λ:!λ”汽车Windsonic = new Windsonic (id(风));\ nreturn {Windsonic - > retning,文件包括从src / main.cpp \ ^: 14:0: src / windsonic.h:在成员函数的虚拟空Windsonic::循环():src / windsonic.h: 15:41:错误:const String &{又名const std::__cxx11::basic_string&}类型的引用的无效初始化。substring(8、10));^在文件包括从src / esphome /核心/ application.h:译者注,从src / esphome /组件/ api / api_connection.h: 4,从src / esphome.h: 2,从src / main.cpp: 3: src / esphome /核心/ helpers.h: 44:17:注意:通过参数1的“esphome::可选<飘> esphome:: parse_float(常量字符串)的可选<飘> parse_float (const std:: string str);^在src/main.cpp:14:0: src/windsonic.h:16:40: error: const String & {aka const std::__cxx11::basic_string&}类型的引用初始化无效substring(15、19));^在文件包括从src / esphome /核心/ application.h:译者注,从src / esphome /组件/ api / api_connection.h: 4,从src / esphome.h: 2,从src / main.cpp: 3: src / esphome /核心/ helpers.h: 44:17:注意:通过参数1的“esphome::可选<飘> esphome:: parse_float(常量字符串)的可选<飘> parse_float (const std:: string str);^ src/main.cpp:在lambda函数中:src/main.cpp:121:28: error: expected type-specifier before 'Windsonic' auto Windsonic = new Windsonic(wind);^ src/main.cpp:122:55: error: could not convert '{}' from '<括起来的初始化列表>' to 'std::vector' return {Windsonic->retning, Windsonic->hastighet};^ * * *[/数据/ vind / .pioenvs vind / src / main.cpp。o]错误1

我需要有人指点我如何把这件事办好。

你需要正确发布你的代码。请看这里(第11点,但请阅读整篇文章):

嗨。我也在寻找这个问题的相同解。你有什么想法吗?谢谢

我还没有找到解决这个问题的办法,我正在努力学习更多关于ESPHOme平台和如何设置它阅读NMEA句子,并拿出2个变量,并将它们返回到Home助手。19463331伟德国际

我有硬件部分的分类。我之前做过另一个基于Python、RPI和SQL服务器的系统。

1像

到目前为止,我的ESPHome出现在集成中,但没有变量。源自英国始于1946应该是2。在ESPHome日志中,数据和变量正确显示。

如何正确连接ESPHome到集成?源自英国始于1946
它是定制的传感器。

你创造了另一个系统,这是个好消息。

我浏览这个论坛,但解决方案总是参考这个链接.我试图阅读和理解它,但这需要时间,因为我没有坚实的编程技能。

除了这个链接,我找不到任何一步一步的教程如何做到这一点。以前没人这么做过吗?为什么我找不到任何文件。www.19463331.com

我使用的是只有1个串行的Wemos D1 mini,它连接在GPIO1和GPIO3上。每次我接通Wemos D1,而串口连接到我的arduino, Home Assistant服务器没有检测到Wemos D1。19463331伟德国际状态始终为离线;

但是当我拔下连接arduino的串行引脚后,Wemos D1的状态变为在线。我试着换另一个pin,但是问题还是出现了。如何来吗?

它连接arduino是为了什么?

@nickrout我使用arduino只是试图发送一些随机字符串,因为传感器正在运输中。它花了很长时间才到,所以我试着用arduino来代替,只是为了确保这个系列可以工作。所以当我的传感器到达时,我可以轻松地把它插到ESPHome上。我像这样编写它来发送hello

无效的设置(){
Serial.begin (9600);

无效循环(){
Serial.write(“hello \ r \ n”);//发送字符串" hello "

是否有可能我的WEMOS D1 Mini中的串口默认已经被ESPHome固件使用。所以我不能再用它读取arduino发送的串行了?它总是发生时,我插头从arduino串行到Wemos D1 mini串行。

在Wemos D1 mini中,我使用GPIO1和GPIO3作为串行。

uart:
id: uart_bus
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 9600

您必须将此项目的YAML文件中记录器的baudrate设置为0,才能使用此设置。

@jorgenn你的意思是把波特率设成这样吗?

#启用日志记录器:baud_rate: 0

我试过了,但我仍然不能得到从arduino发送到Wemos的串行。来自Wemos的日志显示了这个错误:

这是我的配置yaml文件为Wemos D1 Mini:

esphome: name: test_serial platform: ESP8266 board: d1_mini includes: - my_custom_component.h uart: id: uart_bus tx_pin: GPIO1 rx_pin: GPIO3 baud_rate: 9600 custom_component: - lambda: |- auto my_custom = new MyCustomComponent(id(uart_bus));返回{my_custom};wifi: ssid: "Test Serial fallback hotspot " password: ..captive_portal: # Enable logging logger: baud_rate: 0 # Enable 19463331伟德国际Home Assistant API: ota:

当没有附加到Wemos系列,我会有这个错误

[15:21][E][uart:229]:从uart读取超时字节0![15:21][E][uart:229]:从uart读取超时字节0![15:21][E][uart:229]:从uart读取超时字节0![15:21][E][uart:229]:从uart读取超时字节0![15:21][E][uart:229]:从uart读取超时字节0!

到目前为止,我得出了这个结论
YAML

esphome:名称:vind平台:ESP32板:esp-wrover-kit包括:- windsonic.h wifi:名称:“阴暗面”密码:“#启用后备热点(俘虏门户),以防wifi连接失败美联社:名称:“vind后备热点”密码:“captive_portal: #启用日志记录器:baud_rate: 0 #使家庭助理API API:密码:“在线旅行社:19463331伟德国际uart: id: wind tx_pin: GPIO1 rx_pin: GPIO3 baud_rate: 19200 sensor: - platform: custom lambda: |- auto my_Windsonic = new Windsonic(id(wind));App.register_component (my_Windsonic);返回{my_Windsonic - > retning_sensor my_Windsonic - > hastighet_sensor};传感器:- name: "Vindretning" unit_of_measurement:°Grader accuracy_decimal: 3

这里是my_sensor。h

#include "esphome.h" class Windsonic: public Component, public Sensor, public UARTDevice {public: Windsonic(UARTComponent *parent): UARTDevice(parent) {} Sensor *hastighet_sensor = new Sensor();Sensor *retning_sensor = new Sensor();浮动retning;浮动hastighet;void setup() override {// nothing to do here} void loop() override{//使用Arduino API读取数据,例如String line = readStringUntil('\n');字符串r = line。substring (7, 10);String s = line。substring(14、19);retning = r.toFloat (); hastighet = s.toFloat(); retning_sensor->publish_state(retning); hastighet_sensor->publish_state(hastighet); retning = 0; hastighet = 0; r = ""; s = ""; } };

这在HA的集成中表现出来除了所有的传感器,源自英国始于1946我必须整理出巢来让它工作

我现在有点糊涂了。这是my_custom_component.h。我只是复制粘贴在这里

# include“esphome.h”类MyCustomComponent:公共组件,公共UARTDevice{公众:MyCustomComponent (UARTComponent *父母):UARTDevice(父){}无效的设置()覆盖{/ /这里无关}无效循环()覆盖{/ /使用Arduino API来读取数据,例如字符串行= readString ();int i = parseInt();While (available()) {char c = read();} // etc}};

我想如果它只从我的arduino读取这样的串行,它不需要任何调整。我错了吗?
我arduino的串行也是3.3v的逻辑电平,所以我认为问题不在那里。

void setup() {Serial.begin(9600);} void loop() {Serial.write(" hello\r\n ");//发送字符串" hello "}

您是否试图从使用rs232或其他串行连接的传感器读取串行数据?

不要发布日志文件的照片。

当esphome说它在1秒后还没有连接时,你等待日志启动了多长时间?提示一下,可能需要更长的时间。

可以ping通esp设备吗?

它是出现在你的路由器上,还是通过查找?

简而言之,这就是我想要做的:

几个需要模拟读取的电阻式传感器-> arduino读取模拟值并通过串口将该值传递给Wemos D1 -> Wemos D1通过串口接收该值并发送给home assistant。19463331伟德国际

我认为你必须使用arduino来读取模拟信号并将它们转换成你可以通过串行总线发布到ESP的值,在那里你必须设置和例程逐行读取传入的值,然后发布到HA

我很抱歉,先生@nickrout我只是个想学的新手。求你别对我这么苛刻。

让我解释一下发生了什么。只要我不把Wemos D1上的GPIO1和GPIO3连接到arduino的UART引脚,设备就可以正常工作。我可以ping这个ESP设备,它出现在我的路由器上,即使是用“干扰”搜索。在不到5秒的时间内,Wemos很容易连接。但是它显示错误'从UART读取超时在字节0!',甚至我已经设置记录器波特率为0。这是无图片日志

INFO读取configuration /config/esphome/test_serial.yaml…INFO从test_serial开始输出日志。使用esphome API INFO连接到test_serial。local:6053 (192.168.42.35) INFO Successfully connected to test_serial.输出说明本地[16:23:12][I][app:100]: ESPHome version 1.14.3编译于2020年4月9日15:15:41 [C][wifi:415]: wifi: [16:23:12][C][wifi:283]: SSID: [redacted] [16:23:12][C][wifi:284]: BSSID: [redacted] [16:23:12][C][wifi:286]: Hostname: 'test_serial' [16:23:12][C][wifi:291]: Signal strength:-65分贝▂▄▆█[16:23:12][C] (wifi: 295):频道:11 [16:23:12][C] [wifi: 296]:子网:255.255.255.0 [16:23:12][C] [wifi: 297]:网关:192.168.42.129 [16:23:12][C] [wifi: 298]: DNS1: 192.168.42.129 [16:23:12] [C] [wifi: 299]: DNS2: (IP设置)[16:23:13][E] (uart: 229):阅读从字节0 uart超时![16:23:13][E][uart:229]: read from uart timed out at byte 0![16:23:13][E][uart:229]: read from uart timed out at byte 0![16:23:13][E][uart:229]: read from uart timed out at byte 0!

但是如果我将Wemos D1上的GPIO和GPIO3连接到arduino的UART引脚,就会有不同的结果。这是无图片日志

INFO读取configuration /config/esphome/test_serial.yaml…INFO从test_serial开始输出日志。使用esphome API INFO连接到test_serial。local:6053 (192.168.42.35) WARNING初始连接失败。ESP可能还没有连接到WiFi(等待消息响应时超时!)重试1秒INFO连接到test_serial。local:6053 (192.168.42.35) WARNING初始连接失败。ESP可能还没有连接到WiFi(等待消息响应时超时!)重试1秒INFO连接到test_serial。local:6053 (192.168.42.35) WARNING初始连接失败。 The ESP might not be connected to WiFi yet (Timeout while waiting for message response!). Re-Trying in 2 seconds INFO Connecting to test_serial.local:6053 (192.168.42.35) WARNING Initial connection failed. The ESP might not be connected to WiFi yet (Timeout while waiting for message response!). Re-Trying in 3 seconds

我已经等了一个多小时了,但是这个错误仍然发生了。因为上面说Wemos没有连接,所以我绝对无法ping通ESP设备,它也没有出现在我的路由器上,即使用“fing”搜索。

你对如何处理有什么建议吗?或者你对这个新手有什么提示吗?由于之前

谢谢你的建议,但是感应器还没到,我也无能为力。我觉得冠状病毒给运输带来了很多麻烦。然后,我只是实验发送字符串hello从arduino和检查在Wemos,是否收到字符串或没有。

我不明白你的意思。我如何设置和例程读取如果只是简单地发送“hello”字符串根本不工作。是my_custom_component.h错了吗?谢谢。

你有正确的电气连接,例如TX连接到另一个设备上的RX ?