ESP32 conexion inalambrica

198 views
Skip to first unread message

Rodolfo Pereyro

unread,
Jun 22, 2023, 10:12:24 PM6/22/23
to Embebidos32
Hola a todos,
¿Como estan? Comparto un problema en una transmision-recepcion de datos empleando una red wifi generada por un ESP32 por medio de la cual otro se conecta y haciendo uso de la header esp_now.h que me facilita la comunicacion. El problema lo tengo en la recepcion del string que envio al que hace de unidad central(el generador de la red offline). Estoy usando sdk idf v4.4.4 en eclipse. La conexion a la red y las direcciones son correctas. Adjunto unas capturas.

Saludos,

Rodolfo

Rodolfo Pereyro

unread,
Jun 22, 2023, 10:36:22 PM6/22/23
to embeb...@googlegroups.com
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/embebidos32/0392c8df-c3f0-46c9-bef1-6036d0c31a92n%40googlegroups.com.
IMG-20230622-WA0067.jpg
IMG-20230622-WA0066.jpg

Carlos Pantelides

unread,
Jun 23, 2023, 8:27:54 AM6/23/23
to Embebidos32
Hola Rodolfo,

no sé si soy yo, no me queda muy claro cuál es el problema. Adelantándome, llená todo de ESP_LOGI o lo que estés usando para mostrar mensajes por la consola, para identificar el punto de falla

Rodolfo Pereyro

unread,
Jun 23, 2023, 10:59:41 AM6/23/23
to embeb...@googlegroups.com
Buen dia Carlos,
Puede ser que no me explique bien. El problema que tengo es que el generador de la red, no recibe el mensaje que envia el cliente. El esp32 que esta funcionando como cliente no arroja ningun tipo de error, por el contrario imprime envio exitoso, pero del otro lado el que debe recibir el mensaje no registra nada, no entra a la callback de recepcion de mensaje ni nada. Pero todos los pasos previos de configuracion no arrojaron error alguno. 

¿No se si me explico?

Saludos,

Message has been deleted

Rodolfo Pereyro

unread,
Jun 23, 2023, 11:23:34 AM6/23/23
to embeb...@googlegroups.com
Hola Marcelo,
Si. La funcion esp_now_send() dentro de ese header (esp_now.h).

Saludos,


On Fri, Jun 23, 2023, 12:17 Marcelo Ferrarotti <marcelo.f...@gmail.com> wrote:
Buenas! El mensaje lo envía usando ESP-NOW ?



--
Marcelo Ferrarotti
"No me da miedo una IA que pase el test de Turing, me da más miedo que una IA lo desapruebe a propósito"

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Message has been deleted

Rodolfo Pereyro

unread,
Jun 23, 2023, 11:34:51 AM6/23/23
to embeb...@googlegroups.com
Exactamente. Defino una direccion MAC tanto al receptor como al transmisor, un canal.

On Fri, Jun 23, 2023, 12:26 Marcelo Ferrarotti <marcelo.f...@gmail.com> wrote:
Ok, no sé como estará armado su código, en mi caso, yo hago el envío de mensajes de dirección MAC a dirección MAC, de hecho no tengo IP en las estaciones, solamente uso ESP-NOW. Eso lo tiene definido así ?



--
Marcelo Ferrarotti
"No me da miedo una IA que pase el test de Turing, me da más miedo que una IA lo desapruebe a propósito"

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.

Carlos Pantelides

unread,
Jun 23, 2023, 11:41:44 AM6/23/23
to embeb...@googlegroups.com
me pongo en modo diagnóstico y te tiro ideas sin saber nada:

¿podés enviar ese mismo mensaje a otro sistema?
¿podés hacer circular ese mensaje por una red sobre la que puedas hacer sniffing? (me imagino que no, pero ya lo tenía anotado antes de leer lo elaborado con Marcelo)
¿se te estarán mezclando las mac address? ahí rapidito ví que va sobre wifi y también bluetooth

Acá veo que existe una probable implementación para compu, donde quizás sea más fácil diagnosticar

Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/GEkoMTfGos8/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/embebidos32/CAHv9%2BSry36-e5%3DEhs02GW0UiyF%2B%3D1Sis-QBGFRJZ-OqUa9MDdg%40mail.gmail.com.


