ESP-Now-Serial-Bridge on M5Atom S3
-
Hi,
First Post so be gentle please :)
I’m trying to get this code to work on a M5Atom S3 with Arduino IDE./********************************************************************************* * ESP-Now-Serial-Bridge * * ESP32 based serial bridge for transmitting serial data between two boards * * The primary purpose of this sketch was to enable a MAVLink serial connection, * which I successfully tested at 57600 bps. In theory, much faster buad rates * should work fine, but I have not tested faster than 115200. * * Range is easily better than regular WiFi, however an external antenna may be * required for truly long range messaging, to combat obstacles/walls, and/or * to achieve success in an area saturated with 2.4GHz traffic. * * I made heavy use of compiler macros to keep the sketch compact/efficient. * * To find the MAC address of each board, uncomment the #define DEBUG line, * and monitor serial output on boot. Set the OPPOSITE board's IP address * as the value for RECVR_MAC in the macros at the top of the sketch. * * The BLINK_ON_* macros should be somewhat self-explanatory. If your board has a built-in * LED (or you choose to wire an external one), it can indicate ESP-Now activity as * defined by the macros you choose to enable. * * When uploading the sketch, be sure to define BOARD1 or BOARD2 as appropriate * before compiling. * * -- Yuri - Sep 2021 * * Based this example - https://randomnerdtutorials.com/esp-now-two-way-communication-esp32/ * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files. * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. *********************************************************************************/ #include <esp_now.h> #include <WiFi.h> #include <esp_wifi.h> #define BOARD1 // BOARD1 or BOARD2 #ifdef BOARD1 #define RECVR_MAC {0x94, 0xB9, 0x7E, 0xD9, 0xDD, 0xD4} // replace with your board's address //#define BLINK_ON_SEND //#define BLINK_ON_SEND_SUCCESS #define BLINK_ON_RECV #else #define RECVR_MAC {0x94, 0xB9, 0x7E, 0xE4, 0x8D, 0xFC} // replace with your board's address //#define BLINK_ON_SEND #define BLINK_ON_SEND_SUCCESS //#define BLINK_ON_RECV #endif #define WIFI_CHAN 13 // 12-13 only legal in US in lower power mode, do not use 14 #define BAUD_RATE 115200 #define TX_PIN 1 // default UART0 is pin 1 (shared by USB) #define RX_PIN 3 // default UART0 is pin 3 (shared by USB) #define SER_PARAMS SERIAL_8N1 // SERIAL_8N1: start/stop bits, no parity #define BUFFER_SIZE 250 // max of 250 bytes //#define DEBUG // for additional serial messages (may interfere with other messages) #ifndef LED_BUILTIN #define LED_BUILTIN 2 // some boards don't have an LED or have it connected elsewhere #endif const uint8_t broadcastAddress[] = RECVR_MAC; // wait for double the time between bytes at this serial baud rate before sending a packet // this *should* allow for complete packet forming when using packetized serial comms const uint32_t timeout_micros = (int)(1.0 / BAUD_RATE * 1E6) * 20; uint8_t buf_recv[BUFFER_SIZE]; uint8_t buf_send[BUFFER_SIZE]; uint8_t buf_size = 0; uint32_t send_timeout = 0; esp_now_peer_info_t peerInfo; // scope workaround for arduino-esp32 v2.0.1 #if defined(DEBUG) || defined(BLINK_ON_SEND_SUCCESS) uint8_t led_status = 0; void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { #ifdef DEBUG if (status == ESP_NOW_SEND_SUCCESS) { Serial.println("Send success"); } else { Serial.println("Send failed"); } #endif #ifdef BLINK_ON_SEND_SUCCESS if (status == ESP_NOW_SEND_SUCCESS) { led_status = ~led_status; // this function happens too fast to register a blink // instead, we latch on/off as data is successfully sent digitalWrite(LED_BUILTIN, led_status); return; } // turn off the LED if send fails led_status = 0; digitalWrite(LED_BUILTIN, led_status); #endif } #endif void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { #ifdef BLINK_ON_RECV digitalWrite(LED_BUILTIN, HIGH); #endif memcpy(&buf_recv, incomingData, sizeof(buf_recv)); Serial.write(buf_recv, len); #ifdef BLINK_ON_RECV digitalWrite(LED_BUILTIN, LOW); #endif #ifdef DEBUG Serial.print("\n Bytes received: "); Serial.println(len); #endif } void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(BAUD_RATE, SER_PARAMS, RX_PIN, TX_PIN); Serial.println(send_timeout); WiFi.mode(WIFI_STA); #ifdef DEBUG Serial.print("ESP32 MAC Address: "); Serial.println(WiFi.macAddress()); #endif if (esp_wifi_set_channel(WIFI_CHAN, WIFI_SECOND_CHAN_NONE) != ESP_OK) { #ifdef DEBUG Serial.println("Error changing WiFi channel"); #endif return; } if (esp_now_init() != ESP_OK) { #ifdef DEBUG Serial.println("Error initializing ESP-NOW"); #endif return; } #if defined(DEBUG) || defined(BLINK_ON_SEND_SUCCESS) esp_now_register_send_cb(OnDataSent); #endif // esp_now_peer_info_t peerInfo; // scope workaround for arduino-esp32 v2.0.1 memcpy(peerInfo.peer_addr, broadcastAddress, 6); peerInfo.channel = WIFI_CHAN; peerInfo.encrypt = false; if (esp_now_add_peer(&peerInfo) != ESP_OK){ #ifdef DEBUG Serial.println("Failed to add peer"); #endif return; } esp_now_register_recv_cb(OnDataRecv); } void loop() { // read up to BUFFER_SIZE from serial port if (Serial.available()) { while (Serial.available() && buf_size < BUFFER_SIZE) { buf_send[buf_size] = Serial.read(); send_timeout = micros() + timeout_micros; buf_size++; } } // send buffer contents when full or timeout has elapsed if (buf_size == BUFFER_SIZE || (buf_size > 0 && micros() >= send_timeout)) { #ifdef BLINK_ON_SEND digitalWrite(LED_BUILTIN, HIGH); #endif esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &buf_send, buf_size); buf_size = 0; #ifdef DEBUG if (result == ESP_OK) { Serial.println("Sent!"); } else { Serial.println("Send error"); } #endif #ifdef BLINK_ON_SEND digitalWrite(LED_BUILTIN, LOW); #endif } }
In the compilation i get this error, can someone help me?
/private/var/folders/x9/48x6g6gs41n1h1yplgqqpvy00000gn/T/.arduinoIDE-unsaved2025728-672-1wfntf6.6pf8/ESP_NOW_Serial/ESP_NOW_Serial.ino: In function 'void setup()': /private/var/folders/x9/48x6g6gs41n1h1yplgqqpvy00000gn/T/.arduinoIDE-unsaved2025728-672-1wfntf6.6pf8/ESP_NOW_Serial/ESP_NOW_Serial.ino:124:15: error: no matching function for call to 'HWCDC::begin(int, SerialConfig, int, int)' 124 | Serial.begin(BAUD_RATE, SER_PARAMS, RX_PIN, TX_PIN); In file included from /Users/lb/Library/Arduino15/packages/esp32/hardware/esp32/3.3.0/cores/esp32/HardwareSerial.h:53, from /Users/lb/Library/Arduino15/packages/esp32/hardware/esp32/3.3.0/cores/esp32/Arduino.h:202, from /Users/lb/Library/Caches/arduino/sketches/F8F106E4318284D476156997E0306F8D/sketch/ESP_NOW_Serial.ino.cpp:1: /Users/lb/Library/Arduino15/packages/esp32/hardware/esp32/3.3.0/cores/esp32/HWCDC.h:61:8: note: candidate: 'void HWCDC::begin(long unsigned int)' 61 | void begin(unsigned long baud = 0); | ^~~~~ /Users/lb/Library/Arduino15/packages/esp32/hardware/esp32/3.3.0/cores/esp32/HWCDC.h:61:8: note: candidate expects 1 argument, 4 provided /private/var/folders/x9/48x6g6gs41n1h1yplgqqpvy00000gn/T/.arduinoIDE-unsaved2025728-672-1wfntf6.6pf8/ESP_NOW_Serial/ESP_NOW_Serial.ino:163:28: error: invalid conversion from 'void (*)(const uint8_t*, const uint8_t*, int)' {aka 'void (*)(const unsigned char*, const unsigned char*, int)'} to 'esp_now_recv_cb_t' {aka 'void (*)(const esp_now_recv_info*, const unsigned char*, int)'} [-fpermissive] 163 | esp_now_register_recv_cb(OnDataRecv); | ^~~~~~~~~~ | | | void (*)(const uint8_t*, const uint8_t*, int) {aka void (*)(const unsigned char*, const unsigned char*, int)} In file included from /private/var/folders/x9/48x6g6gs41n1h1yplgqqpvy00000gn/T/.arduinoIDE-unsaved2025728-672-1wfntf6.6pf8/ESP_NOW_Serial/ESP_NOW_Serial.ino:38: /Users/lb/Library/Arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.5-b66b5448-v1/esp32s3/include/esp_wifi/include/esp_now.h:164:54: note: initializing argument 1 of 'esp_err_t esp_now_register_recv_cb(esp_now_recv_cb_t)' 164 | esp_err_t esp_now_register_recv_cb(esp_now_recv_cb_t cb); | ~~~~~~~~~~~~~~~~~~^~ exit status 1 Compilation error: no matching function for call to 'HWCDC::begin(int, SerialConfig, int, int)'
Thanks in advance