ESP8266 отключается через несколько часов

Моя система выглядит так:

ESP8266 подключен к Arduino Uno (2, 3 контакта), а вход данных реле к контакту 12 Arduino, а питание реле подается из другого источника.

Arduino получает данные с сервера и включает/выключает реле в соответствии с этим сигналом. Эта система прекрасно работает несколько часов, а затем внезапно выходит из строя. В моей консоли Wi-Fi у меня есть:

wlan0: STA 2c:3a:e8:4e:bf:70 WPA: подтверждение попарного ключа завершено (RSN) wlan0: STA 2c:3a:e8:4e:bf:70 IEEE 802.11: отключенный wlan0: AP-STA-ОТКЛЮЧЕНА 2c:3a:e8:4e:bf:70 wlan0: STA 2c:3a:e8:4e:bf:70 IEEE 802.11: отключенный wlan0: STA 2c:3a:e8:4e:bf:70 IEEE 802.11: связанный wlan0: STA 2c:3a:e8:4e:bf:70 IEEE 802.11: отключен wlan0: STA 2c:3a:e8:4e:bf:70 IEEE 802.11: отключенный wlan0: STA 2c:3a:e8:4e:bf:70 IEEE 802.11: связанный wlan0: AP-STA-CONNECTED 2c:3a:e8:4e:bf:70

Я прочитал этот вопрос по Arduino, но принципиальная схема похожа на эту. Я получаю питание от своего компьютера для запуска Arduino.

Это мой код Arduino:

#include "WiFiEsp.h"

// Emulate Serial1 on pins 6/7 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(2, 3); // RX, TX
#endif

char ssid[] = "RPi";            // your network SSID (name)
char pass[] = "raspberry";        // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status

char server[] = "192.168.50.1";

unsigned long lastConnectionTime = 0;         // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 10000L; // delay between updates, in milliseconds
int testLED = 12;
// Initialize the Ethernet client object
WiFiEspClient client;

void setup()
{
  pinMode(testLED, OUTPUT);
  // initialize serial for debugging
  Serial.begin(9600);
  // initialize serial for ESP module
  Serial1.begin(9600);
  // initialize ESP module
  WiFi.init(&Serial1);

  // check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue
    while (true);
  }

  // attempt to connect to WiFi network
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }

  Serial.println("You're connected to the network");

  //printWifiStatus();
}

void loop()
{
  // if there's incoming data from the net connection send it out the serial port
  // this is for debugging purposes only
  while (client.available()) {
    char c = client.read();
    //code to run relay
    if (c == '#')
    {
      while (client.available() == 0) { } // Do nothing while we wait for the next value

      // reading the second charactor
      c = client.read();
      if (c == '1') {
        Serial.println("On");
        digitalWrite(testLED, HIGH);
        delay(600000);
      }
      else if (c == '0') {
        Serial.println("Off");
        digitalWrite(testLED, LOW);
        delay(600000);
      } //end of C cheking if-else
    }  //end of first charactor # if
    //end of replay code
  }
  // if 10 seconds have passed since your last connection,
  // then connect again and send data
  if (millis() - lastConnectionTime > postingInterval) {
    httpRequest();
  }
}

// this method makes a HTTP connection to the server
void httpRequest()
{
  Serial.println();

  // close any connection before send a new request
  // this will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection
  if (client.connect(server, 80)) {
    Serial.println("Connecting...");

    // send the HTTP PUT request
    client.println(F("GET /simple.txt HTTP/1.1"));
    client.println(F("Host: localhost"));
    client.println("Connection: close");
    client.println();
    // note the time that the connection was made
    lastConnectionTime = millis();
  }
  else {
    WiFi.begin(ssid, pass);
    Serial.println("Reconnecting again");
  }
}

, 👍3

Обсуждение

здесь не описывается, как вы включаете Arduino... «Я получаю питание от своего ПК для запуска Arduino»., @jsotola


3 ответа


Лучший ответ:

2

После довольно долгих исследований я нашел решение своей проблемы.

Я немного изменил подключение питания к ESP-8266.

ESP 8266 --------- Arduino Uno

Vcc ---------> 3,3 В

CH_PD ---------> 5 В делится на 3,3 В с помощью резисторов

RX ---------> PIN-2 через регулятор 3,3 В.

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

,

питание CH_PD от 5 В сработало. Подозреваю, что оно питает часть WiFi, @Juraj

@Juraj извините, что вы имеете в виду? напрямую подключить 5 В к порту CH_PD ESP?, @Sachith Muhandiram

нет нет, регулятор в порядке. Контакт 3,3 В на Uno может обеспечить только 50 мА. нормальное соединение Vcc и CH_PD вместе, но 3,3 В недостаточно для питания esp8266. Интересно, что помогло питание только CH_PD от более сильного источника., @Juraj

@Juraj Я пробовал подключить внешнее напряжение к Vcc, но это не сработало., @Sachith Muhandiram

Я посмотрел документы. Ваш esp8266 теперь стабилен, потому что вывод CH_PD (включение чипа) имеет стабильное питание, не подверженное перепадам питания, вызванным WiFi. Более мощный блок питания был бы лучшим решением, @Juraj


3

Насколько я знаю, вам нужно не менее 170 мА для питания esp8266, также вам нужно 100-200 мА для arduino и 100 мА для реле, поэтому я рекомендую использовать блок питания на 1 А и припаять несколько конденсаторов на шины 5 В и 3,3 В. Также, если ваш Wi-Fi выдает IP-адрес, который ограничен определенным временем, например, 1-2 часа, вам нужно расширить это время для ваших нужд. Если он отключится, esp потеряет свой IP-адрес и попытается восстановить его, например, на моем NODE MCU он работает хорошо в течение недель. Это также зависит от вашей библиотеки (я использую ESP8266WiFi.h). В любом случае я рекомендую попробовать пример WebServer для проверки, заключается ли проблема в вашем коде.

,

припаять конденсаторы к плате Arduino? можете объяснить?, @Sachith Muhandiram

@Сачит http://www.instructables.com/id/NRF24L01-Fixing-Connection-Issues/, @Coder_fox

*вам нужно 100-200 мАч для ардуино* - 100 миллиампер-часов? Вы имеете в виду 100-200 мА, не так ли?, @Nick Gammon

OP использует библиотеку WiFiEsp в Uno с прошивкой AT в esp8266, @Juraj

@Coder_fox [Ампер](https://en.wikipedia.org/wiki/Ампер) — это самостоятельная единица измерения. Это как сказать, что килограммы измеряются в килограмм-часах., @Nick Gammon

Ампер-часы используются для таких вещей, как батареи. Батарея емкостью 40 А·ч может выдавать один ампер в течение 40 часов или 2 ампера в течение 20 часов и т. д., @Nick Gammon

@Sachith, ты здесь? Ты предложил вознаграждение. Оно достанется Coder_fox. Помог ли этот ответ? Если да, то прими его, если нет, то оставь отзыв, @Juraj

@Juraj Нет, это не решило мою проблему. Я опубликовал свой ответ ниже., @Sachith Muhandiram


0

После четырех месяцев поисков - просто используйте 3,3 В с 1,5 или 2 А, и все будет работать правильно.

,

можете подсказать полный ответ?, @Sachith Muhandiram