--

Rodolfo Pereyro

unread,
Jun 23, 2023, 11:43:04 AM6/23/23
to embeb...@googlegroups.com
Por ejemplo para el cliente:

#include <stdio.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_now.h"

uint8_t mac2send[] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC}; // ESP32 Soft-AP MAC address

void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
{
    if (event_id == WIFI_EVENT_STA_START) {
        esp_wifi_connect();
        ESP_LOGI(TAG, "Connecting to Soft-AP...");
    } else if (event_id == WIFI_EVENT_STA_CONNECTED) {
        ESP_LOGI(TAG, "Connected to Soft-AP");
    } else if (event_id == WIFI_EVENT_STA_DISCONNECTED) {
        ESP_LOGI(TAG, "Disconnected from Soft-AP");
        esp_wifi_connect();
    }
}

void app_main()
{
    ESP_ERROR_CHECK(esp_event_loop_create_default());
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));

    wifi_config_t wifi_config = {
        .sta = {
            .ssid = "nameSoftAP",
            .password = "Password",
            .bssid_set = 0
        }
    };

    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
    ESP_ERROR_CHECK(esp_wifi_start());

    esp_now_init();
    esp_now_peer_info_t peer;
    memcpy(peer.peer_addr, mac2send, 6);
    peer.encrypt = false;
    ESP_ERROR_CHECK(esp_now_add_peer(&peer));

    const char *message = "Hello i'm client one!";
  While(true)
{ ESP_ERROR_CHECK(esp_now_send(mac, (uint8_t *)message, strlen(message)));
}
}

Message has been deleted

Rodolfo Pereyro

unread,
Jun 26, 2023, 7:59:23 PM6/26/23
to embeb...@googlegroups.com
Buenas noches Marcelo, 
¿Cómo estás? Si, si eso mismo probe. El resultado es mensaje enviado. 
Aun sigo sin dar en la tecla con el problema.

Saludos

El vie, 23 jun 2023 a la(s) 12:43, Marcelo Ferrarotti (marcelo.f...@gmail.com) escribió:
Si le agrega algo como esto, capaz lo ayuda:

void EstadoMensajes(const uint8_t *mac_addr, esp_now_send_status_t status) {

  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Mensaje enviado" : "Mensaje NO enviado");
}



--
Marcelo Ferrarotti
"No me da miedo una IA que pase el test de Turing, me da más miedo que una IA lo desapruebe a propósito"

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.

Rodolfo Pereyro

unread,
Jun 27, 2023, 8:35:16 AM6/27/23
to embeb...@googlegroups.com
El que hace de generador de red, puede enviarle al cliente y este recibe correctamente. Ahora bien, el cliente le envia mensaje y no hace nada.

On Fri, Jun 23, 2023, 12:43 Marcelo Ferrarotti <marcelo.f...@gmail.com> wrote:
Si le agrega algo como esto, capaz lo ayuda:

void EstadoMensajes(const uint8_t *mac_addr, esp_now_send_status_t status) {

  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Mensaje enviado" : "Mensaje NO enviado");
}

El vie, 23 jun 2023 a la(s) 12:34, Rodolfo Pereyro (rudynicol...@gmail.com) escribió:


--
Marcelo Ferrarotti
"No me da miedo una IA que pase el test de Turing, me da más miedo que una IA lo desapruebe a propósito"

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.

Facundo Quiroga

unread,
Jun 27, 2023, 11:15:25 AM6/27/23
to embeb...@googlegroups.com
Buenos días Rodolfo,
¿Tenes definida la función de callback en el que hace de generador? Que por lo el nombre con que la registraste debería ser asi masomenos:

void espnow_recv_cb(const uint8_t *mac_addr, const uint8_t *data, int data_len)
{
    // tu codigo
}

En el caso de que si. Chequea que los canales sean los mismos. Cuando agregues el peer en el cliente, pone la línea peer.channel = CHANNEL_ESP32, y probá.

Saludos

Facundo

Rodolfo Pereyro

unread,
Jun 27, 2023, 7:29:07 PM6/27/23
to embeb...@googlegroups.com
Facundo te comparto el codigo, lo plantee tal cual decis:

cliente:

