GithubHelp home page GithubHelp logo

leodesigner / espnowfloodingmeshlibrary2 Goto Github PK

View Code? Open in Web Editor NEW
29.0 5.0 8.0 78 KB

ESP8266/ESP32 ESPNOW/Broadcast Arduino Flooding mesh library

License: Mozilla Public License 2.0

C++ 90.22% C 9.78%

espnowfloodingmeshlibrary2's Introduction

ESPNOW flooding mesh library

See example project: https://github.com/leodesigner/esp_mesh_pir_sensor

ESPNOW flooding mesh library, version 2 forked from https://github.com/arttupii/espNowFloodingMeshLibrary

Features added/bugfixes since version 2:

  • a lot of bugfixes and improvements, battle tested with 15+ nodes
  • telemetry stats (optional)
  • time sync after bootup is now possible from any node, not only master
  • new INSTANT_TIME_SYNC_REQ_ANNONCE internal message for node annoncement
  • led blinking support on message receive
  • mesh begin can now run without WiFi disconnect (speeds up boot time, important for PIR sensor sleeping nodes)
  • new function for sending messages with specific message ID (future support for multi mqtt gataway setup)
  • message roundtrip reduced as much as possible to get more reponsive real-time system

Features:

  • Maximum number of slave nodes: unlimited
  • Number of master nodes: 1
  • Master node sends time sync message every 10s to all nodes. (this synchronizes the clocks of the nodes)
  • a message cache. If a received packet is already found in the cache --> it will not be retransmitted or handled again
  • Every message has a time stamp. If the time stamp is too old (or from the future), the message will be rejected.
  • All messages are crypted (AES128)
  • Flooding mesh support
  • TTL support (time to life)
  • ESP32, ESP2866, ESP01
  • Battery node support (Battery nodes do not relay messages)
  • Request&Reply support
  • Each Nodes can communicate with each other
  • Ping about 40-60ms
  • Nearly instant connection after poweron
  • Retransmission support
  • Request/Reply support
  • Send and pray support (Send a message to all nodes without reply/ack)
  • Easy to configure (Set only the same bsid, iv and secred key to all nodes)
  • Works on esp-now broadcast
  • Arduino

Flooding mesh network

In this network example ttl must be >= 4

               SlaveNode
                   |
                   |         Message from master to BatteryNode
                   |   ---------------------------+
                   |                     ttl=4    |
SlaveNode-------MasterNode-------------SlaveNode  |
                   |                     |        |
                   |                     |        |
                   |                     |        |
                   |                     |        |
               SlaveNode                 |        |
                   |                     |        |
                   |                     |        |
                   |                     |        +------------------------------------------------>
                   |                     | ttl=3         ttl=2              ttl=1
SlaveNode-------SlaveNode-------------SlaveNode-------SlaveNode-------------SlaveNode---------BatteryNode
   |               |                     |
   |               |                     |
   |               |                     |
   |               |                     |
   +-----------SlaveNode-----------------+

Message headers

+---------------------------------------------------------------------------------------+
| AES128 Crypted header (Mesh-header part2)                                             |
|   ---------------------------------------------------------------------------------   |
|   |msgId         | length        |  replyId  |   time stamp  |      data          |   |
|   ---------------------------------------------------------------------------------   |
|       1 byte       1 byte           4 byte       4-byte              230              |
+---------------------------------------------------------------------------------------+
                                                        ^
                                                         \
+---------------------------------------------------------\-----------------------------+
| Mesh-header part 1                                       \                            |
|   ---------------------------------------------------------------------------------   |
|   |bsId         | ttl        |  crc    |        AES128 crypted data               |   |
|   ---------------------------------------------------------------------------------   |
|       3 byte       1 byte       2 byte            240-byte                            |
+---------------------------------------------------------------------------------------+
                                                                    ^
                                                                     \
+-------------------------------------------------------------------- \---------------+
| Espnow-header                                                        \              |
|   -------------------------------------------------------------------------------   |
|   | Element ID | Length | Organization Identifier | Type | Version |    Body    |   |
|   -------------------------------------------------------------------------------   |
|       1 byte     1 byte            3 bytes         1 byte   1 byte   0~250 bytes    |
|                                                                                     |
+-------------------------------------------------------------------------------------+
                                                                    ^                                                                  
                                                                     \
