乐鑫技术交流
直播中

张强

7年用户 1345经验值
私信 关注
[问答]

如何让esp-now支持40个设备?

请问如何让esp-now支持40个设备,我改了 ESP_NOW_MAX_TOTAL_PEER_NUM   40  这个宏定义发现不管用

回帖(1)

姬房有

2024-7-1 15:28:52
要让ESP-NOW支持40个设备,您需要进行以下几个步骤:

1. 确保您的ESP8266或ESP32硬件支持ESP-NOW功能。

2. 在您的项目中包含ESP-NOW库。如果您使用的是Arduino IDE,您可以通过以下方式安装ESP-NOW库:
   - 打开Arduino IDE,点击“文件”>“首选项”。
   - 在“首选项”窗口中,找到“附加开发板管理器URL”并添加以下链接:https://dl.espressif.com/dl/package_esp32_index.json
   - 点击“工具”>“开发板”>“开发板管理器”。
   - 在开发板管理器中搜索“ESP32”,然后安装ESP-NOW库。

3. 修改ESP-NOW的宏定义。在您的代码中,找到`#include `这一行,然后在它之前添加以下宏定义:
   ```cpp
   #define ESP_NOW_MAX_TOTAL_PEER_NUM 40
   ```
   这将设置ESP-NOW支持的最大设备数量为40。

4. 初始化ESP-NOW。在您的`setup()`函数中,添加以下代码来初始化ESP-NOW:
   ```cpp
   #include
   void setup() {
     Serial.begin(115200);
     WiFi.softAP("YourSSID", "YourPassword");
     esp_now_init();
   }
   ```

5. 设置ESP-NOW的回调函数。在您的代码中,添加以下回调函数:
   ```cpp
   void OnDataReceived(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
     Serial.print("Received data from:");
     for (int i = 0; i < 6; ++i) {
       Serial.print(mac_addr[i], HEX);
       Serial.print((i < 5) ? ":" : "n");
     }
     Serial.print("Data: ");
     for (int i = 0; i < data_len; ++i) {
       Serial.print((char)data[i]);
     }
     Serial.println();
   }
   ```

6. 注册ESP-NOW的回调函数。在`setup()`函数中,添加以下代码:
   ```cpp
   esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
   esp_now_register_recv_cb(OnDataReceived);
   ```

7. 添加设备到ESP-NOW。在您的代码中,添加以下函数来添加设备到ESP-NOW:
   ```cpp
   void AddDevice(const uint8_t *device_id) {
     esp_now_peer_info_t peerInfo;
     memset(&peerInfo, 0, sizeof(peerInfo));
     memcpy(peerInfo.peer_addr, device_id, 6);
     peerInfo.channel = 0;
     peerInfo.encrypt = false;
     esp_err_t addStatus = esp_now_add_peer(&peerInfo);
     if (addStatus == ESP_OK) {
       Serial.println("Device added");
     } else if (addStatus == ESP_ERR_ESPNOW_NOT_INIT) {
       Serial.println("ESP-NOW is not initialized");
     } else if (addStatus == ESP_ERR_ESPNOW_ARG) {
       Serial.println("Invalid MAC address");
     } else if (addStatus == ESP_ERR_ESPNOW_FULL) {
       Serial.println("ESP-NOW peer list is full");
     } else {
       Serial.println("Failed to add device");
     }
   }
   ```

8. 在`setup()`函数中,添加设备到ESP-NOW:
   ```cpp
   uint8_t device_id[6] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x01};
   AddDevice(device_id);
   ```

9. 编译并上传代码到您的设备。

10. 确保所有40个设备都添加到ESP-NOW,并正确配置。

通过以上步骤,您应该能够让ESP-NOW支持40个设备。如果仍然无法实现,请检查您的硬件和代码,确保没有错误。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分