Прошу помощи с чтением из Serial

kost82
Offline
Зарегистрирован: 30.11.2015

Добрый день!

Помогите разобраться как правильно читать данные из Serial, я полдня уже провозился, а результата нет.

Мне нужно отправить на удаленный сервер некий GET-запрос. Для отправки я использую esp8266, общение с которым идет через AT-команды. С командами разобрался, там вроде все хорошо, данные на сервер уходят, но теперь необходимо разобраться с подключением к WiFi, точнее нужно убедиться, что оно установлено и можно отправлять данные. Принцип примерно такой: посылаю в esp8266 через SoftwareSerial название точки доступа и пароль, а в ответ esp должен выводить несколько строчек о текущем состоянии и в конце "OK", вот по наличию этого "OK" я хочу определять, что подключение прошло успешно.

Вот код:

SoftwareSerial esp8266Serial(5, 6); // RX | TX

 Serial.begin(9600);
 esp8266Serial.begin(115200);

boolean connectWiFi() {
  String cmd = "AT+CWJAP=\"";
  cmd += SSID;
  cmd += "\",\"";
  cmd += PASS;
  cmd += "\"";
  esp8266Serial.println(cmd);
  Serial.println(cmd);
  delay(5000);
  String rsp;
  if (esp8266Serial.available() > 0) {
    rsp = esp8266Serial.readString();
    Serial.println(rsp);
  }
}

Проблема в том, что Serial.println(rsp); выводит в монитор порта всякие кракозябры. Если использовать вместо readString() функцию read(), то в монитор порта приходит строка из цифр.

while (esp8266Serial.available() > 0) {
    rsp += esp8266Serial.read();
  }
Serial.println(rsp);

Если напрямую соединять esp8266 с USB-UART преобразователем, то буквы в мониторе порта отображаются нормально. Подскажите пожалуйста как их правильно транслировать из одного порта в другой?

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Если транслировать то read прочитали write записали

kost82
Offline
Зарегистрирован: 30.11.2015
  while (esp8266Serial.available() > 0) {
    Serial.write(esp8266Serial.read());
  }

Этот код тоже выдает кракозябры в монитор порта

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Скорость порта проверяйте

kost82
Offline
Зарегистрирован: 30.11.2015

Перепробовал все стандартные скорости от 9600 до 115200 в строке esp8266Serial.begin(115200); - результат тот же, только меняется вид и количество кракозябриков

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

А в мониторе порта какая скорость? И да, софтсериал на 115200 лучше не юзать. Есп точно на 115200 работает в режиме ат? Перебирать ничего не надо, надо правильно выставить скорости в мониторе порта, при инициализации сериала на ардуине и при инициализации софтсериала для работы с есп

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

потому и крякозяблы, потому что выставили 115 скорость на ссофтсериал.

 на софтсериале нужно использовать не выше 9600.

kost82
Offline
Зарегистрирован: 30.11.2015

Penni пишет:
А в мониторе порта какая скорость? И да, софтсериал на 115200 лучше не юзать. Есп точно на 115200 работает в режиме ат?

В мониторе порта 9600, но пробовал 115200 выставлять - все без толку. При этом все остальное выводится нормально, только ответы от esp кривые. То что esp отвечает на 115200 я проверил на прямом подключении через USB-UART. При такой скорости все ответы нормально приходили.

Short Circuit пишет:

потому и крякозяблы, потому что выставили 115 скорость на ссофтсериал.

 на софтсериале нужно использовать не выше 9600.

А что поделать, если esp8266 на такой скорости работает? Теоретически я могу перевести ее на другую скорость , но как-то ведь люди на таких скоростях с ними работают. При этом проблем с отправкой команд в esp у меня нет на такой скорости, проблема только с приемом. Ну и не встречал я ни в каких источниках упоминаний про ограничеие 9600

kost82
Offline
Зарегистрирован: 30.11.2015

Может пины для SoftwareSerial надо подтягивать к земле или к массе? Хотя я нигде такой схемы не видел, везде цепляют напрямую и все.

b707
Offline
Зарегистрирован: 26.05.2017

kost82 пишет:

А что поделать, если esp8266 на такой скорости работает? Теоретически я могу перевести ее на другую скорость , но как-то ведь люди на таких скоростях с ними работают.

Софтсериал на 115200 НЕ РАБОТАЕТ. Либо переводите ЕСП на другую скорость (ниже) - либо подключайте его к аппаратному порту на ардуине.

kost82
Offline
Зарегистрирован: 30.11.2015

Оказалось не все так просто с переключением скорости: при отправке команды AT+IPR=9600 ESP-ха зависла и потом отказалась отвечать на AT-команды через терминал. Перепробовал кучу прошивок со страницы https://esp8266.ru/downloads/ да все без толку: одни не заливаются до конца, другие заливаются, но нет ответа на AT-команды. Нашел одну, которая на команды отвечает, но скорость сменить не дает, и потом, как оказалось, не дает подключиться в режиме "клиента", а сразу делается точка доступа.

Короче, решил, что если мне повезет наконец с прошивкой - забуду про проверку ответов от ESP-01, ведь в любом случае, если пакет с данными не отправится, то просто будет следующая попытка через 5 минут и особо обрабатывать ошибку то и не надо. В следующей версии устройства попробую обойтись без ардуины совсем, видел пару статей про то, что все что может ардуина - легко перенести на ESP, вот и попробую на деле так ли это.

kost82
Offline
Зарегистрирован: 30.11.2015

Нашлась таки прошивка для esp8266 (esp-01), которая нормально заработала и позволила снизить скорость до 9600 бод. На всякий случай вот ссылка: https://esp8266.ru/download/esp8266-firmware/AT22SDK100-2015-03-20-boot1...

Тему можно считать закрытой. Спасибо всем за помощь.