А можно пример кода? Просто не совсем понялmillis()
Не не так.
Сначала millis() а потом после еще раз millis().
Я немного ошибся в формулировке своего вопроса, но не суть.Для начала опишите, что такое таймер в вашем понимании.
Я вам подсказал как измерить длительность отправки сообщеия.
nachalo1 = millis();
//vash kod
konec1 = millis();
dlitelnost1 = kenec1 - nachalo1;
#include <ESP8266WiFi.h>
#include <espnow.h>
// ЗАМЕНИТЕ МАС-АДРЕСОМ ПОЛУЧАТЕЛЯ
uint8_t broadcastAddress[] = {0xBC, 0xFF, 0x4D, 0x31, 0x9A, 0x3D};
int amd = 2009;
typedef struct struct_message {
int c;
} struct_message;
struct_message myData;
#define BOARD_ID 1
// 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 *) &amd, sizeof(amd));
lastTime = millis();
}
}
Работает почему то через раз.В void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) добавьте Serial.println(lastTime-millis()).
Это покажет время между отправкой и приемом подтверждения.
Пригодится - https://pnu.edu.ru/media/vestnik/articles-2021/021-028_Зинкевич_А._В..pdf
теперь выводит 1 либо 0Начнем с того, что я немного ошибся... ;-)
Вместо Serial.println(lastTime-millis()) надо Serial.println(millis()-lastTime).
Можно же сделать micros() и floatА почему так можете догадаться?
millis() не зря так называется... И long тоже... Они отображают миллисекунды.
ESP-NOW оперирует микросекундами...
Ссылку внимательно читали?