ESPNOW 使用中遇到的问题

Moderator: ESP_Bob

gaoqiang
Posts: 1
Joined: Sat Sep 14, 2024 4:40 pm

ESPNOW 使用中遇到的问题

Postby gaoqiang » Sat Sep 14, 2024 4:45 pm

在接受数据时我发现有些时候数据异常,于是有了截图中的测试。测试的结果让我非常意外和不能理解。请求各位大佬援助!!! :o


// ESP_NOW_Broadcast_Peer.h
#ifndef ESP_NOW_BROADCAST_PEER_H
#define ESP_NOW_BROADCAST_PEER_H

#include "ESP32_NOW.h"
#include "lvgl/gui_ctl.h"
#include "logger.h"

// DeviceType
enum DeviceType
{
READER, // 读卡器
GATEWAY, // 网关
METER, // 流量计
CONFIG_TOOL // 配置工具
};

// 数据结构体
typedef struct struct_espnow_data
{
int id; // 包编号
DeviceType type = READER; // 设备类型
char card_id[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 卡号
double flowSpeed = 0.0; // 流量速度l/min
bool recvOk = false; // 接受成功
int channel = 0; // 信道
char mac[18] = "FF:FF:FF:FF:FF:FF"; // Mac

} struct_espnow_data;

// 创建一个新的类继承自ESP_NOW_Peer类
class ESP_NOW_Peer_Class : public ESP_NOW_Peer
{
private:
public:
// 类的构造函数
ESP_NOW_Peer_Class(const uint8_t *mac_addr, uint8_t channel, wifi_interface_t iface, const uint8_t *lmk) : ESP_NOW_Peer(mac_addr, channel, iface, lmk) {}

// 类的析构函数
~ESP_NOW_Peer_Class() {}

const esp_now_recv_info_t *info;

// 函数用于注册主机
bool add_peer()
{
if (!add())
{
Serial.printf("注册广播主机失败\n");
return false;
}
return true;
}

// 向对等点设备发送消息
bool send_message(const uint8_t *data, size_t len)
{
if (!send(data, len))
{
Serial.printf("单播消息失败\n");
return false;
}
return true;
}

// 函数用于打印从主机接收到的消息
void onReceive(const uint8_t *data, size_t len, bool broadcast)
{
for (size_t i = 0; i < 64; i++)
{
Serial.printf("%d ", i);
}
Serial.println();

// Serial.printf("Mac: " MACSTR " 收到消息 (%s)\n", MAC2STR(addr()), broadcast ? "广播" : "单播");

// struct_espnow_data recv_data;
// struct_espnow_data send_data;

// // 接收到的数据
// memcpy(&recv_data, data, sizeof(recv_data));
// Logger::log("Len: %d \n", len);
// Logger::log("Type: %d \n", recv_data.type);
// Logger::log("ID: %s \n", recv_data.id);
// Logger::log("RSSI: %s \n", info->rx_ctrl->rssi);
// Logger::log("Card_id: %s \n", recv_data.card_id);

// // GUI 显示编号
// String msg = "ID:" + String(recv_data.id) + " RSSI: " + String(info->rx_ctrl->rssi) + " dBm";
// Gui_Add_List_Text(guider_ui.blueCounter_list_Info, msg.c_str(), 26, COLOR_BLACK);

// // 按需打印
// switch (recv_data.type)
// {
// case READER:
// msg = "Card:" + String(recv_data.card_id);
// Gui_Add_List_Text(guider_ui.blueCounter_list_Info, msg.c_str(), 26, COLOR_BLACK);
// break;

// case GATEWAY:

// break;

// case METER:

// break;

// case CONFIG_TOOL:

// break;
// }

// // 返回数据
// Logger::log("返回数据\n");
// const char *mac_str = "FF:FF:FF:FF:FF:FF";
// // 复制字符串到字符数组
// strncpy(send_data.mac, mac_str, sizeof(send_data.mac) - 1); // -1 是为了留出终止符的位置
// send_data.mac[sizeof(send_data.mac) - 1] = '\0'; // 确保字符串以 '\0' 结尾
// send_data.id = recv_data.id;
// send_data.type = CONFIG_TOOL;
// send_data.recvOk = true;
// send_data.channel = 2;
// send_message((uint8_t *)&send_data, sizeof(send_data));
}

// 显示发送状态
void onSent(bool success)
{
if (success)
{
Logger::log("Send Success\n");
Gui_Add_List_Text(guider_ui.blueCounter_list_Info, "Send Success", 26, COLOR_GREEN);
}
else
{
Logger::log("Send Failed\n");
Gui_Add_List_Text(guider_ui.blueCounter_list_Info, "Send Failed", 26, COLOR_RED);
}
}
};
#endif // ESP_NOW_BROADCAST_PEER_H
Attachments
1e9288758c207e2a887178a32d7448a.png
1e9288758c207e2a887178a32d7448a.png (84.65 KiB) Viewed 3041 times

Who is online

Users browsing this forum: No registered users and 27 guests