ESP-MESH [recv]invalid child
Posted: Sun Mar 15, 2020 2:53 pm
I'm trying to build a mesh-network with esp-mesh from Espressif on esp32.
First, I would like to send data from a child to the root of the network but the roots don't receive the data and logs are:
What does "invalid child" mean ?
here are the interesting snippets of code:
send data
receive data
part of event handler
First, I would like to send data from a child to the root of the network but the roots don't receive the data and logs are:
Code: Select all
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
here are the interesting snippets of code:
send data
Code: Select all
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 !");
}
}
Code: Select all
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]);
}
}
}
Code: Select all
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;