Light sleep after sending a UDP packet using the sendto() function on ESP32-S3
Posted: Sun Feb 09, 2025 2:37 pm
Dear ESP programmers,
I am working on a power-saving project where I need to periodically send UDP packets (1500 bytes each) every 10 ms to 50 ms. How can I ensure that ESP immediately enters light sleep after sending each packet?
So far, it only works reliably when I insert a 50 ms delay between sending a packet and entering the light sleep mode. When the delay is shorter, it occasionally returns these errors:
For example, with a 10 ms delay, it can run for several minutes without any issues, and then suddenly start generating errors, after which it resumes sending correctly again...
Function for send UDP packet:
Main:
Thank you!
I am working on a power-saving project where I need to periodically send UDP packets (1500 bytes each) every 10 ms to 50 ms. How can I ensure that ESP immediately enters light sleep after sending each packet?
So far, it only works reliably when I insert a 50 ms delay between sending a packet and entering the light sleep mode. When the delay is shorter, it occasionally returns these errors:
Code: Select all
Error occurred during sending: errno 12
Error occurred during sending: errno -1
Error occurred during sending: errno 118
Function for send UDP packet:
Code: Select all
// Sending data through the open socket
void udp_send_data(const char *data, size_t len) {
if (udp_socket < 0) {
ESP_LOGE(TAG_UDP, "Socket is not initialized");
return;
}
int err = sendto(udp_socket, data, len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
if (err < 0) {
ESP_LOGE(TAG_UDP, "Error occurred during sending: errno %d", errno);
} else {
// ESP_LOGI(TAG_UDP, "Data sent successfully");
}
}
Code: Select all
...
udp_send_data((char *)(buffer_ptr), BUFFER_SIZE);
// Inserted delay
// vTaskDelay(10 / portTICK_PERIOD_MS); // 10 ms
esp_rom_delay_us(1000); // 1000 µs
esp_light_sleep_start();
...