完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我基本都没有改,只是改了mac地址。打印出来错误为:Peer interface is invalid和Failed to add peer不懂是什么原因。是接受方哪个地方设置的不正确吗。以下是我发送端和接收端的程序,不忙的大神可以帮忙看看哪里出了问题。
以下为发送端的程序Code: Select all // Own macAddress:98:F4:AB:3A:77:0C// recver MAC Address: 98:F4:AB:39:4C:C0#include #include // REPLACE WITH YOUR RECEIVER MAC Addressuint8_t broadcastAddress[] = {0x98, 0xF4, 0xAB, 0x39, 0x4C, 0xC0};// Structure example to send datatypedef struct struct_message { char a[32]; int b; float c; String d; bool e;} struct_message;// Create a struct_message called myDatastruct_message myData;// callback when data is sentvoid OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("rnLast Packet Send Status:t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");} void setup() { // Init Serial Monitor Serial.begin(115200); // Set device as a Wi-Fi Station WiFi.mode(WIFI_STA); Serial.println(WiFi.macAddress()); // Init ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } // Once ESPNow is successfully Init, we will register for Send CB to // get the status of Trasnmitted packet esp_now_register_send_cb(OnDataSent); // Register peer esp_now_peer_info_t peerInfo; memcpy(peerInfo.peer_addr, broadcastAddress, 6); peerInfo.channel = 0; peerInfo.encrypt = false; // Add peer if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); return; }} void loop() { // Set values to send strcpy(myData.a, "THIS IS A CHAR"); myData.b = random(1,20); myData.c = 1.2; myData.d = "Hello"; myData.e = false; // Send message via ESP-NOW esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (result == ESP_OK) { Serial.println("Sent with success"); } else { Serial.println("Error sending the data"); Serial.print("error code is : "); Serial.println(result); } delay(2000);} -------------------------------------------------------------------------------------------------------------------------------- 以下为接受端的程序。Code: Select all // send board MAC Address:98:F4:AB:3A:77:0C// Recv board MAC Address: 98:F4:AB:39:4C:C0#include #include // Structure example to receive datatypedef struct struct_message { char a[32]; int b; float c; String d; bool e;} struct_message;// Create a struct_message called myDatastruct_message myData;// callback function that will be executed when data is receivedvoid OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Bytes received: "); Serial.println(len); Serial.print("Char: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Float: "); Serial.println(myData.c); Serial.print("String: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Serial.println();}void setup() { // Initialize Serial Monitor Serial.begin(115200); // Set device as a Wi-Fi Station WiFi.mode(WIFI_STA); Serial.println(WiFi.macAddress()); // Init ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } // Once ESPNow is successfully Init, we will register for recv CB to // get recv packer info esp_now_register_recv_cb(OnDataRecv);}void loop() { } |
|
相关推荐
2个回答
|
|
推测是不是esp-now需要指定ifidx这个参数,
wifi_interface_t ifidx:说明如下 Wi-Fi interface that peer uses to send/receive ESPNOW data 程序中是没有指定这个参数的,所以参考文档,指定了这个参数,在 peer information里面加了一句: peerInfo.ifidx = WIFI_IF_STA; 最后测试成功了。 |
|
|
|
根据您提供的信息,您在ESP-NOW通信中遇到了一些问题,错误信息为:“Peer interface is invalid”和“Failed to add peer”。这些问题可能是由于以下几个原因导致的:
1. MAC地址格式错误:请确保您输入的MAC地址格式正确,每个字节之间用冒号(:)分隔。 2. 接收方未初始化ESP-NOW:请确保接收方设备已经初始化了ESP-NOW,并注册了回调函数。 3. 发送方未添加接收方为peer:在使用ESP-NOW发送数据之前,需要将接收方的MAC地址添加为peer。请确保您已经正确添加了接收方的MAC地址。 4. 通道不一致:请确保发送方和接收方使用的是相同的通道(channel)。 为了解决这些问题,请尝试以下步骤: 1. 检查MAC地址格式:确保发送端和接收端的MAC地址格式正确,每个字节之间用冒号(:)分隔。 2. 初始化ESP-NOW:在接收方设备上,确保已经初始化了ESP-NOW并注册了回调函数。例如: ```c esp_now_init(); esp_now_register_recv_cb(esp_now_recv_cb); ``` 3. 添加接收方为peer:在发送方设备上,确保已经将接收方的MAC地址添加为peer。例如: ```c esp_err_t add_peer(const uint8_t *mac_addr, const uint8_t *peer_key, const uint8_t channel, const uint8_t *interface) { esp_now_peer_info_t peer_info; memset(&peer_info, 0, sizeof(peer_info)); memcpy(peer_info.peer_addr, mac_addr, 6); memcpy(peer_info.encrypt_key, peer_key, 16); peer_info.channel = channel; peer_info.interface = interface; return esp_now_add_peer(&peer_info); } ``` 4. 确保通道一致:在发送方和接收方设备上,确保使用的是相同的通道。例如: ```c #define CHANNEL 1 ``` 5. 检查回调函数:确保您已经正确实现了回调函数,以便在接收到数据时进行处理。 尝试以上步骤后,如果问题仍然存在,请检查您的代码以确保没有其他错误。希望这些建议能帮助您解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
961 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
446浏览 5评论
447浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 05:02 , Processed in 0.825224 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号