Cannot get ESP NOW to work on ESP32S3 DevKitC

I am trying to get two ESP32S3 DevKitC boards to communicate using ESP NOW. I am using the default ESP NOW examples from here in PlatformIO. This is the example code for the master:

#include <Arduino.h>
#include “ESP32_NOW.h”
#include “WiFi.h”

#include <esp_mac.h>  // For the MAC2STR and MACSTR macros

/* Definitions */

#define ESPNOW_WIFI_CHANNEL 6

/* Classes */

// Creating a new class that inherits from the ESP_NOW_Peer class is required.

class ESP_NOW_Broadcast_Peer : public ESP_NOW_Peer {
public:
// Constructor of the class using the broadcast address
ESP_NOW_Broadcast_Peer(uint8_t channel, wifi_interface_t iface, const uint8_t *lmk) : ESP_NOW_Peer(ESP_NOW.BROADCAST_ADDR, channel, iface, lmk) {}

// Destructor of the class
~ESP_NOW_Broadcast_Peer() {
remove();
}

// Function to properly initialize the ESP-NOW and register the broadcast peer
bool begin() {
if (!ESP_NOW.begin() || !add()) {
log_e(“Failed to initialize ESP-NOW or register the broadcast peer”);
return false;
}
return true;
}

// Function to send a message to all devices within the network
bool send_message(const uint8_t *data, size_t len) {
if (!send(data, len)) {
log_e(“Failed to broadcast message”);
return false;
}
return true;
}
};

/* Global Variables */

uint32_t msg_count = 0;

// Create a broadcast peer object
ESP_NOW_Broadcast_Peer broadcast_peer(ESPNOW_WIFI_CHANNEL, WIFI_IF_STA, nullptr);

/* Main */

void setup() {
Serial.begin(115200);

// Initialize the Wi-Fi module
WiFi.mode(WIFI_STA);
WiFi.setChannel(ESPNOW_WIFI_CHANNEL);
while (!WiFi.STA.started()) {
delay(100);
}

Serial.println(“ESP-NOW Example - Broadcast Master”);
Serial.println(“Wi-Fi parameters:”);
Serial.println("  Mode: STA");
Serial.println("  MAC Address: " + WiFi.macAddress());
Serial.printf("  Channel: %u\n", ESPNOW_WIFI_CHANNEL);

// Register the broadcast peer
if (!broadcast_peer.begin()) {
Serial.println(“Failed to initialize broadcast peer”);
Serial.println(“Reebooting in 5 seconds…”);
delay(5000);
ESP.restart();
}

Serial.printf(“ESP-NOW version: %d, max data length: %d\n”, ESP_NOW.getVersion(), ESP_NOW.getMaxDataLen());

Serial.println(“Setup complete. Broadcasting messages every 5 seconds.”);
}

