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 ответа
Лучший ответ:
После довольно долгих исследований я нашел решение своей проблемы.
Я немного изменил подключение питания к 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
Насколько я знаю, вам нужно не менее 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
После четырех месяцев поисков - просто используйте 3,3 В с 1,5 или 2 А, и все будет работать правильно.
можете подсказать полный ответ?, @Sachith Muhandiram
- Чтение данных из Google Таблиц с помощью Nodemcu
- Понимание того, как запитать объекты с помощью реле (featherwing, feather huzzah)
- Подключите реле 5 В к плате ESP32 WROVER B
- ESP8266 отправляет данные на сайт, но не возвращает статус
- Случайные символы, передаваемые из ESP8266 в Arduino
- Ультразвуковой датчик (HC-SR04), регистрирующий случайное расстояние
- Программировать ESP8266, чтобы избежать случайных исключений?
- Веб-сокеты с ESP8266 с использованием платы Arduino Uno
здесь не описывается, как вы включаете Arduino... «Я получаю питание от своего ПК для запуска Arduino»., @jsotola