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

Пропадает WiFi через некоторое время после подключения платы ESP8266 к роутеру (NodeMCU, Wemos D1 mini)

Nikitos

New member
Добрый день! Возникла проблема при передаче данных от скрипта Python, который запущен на ПК ESP8266 с помощью протокола UDP (также подобная проблема появлялась и при использовании TCP). Суть проблемы: пропадает WiFi сеть и проводной интернет на ПК, который подключен к роутеру ZyXEL. Данные отправляю 10 раз в секунду. Wireshark видит запросы, размер одного запроса 57 байт.

C++:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char* ssid = "ZyXEL";
const char* password = "*******";

WiFiUDP Udp;
unsigned int localUdpPort = 4210;  // локальный порт для прослушки
char incomingPacket[1024];          // буфер для входящих пакетов
String getString  = "abvgdefg 123 456";

void setup()
{
  Serial.begin(9600);
  Serial.println();

  Serial.printf("Connecting to %s ", ssid);
  //  "Подключение к %s "
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");
  //  " подключено "

  Udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
  //  "Теперь прослушиваем IP-адрес %s, UDP-порт %d"
}

void loop()
{
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    // получаем входящие UDP-пакеты:
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }
    getString = String(incomingPacket);
    Serial.printf("UDP packet contents: %s\n", incomingPacket);
    //  "Содержимое UDP-пакета: %s"

  }
}


Python:
from socket import *
import sys

host = '192.168.0.3'
port = 4210
addr = (host,port)

udp_socket = socket(AF_INET, SOCK_DGRAM)
import time

time.sleep(0.2)

for i in range(10000):
    data = str(i) + "draww 1 2 3"
    # data = input('write to server: ')
    if not data :
        udp_socket.close()
        sys.exit(1)
    
    #encode - перекодирует введенные данные в байты, decode - обратно
    data = str.encode(data)
    ok = udp_socket.sendto(data , addr)
    time.sleep(0.14)
    print("ok", ok, i)


udp_socket.close()
 

nikolz

Well-known member
Добрый день! Возникла проблема при передаче данных от скрипта Python, который запущен на ПК ESP8266 с помощью протокола UDP (также подобная проблема появлялась и при использовании TCP). Суть проблемы: пропадает WiFi сеть и проводной интернет на ПК, который подключен к роутеру ZyXEL. Данные отправляю 10 раз в секунду. Wireshark видит запросы, размер одного запроса 57 байт.

C++:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char* ssid = "ZyXEL";
const char* password = "*******";

WiFiUDP Udp;
unsigned int localUdpPort = 4210;  // локальный порт для прослушки
char incomingPacket[1024];          // буфер для входящих пакетов
String getString  = "abvgdefg 123 456";

void setup()
{
  Serial.begin(9600);
  Serial.println();

  Serial.printf("Connecting to %s ", ssid);
  //  "Подключение к %s "
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");
  //  " подключено "

  Udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
  //  "Теперь прослушиваем IP-адрес %s, UDP-порт %d"
}

void loop()
{
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    // получаем входящие UDP-пакеты:
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }
    getString = String(incomingPacket);
    Serial.printf("UDP packet contents: %s\n", incomingPacket);
    //  "Содержимое UDP-пакета: %s"

  }
}


Python:
from socket import *
import sys

host = '192.168.0.3'
port = 4210
addr = (host,port)

udp_socket = socket(AF_INET, SOCK_DGRAM)
import time

time.sleep(0.2)

for i in range(10000):
    data = str(i) + "draww 1 2 3"
    # data = input('write to server: ')
    if not data :
        udp_socket.close()
        sys.exit(1)
   
    #encode - перекодирует введенные данные в байты, decode - обратно
    data = str.encode(data)
    ok = udp_socket.sendto(data , addr)
    time.sleep(0.14)
    print("ok", ok, i)


udp_socket.close()
у Вас маяк на роутере работает с шагом 100 мс (10 раз в секунду).
У вас очевидно хорошая глушилка получилась.

Надо на компе отправлять подтверждение, а на ESP ждать его до отправки нового сообщения.
 

pvvx

Активный участник сообщества
Serial.begin(9600); -> 960 байт в сек.
Данные отправляю 10 раз в секунду. Wireshark видит запросы, размер одного запроса 57 байт.
Serial.printf("UDP packet contents: %s\n", incomingPacket);
"UDP packet contents: %s\n" = 22 байта + incomingPacket(57) = 79 байт.
79*10(раз в сек) = 790 байт в сек.
Видимо это предельная скорость приема у ESP :)
 
Сверху Снизу