Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/AtCommand

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Отправка 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. }

См.также

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

  1. github.com - AtCommand.pde