本帖最后由 hunterfox 于 2021-4-9 22:25 编辑
采用 alei643 大神建议,在Tasmota 已基本实现交互,
目前进制的方法 采用Tasmota 的command的一个属性
例如:serialsend5 C0010102A5EF 可以通过控制台发出16进制数据,同时接收也支持到十六进制
感谢 mitu 大神 指点
原帖需求:
目标功能:
期望实 现的功能 :
NR(mqtt)---ESP8266(esphome固件)---串口---RTU设备。想实现这样的一个双向通信功能,调试了1个星期
没有解决掉问题
参考的https://bbs.hassbian.com/forum.php?mod=viewthread&tid=9794 大神的帖子及编写方法
目前仅能实现: NR向串口写入数据
无法 读取串口数据,还请大神可以指点一下。 附件代码为esphome
另中途也刷了 Tasmota 固件:配置TX RX ,可以实现自动接收:
命令:
{"SSerialReceived":{"Data":"<string>"}}
Baudrate 9600
即:esphome 仅实现了发的个功能
Tasmota 仅实现了收的功能,
悲催啊~~~~~~~~~相当绝望
esphome实现的发功能截图
Tasmota 实现了收的功能
#------- 固件说明 -------
#芯片模组:esp826601S
#硬件功能: 串口透传
#安装位置:待定
esphome:
includes:
# - uart_read_line_sensor.h
- uarttext_sensor.h
substitutions:
config_version: 'esp01_0203' #
#设备名称(多个dc1改成不一样的,API接入和ESPHOME容器会识别这个作为名称显示)
device_name: esp12f_01_test #
#---------不使用api与设备连接的话删除api配置---------
packages:
wifiset: !include config_wifi.yaml
#------- MQTT配置,注意此配置与API配置互斥,只能选择1个 -------
mqtt:
id: mqtt_client
broker: !secret mqtt_broker
port: !secret mqtt_port
username: !secret mqtt_username
password: !secret mqtt_password
client_id: $device_name
keepalive: $mqtt_keepalive
reboot_timeout: $mqtt_reboot_timeout
topic_prefix: $mqtt_topic_prefix
log_topic:
topic: "${device_name}/logs"
level: debug
#topic 注入:{"cmd":"11442233445566"}
on_json_message:
topic: esphome32/listen/topic
qos: 0
then:
lambda: |-
const char* cmd="FD0301010160DF";
auto sent_uart_eng = new CustomP1UartComponent(id(uart_bus));
unsigned char temp[]={0xFD,0x03,0x01,0x02,0x09,0x60,0xDF,0x0};
if (x.containsKey("cmd")){
cmd = x["cmd"];
sent_uart_eng->write_message(cmd);}
#---------不使用api与设备连接的话删除api配置---------
#api:
# reboot_timeout: $api_reboot_timeout
# password: !secret publicpassword
#----------------------------------------------------
debug:
#-------打印log设置,注意实际输出端口为主板上面的log_tx,而不是刷机用到的tx-------
logger:
#不同的log等级看到的信息详细程度不一样,信息量从少到多依次为NONE、ERROR、WARN、INFO、DEBUG、VERBOSE、VERY_VERBOSE
level: DEBUG
#设置为0关闭通过UART的log输出
baud_rate: 0
uart:
id: uart_bus
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 9600
text_sensor:
- platform: custom
lambda: |-
auto uart_custext_sensor = new CustomP1UartComponent(id(uart_bus));
App.register_component(uart_custext_sensor);
return {uart_custext_sensor->uart_text_sensors};
text_sensors:
id: "uart_readline"
name: "${device_name}_UART"
switch:
- platform: template
name: "${device_name} switchtemp"
lambda: |-
if (id(uart_readline).state == "*POW=ON#") {
return true;
} else if(id(uart_readline).state == "*POW=OFF#") {
return false;
} else {
return {};
}
turn_on_action:
- uart.write: "\r*pow=on#\r"
turn_off_action:
- uart.write: "\r*pow=off#\r"
interval:
- interval: 10s
then:
- uart.write: "\r*pow=?#\r"
复制代码
下下策,放弃esphome,放弃Tasmota,采用单片机+ESP8266 AT指令来控制 ,自由度完全没有了。