espressif / esp-idf

Espressif IoT Development Framework. Official development framework for Espressif SoCs.
Apache License 2.0
13.61k stars 7.27k forks source link

WiFi Mesh unstable when parent offline (IDFGH-13875) #14720

Open michaelsimp opened 1 week ago

michaelsimp commented 1 week ago

Answers checklist.

IDF version.

v5.3.0

Espressif SoC revision.

Chip is ESP32-S3 (QFN56) (revision v0.2)

Operating System used.

Windows

How did you build your project?

VS Code IDE

If you are using Windows, please specify command line type.

PowerShell

Development Kit.

ESP32-S3-WROOM-1

Power Supply used.

USB

What is the expected behavior?

I expect the ESP32 to continue to run the application without crashing when the WIFI Mesh parent disappears. If the MESH_ROOT was powered off, I expect a MESH_NODE to assume the role of MESH_ROOT If the WIFI Router is powered off, when I restore it, I expect the mesh network to establish itself

What is the actual behavior?

  1. Sometimes these tests work perfectly. The Mesh network goes down and the nodes start scanning. If I restore the WiFi router, the Mesh network is reestablished
  2. Sometimes the Mesh network goes down, and can't recover. It doesn't crash but it doesn't scan properly and reestablish the Mesh network.
  3. Very regularly, if I power off the WiFi router the MESH_ROOT intermittently crashes OR if I power off the MESH_ROOT a MESH_NODE intermittently crash

Steps to reproduce.

  1. Power on system comprising 2 x ESP32-S3 dev boards and a Wifi router
  2. Connect a serial terminal (I am using PUTTY) to each serial port for monitoring
  3. Let the Mesh network get established and verify MESH_ROOT and MESH_NODE connected.
  4. Power off the WiFi Router
  5. In the example (logs below) the MESH_ROOT crashed

Debug Logs.

I (00:58:03.336) aWifiMesh: <MESH_EVENT_MESH_STARTED>ID:77:77:77:77:77:76
I (136546) mesh: <MESH_NWK_LOOK_FOR_NETWORK>need_scan:0x3, need_scan_router:0x0, look_for_nwk_count:1
I (00:58:03.336) aWifiMesh: This node MAC:48:ca:43:9b:53:d8
I (00:58:03.354) aWifiMesh: WiFi Mesh started successfully, heap:141084, root not fixed
WIN> I (140766) mesh: [S6]VONETS, 00:17:13:20:bd:74, channel:8, rssi:-12
I (140776) mesh: find router:[ssid_len:6]VONETS, rssi:-12, 00:17:13:20:bd:74(encrypted), new channel:8, old channel:0
I (140786) mesh: [FIND][ch:0]AP:11, otherID:0, MAP:1, idle:1, candidate:0, root:0[00:17:13:20:bd:74]router found
I (140796) mesh: [FIND:1]find a network, channel:8, cfg<channel:0, router:VONETS, 00:00:00:00:00:00>

I (00:58:07.590) aWifiMesh: <MESH_EVENT_FIND_NETWORK>new channel:8, router BSSID:00:00:00:00:00:00
W (140796) wifi:<MESH AP>adjust channel:1, secondary channel offset:1(40U)
W (140816) wifi:<MESH AP>adjust channel:8, secondary channel offset:1(40U)
I (141126) mesh: [SCAN][ch:8]AP:1, other(ID:0, RD:0), MAP:0, idle:0, candidate:1, root:0, topMAP:0[c:0,i:0][00:17:13:20:bd:74]router found<>
I (141126) mesh: 1330[SCAN]init rc[48:ca:43:9b:53:d9,-9], mine:0, voter:0
I (141136) mesh: 1368, vote myself, router rssi:-9 > voted rc_rssi:-120
I (141146) mesh: [SCAN:1/10]rc[128][48:ca:43:9b:53:d9,-9], self[48:ca:43:9b:53:d8,-9,reason:0,votes:1,idle][mine:1,voter:1(1.00)percent:1.00][128,1,48:ca:43:9b:53:d9]

