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
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login