Связь Mega <> esp8266 отправляет непонятные данные
У меня есть плата Wemos Mega-ESP8266. Я загрузил простой сервер WebSocket на ESP...
#include <ESP8266WiFi.h>
#include <WebSocketsServer.h>
const char* ssid = "SKYNET";
const char* password = "yourdogsfavouriteauntysmaidenname";
WebSocketsServer webSocket = WebSocketsServer(81);
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght) {
//Serial.printf("[%u] get Message: %s\r\n", num, payload);
switch(type) {
case WStype_DISCONNECTED:
break;
case WStype_CONNECTED:
{
IPAddress ip = webSocket.remoteIP(num);
Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\r\n", num, ip[0], ip[1], ip[2], ip[3], payload);
}
break;
case WStype_TEXT:
{
String _payload = String((char *) &payload[0]);
Serial.print(_payload);
}
break;
case WStype_BIN:
{
hexdump(payload, lenght);
}
// возвращаем данные обратно в браузер
webSocket.sendBIN(num, payload, lenght);
break;
}
}
void setup() {
// Настройка последовательной связи
Serial.begin(115200);
// Настраиваем Wi-Fi
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(200);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
delay(500);
// Настраиваем веб-сокет
Serial.println("Start Websocket Server");
webSocket.begin();
webSocket.onEvent(webSocketEvent);
}
void loop() {
webSocket.loop();
}
Я загружаю через Arduino IDE & все выглядит нормально, за исключением того, что ESP не отправляет какую-либо информацию обратно через последовательный монитор (да, у меня есть DIP-переключатели, правильные для последовательной связи <> ESP).
Я попытался проверить, отправляет ли что-нибудь через Mega через Serial3, мегакод (DIP-переключатели установлены соответствующим образом, а серийный переключатель ESP установлен на RX3). Мегакод...
// Входной буфер из ESP8266
String temp;
void setup() {
// Настройка последовательной связи
Serial.begin(115200); // Отладка для последовательного монитора
Serial3.begin(115200); // Из ESP8266
}
void loop() {
while (Serial3.available()) {
Serial.println(".......");
Serial.println("In from ESP8266");
temp = Serial3.readString();
Serial.println(temp);
Serial.println(".......");
}
}
Теперь я получаю 2 однократных сообщения на последовательный монитор..
.......
In from ESP8266
[WS-Server] Server Started.
.......
.......
In from ESP8266
pm open,type:2 0
.......
Я понятия не имею, где генерируются эти сообщения или почему ESP не отправляет последовательные сообщения при настройке, например IP-адрес для ESP и т. д.
Есть идеи, что здесь происходит?
Обновление 1: Дополнительная информация, запрашиваемая в комментариях (или, по крайней мере, я думаю, что это то, о чем просили)
Обновление 2:
Настройки DIP-переключателя для мигания ESP - OFF, OFF, OFF, OFF, ON, ON, ON
Настройки DIP-переключателя ESP > серийный монитор - ВЫКЛ, ВЫКЛ, ВЫКЛ, ВЫКЛ, ВКЛ, ВКЛ, ВЫКЛ (переключение RX на TX0)
Настройки DIP-переключателя для ESP > Mega > монитор последовательного порта — ВКЛ, ВКЛ, ВКЛ, ВКЛ, ВЫКЛ, ВЫКЛ, ВЫКЛ (переключение RX на TX3)
Обновление 3 Мне нужно нажать красную кнопку сброса после прошивки ESP8266 & это работает, НО как только я отключу & больше ничего не перезапускать! Клиент подключается, отправляет те же данные, но они не возвращаются через последовательный порт. Единственный способ снова приступить к работе — перепрошить ESP8266 и нажать кнопку сброса.
Обновление 4 Заменена плата & теперь опять ничего не работает. Загрузки выглядят нормально, но нет последовательной связи с ESP8266.
@DrBwts, 👍1
Обсуждение1 ответ
Лучший ответ:
Функция автоматического сброса esptool по умолчанию устанавливает io 0 LOW на линии RST, а затем выполняет сброс на линии DTR, чтобы перевести esp8266 в режим прошивки. После загрузки esptool сбрасывает плату по линии DTR.
На этой плате Mega+WiFi подключена только линия DTR, как и для AVR MCU. Для прошивки пин io 0 ставится на НИЗКИЙ контакт 7 DIP-переключателя вручную. Таким образом, сброс после загрузки возвращает esp8266 в режим прошивки.
Пакет esp8266 arduino изменил инструмент загрузки с версии 2.5.0 на версию esptool для python, которая выполняет сброс после загрузки. Этот сброс можно отключить, изменив командную строку esptool в файле platform.txt (--after no_reset
в tools.esptool.upload.pattern
перед write_flash
)
если вам не нравятся DIP-переключатели, вы можете загрузить на esp8266 через ATMega https://forum.arduino.cc/index.php?topic=519181.0, @Juraj
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Управление реле 5В с помощью Wemos D1 R1
- Проблема с WiFi на Mega + WiFi R3 ATmega2560 + ESP8266
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Создать один сервер в режиме точки доступа, а другой - в режиме станции.
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- Веб-сервер ESP8266 отображает только текст, даже если тип контента — текст/HTML.
@Juraj добавил (я думаю) информацию, которую вы запросили, в ОП, @DrBwts
извини. Я прочитал тогда вопрос еще раз, и речь идет не о логировании. (но установите для параметра «Порт отладки» значение «Нет» и не используйте «Wemos D1 R1». используйте «Generic esp8266»), @Juraj
@Juraj только что перепрошил, используя «Generic esp8266», без порта отладки, получил какую-то тарабарщину, но больше ничего. Режим вспышки установлен на DOUT (совместимо), @DrBwts
ааа, правильно ВЫКЛ, ВЫКЛ, ВЫКЛ, ВЫКЛ, ВКЛ, ВКЛ, ВКЛ, чтобы прошить ESP, @DrBwts
Информация о DIP-переключателе @Juraj добавлена в OP, @DrBwts