I (141456) mesh: [SCAN][ch:8]AP:2, other(ID:0, RD:0), MAP:1, idle:1, candidate:1, root:0, topMAP:0[c:0,i:1][00:17:13:20:bd:74]router found<>
I (141466) mesh: [SCAN:2/10]rc[128][48:ca:43:9b:53:d9,-8], self[48:ca:43:9b:53:d8,-8,reason:0,votes:1,idle][mine:1,voter:2(0.50)percent:1.00][128,1,48:ca:43:9b:53:d9]

I (141776) mesh: [SCAN][ch:8]AP:2, other(ID:0, RD:0), MAP:1, idle:0, candidate:1, root:1, topMAP:0[c:0,i:0][00:17:13:20:bd:74]router found<>
I (141776) mesh: 7391[selection]try rssi_threshold:-78, backoff times:0, max:5<-78,-82,-85>
I (141796) mesh: [DONE]connect to parent:ESPM_3372B8, channel:8, rssi:-15, 30:30:f9:33:72:b9[layer:1, assoc:0], my_vote_num:0/voter_num:0, rc[00:00:00:00:00:00/-8/0]
I (141806) mesh: set router bssid:00:17:13:20:bd:74
I (142596) mesh: <MESH_NWK_MIE_CHANGE><><><><ROOT ADDR><><><>
I (142596) mesh: <MESH_NWK_ROOT_ADDR>from assoc, layer:2, root_addr:30:30:f9:33:72:b9, root_cap:1
I (142616) mesh: <MESH_NWK_ROOT_ADDR>idle, layer:2, root_addr:30:30:f9:33:72:b9, conflict_roots.num:0<>
I (00:58:09.409) aWifiMesh: <MESH_EVENT_ROOT_ADDRESS>root address:30:30:f9:33:72:b9
I (142616) mesh: [scan]new scanning time:600ms, beacon interval:300ms
I (142636) mesh: 2012<arm>parent monitor, my layer:2(cap:6)(node), interval:7286ms, retries:1<normal connected>
I (00:58:09.436) aWifiMesh: <MESH_EVENT_PARENT_CONNECTED>layer:1-->2, parent:30:30:f9:33:72:b9<layer2>, ID:77:77:77:77:77:76
I (00:58:09.451) mesh_netif: It was a wifi station removing stuff
Guru Meditation Error: Core  0 panic'ed (LoadProhibited). Exception was unhandled.

Core  0 register dump:
PC      : 0x4212753c  PS      : 0x00060030  A0      : 0x82127613  A1      : 0x3fcc1660
A2      : 0xffffffff  A3      : 0x00000000  A4      : 0xff000000  A5      : 0x00000001
A6      : 0x3fcc0a64  A7      : 0xff000000  A8      : 0x3c1505e4  A9      : 0x00000000
A10     : 0x3fcc0a64  A11     : 0x00000000  A12     : 0x00000101  A13     : 0x3c1505e4
A14     : 0x00000007  A15     : 0x3fcd8024  SAR     : 0x00000004  EXCCAUSE: 0x0000001c
EXCVADDR: 0xff00000c  LBEG    : 0x40056f5c  LEND    : 0x40056f72  LCOUNT  : 0xffffffff

Backtrace: 0x42127539:0x3fcc1660 0x42127610:0x3fcc16b0 0x4037e0aa:0x3fcc16d0

More Information.

My application integrates a number of IDF example programs including ip_internal_network I went back to the example project ip_internal_network and built it unmodified, and can reproduce the same problems quite readily.

Also, for when the ESP32 nodes don't completely crash, I would like to know how to restart the Mesh network in software. I have tried stopping the Mesh network with: ESP_ERROR_CHECK(esp_mesh_stop()); ESP_ERROR_CHECK(esp_mesh_deinit()); ESP_ERROR_CHECK(mesh_netifs_destroy()); // I have tried with and without this line. Without it, the logs continually report: I (135746) mesh: mesh is not started E (00:58:02.547) mesh_netif: Received with err code 16388 ESP_ERR_MESH_NOT_START