+---------------------------------------------------------------------\--------------------+
|                                                                      \                   |                                             
| ---------------------------------------------------------------------------------------- |
| |MAC Header | Category Code | Organization Identifier | Vendor Specific Content | FCS  | |
| ---------------------------------------------------------------------------------------- |
|                   1 byte              3 bytes                  7~255 bytes               |
+------------------------------------------------------------------------------------------+
```                                                                                        ยด

## Create master node:
```c++
#include <EspNowFloodingMesh.h>

#define ESP_NOW_CHANNEL 1
//AES 128bit
unsigned char secredKey[] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE, 0xFF};

void espNowFloodingMeshRecv(const uint8_t *data, int len){
  if(len>0) {
    Serial.println((const char*)data);
  }
}

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

  espNowFloodingMesh_RecvCB(espNowFloodingMeshRecv);
  espNowFloodingMesh_secredkey(secredKey);
  espNowFloodingMesh_begin(ESP_NOW_CHANNEL);
  espNowFloodingMesh_setToMasterRole(true,3); //Set ttl to 3. TIME_SYNC message use this ttl
  espNowFloodingMesh_ErrorDebugCB([](int level, const char *str) {
    Serial.println(str);
  });
}

void loop() {
  static unsigned long m = millis();
  if(m+5000<millis()) {
    char message[] = "MASTER HELLO MESSAGE";
    espNowFloodingMesh_send((uint8_t*)message, sizeof(message), 3); //set ttl to 3
    m = millis();
  }
  espNowFloodingMesh_loop();
  delay(10);
}

Create slave node:

#include <EspNowFloodingMesh.h>

#define ESP_NOW_CHANNEL 1
//AES 128bit
unsigned char secredKey[] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};

void espNowFloodingMeshRecv(const uint8_t *data, int len){
  if(len>0) {
    Serial.println((const char*)data);
  }
}

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

  espNowFloodingMesh_RecvCB(espNowFloodingMeshRecv);
  espNowFloodingMesh_begin(ESP_NOW_CHANNEL);
  espNowFloodingMesh_secredkey(secredKey);

  //Ask instant sync from master.
  espNowFloodingMesh_requestInstantTimeSyncFromMaster();
  espNowFloodingMesh_ErrorDebugCB([](int level, const char *str) {
    Serial.println(str);
  });
  while(espNowFloodingMesh_isSyncedWithMaster()==false);
}

void loop() {
  static unsigned long m = millis();
  if(m+5000<millis()) {
    char message[] = "SLAVE HELLO MESSAGE";
    espNowFloodingMesh_send((uint8_t*)message, sizeof(message), 3); //set ttl to 3
    m = millis();
  }
  espNowFloodingMesh_loop();
  delay(10);
}

Create slave node (Battery):

#include <EspNowFloodingMesh.h>
#include <time.h>
#define ESP_NOW_CHANNEL 1
//AES 128bit
unsigned char secredKey[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};

void espNowFloodingMeshRecv(const uint8_t *data, int len) {
  if (len > 0) {
    Serial.println((const char*)data);
  }
}

void setup() {
  Serial.begin(115200);
  //Set device in AP mode to begin with
  espNowFloodingMesh_RecvCB(espNowFloodingMeshRecv);
  espNowFloodingMesh_begin(ESP_NOW_CHANNEL);
  espNowFloodingMesh_secredkey(secredKey);
  espNowFloodingMesh_setToBatteryNode();
}

void loop() {
  static unsigned long m = millis();

  //Ask instant sync from master.
  espNowFloodingMesh_requestInstantTimeSyncFromMaster();
  while (espNowFloodingMesh_isSyncedWithMaster() == false);
  char message[] = "SLAVE(12) HELLO MESSAGE";
  espNowFloodingMesh_send((uint8_t*)message, sizeof(message), 0); //set ttl to 3
  espNowFloodingMesh_loop();
  ESP.deepSleep(60000, WAKE_RF_DEFAULT); //Wakeup every minute
}

Send message and get reply:

Send "MARCO" to other nodes

#include <EspNowFloodingMesh.h>

#define ESP_NOW_CHANNEL 1
//AES 128bit
unsigned char secredKey[] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE, 0xFF};

void espNowFloodingMeshRecv(const uint8_t *data, int len, uint32_t replyPrt){
}

