ESP now broadcast latency
Posted: Tue Jan 28, 2025 12:24 am
Hi everyone,
I have setup a esp-now network using Adafruit ESP8266. From one sender I Broadcast 1 byte at a time every second. All my 5 slaves receive this byte with a jitter of ~80 Micro second.
But when I look at how long it takes the sender to pass that 1 byte to the receivers, i have a fixed delay of 800 Micro second and a jitter of up to 5 milli second. Where does this 5 milli second jitter come from?
Thanks in advance!
**Sender Code:**
```
#include <ESP8266WiFi.h>
#include <espnow.h>
uint8_t broadcastAddress0[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
#define REF_PIN 5
byte data;
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("Last Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(REF_PIN, OUTPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_send_cb(OnDataSent);
esp_now_add_peer(broadcastAddress0, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
if (Serial.available() > 0) {
data = Serial.read();
digitalWrite(REF_PIN, !digitalRead(REF_PIN));
esp_now_send(broadcastAddress0, (uint8_t *) &data, sizeof(data));
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
```
**Receiver Code:**
```
#include <ESP8266WiFi.h>
#include <espnow.h>
// ***this example is tested for both ESP8266 and adafruit esp8266***
uint8_t data;
#define REF_PIN 5
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
digitalWrite(REF_PIN, !digitalRead(REF_PIN));
data = incomingData[0];
uint8_t cmd[] = {
0xAB,
(uint8_t)data,
0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
0xAB, 0xAB, 0xAB, 0xAB
};
Serial.write(cmd, sizeof(cmd));
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(REF_PIN, OUTPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
}
```
I have setup a esp-now network using Adafruit ESP8266. From one sender I Broadcast 1 byte at a time every second. All my 5 slaves receive this byte with a jitter of ~80 Micro second.
But when I look at how long it takes the sender to pass that 1 byte to the receivers, i have a fixed delay of 800 Micro second and a jitter of up to 5 milli second. Where does this 5 milli second jitter come from?
Thanks in advance!
**Sender Code:**
```
#include <ESP8266WiFi.h>
#include <espnow.h>
uint8_t broadcastAddress0[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
#define REF_PIN 5
byte data;
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("Last Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(REF_PIN, OUTPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_send_cb(OnDataSent);
esp_now_add_peer(broadcastAddress0, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
if (Serial.available() > 0) {
data = Serial.read();
digitalWrite(REF_PIN, !digitalRead(REF_PIN));
esp_now_send(broadcastAddress0, (uint8_t *) &data, sizeof(data));
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
```
**Receiver Code:**
```
#include <ESP8266WiFi.h>
#include <espnow.h>
// ***this example is tested for both ESP8266 and adafruit esp8266***
uint8_t data;
#define REF_PIN 5
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
digitalWrite(REF_PIN, !digitalRead(REF_PIN));
data = incomingData[0];
uint8_t cmd[] = {
0xAB,
(uint8_t)data,
0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
0xAB, 0xAB, 0xAB, 0xAB
};
Serial.write(cmd, sizeof(cmd));
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(REF_PIN, OUTPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
}
```