I then try to restart the Mesh network with: / mesh initialization / ESP_ERROR_CHECK(esp_mesh_init()); ESP_ERROR_CHECK(esp_mesh_set_max_layer(CONFIG_MESH_MAX_LAYER)); ESP_ERROR_CHECK(esp_mesh_set_vote_percentage(1)); ESP_ERROR_CHECK(esp_mesh_set_ap_assoc_expire(10)); / set blocking time of esp_mesh_send() to 30s, to prevent the esp_mesh_send() from permanently for some reason / ESP_ERROR_CHECK(esp_mesh_send_block_time(5000)); // was 30 seconds mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT(); cfg.crypto_funcs = NULL; / mesh ID / memcpy((uint8_t ) &cfg.mesh_id, MESH_ID, MAC_SIZE); / router */ cfg.channel = CONFIG_MESH_CHANNEL;

cfg.router.ssid_len = strlen(meshProvisionData.ssid);
memcpy((uint8_t *) &cfg.router.ssid, meshProvisionData.ssid, cfg.router.ssid_len);
memcpy((uint8_t *) &cfg.router.password, meshProvisionData.password, strlen(meshProvisionData.password));

ESP_ERROR_CHECK(esp_mesh_set_ap_authmode((wifi_auth_mode_t) CONFIG_MESH_AP_AUTHMODE));
cfg.mesh_ap.max_connection = CONFIG_MESH_AP_CONNECTIONS;
cfg.mesh_ap.nonmesh_max_connection = CONFIG_MESH_NON_MESH_AP_CONNECTIONS;
memcpy((uint8_t *) &cfg.mesh_ap.password, CONFIG_MESH_AP_PASSWD, strlen(CONFIG_MESH_AP_PASSWD));
ESP_ERROR_CHECK(esp_mesh_set_config(&cfg));
ESP_ERROR_CHECK(esp_mesh_start());

Doing the above when the system is running normally, often causes the ESP32's to crash with various errors eg after start, MESH_NODE does a scan and then crashes with Guru Meditation Error: Core 0 panic'ed I (00:22:02.752) aWifiMesh: new channel:8, router BSSID:00:00:00:00:00:00 W (1323864) wifi:adjust channel:1, secondary channel offset:1(40U) W (1323874) wifi:adjust channel:8, secondary channel offset:1(40U) I (1324184) mesh: [SCAN][ch:8]AP:2, other(ID:0, RD:0), MAP:1, idle:0, candidate:1, root:1, topMAP:0[c:0,i:0][00:17:13:20:bd:74]router found<> I (1324184) mesh: 7391[selection]try rssi_threshold:-78, backoff times:0, max:5<-78,-82,-85> I (1324204) mesh: [DONE]connect to parent:ESPM_3372B8, channel:8, rssi:-14, 30:30:f9:33:72:b9[layer:1, assoc:0], my_vote_num:0/voter_num:0, rc[00:00:00:00:00:00/-120/0] I (1324214) mesh: set router bssid:00:17:13:20:bd:74 I (1324834) mesh: <><><><><><> I (1324834) mesh: from assoc, layer:2, root_addr:30:30:f9:33:72:b9, root_cap:1 I (1324844) mesh: idle, layer:2, root_addr:30:30:f9:33:72:b9, conflict_roots.num:0<> I (1324854) mesh: [scan]new scanning time:600ms, beacon interval:300ms I (00:22:03.744) aWifiMesh: root address:30:30:f9:33:72:b9 I (1324854) mesh: 2012parent monitor, my layer:2(cap:6)(node), interval:4526ms, retries:1 I (00:22:03.771) aWifiMesh: layer:2-->2, parent:30:30:f9:33:72:b9, ID:77:77:77:77:77:76 I (00:22:03.785) mesh_netif: It was a wifi station removing stuff Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.