void setup() {
  Serial.begin(115200);
  //Set device in AP mode to begin with
  espNowFloodingMesh_RecvCB(espNowFloodingMeshRecv);
  espNowFloodingMesh_secredkey(secredKey);
  espNowFloodingMesh_begin(ESP_NOW_CHANNEL);
  espNowFloodingMesh_setToMasterRole(true,3); //Set ttl to 3.
  espNowFloodingMesh_ErrorDebugCB([](int level, const char *str) {
    Serial.println(str);
  });
}

void loop() {
  static unsigned long m = millis();
  if(m+5000<millis()) {
    char message2[] = "MARCO";
    espNowFloodingMesh_sendAndHandleReply((uint8_t*)message2, sizeof(message2),3,[](const uint8_t *data, int len){
        if(len>0) { //Handle reply from other node
          Serial.print("Reply: "); //Prinst POLO.
          Serial.println((const char*)data);
        }
    });
    m = millis();
  }
  espNowFloodingMesh_loop();
  delay(10);
}

Answer to "MARCO" and send "POLO"

#include <EspNowFloodingMesh.h>

#define ESP_NOW_CHANNEL 1
//AES 128bit
unsigned char secredKey[] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE, 0xFF};

void espNowFloodingMeshRecv(const uint8_t *data, int len, uint32_t replyPrt){
  if(len>0) {
    if(replyPrt) { //Reply asked. Send reply
        char m[]="POLO";
        Serial.println((char*)data); //Prints MARCO
        espNowFloodingMesh_sendReply((uint8_t*)m, sizeof(m), 0, replyPrt); //Special function for reply messages. Only the sender gets this message.
    } else {
      //No reply asked... All others messages are handled in here.
    }
  }
}

void setup() {
  Serial.begin(115200);
  //Set device in AP mode to begin with
  espNowFloodingMesh_RecvCB(espNowFloodingMeshRecv);
  espNowFloodingMesh_secredkey(secredKey);
  espNowFloodingMesh_begin(ESP_NOW_CHANNEL);

  espNowFloodingMesh_requestInstantTimeSyncFromMaster();
  espNowFloodingMesh_ErrorDebugCB([](int level, const char *str) {
    Serial.println(str);
  });
  while (espNowFloodingMesh_isSyncedWithMaster() == false);
}

void loop() {
  espNowFloodingMesh_loop();
  delay(10);
}

espnowfloodingmeshlibrary2's People

Contributors

arttupii avatar leodesigner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

espnowfloodingmeshlibrary2's Issues

Esp32-c3 compatibility ?

Hi, thank's for your work !

I'm working with your fork. That's working fine with several esp32 like devkit and weemos d1mini but I can't get it working with the esp32-c3 board.
Any advice ?
Thank you again mate !

Thanks and a few suggestions for telemetry

Hello leodesigner,
I wanted to thank you very much for continuing the project.

I think the Floodingmesh library is the best mesh library for Arduino/ESP right now and I've already used it (the original one) for a prototype. (btw: I used a "Olimex Gateway" as Gateway between Mesh and Ethernet. So I did not need the serial connection or a Raspberry PI...)
At the moment I'm stuck on another project, but I want to continue working with your library later :-)

The idea with the telemetry data is great, I've already asked arttupii for a diagnosis function ...
Maybe the RSSI level of the slave will also be included in the future?
A second wish would be if there is a "message header" with a simple routing table:
e.g. JSON {"2": [{"n": 1, "r": - 68}, {"n": 255, "r": 0}, {"n": 1, "r": 0}, {"n": 0, "r": 0}]}
(borrowed from:https://nootropicdesign.com/projectlab/2018/10/20/lora-mesh-networking/)
So it would be possible to visualize the entire network like as:
meshNetwork

Anyway, thank you once again for developing the lib further, ๐Ÿ‘
I wish you a wonderful holiday and a happy new year 2021

upgrade

Hi! Your library is amazing!! I admire you how much time you put into modifying this library. I've been using it for a while now and I have a question. Will there ever be an upgrade to be able to use the library for esp32 version 2.0 or higher ??

[BUG] Compile error with ESP32

There is a bug in wifi802_11.cpp, line 136:

The enumerator ESP_IF_WIFI_STA is invalid. It should be: WIFI_IF_STA.

I don't have my own compile logs saved, so I'm lazy and refers to the second error in this post in arttupii's repo:

.pio/libdeps/esp32doit-devkit-v1_COM4/EspNowFloodingMesh/wifi802_11.cpp: In function 'void wifi_802_11_send(const uint8_t*, int)':
.pio/libdeps/esp32doit-devkit-v1_COM4/EspNowFloodingMesh/wifi802_11.cpp:125:78: error: cannot convert 'esp_interface_t' to 'wifi_interface_t'
esp_wifi_80211_tx(ESP_IF_WIFI_STA, buf, sizeof(raw_HEADER) + len+ 2, true);
^
In file included from .pio/libdeps/esp32doit-devkit-v1_COM4/EspNowFloodingMesh/wifi802_11.cpp:4:
C:/Users/marco/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include/esp_wifi.h:984:46: note: initializing argument 1 of 'esp_err_t esp_wifi_80211_tx(wifi_interface_t, const void*, int, bool)'
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);

