Maybe a little late this answer but maybe somewone is in your situation… You need to feed 12v on green port! You have powered the board with 5V but your relays are feeded from green port with 12V! Good luck!
I used a similar relay to modify a doorbell with 2 chimes so that I could disable the chimes. (And also prevent the doorbell from being hammered over and over). Since I found this post I’ll share the code here.
the problem I ran into was sending both commands at the same time would fail one of the commands. So I found a 20ms delay was the sweet spot of both commands actually firing.
The code allows you to press the doorbell once, and then not again for 15 seconds. It also allows you to turn one or both chimes off.
# Enable logging
logger:
baud_rate: 0 # disable hardware logging due to uart gpio collision
globals:
- id: chime1_enabled
type: bool
restore_value: true
initial_value: 'true'
- id: chime2_enabled
type: bool
restore_value: true
initial_value: 'true'
- id: button_can_activate
type: bool
restore_value: false
initial_value: 'true'
uart:
id: uart_bus
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 115200
switch:
- platform: restart
name: Doorbell Restart
- platform: template
name: "Doorbell Chime Relay 1"
id: relay1
turn_on_action:
- uart.write:
id: uart_bus
data: [0xA0, 0x01, 0x01, 0xA2]
turn_off_action:
- uart.write:
id: uart_bus
data: [0xA0, 0x01, 0x00, 0xA1]
- platform: template
name: "Doorbell Chime Relay 2"
id: relay2
turn_on_action:
- uart.write:
id: uart_bus
data: [0xA0, 0x02, 0x01, 0xA3]
turn_off_action:
- uart.write:
id: uart_bus
data: [0xA0, 0x02, 0x00, 0xA2]
- platform: template
name: "Enable Chime 1"
id: enable_chime1
restore_mode: RESTORE_DEFAULT_ON
turn_on_action:
- globals.set:
id: chime1_enabled
value: 'true'
turn_off_action:
- globals.set:
id: chime1_enabled
value: 'false'
lambda: |-
return id(chime1_enabled);
- platform: template
name: "Enable Chime 2"
id: enable_chime2
restore_mode: RESTORE_DEFAULT_ON
turn_on_action:
- globals.set:
id: chime2_enabled
value: 'true'
turn_off_action:
- globals.set:
id: chime2_enabled
value: 'false'
lambda: |-
return id(chime2_enabled);
binary_sensor:
- platform: gpio
id: button
name: Doorbell Button
pin:
number: GPIO2
mode: INPUT_PULLUP
inverted: true
filters:
- delayed_on: 25ms
- delayed_off: 25ms
on_press:
then:
- if:
condition:
- lambda: 'return id(button_can_activate);'
then:
- globals.set:
id: button_can_activate
value: 'false'
- if:
condition:
- lambda: 'return id(chime1_enabled);'
then:
- switch.turn_on: relay1
- delay: 20ms # only one will turn on if you send the commands too quickly
- if:
condition:
- lambda: 'return id(chime2_enabled);'
then:
- switch.turn_on: relay2
- delay: 500ms # Both relays stay on for this duration
- switch.turn_off: relay1
- delay: 20ms # only one will turn off if you send the commands too quickly
- switch.turn_off: relay2
- delay: 15s
- globals.set:
id: button_can_activate
value: 'true'
Read my final post at the end: this board has a problem
Is there a way you guys figure out to debug this.
I have added the pre-amble, with or without the pre-amble the device will turn the relay on, but it wont turn my relay off.
I have another one that is working just fine with no pre-amble, but a new 3 dual channels I set up, I cannot get them to turn the relay off.
They are showing the red light, so they appear to be in the right mode by observation, and that they will turn the relay on.
If I turn the relay 1 on, I can still turn relay 2 on, so it also appears all is fine with the comms. But no matter when I send the turn off command, it doesnt do it. I even tried adding a delay action to turn it off, but the relay light never goes off. Only a full restart of the whole board does it.
I was hoping to try understand why my turn off command is not working.
esphome:
name: pool-motor-relay1
friendly_name: Pool Motor Relay1
esp8266:
board: esp01_1m
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
encryption:
key: "removed"
ota:
password: "removed"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Pool-Motor-Relay1"
password: "removed"
captive_portal:
uart:
baud_rate: 115200
tx_pin: GPIO1
rx_pin: GPIO3
switch:
- platform: template
id: relay1
name: 'Relay 1'
turn_on_action:
- uart.write: [0x0D, 0x0A, 0x2B, 0x49, 0x50, 0x44, 0x2C, 0x30, 0x2C, 0x34, 0x3A, 0xA0, 0x01, 0x01, 0xA2]
- delay: 10s
- uart.write: [0x0D, 0x0A, 0x2B, 0x49, 0x50, 0x44, 0x2C, 0x30, 0x2C, 0x34, 0x3A, 0xA0, 0x01, 0x00, 0xA1]
- switch.turn_off: relay1
turn_off_action:
- uart.write: [0x0D, 0x0A, 0x2B, 0x49, 0x50, 0x44, 0x2C, 0x30, 0x2C, 0x34, 0x3A, 0xA0, 0x01, 0x00, 0xA1]
optimistic: true
- platform: template
name: 'Relay 2'
id: relay2
turn_on_action:
- uart.write: [0x0D, 0x0A, 0x2B, 0x49, 0x50, 0x44, 0x2C, 0x30, 0x2C, 0x34, 0x3A, 0xA0, 0x02, 0x01, 0xA3]
- delay: 10s
- uart.write: [0x0D, 0x0A, 0x2B, 0x49, 0x50, 0x44, 0x2C, 0x30, 0x2C, 0x34, 0x3A, 0xA0, 0x02, 0x00, 0xA2]
- switch.turn_off: relay2
turn_off_action:
- uart.write: [0x0D, 0x0A, 0x2B, 0x49, 0x50, 0x44, 0x2C, 0x30, 0x2C, 0x34, 0x3A, 0xA0, 0x02, 0x00, 0xA2]
optimistic: true
Here is an upclose of the chip thats on it
Is this a nuvotron?
If so is this the correct manual?
DS_N76E003_EN_Rev1.09.pdf (nuvoton.com)
If so how did you figure out the pre-amble.
Any help welcome
I enabled debug on the UART using
uart:
id: uart_bus
baud_rate: 115200
tx_pin: GPIO1
rx_pin: GPIO3
debug:
direction: BOTH
dummy_receiver: true
after:
bytes: 150
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
when i enable dummy receiver, the logs of full of AT+RST.
Whether something else is making that or the chip attached, I am nto sure.
See below for an example
[20:28:07][D][switch:055]: 'Relay 1': Sending state OFF
[20:28:07][D][uart_debug:158]: >>> "\xA0\x01\x00\xA1"
[20:28:07][D][switch:012]: 'Relay 1' Turning ON.
[20:28:07][D][switch:055]: 'Relay 1': Sending state ON
[20:28:07][D][uart_debug:158]: >>> "\xA0\x01\x01\xA2"
[20:28:07][D][switch:016]: 'Relay 1' Turning OFF.
[20:28:07][D][switch:055]: 'Relay 1': Sending state OFF
[20:28:07][D][uart_debug:158]: >>> "\xA0\x01\x00\xA1"
[20:28:08][D][uart_debug:158]: <<< "AT+RST\r\n"
[20:28:09][D][uart_debug:158]: <<< "AT+RST\r\n"
[20:28:10][D][uart_debug:158]: <<< "AT+RST\r\n"
[20:28:11][D][uart_debug:158]: <<< "AT+RST\r\n"
[20:28:12][D][uart_debug:158]: <<< "AT+RST\r\n"
[20:28:13][D][uart_debug:158]: <<< "AT+RST\r\n"
[20:28:14][D][uart_debug:158]: <<< "AT+RST\r\n"
[20:28:15][D][uart_debug:158]: <<< "AT+RST\r\n"
So in the end, after looking at some working boards of mine (after removing them from service) and comparing this to the non working board. It seems the same supplier had sent me two different kinds. Some of them are labelled besstep exaclt where you see “LC” on the top picture of the first poster.
I ordered from another supplier, and all sorted. So much time wasted on what appears to be cheap nonsense. But now at least I have a few ESP-01 spares
Maybe a little late, but this one also works pretty well with ESPHome
I have also a relay board like this and it is working already .
I can control the two relays on the board(thx to this forum) , but what about the LEDs and switches (S1 and S2) on the board . Is it possible to intergrate them also in the programm ?
So when pushing the buttons, i can switch the relays manually
Hi,
I might be having the same issue: I can turn both relays on, but I cannot turn them off. What gave you the clue of searching for another board? And if you did so, which board did you eventually purchase?
Thanks in advance,
Erwin
Edit:
Hah, my new boards arrived, but it again was from the “bestep” brand. I gave it a second try and hooray
This is my working config:
esphome:
name: verlichtinggarage
platform: ESP8266
board: esp01_1m
uart:
baud_rate: 115200
tx_pin: GPIO1
rx_pin: GPIO3
# Enable logging
logger:
level: DEBUG
baud_rate: 0
status_led:
pin: GPIO2
switch:
- platform: template
name: "relay1"
optimistic: true
turn_on_action:
- uart.write: [0xA0, 0x01, 0x01, 0xA2]
turn_off_action:
- uart.write: [0xA0, 0x01, 0x00, 0xA1]
- platform: template
name: "relay2"
optimistic: true
turn_on_action:
- uart.write: [0xA0, 0x02, 0x01, 0xA3]
turn_off_action:
- uart.write: [0xA0, 0x02, 0x00, 0xA2]
Btw, I found some mixed documentation on how to flash the ESP-01. For those that are looking on more info on how to flash the ESP-01, these are my notes:
# RX to TX
# TX to RX
# Gnd to Gnd en D0. D0 is on the same row as GND, but there is 1 pin in between the two.
# 3V VCC to 3V
# 3V VCC to EN
Thanks for being such a great resource
Erwin
I had the same problems with my cheap clone of this relay, in my case with LPC803AT20 chip.
I could turn relays on by A00101A2 res. A00201A3, but I could not turn them off.
The baud rate and the coms were correct, since I was able to turn on both relays in sequence.
After a lot of time spending on the net without any result I desperately started brute force attack - started typing different commands. And I had luck (or hunch) and it did not took too long.
For reasons beyond my understanding, this chip is not using 0x00 for OFF value but 0x02 !!!
So to properly control the relays one has to use:
Relay 1 ON - 0xA0 0x01 0x01 0xA2
Relay 1 OFF - 0xA0 0x01 0x02 0xA3
Relay 2 ON - 0xA0 0x02 0x01 0xA3
Relay 2 OFF - 0xA0 0x02 0x02 0xA4
HI ! I have chip labeled F0010A1T
Please note, board is working in Mode 1 ( RED led is on )
uart:
baud_rate: 115200
tx_pin: GPIO1
rx_pin: GPIO3
binary_sensor:
- platform: status
name: "Remote ESP Status"
status_led:
pin: GPIO2
switch:
- platform: template
name: 'Relay 1'
id: relay1
turn_on_action:
- uart.write: [0xA0, 0x01, 0x01, 0xA2]
turn_off_action:
- uart.write: [0xA0, 0x01, 0x00, 0xA1]
optimistic: true
- platform: template
name: 'Relay 2'
id: relay2
turn_on_action:
- uart.write: [0xA0, 0x02, 0x01, 0xA3]
turn_off_action:
- uart.write: [0xA0, 0x02, 0x00, 0xA2]
optimistic: true
Thank you for the solution. I spent 6 hours trying to connect the ESP_Relay_x2_V1.2 to ESP-Home. I tried dozens of sketches, but none of them worked. I didn’t want to throw it away since the module is very compact. I’m glad I found a working solution here.
Do you know how to prevent relays from triggering on boot after a power loss?
I’d also like a link to the STL file if you don’t mind.
Wanted to bring this post under everyones attention.
I’m using this board to control 2 motion controlled light zones in my garage. Both light zones were configured as a “group”, allowing the turn off all lights in one go when no motion is detected. I was however struggling with the fact that one light kept on, despite that even the esphome webinterface was telling me that it was off. The only thing I could do to resolve this, was to turn the switch manually on and off , after which it always turned off the light.
Removed the group and configured the automation to turn them off one by one with a delay in between. Still need to test if it keeps working, but given your post (that I initially overlooked), I have good faith
Thanks!
Is there any STL file for enclosure?
Have you tried update the board as given below?
esp8266:
board: esp01_1m
early_pin_init: false
I tried. It didn’t help.
Hello,
I also got this module with the F0010A1T and set it up with Tasmota following these instructions,
it is recognized and displayed in Homeassistant after it is set up with Tasmota
Hey guys, mine is a single relay one but pretty similar, so i managed to make the switch S2 work by listening to the uart commands, some times it takes time to turn it off but works I use it like a general purpose relay:
esphome:
name: esp8266_relay_v12
esp8266:
board: esp01_1m
logger:
baud_rate: 115200 # Ajustar la velocidad de comunicación del logger para UART
web_server:
captive_portal:
mdns:
api:
password: ""
ota:
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
uart:
baud_rate: 115200
tx_pin: GPIO1
rx_pin: GPIO3
# Componente Custom para recibir datos UART
globals:
- id: uart_data_buffer
type: std::string
initial_value: ""
# Lee los datos UART y verifica si son comandos específicos
interval:
- interval: 1s
then:
- lambda: |-
while (Serial.available() > 0) {
char c = (char)Serial.read();
id(uart_data_buffer) += c;
if (c == '\n') {
ESP_LOGD("uart", "Received: %s", id(uart_data_buffer).c_str());
// Verifica si el comando AT coincide con AT+RESTORE o AT+CIPSERVER
if (id(uart_data_buffer).find("AT+RESTORE") != std::string::npos &&
id(uart_data_buffer).find("AT+CIPSERVER") == std::string::npos) {
// Alterna el estado del relé
id(relay1).toggle();
ESP_LOGD("uart", "Toggling relay based on UART command");
}
id(uart_data_buffer).clear();
}
}
binary_sensor:
- platform: status
name: "Remote ESP Relay Status"
id: relay_status # Agregar un ID para poder acceder a este sensor
# Led de Estado
status_led:
pin: GPIO2
switch:
- platform: template
name: "Relay Control"
id: relay1
optimistic: true
turn_on_action:
- uart.write: [0xA0, 0x01, 0x00, 0xA1]
turn_off_action:
- uart.write: [0xA0, 0x01, 0x01, 0xA2]