我试图使我的esp32系统更加动态,因为控制器将添加附近打开的任何从站的对等端。这样一来,可以添加任意数量的从站,以后可以轻松添加新的从站。我已将控制器的mac地址硬编码到从站中,所以这不是问题。
在控制器接收数据后尝试调用esp_now_add_peer时出现了我的问题。执行错误检查时,它声称已成功添加对等方,但是当我尝试将响应发送回从属方以确认它时,会收到发送错误。
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
slave.channel = CHANNEL;
slave.encrypt = 0;
memcpy(slave.peer_addr, mac_addr, sizeof(mac_addr));
esp_err_t addStatus = esp_now_add_peer(&slave);
if (addStatus == ESP_OK) {
// Pair success
Serial.println("Pair success");
}
else if (addStatus == ESP_ERR_ESPNOW_NOT_INIT) {
// How did we get so far!!
Serial.println("ESPNOW Not Init");
}
else if (addStatus == ESP_ERR_ESPNOW_ARG) {
Serial.println("Invalid Argument");
}
else if (addStatus == ESP_ERR_ESPNOW_FULL) {
Serial.println("Peer list full");
}
else if (addStatus == ESP_ERR_ESPNOW_NO_MEM) {
Serial.println("Out of memory");
}
else if (addStatus == ESP_ERR_ESPNOW_EXIST) {
Serial.println("Peer Exists");
}
else {
Serial.println("Not sure what happened");
}
char macStr[18];
//Copies the receiver Mac Address to a string
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
Serial.println(macStr);
sendstart(mac_addr);
这是配对成功或配对存在的接收函数,称为它确实起作用。但是在我打电话给sendstart之后。
void sendstart(const uint8_t *mac_addr){
uint8_t values[1];
values[0] = 'z'; //hex value of 7A, for reseting target to sequence
esp_err_t result = esp_now_send(mac_addr, (uint8_t*) &values, sizeof(values)); //send to the specified target
//If it was successful
if (result == ESP_OK) {
Serial.println("Success");
}
//if it failed
else {
Serial.println("Error");
}
}
从那里开始,错误总是被触发。我已经在从站的mac地址进行硬编码并在安装过程中添加它的地方进行了测试。然后在接收呼叫期间再次将其添加,但发送成功。以下是我在测试时在设置过程中手动添加mac地址的方法。
uint8_t macSlaves[][6] = {{0x24, 0x0a, 0xc4, 0x1c, 0x77, 0x44}};
int slavesCount = sizeof(macSlaves)/6/sizeof(uint8_t);
for(int i=0; i<slavesCount; i++){
slave.channel = CHANNEL;
slave.encrypt = 0;
memcpy(slave.peer_addr, macSlaves[i], sizeof(macSlaves[i]));
esp_now_add_peer(&slave);
}
因此,我真的不知道自己在做什么错,或者在设置过程中以及随后的通话过程中添加同级设备被认为是不同的。我到处都看过,发现了多种如何添加对等体的情况,但是在接收呼叫期间没有添加任何情况。如果无法做到这一点,请告诉我,然后我可以不再浪费时间尝试解决此问题。否则,请让我知道我哪里出了问题和/或示例。
谢谢