Missing functions

Hi, thanks for you job

I cannot to compile all the slave examples, i cant find the espNowFloodingMesh_isSyncedWithMaster(); and the espNowFloodingMesh_requestInstantTimeSyncFromMaster(); functions

Saludos!

Problem compiling Platformio ESP32

They are testing your library, but when compiling VC with Platformio, I have errors in SLAVE:

espNowFloodingMesh_requestInstantTimeSyncFromMaster();
while(espNowFloodingMesh_isSyncedWithMaster()==false);

src/main.cpp: In function 'void setup()':
src/main.cpp:38:3: error: 'espNowFloodingMesh_requestInstantTimeSyncFromMaster' was not declared in this scope

src/main.cpp:39:9: error: 'espNowFloodingMesh_isSyncedWithMaster' was not declared in this scope

two functions are missing in the libraries.

Messages recieved but ignored due to CRC mismatch, when mixing ESP8266 and ESP32 devices

I'm trying to implement the esp_mesh_pir_sensor node, in combination with the USB master esp_mesh_gw_node . (both slightly modified, mostly cosmetic...)

It works when both devices are of the same ESP category, ESP8266 or ESP32.

But when mixing a ESP8266 with a ESP32, regardless of which type is master or node, I get a CRC error when receiving (with DEBUG_PRINTS activated), and all messages gets ignored - in both directions, on both devices.

The actual messages are received and decrypted, seemingly OK. But somehow either the CRC calculation, or the content for the calculation, is handled differently by the two ESP types.
As a "copy-paste C++ amateur", I'd really need some help tracking this issue.

Here are some serial log outputs with DEBUG_PRINTS activated. (Timestamps are from my terminal app)

ESP32 master - Receiving message from ESP8266 node:

