Bonjour à tous,
J'essaye de construire un réseau mesh sur esp32 avec esp-mesh d'Espressif.
Tout d'abord, j'aimerai envoyer des données d'un enfant vers la racine du réseau mais la racine ne reçoit rien et j'ai ceci dans les logs:
Que veut dire "invalid child" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 I (12991) wifi: new:<7,1>, old:<7,1>, ap:<7,1>, sta:<7,0>, prof:7 I (13001) wifi: station: 3c:71:bf:0d:7e:18 join, AID=1, bgn, 40U I (13031) mesh: 1185[recv]invalid child 3c:71:bf:0d:7e:18 I (13031) mesh: 1185[recv]invalid child 3c:71:bf:0d:7e:18 I (13051) mesh: 1185[recv]invalid child 3c:71:bf:0d:7e:18 I (13051) mesh: 1185[recv]invalid child 3c:71:bf:0d:7e:18 I (13051) mesh: 1674[XON]async, from child 3c:71:bf:0d:7e:18 I (13101) mesh: 1185[recv]invalid child 3c:71:bf:0d:7e:18 I (13101) mesh: 1185[recv]invalid child 3c:71:bf:0d:7e:18 I (13101) mesh: 1674[XON]async, from child 3c:71:bf:0d:7e:18
Voici quelques extraits de mon code
Pour envoyer des données
Pour recevoir les données:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 void send(){ while(true){ ESP_LOGI(MESH_TAG, "will send !"); mesh_addr_t to; ip4_addr_t address; address.addr = ipaddr_addr("192.168.4.1"); to.mip.ip4 = address; to.mip.port=5005; mesh_data_t mesh_data; uint8_t data[1]; data[0] = 'a'; mesh_data.data=data; mesh_data.size = 1; mesh_data.proto = MESH_PROTO_BIN; ESP_ERROR_CHECK(esp_mesh_send(NULL, &mesh_data, 0, NULL, 0)); ESP_LOGI(MESH_TAG, "SENDED !"); } }
Et une partie de l'event handler
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 void receive(){ esp_err_t err; mesh_addr_t from; mesh_data_t data; int flag = 0; while(true){ err = esp_mesh_recv(&from, &data, portMAX_DELAY, &flag, NULL, 0); if (err != ESP_OK || !data.size) { ESP_LOGE(MESH_TAG, "err:0x%x, size:%d", err, data.size); continue; }else{ printf("DATA! %d:", data.data[0]); } } }
Je ne suis pas certain d'avoir posté sur le bon forum. Veuillez m'excuser si ce n'est pas le cas et Merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 void mesh_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data){ switch (event_id) { case MESH_EVENT_CHILD_CONNECTED: { ESP_LOGI(MESH_TAG,"child connected"); } break; case MESH_EVENT_PARENT_CONNECTED: { mesh_event_connected_t *connected = (mesh_event_connected_t *)event_data; mesh_layer = connected->self_layer; ESP_LOGI(MESH_TAG, "<MESH_EVENT_PARENT_CONNECTED>layer:%d",mesh_layer); if (esp_mesh_is_root()){ ESP_LOGI(MESH_TAG, "is root"); /* * the node is the root and he has * a child -> prepare to receive data */ receive(); isRoot=true; }else{ ESP_LOGI(MESH_TAG, "is child"); /* * the node is a child and he * has a parent -> send data */ send(); isChild=true; } } break;
Partager