• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Esp now 8266

Mirdo

New member
Здравствуйте! У меня возник вопрос, можно ли сделать так что бы когда пришло сообщение то оно отщеркаливалось обратно?
Вот мой код приёмника:
C++:
#include <ESP8266WiFi.h>
#include <espnow.h>
 
// ЗАМЕНИТЕ МАС-АДРЕСОМ ПОЛУЧАТЕЛЯ
uint8_t broadcastAddress[] = {0xC4, 0x5B, 0xBE, 0xF2, 0x42, 0xD1};

typedef struct struct_message {
    int c;
} struct_message;

struct_message myData;
 
#define BOARD_ID 2
 
// Callback-функция при отправке сообщения
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("\r\nСтатус пакета: ");
  if (sendStatus == 0){
    Serial.println("Доставлен");
  }
  else{
    Serial.println("Потерялся");
  }
}
void OnDataRecv(uint8_t * mac_addr, uint8_t *incomingData, uint8_t len) {
  char macStr[18];
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.print("Пакет от: ");
  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);
  Serial.print("Сколько весит: ");
  Serial.println(len);
  Serial.print("Сикрет число: ");
  Serial.println(myData.c);
}


void setup() {
  // Запускаем монитор порта
  Serial.begin(115200);
  // Выставляем режим работы Wi-Fi
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  // Инициализируем ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  // Указываем роль платы в ESP-NOW
  esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
  // После запуска протокола получаем обратную связь о состоянии отправки
  esp_now_register_send_cb(OnDataSent);
  // Регистрируем пиры
  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
  esp_now_register_recv_cb(OnDataRecv);
}

long lastTime;
long timerDelay = 2000;
void loop() {
  if (millis() - lastTime > timerDelay) {

    
    esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
    lastTime = millis();
 
  }
}
 

aZholtikov

Active member
Написать esp_now_send(mac_addr, incomingData, len) в любом месте функции обработки принятого сообщения.
 
Сверху Снизу