Не удается отправить UDP-пакеты с ESP8266 Wemos D1.
Я пытаюсь отправить данные датчика с устройства с батарейным питанием, используя протокол UDP. Цель состоит в том, чтобы отправить дейтаграмму сразу после того, как станция Wi-Fi выйдет из спящего режима, а затем сразу же вернуться в спящий режим после записи дейтаграммы на заданный IP-адрес или имя хоста.
Я могу отправлять данные в API Thingspeak, используя их библиотеку, поэтому я знаю, что устройство работает, но при попытке использовать библиотеку WiFiUDP для отправки дейтаграммы на IP-адрес в той же локальной сети ничего не происходит. Мое устройство подключается к Wi-Fi, и команда udp.endPacket()
завершается успешно, но я не получаю пакеты на сервер. Я знаю, что сервер работает, потому что я могу использовать nc
для отправки UDP-пакетов с других компьютеров в локальной сети.
Вот мой набросок с отредактированными ненужными фрагментами.
// https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/station-class.html
#include <ESP8266WiFi.h>
// https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/udp-examples.html
#include <WiFiUdp.h>
// Создаем экземпляр класса udp
WiFiUDP udp;
void setup() {
Serial.begin(115200);
Serial.print("Connecting to WiFi");
WiFi.mode(WIFI_STA);
WiFi.hostname(hostname);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("SSID:\t");
Serial.println(WiFi.SSID());
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
Serial.print("Gateway:\t");
Serial.println(WiFi.gatewayIP());
uint8_t buffer[50] = "hello world";
char message[] = "hello world 2";
IPAddress staticIP(192, 168, 1, 118);
udp.beginPacket(staticIP, 3381);
udp.write(buffer, 11);
//udp.write(сообщение);
udp.endPacket();
// Рассчитываем необходимое время сна и идем спать
long sleepTime = measurementInterval - millis(); // в миллисекундах
if (sleepTime < 100) sleepTime = 100; // установить минимальное время сна 0,1 секунды
Serial.print ("Going to sleep now for ");
Serial.print((float)sleepTime / 1000, 3);
Serial.println (" seconds.");
Serial.print ("Time going to sleep=");
Serial.print ((float)millis() / 1000, 3);
ESP.deepSleep(sleepTime * 5000); // конвертируем в микросекунды
}
И мой сервер узла, чтобы быть полным здесь:
const dgram = require('dgram')
const server = dgram.createSocket('udp4')
server.on('error', (err) => {
console.log(`server error:\n${err.stack}`)
server.close()
})
server.on('message', (msg, rinfo) => {
console.log(`got message from ${rinfo.address}:${rinfo.port} - ${msg}`)
})
server.on('listening', () => {
const address = server.address()
console.log(`server listening ${address.address}:${address.port}`)
})
server.bind(3381)
Я также пытался добавить задержки между каждой функцией, но безрезультатно.
@rubyuser1357796, 👍0
Обсуждение1 ответ
Лучший ответ:
В соответствии с сабреддитом esp8266 вам необходимо добавить достаточную delay()
в 50–100 миллисекунд (не микросекунд) перед переходом в спящий режим, поскольку ни одна из функций udp не блокируется.
- ESP8266 Аналоговое чтение мешает Wi-Fi?
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Управление реле 5В с помощью Wemos D1 R1
- Могу ли я использовать выход 3,3 В Arduino напрямую к esp8266?
- ESP8266 UDP multicast не принимает пакеты
- Достаточно ли 1 МБ флэш-памяти для загрузки OTA в ESP-01?
- Программный последовательный конфликт с Wi-Fi на ESP8266
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
Я не вижу udp.begin(). Некоторые библиотеки Arduino требуют его даже для отправки., @Juraj
запустите wireshark на своем сервере или на любом компьютере в вашей локальной сети ... посмотрите, что отправляется, @jsotola
@Juraj
udp.begin()
предназначен для прослушивания, но я попробовал и не увидел разницы., @rubyuser1357796@jsotola wireshark не собирает информацию с IP-адреса устройства esp8266, udp или иным образом., @rubyuser1357796
вы должны отправлять пакеты на IP-адрес ПК, на котором работает wireshark, @jsotola
@jsotola это то, что я пробовал. Я думаю, что это может быть проблема с клиентским программным обеспечением, я просто не знаю, что., @rubyuser1357796