Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. DESCRIPCIÓN GENERAL
2. FORMATO DE MARCO
ESP-NOW utiliza un marco de acción específico del proveedor para transmitir datos
de ESP-NOW. La velocidad de ESP-NOW predeterminada es de 1 Mbps. El formato
del marco de acción específico del proveedor es el siguiente:
Organization
Element ID Length Type Version Body
Identifier
Como ESP-NOW no tiene conexión, el MAC Header es un poco diferente del de los
marcos estándar. Los bits FromDS y ToDS del campo FrameControl son 0. El primer
campo de dirección se establece en la dirección de destino. El segundo campo de
dirección se establece en la dirección de origen. El tercer campo de dirección se
establece en dirección de difusión (0xff:0xff:0xff:0xff:0xff:0xff).
3. SEGURIDAD
ESP-NOW utiliza el método CCMP, que se describe en IEEE Std. 802.11-2012, para
proteger el marco de acción específico del proveedor. El dispositivo Wi-Fi mantiene
una clave maestra principal (PMK, Primary Master Key) y varias claves maestras
locales (LMK, Local Master Keys). Las longitudes de PMK y LMK son de 16 bytes.
PMK se utiliza para cifrar LMK con el algoritmo AES-128. Llame a
esp_now_set_pmk() para establecer PMK. Si PMK no está configurado, se
utilizará un PMK predeterminado.
LMK del dispositivo emparejado se utiliza para cifrar el marco de acción
específico del proveedor con el método CCMP. El número máximo de diferentes
LMK es de seis. Si no se establece el LMK del dispositivo emparejado, no se
cifrará el marco de acción específico del proveedor.
Para inicializar ESP-NOW ejecutar la API esp_now_init() y para des inicializar la API
esp_now_deinit(). Los datos de ESP-NOW deben transmitirse después de iniciar el
controlador Wi-Fi, por lo que se recomienda iniciar Wi-Fi antes de inicializar ESP-
NOW y detener Wi-Fi después de desinicializar ESP-NOW. Cuando se llama a
esp_now_deinit(), se eliminará toda la información de los dispositivos emparejados.
Si hay muchos datos ESP-NOW para enviar, llame a esp_now_send() para enviar
menos o igual a 250 bytes de datos una vez por vez. Tenga en cuenta que un
intervalo demasiado corto entre el envío de dos datos esp-NOW puede provocar un
desorden en la función de devolución de llamada de envío. Por lo tanto, se
recomienda que se envíen los siguientes datos ESP-NOW después de que haya
regresado la función de devolución de llamada de envío del envío anterior. La
función de devolución de llamada de envío se ejecuta desde una tarea Wi-Fi de alta
prioridad. Por lo tanto, no realice operaciones prolongadas en la función de
devolución de llamada. En su lugar, publique los datos necesarios en una cola y
cálmelos desde una tarea de menor prioridad.
8. EJEMPLOS DE APLICACIÓN
Para obtener más ejemplos de aplicación sobre cómo usar ESP-NOW, visite el
repositorio de ESP-NOW.
9. REFERENCIA DE LA API
components/esp_wifi/include/esp_now.h
9.2 Funciones
Return:
ESP_OK: Éxito.
ESP_ERR_ESPNOW_INTERNAL: Error interno.
Return:
ESP_OK: Éxito.
Return:
ESP_OK: Éxito.
Parámetros:
Return:
ESP_OK: Éxito.
ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no se inicializo.
ESP_ERR_ESPNOW_INTERNAL: Error interno.
Parámetros:
Return:
ESP_OK: Éxito.
ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no se inicializo.
Return:
ESP_OK: Éxito.
ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no se inicializo.
ESP_ERR_ESPNOW_INTERNAL: Error interno.
Parámetros:
Return:
ESP_OK: Éxito.
ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no se inicializo.
esp_err_t esp_now_send (
const uint8_t *peer_addr,
const uint8_t *data,
size_t len)
Atención:
1. Si peer_addr no es NULL, envíe los datos al par cuya dirección MAC coincida
con peer_addr.
2. Si peer_addr es NULL, envía los datos a todos los pares que se agregaron a la
lista de pares.
3. La longitud máxima de los datos debe ser inferior a
ESP_NOW_MAX_DATA_LEN.
4. El búfer al que apunta el argumento de datos no necesita ser válido después de
que esp_now_send devuelve.
Return:
ESP_OK: Éxito.
ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no inicializado.
ESP_ERR_ESPNOW_ARG: Parámetros inválidos.
ESP_ERR_ESPNOW_INTERNAL: Error interno.
ESP_ERR_ESPNOW_NO_MEM: Sin memoria.
ESP_ERR_ESPNOW_NOT_FOUND: Par no encontrado.
ESP_ERR_ESPNOW_IF: Interfaz WiFi actual no coincide con la del par.
Parámetros:
Return:
ESP_OK: Éxito.
ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no se inicializo.
ESP_ERR_ESPNOW_ARG: Argumento no valido.
ESP_ERR_ESPNOW_FULL: Lista de compañeros lleno.
ESP_ERR_ESPNOW_NO_MEM: Sin memoria.
ESP_ERR_ESPNOW_EXIST: Compañero existente.
Parámetros:
9.3 Estructuras
struct esp_now_peer_info
Miembros Públicos:
uint8_t peer_addr[ESP_NOW_ETH_ALEN]
Dirección MAC del par de ESPNOW que también es la dirección MAC de la STA o
SOFTAP.
uint8_t lmk[ESP_NOW_KEY_LEN]
Clave maestra local del par de ESPNOW que se utiliza para cifrar los datos.
uint8_t channel
Canal Wi-Fi que el par utiliza para enviar/recibir datos ESPNOW. Si el valor es 0,
utiliza el canal actual en el que se encuentra la STA o softAP. De lo contrario, debe
establecerse como el canal en el que está la STA o softAP.
wifi_interface_t ifidx
bool encrypt
Los datos de ESPNOW que este par envía/recibe están cifrados o no.
void *priv
typedef void(*esp_now_recv_cb_t) (
const uint8_t *mac_addr,
const uint8_t *data,
int data_len)
Parámetros:
mac_addr: Dirección MAC del compañero
data: Datos recibidos.
data_len: Longitud de los datos recibidos.
typedef void(*esp_now_send_cb_t) (
const uint8_t *mac_addr,
esp_now_send_status_t status,
int data_len)
Parámetros:
9.5 Enumeraciones
enum esp_now_send_status_t
Valores:
9.6 Macros