Edit esp-espnow_test_transmitter1.yaml
This commit is contained in:
@@ -1,36 +1,46 @@
|
|||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# ESP-NOW Test Transmitter
|
# ESP-NOW Test Transmitter 1
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
#
|
#
|
||||||
# DEVICE:
|
# DEVICE:
|
||||||
# ESP32-S3-Zero / ESP32-S3 Super Mini
|
# ESP32-S3-Zero / ESP32-S3 Super Mini
|
||||||
#
|
#
|
||||||
# VERSION:
|
# VERSION:
|
||||||
# 1.1 - 2026-07-11
|
# 1.2 - 2026-07-11
|
||||||
# - Removed duplicate GPIO4 binary sensor declaration.
|
# - Changed GPIO4 wake source to ESP32 EXT1 ANY_LOW.
|
||||||
# - GPIO4 is now used only as the deep-sleep wake pin.
|
# - Added delay to allow ESP-NOW to initialise before transmission.
|
||||||
# - Added KEEP_AWAKE handling while the wake button remains pressed.
|
# - Added GPIO4 input and pull-up initialisation.
|
||||||
# - Uses a random press ID rather than flash-backed press counting.
|
# - Waits for the wake button to be released before entering deep sleep.
|
||||||
# - Sends each button press three times for improved reliability.
|
# - Logs the ESP32 wake cause.
|
||||||
# - Configured ESP-NOW to use Wi-Fi channel 5.
|
# - Sends each message three times for improved broadcast reliability.
|
||||||
#
|
#
|
||||||
# WIRING:
|
# WIRING:
|
||||||
# GPIO4 ---- momentary button ---- GND
|
#
|
||||||
|
# 3.3 V
|
||||||
|
# |
|
||||||
|
# 10 kΩ
|
||||||
|
# |
|
||||||
|
# +-------- GPIO4
|
||||||
|
# |
|
||||||
|
# Push button
|
||||||
|
# |
|
||||||
|
# GND
|
||||||
#
|
#
|
||||||
# OPERATION:
|
# OPERATION:
|
||||||
# - Initial power-up or reset causes one test transmission.
|
# - Power-up or reset causes one transmission.
|
||||||
# - The ESP32 then enters deep sleep.
|
# - The transmitter sends the same ESP-NOW message three times.
|
||||||
# - Pressing the button pulls GPIO4 LOW and wakes the ESP32.
|
# - It waits for GPIO4 to return HIGH.
|
||||||
# - The ESP32 broadcasts the same message three times.
|
# - It then enters deep sleep.
|
||||||
# - It waits until the button is released and returns to deep sleep.
|
# - Pulling GPIO4 LOW wakes the transmitter and repeats the sequence.
|
||||||
#
|
#
|
||||||
# MESSAGE FORMAT:
|
# MESSAGE FORMAT:
|
||||||
# REMOTE_A:BUTTON_1:123456789
|
# REMOTE_A:BUTTON_1:<random press ID>
|
||||||
#
|
#
|
||||||
# IMPORTANT:
|
# IMPORTANT:
|
||||||
# - The receiver must be operating on Wi-Fi channel 5.
|
# - ESP-NOW channel must match the receiver network channel.
|
||||||
# - This transmitter intentionally has no Wi-Fi, API or OTA configuration.
|
# - The receiver is currently operating on channel 5.
|
||||||
# - Future updates will normally be installed by USB.
|
# - This transmitter deliberately does not connect to normal Wi-Fi.
|
||||||
|
# - Firmware updates are performed by USB.
|
||||||
#
|
#
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
|
|
||||||
@@ -42,7 +52,7 @@ substitutions:
|
|||||||
button_id: "BUTTON_1"
|
button_id: "BUTTON_1"
|
||||||
|
|
||||||
espnow_channel: "5"
|
espnow_channel: "5"
|
||||||
wake_pin: "4"
|
wake_gpio: "4"
|
||||||
|
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# ESPHome Core
|
# ESPHome Core
|
||||||
@@ -55,14 +65,40 @@ esphome:
|
|||||||
on_boot:
|
on_boot:
|
||||||
priority: -100
|
priority: -100
|
||||||
then:
|
then:
|
||||||
- logger.log:
|
- lambda: |-
|
||||||
level: INFO
|
// Explicitly configure GPIO4 as an input with a pull-up.
|
||||||
format: "ESP-NOW transmitter booted."
|
gpio_set_direction(GPIO_NUM_4, GPIO_MODE_INPUT);
|
||||||
|
gpio_set_pull_mode(GPIO_NUM_4, GPIO_PULLUP_ONLY);
|
||||||
|
|
||||||
|
const esp_sleep_wakeup_cause_t wake_cause =
|
||||||
|
esp_sleep_get_wakeup_cause();
|
||||||
|
|
||||||
|
ESP_LOGI(
|
||||||
|
"wake",
|
||||||
|
"ESP-NOW transmitter booted. Wake cause: %d",
|
||||||
|
static_cast<int>(wake_cause)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (wake_cause == ESP_SLEEP_WAKEUP_EXT1) {
|
||||||
|
ESP_LOGI("wake", "Wake was caused by the GPIO4 EXT1 input.");
|
||||||
|
} else if (wake_cause == ESP_SLEEP_WAKEUP_UNDEFINED) {
|
||||||
|
ESP_LOGI("wake", "Wake was caused by power-up or reset.");
|
||||||
|
} else {
|
||||||
|
ESP_LOGI(
|
||||||
|
"wake",
|
||||||
|
"Wake was caused by another source: %d",
|
||||||
|
static_cast<int>(wake_cause)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow all ESPHome components, including ESP-NOW, to finish setup.
|
||||||
|
- delay: 750ms
|
||||||
|
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
id(press_id) = esp_random();
|
id(press_id) = esp_random();
|
||||||
|
|
||||||
char payload_buffer[96];
|
char payload_buffer[96];
|
||||||
|
|
||||||
snprintf(
|
snprintf(
|
||||||
payload_buffer,
|
payload_buffer,
|
||||||
sizeof(payload_buffer),
|
sizeof(payload_buffer),
|
||||||
@@ -83,9 +119,25 @@ esphome:
|
|||||||
|
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: INFO
|
level: INFO
|
||||||
format: "Transmission sequence finished. Entering deep sleep."
|
format: "Transmission sequence completed."
|
||||||
|
|
||||||
- delay: 250ms
|
# Do not enter sleep while GPIO4 is still held LOW.
|
||||||
|
- logger.log:
|
||||||
|
level: INFO
|
||||||
|
format: "Waiting for GPIO4 button release."
|
||||||
|
|
||||||
|
- wait_until:
|
||||||
|
condition:
|
||||||
|
lambda: |-
|
||||||
|
return gpio_get_level(GPIO_NUM_4) == 1;
|
||||||
|
|
||||||
|
- delay: 100ms
|
||||||
|
|
||||||
|
- logger.log:
|
||||||
|
level: INFO
|
||||||
|
format: "GPIO4 released. Entering deep sleep."
|
||||||
|
|
||||||
|
- delay: 100ms
|
||||||
|
|
||||||
- deep_sleep.enter: deep_sleep_control
|
- deep_sleep.enter: deep_sleep_control
|
||||||
|
|
||||||
@@ -94,17 +146,14 @@ esphome:
|
|||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
|
|
||||||
esp32:
|
esp32:
|
||||||
variant: esp32s3
|
board: esp32-s3-devkitc-1
|
||||||
|
|
||||||
framework:
|
framework:
|
||||||
type: esp-idf
|
type: esp-idf
|
||||||
|
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# Logging
|
# Logging
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
#
|
|
||||||
# USB serial logging is useful during initial testing.
|
|
||||||
# It does consume some power while the device is awake, but awake time is brief.
|
|
||||||
#
|
|
||||||
|
|
||||||
logger:
|
logger:
|
||||||
level: DEBUG
|
level: DEBUG
|
||||||
@@ -113,12 +162,13 @@ logger:
|
|||||||
# ESP-NOW
|
# ESP-NOW
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
#
|
#
|
||||||
# The transmitter is not joining Wi-Fi, so the ESP-NOW radio channel must be
|
# The transmitter does not connect to Wi-Fi, so its radio channel is set
|
||||||
# configured explicitly.
|
# explicitly. Both transmitter and receiver must use the same channel.
|
||||||
#
|
#
|
||||||
|
|
||||||
espnow:
|
espnow:
|
||||||
channel: ${espnow_channel}
|
channel: ${espnow_channel}
|
||||||
|
enable_on_boot: true
|
||||||
|
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# Globals
|
# Globals
|
||||||
@@ -142,6 +192,7 @@ globals:
|
|||||||
script:
|
script:
|
||||||
- id: send_espnow_press
|
- id: send_espnow_press
|
||||||
mode: single
|
mode: single
|
||||||
|
|
||||||
then:
|
then:
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: INFO
|
level: INFO
|
||||||
@@ -153,18 +204,21 @@ script:
|
|||||||
id(transmit_payload).begin(),
|
id(transmit_payload).begin(),
|
||||||
id(transmit_payload).end()
|
id(transmit_payload).end()
|
||||||
);
|
);
|
||||||
|
|
||||||
wait_for_sent: true
|
wait_for_sent: true
|
||||||
continue_on_error: true
|
continue_on_error: true
|
||||||
|
|
||||||
on_sent:
|
on_sent:
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: DEBUG
|
level: DEBUG
|
||||||
format: "Broadcast 1 sent."
|
format: "Broadcast 1 submitted successfully."
|
||||||
|
|
||||||
on_error:
|
on_error:
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: WARN
|
level: WARN
|
||||||
format: "Broadcast 1 reported an error."
|
format: "Broadcast 1 reported an error."
|
||||||
|
|
||||||
- delay: 50ms
|
- delay: 75ms
|
||||||
|
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: INFO
|
level: INFO
|
||||||
@@ -176,18 +230,21 @@ script:
|
|||||||
id(transmit_payload).begin(),
|
id(transmit_payload).begin(),
|
||||||
id(transmit_payload).end()
|
id(transmit_payload).end()
|
||||||
);
|
);
|
||||||
|
|
||||||
wait_for_sent: true
|
wait_for_sent: true
|
||||||
continue_on_error: true
|
continue_on_error: true
|
||||||
|
|
||||||
on_sent:
|
on_sent:
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: DEBUG
|
level: DEBUG
|
||||||
format: "Broadcast 2 sent."
|
format: "Broadcast 2 submitted successfully."
|
||||||
|
|
||||||
on_error:
|
on_error:
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: WARN
|
level: WARN
|
||||||
format: "Broadcast 2 reported an error."
|
format: "Broadcast 2 reported an error."
|
||||||
|
|
||||||
- delay: 50ms
|
- delay: 75ms
|
||||||
|
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: INFO
|
level: INFO
|
||||||
@@ -199,36 +256,39 @@ script:
|
|||||||
id(transmit_payload).begin(),
|
id(transmit_payload).begin(),
|
||||||
id(transmit_payload).end()
|
id(transmit_payload).end()
|
||||||
);
|
);
|
||||||
|
|
||||||
wait_for_sent: true
|
wait_for_sent: true
|
||||||
continue_on_error: true
|
continue_on_error: true
|
||||||
|
|
||||||
on_sent:
|
on_sent:
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: DEBUG
|
level: DEBUG
|
||||||
format: "Broadcast 3 sent."
|
format: "Broadcast 3 submitted successfully."
|
||||||
|
|
||||||
on_error:
|
on_error:
|
||||||
- logger.log:
|
- logger.log:
|
||||||
level: WARN
|
level: WARN
|
||||||
format: "Broadcast 3 reported an error."
|
format: "Broadcast 3 reported an error."
|
||||||
|
|
||||||
|
- delay: 75ms
|
||||||
|
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# Deep Sleep and Wake Button
|
# Deep Sleep and GPIO4 Wake
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
#
|
#
|
||||||
# GPIO4 is pulled HIGH internally.
|
# ESP32-S3 supports EXT1 ANY_LOW wake.
|
||||||
# Pressing the button connects GPIO4 to GND and wakes the ESP32.
|
|
||||||
#
|
#
|
||||||
# KEEP_AWAKE prevents an immediate sleep/wake loop if the button is still held
|
# With one configured pin, ANY_LOW means:
|
||||||
# when the transmission sequence finishes.
|
# Wake when GPIO4 is pulled LOW.
|
||||||
|
#
|
||||||
|
# An external 10 kΩ pull-up between GPIO4 and 3.3 V is recommended.
|
||||||
#
|
#
|
||||||
|
|
||||||
deep_sleep:
|
deep_sleep:
|
||||||
id: deep_sleep_control
|
id: deep_sleep_control
|
||||||
|
|
||||||
wakeup_pin:
|
esp32_ext1_wakeup:
|
||||||
number: GPIO${wake_pin}
|
pins:
|
||||||
mode:
|
- GPIO${wake_gpio}
|
||||||
input: true
|
|
||||||
pullup: true
|
|
||||||
inverted: true
|
|
||||||
|
|
||||||
wakeup_pin_mode: KEEP_AWAKE
|
mode: ANY_LOW
|
||||||
Reference in New Issue
Block a user