HM-10 и Arduino – отправка команд AT без строки, заканчивающейся от кода

Мне нужно использовать HM-10 с Arduino Uno или Nano. Я не могу понять, как отправлять AT-команды и читать ответ. Команды работают от последовательного монитора, но не от кода.

Вот что я пробовал до сих пор:

#include  SoftwareSerial blueToothSerial(0,1); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(115200); Serial.println("Serial began"); blueToothSerial.begin(9600); delay(2000); } void loop() { Serial.println("looping..."); blueToothSerial.print("AT+DISC?"); delay(5000); if (blueToothSerial.available()) { Serial.println("bluetooth serial available"); Serial.write(blueToothSerial.read()); } } 

Тем не менее, я не могу прочитать никакого ответа, я чувствую, что команда не стреляет. Выполнение не входит внутрь if (blueToothSerial.available ())

Убедитесь, что вы установили noth NL & CR в параметры последовательного монитора.

Вам нужно узнать разницу между AT-командой и командной строкой AT. Чтение всей главы 5 в спецификации V.250 является идеальной отправной точкой, поскольку она научит вас почти всему, что вам нужно знать об основной обработке AT-команд. И даже после того, как вы станете экспертом, вы прочтете этот документ.

Модем не начнет обработку AT-команд, пока не получит полную командную строку, поэтому вы должны это исправить. Но вам также необходимо значительно переделать логику, чтобы прочитать и проанализировать ответ, отправленный обратно от модема. Это описано в ответе, указанном выше.


Обновление: Кажется, что производитель HM-10 должен узнать разницу между AT-командой и командной строкой AT, поскольку HM-10 вообще не работает как модем . В его документации говорится:

Формат команды AT: формат командной строки в верхнем регистре. string, без какого-либо другого символа. (например, \ r или \ n)

Обработка команд HM-10 неверна на многих уровнях. Если производитель хочет придумать свой собственный текстовый протокол для связи с устройством, они, во что бы то ни стало, могут это сделать. Но тогда они не должны называть это AT-командами, когда это не так. Это похоже на посещение танцевального classа, в котором учитель утверждает, что он или она учит вас сальсе, но в реале просто учит чему-то произвольному, которое он изобрел сам по себе, просто будучи вдохновленным, наблюдая, как кто-то еще танцует сальсу однажды …

Прежде всего, разработчики HM-10 либо полностью не понимают, что такое командная строка AT, либо намеренно решили игнорировать это и реализовывать что-то совершенно другое, но при этом называть его AT-командами. Я не знаю, что хуже. Модем принимает AT-команду через командную строку, которая может содержать несколько команд, например "ATI\r" – это командная строка, отправляющая одну команду I то время как "ATI II\r" – это командная строка, отправляющая три команды I По-видимому, HM-10 принимает команду только сам по себе.

Во-вторых, синтаксис параметров полностью смешивается с использованием имен расширенных синтаксических команд, но с использованием основных параметров синтаксической команды. Основные синтаксические команды являются одиночными и имеют следующее числовое значение, например ATM1 то время как расширенная синтаксическая команда имеет параметры, начинающиеся с знака равенства, например AT+IPR=9600 . HM-10 использует какой-то странный расширенный / базовый гибридный синтаксис, такой как AT+BAUD[para1] . Опять же, я не уверен, что это связано с незнанием или безразличием.

В-третьих, порядок результирующего кода и информации меняется на противоположные и смешанные. Обычная команда AT будет печатать информационный текст перед печатью конечного кода результата , например

 AT+IPR? +IPR:9600 OK 

HM-10 меняет порядок и объединяет их в одну вещь, например, OK+Set:[para1] . Это, я думаю, скорее всего, можно объяснить безразличием к тому, как работает модем.

В-четвертых, имена команд, похоже, начинаются с «AT +», а затем добавляют любое имя для этой команды без использования какого-либо правильного префикса, как написано в главе «5.4.1 Правила именования команд» и «Приложение I» в V.250 , Думаю, это из-за невежества.

В-пятых, имена того, что соответствует незапрашиваемым результирующим кодам, имеют точный синтаксис, как коды результатов команды (например, OK+CONN , OK+LOST сравнению с OK+WORK , OK+Get:[para1] ), делая ответы от HM-10 невозможными синтаксический анализ. И когда новые команды с новыми ответами добавляются в HM-10, это может нарушить существующее программное обеспечение. Это ужасно плохой дизайн протокола.

В-шестых, HM-10 удивительно, похоже, не имеет понятия о возврате индикатора ошибки, когда команды терпят неудачу. Команда NAME имеет ограничение на 12 символов, и что будет выдавать AT+NAMEthis_name_is_longer_than_12_characters ? Я не знаю, но я угадаю либо OK+SetName:previousname либо OK+SetName:this_name_is , но кто знает – кажется, вам нужно прибегнуть к пробной версии и ошибке, чтобы узнать. Попытка проанализировать успех команд, выполненных из этого, была бы кошмаром. Это опять-таки ужасно плохой дизайн протокола.

В-седьмых, некоторые команды (например, AT+RSSI? ) Имеют знак вопроса, встроенный в имя, вместо того, чтобы помечать вопросительный знак, указывать командный синтаксис командной строки, например, модемы.

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

Я абсолютно понимаю, что это встроенное устройство, где реализация чего-то, что поддерживает полный синтаксис модема, может быть слишком много, и требуется нечто более простое. Это прекрасно, но тогда вы не должны утверждать, что это AT-команды.

HM-10 кажется, как плохой учитель сальсы, вам следует избегать контакта и избегать, насколько это возможно. Может быть, если бы вы только танцевали с другими людьми из этого classа, вы могли бы остаться невежественными, радуясь воображению, что вы танцевали сальсу, но вы потерпите неудачу, когда пытаетесь танцевать с другими людьми.

Может быть, на самом деле оборудование HM-10 хорошее, я не знаю. Но командный протокол имеет серьезные проблемы в дополнение к тому, что это вовсе не AT-команды. Я рекомендую искать альтернативы.