首页
/ ESP-NOW 开源项目教程

ESP-NOW 开源项目教程

2026-01-17 09:29:33作者:冯爽妲Honey

1. 项目的目录结构及介绍

ESP-NOW 项目的目录结构如下:

esp-now/
├── components/
│   ├── esp-now/
│   │   ├── include/
│   │   ├── src/
│   │   └── component.mk
├── examples/
│   ├── get-started/
│   ├── multi-slave/
│   ├── power-save/
│   ├── throughput/
│   └── wifi-legacy/
├── LICENSE
├── README.md
└── tools/

目录结构介绍

  • components/: 包含 ESP-NOW 的核心组件。
    • esp-now/: ESP-NOW 的主要实现代码。
      • include/: 头文件目录。
      • src/: 源文件目录。
      • component.mk: 组件的构建文件。
  • examples/: 包含多个示例项目,帮助用户快速上手 ESP-NOW。
    • get-started/: 入门示例。
    • multi-slave/: 多从机示例。
    • power-save/: 省电模式示例。
    • throughput/: 吞吐量测试示例。
    • wifi-legacy/: Wi-Fi 传统模式示例。
  • LICENSE: 项目的许可证文件。
  • README.md: 项目介绍和使用说明。
  • tools/: 包含一些辅助工具。

2. 项目的启动文件介绍

ESP-NOW 项目的启动文件通常位于 examples/ 目录下的各个示例项目中。以 get-started 示例为例,启动文件为 main/main.c

启动文件 main.c 介绍

#include "esp_now.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "nvs_flash.h"

static const char *TAG = "ESP-NOW";

void app_main(void)
{
    // 初始化 NVS
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    // 初始化 Wi-Fi
    ESP_ERROR_CHECK(esp_wifi_init());
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    ESP_ERROR_CHECK(esp_wifi_start());

    // 初始化 ESP-NOW
    ESP_ERROR_CHECK(esp_now_init());

    // 配置 ESP-NOW 回调函数
    esp_now_register_recv_cb(on_data_recv);
    esp_now_register_send_cb(on_data_sent);

    // 添加对端设备
    esp_now_peer_info_t peerInfo = {};
    memcpy(peerInfo.peer_addr, broadcastAddress, 6);
    ESP_ERROR_CHECK(esp_now_add_peer(&peerInfo));

    // 发送数据
    uint8_t data[] = "Hello ESP-NOW";
    esp_now_send(broadcastAddress, data, sizeof(data));
}

void on_data_recv(const uint8_t *mac_addr, const uint8_t *data, int data_len)
{
    ESP_LOGI(TAG, "Received %d bytes from: %02x:%02x:%02x:%02x:%02x:%02x", data_len,
             mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
}

void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status)
{
    ESP_LOGI(TAG, "Send status: %s", status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}

启动文件主要功能

  • **初始化
登录后查看全文
热门项目推荐
相关项目推荐