[19834.07h.33m.20s.134] Recv from: 2c:3a:e8:32:90:b6
[19834.07h.33m.20s.134] REC[RAW]:
[19834.07h.33m.20s.135]            01 01 01 03 7B 06 D1 81 83 E3 01 8C F0 5C 21 2A  ....{........\!*
[19834.07h.33m.20s.138]            15 01 D3 E8 68 89 B0 1E 5F A0 48 B4 7D A2 80 02  ....h..._.H.}...
[19834.07h.33m.20s.142]            49 24 D6 82 2C BE  I$..,.
[19834.07h.33m.20s.144]                    Length: 38
[19834.07h.33m.20s.145] REC:
[19834.07h.33m.20s.145]            01 01 01 03 7B 06 07 05 01 4C 16 DC 00 00 00 00  ....{....L......
[19834.07h.33m.20s.148]            00 00 00 00  ....
[19834.07h.33m.20s.149]                    Length: 20
[19834.07h.33m.20s.151] REC HEADER:
[19834.07h.33m.20s.152]            01 01 01 03 7B 06 07 05 01 4C 16 DC 00 00 00  ....{....L.....
[19834.07h.33m.20s.155]                    Length: 15
[19834.07h.33m.20s.156] #CRC: 29879 1659
[19834.07h.33m.20s.156] 0x1,0x1,0x1,0x3,0x7B,
[19834.07h.33m.20s.158] 
[19834.07h.33m.20s.158]            01 01 01 03 7B 06 07 05 01 4C 16 DC 00 00 00 00  ....{....L......
[19834.07h.33m.20s.162]            00 00 00 00 54 65 73 74 31 00 00 00 00 00 00 00  ....Test1.......
[19834.07h.33m.20s.164]            00 00 00 00 00 01 92 AF BB B6 BF 12 AC 5B 05 D6  .............[..
[19834.07h.33m.20s.167]            74 01 C8 EA BE 08 61 6C 75 65 20 7B 22 42 61 74  t.....alue.{"Bat
[19834.07h.33m.20s.171]            74 65 72 79 56 6F 6C 74 22 3A 33 2E 36 33 7D 0A  teryVolt":3.63}.
[19834.07h.33m.20s.174]            00 00 00 00 00 01 14 36 68 61 A6 64 7D 34 CF AF  .......6ha.d}4..
[19834.07h.33m.20s.178]            8E 28 BA 44 DB C0 3A 31 33 34 30 2C 22 43 6F 75  .(.D..:1340,"Cou
[19834.07h.33m.20s.181]            6E 74 65 72 22 3A 39 31 35 2C 22 54 69 6D 65 42  nter":915,"TimeB
[19834.07h.33m.20s.184]            6F 6F 74 22 3A 34 32 7D 0A 00 00 00 00 00 00 00  oot":42}........
[19834.07h.33m.20s.188]            00 00 00 00 00 00 0C 17 00 69 95 09 4F B0 6B F6  .........i..O.k.
[19834.07h.33m.20s.191]            B0 6E AE 5F 8F 38 FB 3F 00 00 00 00 00 00 00 00  .n._.8.?........
[19834.07h.33m.20s.195]            00 00 00 00 48 49 08 40 F0 BF 00 40 30 0A 06 00  ....HI.@...@0...
[19834.07h.33m.20s.198]            D4 FF 08 80 F0 B1 FC 3F  .......?
[19834.07h.33m.20s.199]                    Length: 200
[19834.07h.33m.20s.201] 
[19834.07h.33m.20s.202] 
[19834.07h.33m.20s.202]            01 01 01 03 7B 06 D1 81 83 E3 01 8C F0 5C 21 2A  ....{........\!*
[19834.07h.33m.20s.205]            15 01 D3 E8 68 89 B0 1E 5F A0 48 B4 7D A2 80 02  ....h..._.H.}...
[19834.07h.33m.20s.208]            49 24 D6 82 2C BE 00 00 00 F7 2C 01 00 EC 96 FC  I$..,.....,.....
[19834.07h.33m.20s.212]            3F EC 96 FC 3F F7 05 B3 99 C5 C0 E0 5E FD C4 53  ?...?.......^..S
[19834.07h.33m.20s.214]            7B DA E4 75 C2 06 F6 BC AA E5 B8 3D 81 5A C3 80  {..u.......=.Z..
[19834.07h.33m.20s.219]            9F FA 31 57 4A 5F 00 00 00 00 00 00 00 00 00 00  ..1WJ_..........
[19834.07h.33m.20s.222]            00 4C D3 FC 3F E4 10 0C C0 90 D3 FC 3F 00 00 00  .L..?.......?...
[19834.07h.33m.20s.224]            00 12 64 00 00 07 00 00 00 00 00 00 00 00 7F D2  ..d.............
[19834.07h.33m.20s.228]            06 00 00 04 01 80 00 00 00 74 D1 23 F0 D4 03 FC  .........t.#....
[19834.07h.33m.20s.231]            3F 1C AA 4F 63 AB 00 00 00 A0 00 01 BE CB 27 5B  ?..Oc.........'[
[19834.07h.33m.20s.235]            FA 14 FB 05 4C 00 00 40 76 C1 10 0C 00 D0 00 00  ....L..@v.......
[19834.07h.33m.20s.238]            00 FF FF FF FF D0 00 00 00 FF FF FF FF FF FF 24  ...............$
[19834.07h.33m.20s.241]            6F 28 A5 D3 E0 FF FF FF  o(......
[19834.07h.33m.20s.244]                    Length: 200

Corresponding output from the ESP8266 node (first time-synk request after boot):

[19834.07h.33m.20s.127] Annonce + Request instant time sync from mesh.
[19834.07h.33m.20s.128] Send0:
[19834.07h.33m.20s.128]            01 01 01 03 7B 06 07 05 01 4C 16 DC 00 00 00 00  ....{....L......
[19834.07h.33m.20s.129]            00 00 00 00 54 65 73 74 31  ....Test1
[19834.07h.33m.20s.129]                    Length: 25
[19834.07h.33m.20s.130] Send[RAW]:
[19834.07h.33m.20s.130]            01 01 01 03 7B 06 D1 81 83 E3 01 8C F0 5C 21 2A  ....{........\!*
[19834.07h.33m.20s.131]            15 01 D3 E8 68 89 B0 1E 5F A0 48 B4 7D A2 80 02  ....h..._.H.}...
[19834.07h.33m.20s.131]            49 24 D6 82 2C BE  I$..,.
[19834.07h.33m.20s.132]                    Length: 38

ESP8266 node - Receiving message from ESP32 master (the periodic time-sync):

[19834.07h.33m.21s.781] Recv from: 24:6f:28:a5:d3:e0
[19834.07h.33m.21s.781] REC[RAW]:
[19834.07h.33m.21s.782]            01 01 01 00 CE 99 0B 8D AD 2F E7 9F 64 14 50 36  ........./..d.P6
[19834.07h.33m.21s.782]            DF D1 E3 2E 99 2E  ......
[19834.07h.33m.21s.783]                    Length: 22
[19834.07h.33m.21s.783] REC:
[19834.07h.33m.21s.783]            01 01 01 00 CE 99 02 00 29 3D 8C 8D 3A C1 24 66  ........)=..:.$f
[19834.07h.33m.21s.784]            00 00 00  ...
[19834.07h.33m.21s.784]                    Length: 19
[19834.07h.33m.21s.785] REC HEADER:
[19834.07h.33m.21s.785]            01 01 01 00 CE 99 02 00 29 3D 8C 8D 3A C1  ........)=..:.
[19834.07h.33m.21s.785]                    Length: 14
[19834.07h.33m.21s.786] #CRC: 31778 39374
[19834.07h.33m.21s.786] 
[19834.07h.33m.21s.786] 
[19834.07h.33m.21s.786]            01 01 01 00 CE 99 02 00 29 3D 8C 8D 3A C1 24 66  ........)=..:.$f
[19834.07h.33m.21s.787]            00 00 00 00 00 00 7E B6 39 98 DA B8 29 9E 65 14  ........9...).e.
[19834.07h.33m.21s.788]            EA 46 2C 72 36 24 FF FF FF FF FF FF FF FF FF FF  .F,r6$..........
[19834.07h.33m.21s.789]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.790]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.790]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.791]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.794]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.794]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.794]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.799]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.799]            FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ................
[19834.07h.33m.21s.799]            FF FF FF FF FF FF FF FF  ........
[19834.07h.33m.21s.799]                    Length: 200
[19834.07h.33m.21s.799] 
[19834.07h.33m.21s.799] 
[19834.07h.33m.21s.799]            01 01 01 00 CE 99 0B 8D AD 2F E7 9F 64 14 50 36  ........./..d.P6
[19834.07h.33m.21s.799]            DF D1 E3 2E 99 2E 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.799]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.800]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.800]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.801]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.802]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.803]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.804]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.804]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.805]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.806]            00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[19834.07h.33m.21s.807]            00 00 00 00 00 00 00 00  ........
[19834.07h.33m.21s.809]                    Length: 200

Corresponding output from the ESP32 master:

[19834.07h.33m.21s.767] Send time sync message!!
[19834.07h.33m.21s.767] Send0:
[19834.07h.33m.21s.769]            01 01 01 00 CE 99 02 00 29 3D 8C 8D 3A C1 24 66  ........)=..:.$f
[19834.07h.33m.21s.771]            00 00 00 00  ....
[19834.07h.33m.21s.773]                    Length: 20
[19834.07h.33m.21s.774] Send[RAW]:
[19834.07h.33m.21s.774]            01 01 01 00 CE 99 0B 8D AD 2F E7 9F 64 14 50 36  ........./..d.P6
[19834.07h.33m.21s.779]            DF D1 E3 2E 99 2E  ......
[19834.07h.33m.21s.785]                    Length: 22

I'm attaching the full log-files from both devices during a "one-shot" from booting of the node device, with initial time-sync request and publishing of a mqtt message, + one periodic time-sync from the master.
(The node is configured to 3 retries for both time-sync request and publishing.)
EspNowMesh GW32 - CRC-error from ESP8266 node Test1.txt
EspNowMesh Test1 - CRC-error from ESP32 master.txt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.