Ребят, есть три платы ESP8266, соединенные между собой протоколом espnow. Одна плата-передатчик, две другие приемники. Передатчик отправляет данные в приемники и выдает сообщение доставлены или не доставлены данные и в какую плату. Мне надо выделить для каждой платы была ли успешная доставка или не успешная.
Не получается получить данные об отправке в каждую плату. В этом разделе выдаются сразу сообщения что отправлено или не отправлено, не пойму как мне здесь конкретно получить что сообщение доставлено на конкретную плату или наоборот не доставлено.
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("\r\nLast Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
Пробовал так
int result=esp_now_send(broadcastAddress2, (uint8_t *) &R3Data, sizeof(R3Data));
Serial.print(result);
тоже не правильно, в сериал порту всегда ноль, хотя отключаю плату, пишется что сообщение не доставлено.
Посоветуйте что делать.
Код:
#include <ESP8266WiFi.h>
#include <espnow.h>
// ЗАМЕНИТЕ МАС-АДРЕСОМ ПОЛУЧАТЕЛЯ
uint8_t broadcastAddress1[] = {0x2C, 0x3A, 0xE8, 0x12, 0x7C, 0xA4};// ESP-01 розетка R2
uint8_t broadcastAddress2[] = {0x84, 0xF3, 0xEB, 0xCB, 0xE7, 0x35};// ESP-01 розетка R3
int priem;
typedef struct struct_message {
int x;
} struct_message;
// Создаем сообщение с заданной структурой
struct_message R2Data;
struct_message R3Data;
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("\r\nLast Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
void setup()
{
Serial.begin(57600);
// Выставляем режим работы Wi-Fi
WiFi.setOutputPower(20.5); // выставляем макс.мощность
WiFi.mode(WIFI_STA);
WiFi.disconnect();
// Инициализируем ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
while (Serial.available() <0)
{
priem=50;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
// После запуска протокола получаем обратную связь о состоянии отправки
esp_now_register_send_cb(OnDataSent);
// Регистрируем пиры
esp_now_add_peer(broadcastAddress1, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
esp_now_add_peer(broadcastAddress2, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
while (Serial.available() >0) {
priem=Serial.read();
if (priem== 50)
{
R2Data.x=priem;
esp_now_send(broadcastAddress1, (uint8_t *) &R2Data, sizeof(R2Data)); //отправляем сигнал OFF на розетку R2
}
if (priem==51 )
{
R2Data.x=priem;
esp_now_send(broadcastAddress1, (uint8_t *) &R2Data, sizeof(R2Data)); //отправляем сигнал ON на розетку R2
}
if (priem==52 )
{
R3Data.x=priem;
esp_now_send(broadcastAddress2, (uint8_t *) &R3Data, sizeof(R3Data)); //отправляем сигнал OFF на розетку R3
}
if (priem==53 )
{
R3Data.x=priem;
esp_now_send(broadcastAddress2, (uint8_t *) &R3Data, sizeof(R3Data)); //отправляем сигнал ON на розетку R3
}
break;
}
}
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("\r\nLast Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
Пробовал так
int result=esp_now_send(broadcastAddress2, (uint8_t *) &R3Data, sizeof(R3Data));
Serial.print(result);
тоже не правильно, в сериал порту всегда ноль, хотя отключаю плату, пишется что сообщение не доставлено.
Посоветуйте что делать.