• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Ошибки в Образцах Arduino IDE

yron

Member
В образце WiFiTelnetToSerial чтобы все заработало нужно заменить везде Serial1.println на Serial.println.
Вот код с исправлениями , который у меня на ESP-12F наконец-то заработал.

#include <ESP8266WiFi.h>

//how many clients should be able to telnet to this ESP8266
#define MAX_SRV_CLIENTS 100
const char* ssid = "имя точки доступа";
const char* password = "пароль";

WiFiServer server(23);
WiFiClient serverClients[MAX_SRV_CLIENTS];

void setup() {
pinMode(2, OUTPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("\nConnecting to "); Serial.println(ssid);
uint8_t i = 0;
while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
if(i == 21){
Serial.print("Could not connect to"); Serial.println(ssid);
while(1) delay(500);
}
//start UART and the server
Serial.begin(115200);
server.begin();
server.setNoDelay(true);

Serial.print("Ready! Use 'telnet ");
Serial.print(WiFi.localIP());
Serial.println(" 23' to connect");
digitalWrite(2, LOW);
}

void loop() {
uint8_t i;
//check if there are any new clients
if (server.hasClient()){
for(i = 0; i < MAX_SRV_CLIENTS; i++){
//find free/disconnected spot
if (!serverClients || !serverClients.connected()){
if(serverClients) serverClients.stop();
serverClients = server.available();
Serial.print("New client: "); Serial.print(i);
continue;
}
}
//no free/disconnected spot so reject
WiFiClient serverClient = server.available();
serverClient.stop();
}
//check clients for data
for(i = 0; i < MAX_SRV_CLIENTS; i++){
if (serverClients && serverClients.connected()){
if(serverClients.available()){
//get data from the telnet client and push it to the UART
while(serverClients.available()) Serial.write(serverClients.read());
}
}
}
digitalWrite(2, LOW);
//check UART for data
if(Serial.available()){
size_t len = Serial.available();
uint8_t sbuf[len];
Serial.readBytes(sbuf, len);
//push UART data to all connected telnet clients
for(i = 0; i < MAX_SRV_CLIENTS; i++){
if (serverClients && serverClients.connected()){
serverClients.write(sbuf, len);
delay(1);
}
}
}
}
 

yron

Member
Там Serial1 в выводится отладочная информация, нет необходимости менять.
У меня при serial1 ЕСП просто зависала , для проверки чего я добавил включение светодиода подключенного на GPIO2 digitalWrite(2, LOW); , после замены serial1 на serial, telnet server запустился , ранее он не запускался и к точке доступа не подключался. Поменял и все заработало , подключилось к АР и создался телнет сервер.
Проверил еще раз с serial1 , на втором уарте ничего не выходит , светодиод не загорается , к точке доступа не подключается. Короче зависает. Возможно и за того что нет инициализации второго уарта.
 

CodeNameHawk

Moderator
Команда форума
Вроде оба инициализируются.
Код:
  Serial1.begin(115200);
  WiFi.begin(ssid, password);
  Serial1.print("\nConnecting to "); Serial1.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if(i == 21){
    Serial1.print("Could not connect to"); Serial1.println(ssid);
    while(1) delay(500);
  }
  //start UART and the server
  Serial.begin(115200);
 

yron

Member
Вроде оба инициализируются.
Код:
  Serial1.begin(115200);
  WiFi.begin(ssid, password);
  Serial1.print("\nConnecting to "); Serial1.println(ssid);
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
  if(i == 21){
    Serial1.print("Could not connect to"); Serial1.println(ssid);
    while(1) delay(500);
  }
  //start UART and the server
  Serial.begin(115200);
Тогда не знаю почему , но у меня не работает , светодиод не загорается , к точке не подключается , на втором уарте ничего не выходит и телнет сервер не запускается.У меня вот такой косяк происходит. Может это кому-то поможет.
 

Shyster

New member
Тогда не знаю почему , но у меня не работает , светодиод не загорается , к точке не подключается
Потому что конфликт использования GPIO2.
https://esp8266.ru/arduino-ide-esp8266/#serial
[fright]
Serial1 использует аппаратный UART1, работающий только на передачу. UART1 TX это GPIO2. Для включения Serial1 используйте Serial1.begin();

По умолчанию, отладочная информация библиотек WiFi выключается, когда вы вызываете функцию Serial.begin();. Для включения отладочной информации на UART0 используйте Serial.setDebugOutput(true); Для перенаправления вывода отладочной информации на UART1 используйте команду Serial1.setDebugOutput(true);
[/fright]
 

yron

Member
Потому что конфликт использования GPIO2.
https://esp8266.ru/arduino-ide-esp8266/#serial
[fright]
Serial1 использует аппаратный UART1, работающий только на передачу. UART1 TX это GPIO2. Для включения Serial1 используйте Serial1.begin();

По умолчанию, отладочная информация библиотек WiFi выключается, когда вы вызываете функцию Serial.begin();. Для включения отладочной информации на UART0 используйте Serial.setDebugOutput(true); Для перенаправления вывода отладочной информации на UART1 используйте команду Serial1.setDebugOutput(true);
[/fright]
Я знаю что GPIO2 это второй усарт , но и без команды на включение светодиода (образец без изменений) ничего не работало. Я потом добавил команду на светодиод чтобы отследить зависает или нет. даже если происходит конфликт светодиод должен что-то давать. Короче стандартный образец не работает и не только у меня.
 
Сверху Снизу