• Система автоматизации с открытым исходным кодом на базе 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 А? Писали, что есп такие, плохо переваривает.
Как вариант, слабый блок питания или не правильная разводка проводов.
Для проверки запитайте от аккума, поймете в чем проблема.
 
Сверху Снизу