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

UDP краш на ESP32 DEVKIT V1

TrueNoob141

New member
При отправке по UDP с одинаковыми интервалами (пробовал 40ms - 200ms) пакеты по 24 байта либо пропускаются, либо идут с задержкой, но более вероятно происходит краш, т.к. мигает LED, а код подразумевает это только в `setup()`
Примечательно что с подключенным кабелем проблем нет.
Использую ESP32 DEVKIT V1 WROOM 32, которая передает цифровые сигналы на L298N.

Пример передаваемых данных: jx0000jx1000jy10.5LED000

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

#define ENA 23
#define IN1 22
#define IN2 21

#define ENB 4
#define IN3 19
#define IN4 18

#define LED_BUILTIN 2

const int udpPort    = 7001;
const char* ssid     = ...;
const char* password = ...;

WiFiUDP udp;
char packetBuffer[50];

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  Serial.begin(9600);
  while(!Serial){delay(100);}

  WiFi.begin(ssid, password);
  WiFi.setSleep(false);

  while (WiFi.status() != WL_CONNECTED) {
      delay(1000);
      Serial.print(".");
  }
    
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  digitalWrite(LED_BUILTIN, LOW);

  udp.begin(udpPort);
}

void loop(){
  int packetSize = udp.parsePacket();
  if (packetSize)
  {
    IPAddress remoteIp = udp.remoteIP();
    int len = udp.read(packetBuffer, 255);
    if (len > 0) {
      packetBuffer[len] = 0;
      // Serial.println(packetBuffer);
    }
      
    String udp_packet_sent = packetBuffer;
    String val_vel = udp_packet_sent.substring(12,18);
    val_vel = val_vel.substring(3,6);
    float val_vel_f = val_vel.toFloat();
    val_vel_f = val_vel_f - 0.5;

    if (val_vel_f < -0.1) { back(); }
    else if (val_vel_f > 0.1) { forward(); }
    else { stop(); }
}
Почему это происходит?
 

CodeNameHawk

Moderator
Команда форума
Попробуйте увеличить время задержки между отправлеиями.
Т.е. посылайте реже, пока не начнёт нормально работать.
 

TrueNoob141

New member
Похоже проблема с тем что ESP32 питается от L928N 5v: когда запускаются моторчики плата перезапускается.
Правда в силу нехватки знаний я не знаю как это исправить и почему так.
 

CodeNameHawk

Moderator
Команда форума
Для питания есп поставьте отдельный dc-dc преобразователь или стабилизатор.
 

CodeNameHawk

Moderator
Команда форума
вот DC-DC на XL4015 , но проблема сохраняется
Зачем на 5 А? Писали, что есп такие, плохо переваривает.
Как вариант, слабый блок питания или не правильная разводка проводов.
Для проверки запитайте от аккума, поймете в чем проблема.
 
Сверху Снизу