完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我在两个 ESP8266 之间使用 espnow 和交换数据时遇到问题。
已经尝试使用两个 ESP32 并遇到了同样的问题,即我能够发送数据(一条短信)但无法发送。 可能这是一个愚蠢的细节,但我被困住了,不知道下一步该怎么做。在下面找到主从代码。 任何帮助或建议将不胜感激。 MASTER: #include extern "C" { #include } // 这是接收数据的从机 MAC 地址 // uint8_t mac[] = {0x48, 0x3F, 0xDA, 0x7E, 0x30, 0xF8}; //AP MAC 主机地址 uint8_t mac[] = {0x48, 0x3F, 0xDA, 0x7E, 0x5A, 0xCA}; //AP MAC 从机地址 #define WIFI_CHANNEL 4 int prevstate_1 = LOW; int prevstate_2 = 低; // 数据结构,从机必须相同 struct __attribute__((packed))DataStruct { char text[32]; }; 数据结构按钮_1; 数据结构按钮_2; // 发送数据时回调 void OnDataSent(uint8_t *mac, uint8_t sendStatus) { Serial.print("Last Packet Send Status: "); if (sendStatus == 0){ Serial.println("发送成功"); } else{ Serial.println("发送失败"); } } //============================================== ================================================ ===== 无效设置(){ pinMode(D1, INPUT_PULLUP); pinMode(D4, INPUT_PULLUP); 引脚模式(D2,输出); 引脚模式(D3,输出); 序列号.begin(115200); 序列号.println(); Serial.println("启动 EspnowController.ino"); WiFi.mode(WIFI_STA); // esp-now 控制器的站模式 WiFi.disconnect(); Serial.printf("This mac: %s, ", WiFi.macAddress().c_str()); Serial.printf("slave mac: %02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5 ]); Serial.printf(", 频道: %i\n", WIFI_CHANNEL); if (esp_now_init() != 0) { Serial.println("*** ESP_Now 初始化失败"); } esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER); esp_now_add_peer(mac, ESP_NOW_ROLE_SLAVE, WIFI_CHANNEL, NULL, 0); strcpy(button_1.text, "按下按钮 01"); strcpy(button_2.text, "按下按钮 02"); Serial.println("安装完成"); // 一旦 ESPNow 成功初始化,我们将注册发送 CB 以 // 获取已发送数据包的状态 esp_now_register_send_cb(OnDataSent); } //=============================================== ================================================ ===== void loop() { 发送数据(); } //=============================================== ================================================ ===== void sendData() { int currentstate_1 = digitalRead(D4); if (prevstate_1 != currentstate_1) { if (currentstate_1 == LOW) { uint8_t bs[sizeof(button_1)]; memcpy(bs, &button_1, sizeof(button_1)); esp_now_send(mac, bs, sizeof(button_1)); Serial.println(button_1.text); 数字写入(D2,!数字读取(D2)); } } prevstate_1 = currentstate_1; int currentstate_2 = digitalRead(D1); if (prevstate_2 != currentstate_2) { if (currentstate_2 == LOW) { uint8_t bs[sizeof(button_2)]; memcpy(bs, &button_2, sizeof(button_2)); esp_now_send(mac, bs, sizeof(button_2)); Serial.println(button_2.text); 数字写入(D3,!数字读取(D3)); } } prevstate_2 = currentstate_2; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _ >>>>>>>>>>>>>>>>>>>> SLAVE #include extern "C" { #include #include } uint8_t mac[] = {0x48, 0x3F, 0xDA, 0x7E, 0x30, 0xF8}; //AP MAC SLAVE 的地址 //========================================== ================================================ int Led1 = D0; int Led2 = D1; void initVariant() { WiFi.mode(WIFI_AP); wifi_set_macaddr(SOFTAP_IF, &mac[0]); } //=============================================== ============================================== #define WIFI_CHANNEL 4 // 必须匹配控制器 struct struct __attribute__((packed))DataStruct { char text[32]; 无符号整数时间;}; 数据结构接收数据; //================================================ ============================================= 无效设置(){ 序列号.begin(115200); 序列号.println(); Serial.println("启动 EspnowSlave.ino"); Serial.print("本节点AP mac:"); Serial.println(WiFi.softAPmacAddress()); Serial.print("本节点STA mac:"); Serial.println(WiFi.macAddress()); Serial.printf(", 频道: %i\n", WIFI_CHANNEL); 引脚模式(Led1,输出); 引脚模式(Led2,输出); 如果(esp_now_init()!= 0){ Serial.println("*** ESP_Now 初始化失败"); 同时(真){}; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); esp_now_register_recv_cb(receiveCallBackFunction); Serial.println("设置结束-等待消息"); } //=============================================== =============================================== 无效循环( ) { } //============================================= ================================================= / /void receiveCallBackFunction(uint8_t *senderMac, uint8_t *incomingData, uint8_t len) { void receiveCallBackFunction(uint8_t *mac, uint8_t *incomingData, uint8_t len) { Serial.print("INCOMING="); Serial.println(*incomingData); 序列号.print("len="); 序列号.println(len); memcpy(&receivedData, incomingData, sizeof(receivedData)); // Serial.print("INCOMING_AFTER="); //Serial.println(incomingData); Serial.print("len_AFTER="); Serial.println(receivedData.text); String DataCompare = String(receivedData.text); if(DataCompare == "Button 01 pressed"){ digitalWrite(Led1, !digitalRead(Led1)); Serial.println(" Message = " + DataCompare); } if(DataCompare == "Button 02 pressed"){ digitalWrite(Led2, !digitalRead(Led2)); Serial.println(" Message = " + DataCompare); } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
988 浏览 1 评论
553浏览 6评论
463浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
447浏览 5评论
448浏览 4评论
421浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 22:04 , Processed in 0.790105 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号