Имел дело с оными приборчиками.
XBee Wi-Fi модуль. Поддерживает 802.11b/g/n на скоростях до 65 МБит/с. Шифрование только WPA и WPA2. Ну и без шифрования. WEP не поддерживает ни в коем разе.
Подключается по UART (до 921 кБит/сек) и по SPI (до 3.5 МБит/сек).
Ну и в плюшках имеет несколько GPIO (входы или выходы), и пару каналов АЦП.
Разъём антенны выведен прямо на модуль, распиновка стандартная для XBee.
IP-адреса могут быть как статические, так и настраиваться с помощью DHCP-сервера. Протокол поддерживается как UDP, так и TCP.
Питание модуля: 3.3 В. Подключение достаточно типичное. Из особенностей — на линию питания надо посадить гигантские кондёры (свыше 500 мкФ). Потому что при запуске иногда бывают пики потребления тока чуть ли не до ампера. И без соответствующих конденсаторов это дело, естественно, питание просаживает до перезагрузки всей платы.
Модуль может подключаться к точке доступа или же к одноранговой сети (Ad-Hoc), правда, без защиты. Причём создавать одноранговую сеть он тоже может. А вот точку доступа уже фиг, он так не умеет.
читать дальше
Устройство имеет три режима работы:
- Прозрачный, когда все данные, приходящие в модуль, пакетируются и отправляются по заданному в настройках адресу. Ну и там вываливаются как есть. То есть такой вот удлинитель UART.
- Режим API, где всё общение происходит с помощью пакетов. Как приём и передача данных, так и настройки, и состояние модема и отправленных пакетов.
- Командный режим. Настройка устройства с помощью АТ-команд.
По умолчанию устройство находится в прозрачном режиме (хотя в документации написано, что включён режим API). Почему так -- не ведаю. Прежде, чем использовать, необходимо задать настройки сети ну и адреса приёмника. Иначе куда он данные отправлять-то будет?)
Поэтому необходимо сначала перейти в командный режим.
Для UART настройки такие: 8 бит данных, без контроля чётности и 1 стоповый бит. Скорость 9600 бит/сек. Для SPI, естественно, скорость может быть любой.
Это выполняется примерно так: ждём 1 секунду, отправляем три знака "+" в модуль и снова ждём 1 секунду. После чего устройство ответит "OK\r".
Дальше можно его настраивать как пожелаешь. Но если за некоторое время не было никаких команд, то командный режим закругляется. Так-то времени там достаточно, но при отладке может возникнуть вопрос, почему после очередной команды нет никакого ответа.
Порядок настройки примерно такой:
1. Переход на более высокую скорость (например 500 кбит/сек), если это UART. Можно поменять и иные настройки UART, но не вижу смысла.
2. Включение API-режима.
3. Задание имени сети SSID, к коей подключемся.
4. Задание типа шифрования, применяемого в этой сети (Open/WPA/WPA2).
5. Задание пароля, если он требуется.
6. Задание порта, с которого ожидаем пакеты (команда "C0 xxxx").
7. Применение настроек.
8. Ожидать подключения к сети. Там есть специальная команда, которая показывает статус подключения.
Пока настройки с параметрами сети не применить (команда "AC"), статус (команда "AI") будет возвращаться всегда 0x23 (SSID not configured). Тоже может быть не очевидно.
Когда статус станет 0x00, (в линии будет "00\r"), это будет обозначать, что всё подключилось и адрес настроился.
Дальше можно отправлять и принимать сетевые пакеты. Формат пакетов там простейший (Байт-разделитель, длина, содержимое, контрольная сумма). При отправке IP-пакета задаётся адрес назначения (255.255.255.255 будет обозначать широковещательные пакеты), порты, тип пакета (UDP/TCP) и флаг статуса (нужно ли подтверждение отправки). В каждый пакет можно запихать до 1400 байт данных.
Пакеты принимаются только на одном порту. Никакой дополнительной фильтрации не предусмотрено. Прям вот валятся в линию Rx и всё. Если контроллер не успевает принять пакет, он может притормозить процесс приёма, подняв линию RTS.
В API-режиме AT-команды настройки можно посылать тоже с помощью пакетов. При этом стоит обратить внимание на поле Frame ID. Если оно равно нулю в запросе, то никакого ответа от модуля не будет.
Единственный неприятный момент был замечен мной: если роутер прекратит функционирование (пропадёт питание, например или перезагрузится по непонятной причине), то модуль этого никак не заметит и будет сообщать, что всё круто, хотя никакого обмена уже не дождаться. Почему так происходит, мне не понятно. Я ещё не придумал, как отслеживать такую фигню и перезагружать модуль. Но посмотрим...
В общем-то и всё. Все технические тонкости описаны в даташите.