Как распечатать ответ на AT-команды в последовательном порту Arduino?

Я хочу напечатать ответ на AT-команду. Я отправляю AT-команду, но не получаю ответа на последовательный порт Arduino. Он дает -1 вместо ОК.

#include "SoftwareSerial.h"
String ssid = "connectify-krish";
String password = "12345678";

String myword= "";
SoftwareSerial esp(10, 11);
void setup() {
  Serial.begin(9600);
  esp.begin(9600);
  esp.write("AT");
  Serial.println(esp.read());
}

void loop() {}

person STACK2    schedule 07.04.2016    source источник
comment
Разве вы не должны отправить новую строку (AT\n), чтобы получить ответ?   -  person Ctx    schedule 07.04.2016
comment
я использовал esp.write(AT\n);, но получил тот же результат -1   -  person STACK2    schedule 07.04.2016
comment
В зависимости от вашего устройства может быть нужен AT\r\n?   -  person Ctx    schedule 07.04.2016
comment
да вроде бы AT\r\n. См. cdn.sparkfun.com/assets/learn_tutorials /4/0/3/ , стр. 7, примечание №5.   -  person Alphonsos_Pangas    schedule 07.04.2016
comment
Нет нет нет! ЕДИНСТВЕННЫЙ правильный способ завершить командную строку AT — это использовать только \r (если только вы не напортачили с регистром S3, чего делать не следует). спецификация V.250 предельно ясна по этому поводу см. главу 5.2 Командные строки DTE.   -  person hlovdal    schedule 07.04.2016
comment
Вместо esp.write(AT) используйте esp.println(AT). Это добавит \r\n в конец строки. После отправки AT напишите цикл while, используя millis(), который ожидает ответа от esp в течение секунды. Я использую его с моим esp, он работает очень хорошо. Также проверьте, работает ли модуль при прямом подключении к ПК. Подтвердите скорость 9600 бод, большинство модулей esp имеют скорость 115200 бод.   -  person Hemal Chevli    schedule 08.04.2016


Ответы (2)


Как уже указывалось в комментариях, вы не завершаете командную строку AT, поэтому модем никогда не ответит на это.

Обязательно прочтите V.250 и изучите разницу между AT-командой и AT-командной строкой. ATI — это AT-команда, а "ATI I I\r" — командная строка, вызывающая эту команду три раза подряд. Кстати, обратите внимание, что в этом примере вы получите только один окончательный код результата для всех трех из них, т. е. окончательный код результата является ответом на полную командную строку, а не на отдельные вызовы команд.

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

person hlovdal    schedule 07.04.2016

Как вам сказали, завершайте свои AT-команды символом возврата каретки \r. Также ваш текущий код будет читать только байт ответа, и это если ответ даже прибыл, так как вы вообще не включили задержку. Чтобы взаимодействовать с ESP в интерактивном режиме с последовательным монитором, я бы рекомендовал использовать это:

#include <SoftwareSerial.h>

SoftwareSerial esp(10, 11);
void setup(){
  Serial.begin(9600);
  esp.begin(9600);
}

void loop()
{
  while (Serial.available())  // forward data from monitor to esp
    esp.write(Serial.read());
  while (esp.available())  // forward data from esp to monitor
    Serial.write(esp.read());
}

По сути, это делает ваш Arduino каналом связи между вашим ПК и ESP. Вы можете отправлять команды в ESP с помощью последовательного монитора и немедленно получать их результаты. Это отлично подходит для тестирования команд. Просто не забудьте установить серийный монитор на BOTH NL & CR; это хорошо послужит вам для команд, а также для любых HTTP-запросов, которые вы отправляете, поскольку добавляет \r\n ко всему, что вы отправляете.

Если вы хотите написать скетч для общения с ESP, вы должны предоставить некоторую задержку после отправки команды, чтобы дождаться, пока модуль обработает команду и ответит. Задержка варьируется в зависимости от команды, не менее 500 мс. Обычная процедура состоит в том, чтобы определить период ожидания для каждой команды, в зависимости от ожидаемого времени, после которого вы «сдаетесь», если ответа еще нет. На GitHub есть множество библиотек, которые предполагают взаимодействие с каким-либо устройством с помощью AT-команд; изучите их, чтобы изучить их методы.

person SoreDakeNoKoto    schedule 08.04.2016