Arduino:Примеры/AtCommand

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Отправка AT-запросов к XBee-модулю[1]

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

Код

  1 /**
  2  * Автор – Эндрю Рэпп (Andrew Rapp). 2009 год, все права защищены.
  3  *
  4  * Этот файл – часть библиотеки XBee-Arduino.
  5  *
  6  * Библиотека XBee для Arduino – это бесплатное ПО: его можно 
  7  * распространять и/или модифицировать согласно условиям Универсальной 
  8  * общественной лицензии GNU, изданной Фондом свободного ПО – будь то 
  9  * 3-тья или более поздняя версия этой лицензии (на ваш выбор).
 10  *
 11  * Библиотека XBee-Arduino распространяется бесплатно в надежде на то, 
 12  * что окажется полезной, но БЕЗО ВСЯКОЙ ГАРАНТИИ; включая даже 
 13  * обязательную гарантию на КОММЕРЧЕСКОЕ КАЧЕСТВО и ПРИГОДНОСТЬ 
 14  * КОНКРЕТНОЙ ЦЕЛИ. Более подробно читайте в Универсальной 
 15  * общественной лицензии GNU.
 16  *
 17  * Вы должны получить копию Универсальной общественной лицензии GNU 
 18  * вместе с библиотекой XBee-Arduino. Если не получили, ее можно найти 
 19  * на http://www.gnu.org/licenses/.
 20  */
 21 
 22 #include <XBee.h>
 23 #include <SoftwareSerial.h>
 24 
 25 /*
 26 Этот пример – для XBee-модуля Series 1 (с прошивкой 10C8 или новее) 
 27 или Series 2. Он отправляет к XBee-модулю несколько AT-запросов и 
 28 проверяет, были ли они успешными.
 29 
 30 Чтобы видеть информацию об XBee-коммуникации, этот пример использует 
 31 библиотеку SoftSerial. Я использую плату Modern Device USB BUB
 32 (http://moderndevice.com/connect) и просматриваю выдачу при помощи 
 33 монитора порта в IDE Arduino.
 34 */
 35 
 36 // Задаем TX и RX контакты для SoftSerial.
 37 // Подключаем 8-ой контакт Arduino к TX-контакту конвертера USB-Serial:
 38 uint8_t ssRX = 8;
 39 // Подключаем 9-ый контакт Arduino к RX-контакту конвертера USB-Serial:
 40 uint8_t ssTX = 9;
 41 // Не забудьте подключить все устройства к общей «земле»: XBee, Arduino и конвертер USB-Serial
 42 SoftwareSerial nss(ssRX, ssTX);
 43 
 44 XBee xbee = XBee();
 45 
 46 // Адрес XBee-модуля (фрагмент Serial High):
 47 uint8_t shCmd[] = {'S','H'};
 48 // Адрес XBee-модуля (фрагмент Serial Low):
 49 uint8_t slCmd[] = {'S','L'};
 50 // Статус ассоциации:
 51 uint8_t assocCmd[] = {'A','I'};
 52 
 53 AtCommandRequest atRequest = AtCommandRequest(shCmd);
 54 
 55 AtCommandResponse atResponse = AtCommandResponse();
 56 
 57 void setup() { 
 58   Serial.begin(9600);
 59   xbee.begin(Serial);
 60   // Запускаем коммуникацию SoftSerial:
 61   nss.begin(9600);
 62   
 63   // Делаем небольшую задержку на старте – чтобы подождать пока 
 64   // инициируется модуль XBee. Если вы не получаете ответа, то это 
 65   // значение имеет смысл увеличить.
 66   delay(5000);
 67 }
 68 
 69 void loop() {
 70 
 71   // Извлекаем фрагмент Serial High:
 72   sendAtCommand();
 73   
 74   // Извлекаем фрагмент Serial Low:
 75   atRequest.setCommand(slCmd);  
 76   sendAtCommand();
 77 
 78   // Извлекаем статус ассоциации:
 79   atRequest.setCommand(assocCmd);  
 80   sendAtCommand();
 81   
 82   // Готово.  Жмем на кнопку сброса Arduino, чтобы перезапустить скетч:
 83   while (1) {};
 84 }
 85 
 86 void sendAtCommand() {
 87   nss.println("Sending command to the XBee");  //  "Отправка команды XBee-модулю" 
 88 
 89   // Отправляем команду:
 90   xbee.send(atRequest);
 91 
 92   // Ждем 5 секунд ответа о статусе:
 93   if (xbee.readPacket(5000)) {
 94     // Получили ответ!
 95 
 96     // Проверка на получение ответа:
 97     if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) {
 98       xbee.getResponse().getAtCommandResponse(atResponse);
 99 
100       if (atResponse.isOk()) {
101         nss.print("Command [");  //  "Команда ["
102         nss.print(atResponse.getCommand()[0]);
103         nss.print(atResponse.getCommand()[1]);
104         nss.println("] was successful!");    //  "] была выполнена успешно!"
105 
106         if (atResponse.getValueLength() > 0) {
107           nss.print("Command value length is ");    //  "Размер значения, полученного командой - "
108           nss.println(atResponse.getValueLength(), DEC);
109 
110           nss.print("Command value: ");  //  "Значение, полученное командой: "
111           
112           for (int i = 0; i < atResponse.getValueLength(); i++) {
113             nss.print(atResponse.getValue()[i], HEX);
114             nss.print(" ");
115           }
116 
117           nss.println("");
118         }
119       } 
120       else {
121         nss.print("Command return error code: ");  //  "Код ошибки, возвращенный командой: "
122         nss.println(atResponse.getStatus(), HEX);
123       }
124     } else {
125       nss.print("Expected AT response but got ");  //  "Ожидался AT-ответ, но получили "
126       nss.print(xbee.getResponse().getApiId(), HEX);
127     }   
128   } else {
129     // Если выполнение команды не удалось:
130     if (xbee.getResponse().isError()) {
131       nss.print("Error reading packet.  Error code: ");    //  "Ошибка при чтении пакета. Код ошибки: "
132       nss.println(xbee.getResponse().getErrorCode());
133     } 
134     else {
135       nss.print("No response from radio");    //  "XBee-модуль не отвечает"
136     }
137   }
138 }

См.также

Внешние ссылки