Arduino:Примеры/AtCommand
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (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 }
См.также
Внешние ссылки