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:

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
Que veut dire "invalid child" ?

Voici quelques extraits de mon code

Pour envoyer des 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 !");
    }
}
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
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]);
        }
    }
}
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
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;
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 !