Реле esp8266 + octocoupler: сброс WDT при использовании переменного тока

Я пытаюсь включить лампочку через 4-канальный 5V оптопарный релейный контроллер от ESP8266 с помощью точки доступа Wi-FI. Все мои соединения выглядят нормально, и я могу подключить WI-FI SoftAP и отправить сигнал на ESP8266 01. Даже я могу переключить реле с NO на NC или наоборот. Только когда а подключает переменный ток 240В к реле для питания лампы накаливания, я получаю следующую ошибку от ESP

21:11:34.312 ->  ets Jan  8 2013,rst cause:4, boot mode:(1,7) 
21:11:34.312 ->  
21:11:34.312 -> wdt reset

Если я использую питание 12 В постоянного тока для освещения светодиода через реле, то он работает нормально. если снова использовать питание 240В для реле на лампочку, то я снова получу ту же ошибку.

Я уже пробовал использовать керамический конденсатор для развязки, чтобы избежать шума от переменного тока. По-прежнему не везло. Пожалуйста, посоветуйтесь. Я новичок и наивен в обращении с электроникой.

Добавим еще и схему.

Обновление: После дальнейшего тестирования я вижу следующее поведение, Если я подключу лампочку переменного тока к реле и включу ее. Затем, обеспечив длинный зазор перед его выключением, ЭСП становится стабильным в течение более длительного времени.

Еще лучше, если я выключу/включу свой мобильный Wi-Fi между каждым включением или выключением лампы переменного тока, то ESP всегда будет стабильным.

Добавляю еще и свой код.

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>

/* Set these to your desired credentials. */
const char *ssid = "*****";
const char *password = "*********";

ESP8266WebServer server(80);

const int led = 2;  //GPIO2

/* Просто небольшое тестовое сообщение.  Перейти к http://192.168.4.1 в веб - браузере
 * подключен к этой точке доступа, чтобы увидеть ее.
 */
void handleRoot() {

  int size=1000;
  char temp[size];

  int sec = millis() / 1000;
  int min = sec / 60;
  int hr = min / 60;

  snprintf ( temp, size,

"<body>\  
    <p>Status: Light ON</h1></p>\
    <p><a href=\"http://192.168.4.1/on\"><h1>Turn ON</h1></a></p>\
    <p></p>\
    <p><a href=\"http://192.168.4.1/off\"><h1>Turn OFF</h1></a></p>\           
  </body>\
  ",

    hr, min % 60, sec % 60
  );
  server.send ( 200, "text/html", temp );  

}

void setup() {
    delay(1000);
    Serial.begin(115200);
    Serial.println();
    Serial.print("Configuring access point...");

    /* Вы можете удалить параметр password, если хотите, чтобы точка доступа была открыта. */
    WiFi.softAP(ssid, password);

    IPAddress myIP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(myIP);

  pinMode(led, OUTPUT);
  digitalWrite ( led, HIGH );

  //URLs available to query
    server.on("/", handleRoot);
  server.on ( "/on", turnON );    
  server.on ( "/off", turnOFF );
    server.begin();
    Serial.println("HTTP server started");

}

void turnON(){

  digitalWrite ( led, HIGH );

  int size=1000;
  char temp[size];

  int sec = millis() / 1000;
  int min = sec / 60;
  int hr = min / 60;

  snprintf ( temp, size,

"<body><p><a href=\"http://192.168.4.1/off\"><h1>Turn OFF</h1></a></p></body>",

    hr, min % 60, sec % 60
  );

  server.send ( 200, "text/html", temp);

}

void turnOFF(){

  digitalWrite ( led, LOW );

  int size=1000;
  char temp[size];

  int sec = millis() / 1000;
  int min = sec / 60;
  int hr = min / 60;

  snprintf ( temp, size,

"<body><p><a href=\"http://192.168.4.1/on\"><h1>Turn ON</h1></a></p></body>",

    hr, min % 60, sec % 60
  );

  server.send ( 200, "text/html", temp);

}

void loop() {
    server.handleClient();
}

, 👍0

Обсуждение

Я знаю, что этому вопросу уже более 5 лет, но поскольку никто об этом не упомянул: вы пытаетесь получить 5 В от входа 5 В с помощью линейного стабилизатора? Это не будет работать. Кроме того, если регулятором является LM317T, он подключен неправильно, и для установки выходного напряжения потребуется пара резисторов., @StarCat


2 ответа


0

Чтобы предотвратить EMI и сохранить контакты реле, вы можете переключать реле при пересечении нуля переменного тока. Добавьте в проект своего рода обнаружение пересечения нуля и, прежде чем переключать реле, дождитесь пересечения нуля, а затем подождите непосредственно перед следующим пересечением нуля (около 9500 микросекунд при переменном токе 50 Гц).

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

,

0

Прежде чем перейти к проблемам темной магии электромагнитных помех - давайте попробуем выделить все наши параметры, которые могут вызвать или повлиять (и, возможно, это не только один):

  1. сделайте тестовый код как можно более простым для периодического включения / выключения реле. При запуске сделайте 5-секундную задержку между сменой состояний и уменьшите ее до 500 миллис - таким образом, вы проверяете как электромагнитные помехи, так и проблемы с питанием внутри вашей схемы (иногда реле потребляет больше энергии, чем может дать микроконтроллер, и это может привести к сбросу. Проблема может быть связана с питанием MCU или реле, механическими или электрическими проблемами).
  2. Компоненты - попробуйте заменить другими, особенно микроконтроллерами и реле, чтобы убедиться, что это не неисправные или поврежденные компоненты. Например, Wemos mini с is Relay shield может легко изолировать любую проблему, связанную с электромагнитными помехами.
  3. Из вашей диаграммы (и в отличие от названия вашего вопроса) - Uno используется для переключения? и не ESP-01, верно? вы убедились, что vcc реле соответствует его MCU? (вы сказали реле 5 В, что неверно для ESP8266).
  4. Нагрузка - обязательно выбирайте простую резистивную нагрузку (лампочку переменного тока), а не двигатель переменного тока (который вызывает сильные электромагнитные помехи).
  5. EMI - если все вышеперечисленное не помогло (я сомневаюсь) или это было решено только для этого "случая с лампочкой", влияние EMI связано с расстоянием. Попробуйте использовать длинные провода переменного тока, которые отведут ваши микроконтроллеры и реле далеко от этого источника. 1 м будет достаточно.

Подводя итог, я буду очень удивлен, узнав, что это EMI (и я успешно справился с двигателями переменного тока с помощью WEMOS и двойного релейного модуля).

Пожалуйста, обновите.

Парень

,