Core 0 register dump: PC : 0x4212753c PS : 0x00060830 A0 : 0x82127613 A1 : 0x3fcc15d0 A2 : 0xffffffff A3 : 0x00000000 A4 : 0x00000278 A5 : 0x00000001 A6 : 0x3fcc09d0 A7 : 0x00000278 A8 : 0x3c1505e4 A9 : 0x3fcd778c A10 : 0x3fcc09d0 A11 : 0x00000000 A12 : 0x00000101 A13 : 0x3c1505e4 A14 : 0x00000007 A15 : 0x3fcaa7f4 SAR : 0x00000004 EXCCAUSE: 0x0000001c EXCVADDR: 0x00000284 LBEG : 0x40056f5c LEND : 0x40056f72 LCOUNT : 0xffffffff

Backtrace: 0x42127539:0x3fcc15d0 0x42127610:0x3fcc1620 0x4037e0aa:0x3fcc1640

I sometimes get MTX task stack overflows too when I try this, same as https://github.com/espressif/esp-idf/issues/13882

zhangyanjiaoesp commented 1 day ago

@michaelsimp I have tested using the ip_internal_network example, but I didn't reproduce your problem. Can you provide the .elf file when the crash issue happen? Or can you provide the core dump decode file?

michaelsimp commented 5 hours ago
Hi

  Thanks for the response.

  I have a deadline for a project demo this week but I will go back
  and reinstall from scratch and rebuild and test and send you the
  files requested.

  One thing I note is that I originally installed IDF into vscode
  when 5.2.2 was the current build.  I have since upgraded to ver
  5.3.0 and selected this and did a clean build on my  project.  

  Now I have gone back to "show examples" to recreate the
  ip_internal_network project from scratch, it asks which version of
  the IDF I want to use but only lists ver 5.2.2.  Only once I
  create the project I can change the version of IDF to 5.3.0

  Using winmerge I compared the directory structure and files from
  my target folder containing ip_internal_network
  from ver 3.2.2, with the
  ...\esp\v5.3\esp-idf\examples\mesh\ip_internal_network folder and
  the only change was in the partition.csv which now must be
  aligned.

  I also note there is now a version 5.3.1 marked as stable, and
  5.3.0 has gone?  I also found migration notes for going from 5.3
  to 5.4 although I can't find this in the installer. Is 5.4 the
  master (development branch).

  Which version would you recommend I use?  I have found everything
  in IDF to be stable and bug free except for the WiFi Mesh.

  Could you advise how I update IDF properly so it will enable me to
  select latest version of IDF when I create project from "Show
  Examples".
  Last time I followed the instructions from Visual Studio at:

https://marketplace.visualstudio.com/items?itemName=espressif.esp-idf-extension#:~:text=In%20Visual%20Studio%20Code%2C%20select,not%20supported%20inside%20configured%20paths

  Regards
  Michael

On 22/10/2024 10:57 pm, ZYJ wrote:

  @michaelsimp
    I have tested using the ip_internal_network
    example, but I didn't reproduce your problem. Can you provide
    the .elf file when the crash
    issue happen? Or can you provide the core dump decode file?
  —
    Reply to this email directly, view it on GitHub, or unsubscribe.
    You are receiving this because you were mentioned.Message
      ID: ***@***.***>
  [

{ @.": "http://schema.org", @.": "EmailMessage", "potentialAction": { @.": "ViewAction", "target": "https://github.com/espressif/esp-idf/issues/14720#issuecomment-2428832704", "url": "https://github.com/espressif/esp-idf/issues/14720#issuecomment-2428832704", "name": "View Issue" }, "description": "View this Issue on GitHub", "publisher": { @.": "Organization", "name": "GitHub", "url": "https://github.com" } } ]

--------------UEln60op0cSX066h04nQooA4 Content-Type: image/png; name="HUQ061jBK81kEjpj.png" Content-Disposition: inline; filename="HUQ061jBK81kEjpj.png" Content-Id: Content-Transfer-Encoding: base64

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 SUVORK5CYII=

--------------UEln60op0cSX066h04nQooA4--