1、什么是espnow
短数据传输、无连接的快速通讯技术
2、应用范围智能照明控制
(一)、 ESPNOW例程。
下面的例程展示了怎样使用ESPNOW
步骤:
1、初始化wifi
A、TCP/ip适配器初始化
a、注册事件处理函数初始化。
b、设置配置信息
c、选择存储类型
d、选择wifi模式AP
e、启动wifi
f、启动wifi后设置通道,假如两个设备在同一个通道上就不需要设置
2、初始化espnow
a、创建个队列
b、注册发送数据回调函数
c、注册接受数据回调函数
d、设置主秘钥
e、添加广播点信息来点列表
f、初始化发送参数
g、创建espnow任务
*/
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <assert.h>
#include "freertos/FreeRTOS.h"
#include "freertos/semphr.h"
#include "freertos/timers.h"
#include "nvs_flash.h"
#include "esp_event_loop.h"
#include "tcpip_adapter.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "esp_system.h"
#include "esp_now.h"
#include "rom/ets_sys.h"
#include "rom/crc.h"
#include "espnow_example.h"
static const char *TAG = "espnow_example";
static xQueueHandle example_espnow_queue;
static uint8_t example_broadcast_mac[ESP_NOW_ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
static uint16_t s_example_espnow_seq[EXAMPLE_ESPNOW_DATA_MAX] = { 0, 0 };
static void example_espnow_deinit(example_espnow_send_param_t *send_param);
1、事件处理函数
static esp_err_t example_event_handler(void *ctx, system_event_t *event)
{
switch(event->event_id) {
case SYSTEM_EVENT_STA_START: wifi启动完成
ESP_LOGI(TAG, "WiFi started");
break;
default:
break;
}
return ESP_OK;
}
2、wifi初始化
static void example_wifi_init(void)
{
tcpip_adapter_init(); TCP/ip适配器初始化
ESP_ERROR_CHECK( esp_event_loop_init(example_event_handler, NULL) ); 注册事件处理函数初始化。
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); 获取wifi配置信息
ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); 设置配置信息
ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) ); 选择存储类型
ESP_ERROR_CHECK( esp_wifi_set_mode(ESPNOW_WIFI_MODE) ); 选择wifi模式AP
ESP_ERROR_CHECK( esp_wifi_start()); 启动wifi
ESP_ERROR_CHECK( esp_wifi_set_channel(CONFIG_ESPNOW_CHANNEL, 0) ); 启动wifi后设置通道,假如两个设备在同一个通道上就不需要设置
}
1、发送数据回调函数
static void example_espnow_send_cb(const uint8_t *mac_addr, esp_now_send_status_t status)
{