void loop() {
// Broadcast a message to all devices within the network
char data[32];
snprintf(data, sizeof(data), “Hello, World! #%” PRIu32, msg_count++);

Serial.printf(“Broadcasting message: %s\n”, data);

if (!broadcast_peer.send_message((uint8_t *)data, sizeof(data))) {
Serial.println(“Failed to broadcast message”);
}

delay(5000);
}

And this is the example code for the slave:

#include <Arduino.h>
#include “ESP32_NOW.h”
#include “WiFi.h”

#include <esp_mac.h>  // For the MAC2STR and MACSTR macros

#include 

/* Definitions */

#define ESPNOW_WIFI_CHANNEL 6

/* Classes */

// Creating a new class that inherits from the ESP_NOW_Peer class is required.

class ESP_NOW_Peer_Class : public ESP_NOW_Peer {
public:
// Constructor of the class
ESP_NOW_Peer_Class(const uint8_t *mac_addr, uint8_t channel, wifi_interface_t iface, const uint8_t *lmk) : ESP_NOW_Peer(mac_addr, channel, iface, lmk) {}

// Destructor of the class
~ESP_NOW_Peer_Class() {}

// Function to register the master peer
bool add_peer() {
if (!add()) {
log_e(“Failed to register the broadcast peer”);
return false;
}
return true;
}

// Function to print the received messages from the master
void onReceive(const uint8_t *data, size_t len, bool broadcast) {
Serial.printf(“Received a message from master " MACSTR " (%s)\n”, MAC2STR(addr()), broadcast ? “broadcast” : “unicast”);
Serial.printf("  Message: %s\n", (char *)data);
}
};

/* Global Variables */

// List of all the masters. It will be populated when a new master is registered
// Note: Using pointers instead of objects to prevent dangling pointers when the vector reallocates
std::vector<ESP_NOW_Peer_Class *> masters;

/* Callbacks */

// Callback called when an unknown peer sends a message
void register_new_master(const esp_now_recv_info_t *info, const uint8_t *data, int len, void *arg) {
if (memcmp(info->des_addr, ESP_NOW.BROADCAST_ADDR, 6) == 0) {
Serial.printf(“Unknown peer " MACSTR " sent a broadcast message\n”, MAC2STR(info->src_addr));
Serial.println(“Registering the peer as a master”);

ESP_NOW_Peer_Class *new_master = new ESP_NOW_Peer_Class(info->src_addr, ESPNOW_WIFI_CHANNEL, WIFI_IF_STA, nullptr);
if (!new_master->add_peer()) {
  Serial.println("Failed to register the new master");
  delete new_master;
  return;
}
masters.push_back(new_master);
Serial.printf("Successfully registered master " MACSTR " (total masters: %lu)\n", MAC2STR(new_master->addr()), (unsigned long)masters.size());

} else {
// The slave will only receive broadcast messages
log_v("Received a unicast message from " MACSTR, MAC2STR(info->src_addr));
log_v(“Igorning the message”);
}
}

/* Main */

void setup() {
Serial.begin(115200);

// Initialize the Wi-Fi module
WiFi.mode(WIFI_STA);
WiFi.setChannel(ESPNOW_WIFI_CHANNEL);
while (!WiFi.STA.started()) {
delay(100);
}

Serial.println(“ESP-NOW Example - Broadcast Slave”);
Serial.println(“Wi-Fi parameters:”);
Serial.println("  Mode: STA");
Serial.println("  MAC Address: " + WiFi.macAddress());
Serial.printf("  Channel: %u\n", ESPNOW_WIFI_CHANNEL);

// Initialize the ESP-NOW protocol
if (!ESP_NOW.begin()) {
Serial.println(“Failed to initialize ESP-NOW”);
Serial.println(“Reeboting in 5 seconds…”);
delay(5000);
ESP.restart();
}

Serial.printf(“ESP-NOW version: %d, max data length: %d\n”, ESP_NOW.getVersion(), ESP_NOW.getMaxDataLen());

// Register the new peer callback
ESP_NOW.onNewPeer(register_new_master, nullptr);

Serial.println(“Setup complete. Waiting for a master to broadcast a message…”);
}

void loop() {
// Print debug information every 10 seconds
static unsigned long last_debug = 0;
if (millis() - last_debug > 10000) {
last_debug = millis();
Serial.printf(“Registered masters: %lu\n”, (unsigned long)masters.size());
for (size_t i = 0; i < masters.size(); i++) {
if (masters[i]) {
Serial.printf("  Master %lu: " MACSTR “\n”, (unsigned long)i, MAC2STR(masters[i]->addr()));
}
}
}

delay(100);
}

The .ini file contains:

[env:esp32-s3-devkitc-1]

platform = https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip

board = esp32-s3-devkitc-1

framework = arduino

monitor_speed = 115200

On the serial monitor of the slave, I just get “Registered masters: 0” over and over. On the serial monitor of the master, I get “Broadcasting message: Hello, World! #XX”.

Does anyone have any ideas of what I can try changing to get this to work?