void espnow_recv_cb(const uint8_t *mac_addr, const uint8_t *data, int len)

{


printf("Received message from ESP32 master: %.*s\n", len, data);

}


void espnow_sendv_cb(const uint8_t *mac_addr, esp_now_send_status_t status)

{

if (mac_addr == NULL)

{

ESP_LOGE(TAG, "Send cb arg error");

return;

}

ESP_LOGI("SEND","\r\nLast Packet Send Status:\t");

ESP_LOGI("SEND","%s",status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");

}


void app_main(void)

{

nvs_flash_init();

configureGpioOutput(TEST_GPIO_LAMP);


wifi_init_sta();

vTaskDelay(2000/portTICK_PERIOD_MS);


xTaskCreate(setLamp_task,

"lamp_task",

4*configMINIMAL_STACK_SIZE,

(void* ) psState,

setLamp_task_PRIO,

NULL);


//mensaje:

ESP_LOGE("PREMAIN","STATUS %s",esp_err_to_name(esp_now_init()));

ESP_LOGE("PREMAIN","STATUS %s",esp_err_to_name(esp_now_register_recv_cb(espnow_recv_cb)));

ESP_LOGE("PREMAIN","STATUS %s",esp_err_to_name(esp_now_register_send_cb(espnow_sendv_cb)));


esp_now_peer_info_t peer;

memcpy(peer.peer_addr, macServerSend, 6);

peer.channel = 1;

peer.ifidx = ESP_IF_WIFI_STA;

peer.encrypt = false;

ESP_LOGE("PREMAIN","STATUS %s",esp_err_to_name(esp_now_add_peer(&peer)));




printf("---START MAIN---\n");

//esp_base_mac_addr_set(setMacSensor1); //set my mac address.


//esp_wifi_get_mac(ESP_IF_WIFI_STA, mac);

//esp_read_mac(macClient, ESP_MAC_WIFI_STA);

//esp_base_mac_addr_get(macClient);

//ESP_LOGI(TAGWIFI, "MAC "MACSTR" MY ",MAC2STR(setMyMacSensor1));

//ESP_LOGI(TAGWIFI, "MAC "MACSTR" SERVER ",MAC2STR(macServerSend));

const char *message = "Hello ESP32! How are you?";

//uint8_t macAddress[6];

while (1)

{

//ESP_LOGW("MAIN","DENTRO DEL MAIN. Send : %s",message);

//esp_wifi_get_mac(WIFI_IF_STA,macAddress);

//ESP_LOGW("Slave MAIN","DENTRO DEL MAIN. MY ADDR :"MACSTR,MAC2STR(macAddress));

ESP_LOGE("Slave MAIN","STATUS %s",esp_err_to_name(esp_now_send(peer.peer_addr, (uint8_t *)message, strlen(message))));

//esp_now_send(macServerSend, (uint8_t *)message, strlen(message));

vTaskDelay(2000/portTICK_PERIOD_MS);


}

}


Facundo Quiroga

unread,
Jun 28, 2023, 3:37:00 PM6/28/23
to embeb...@googlegroups.com
Buenas tardes Rodolfo, estoy comparando con un ejemplo que tengo funcionando.

Después de la función nvs_flash_init(); agrega lo siguiente:
tcpip_adapter_init();
ESP_ERROR_CHECK(esp_event_loop_create_default()); 

En la parte en la que definis el peer, comenta esta línea:   peer.ifidx = ESP_IF_WIFI_STA; Y que quede asi:

esp_now_peer_info_t peer;

memset(&peer, 0, sizeof(esp_now_peer_info_t));

memcpy(&peer.peer_addr, macServerSend, 6);

peer.channel = 1;

peer.encrypt = false;

ESP_LOGE("PREMAIN","STATUS %s",esp_err_to_name(esp_now_add_peer(&peer)));


Rodolfo Pereyro

unread,
Jun 28, 2023, 8:47:31 PM6/28/23
to embeb...@googlegroups.com
Buenas noches Facundo,
Gracias por responder. Probe lo que me decias, y no cambio nada. Comparto los códigos por ahí ofrecen mayor claridad y unas capturas de lo que imprime en pantalla.

Saludos,

client.jpg
server.jpg
client.c
server.c
Reply all
Reply to author
Forward
0 new messages