В настоящее время модули XBee достаточно уверенно занимают свою нишу на рынке беспроводных технологий. Хотя в последние годы наметилась тенденция постепенного увеличения занимаемой доли этого рынка со стороны таких новейших технологий как LoRa и BLE, тем не менее, оборудование XBee все еще продолжает активно выпускаться.
Ранее на нашем сайте мы уже рассматривали подключение модуля XBee к плате Arduino Uno, в этой же статье мы рассмотрим подключение модуля XBee к плате Raspberry Pi, который будет работать в качестве приемника. В качестве передатчика для нашего проекта будет выступать USB адаптер XBee (XBee explorer board), подключенный к ноутбуку.
Необходимые компоненты
- Плата Raspberry Pi (купить на AliExpress).
- Модуль XBee Pro S2C (можно использовать любую другую модель) – 2 шт. (купить на AliExpress).
- Xbee explorer board - USB адаптер XBee (опционально).
- Xbee Breakout board (опционально) – защитная плата для модуля XBee, также ее называют платой расширения для подключения различных беспроводных модулей к платам подобным Arduino Uno. То есть ее одевают сверху на плату Arduino Uno, а к ней подключают модуль XBee.
- USB кабели.
- Светодиод (купить на AliExpress).
- Резистор (купить на AliExpress).
Что такое XBee
XBee – это радиомодемы для сетей ZigBee, предназначенных для максимально защищенной передачи данных, с минимальным уровнем электропотребления и невысокой скоростью. Эти устройства применяют в различных системах автоматики и также весьма востребованы в технологиях «умного дома», поскольку позволяют не только управлять удаленными устройствами, но и организовывать целые сети, регулирующие работу множества устройств.
В отличие от Wi-Fi, Bluetooth и проводных сетей, предназначенных для передачи больших объемов информации и полностью отсутствующим шифрованием, сети ZigBee обеспечивают в десятки раз большую надежность.
В сетях ZigBee поддерживается достаточно мощное шифрование и они могут работать по технологии так называемых Mesh-сетей, в частности, прокладывать резервные маршруты передачи информации при выходе из строя действующего маршрута, что обеспечивает этим сетям высочайший уровень надежности.
ZigBee сеть может состоять из различных комбинаций следующих элементов: маршрутизаторов, координаторов, оконечных устройств.
Координатор выполняет функции управляющего центра, определяет настройки работы и безопасности, подключает и отсоединяет оконечные устройства. Маршрутизатор определяет порядок связи между устройствами (маршрут), устраняет повреждения сети, создавая новые направления, управляет работой оконечных устройств.
В качестве оконечных устройств могут использоваться компьютеры, отдельные датчики или исполнительные механизмы, а также целые автоматизированные системы. Радиомодемы, подключенные к соответствующему адаптеру, могут выполнять функции как маршрутизаторов, так и координаторов.
Изначально радиомодемы под маркой XBee производила компания Maxstream (первое поколение), затем их производством занялась фирма Digi International. В 2015-2015 годах их производством занялось еще несколько компаний. Продукция разных поколений несовместима между собой, потому что выпускалась под стандарты ZigBee, существующие на тот момент. Стандарты каждые 2-3 года менялись, поэтому производители также меняли и свои устройства. Однако эти изменения не касались технических характеристик, таких как мощность сигнала, энергопотребление и т. д.
Настройка модуля XBee с помощью XCTU
Как мы выяснили в предыдущем пункте, модули XBee могут работать в качестве координатора (управляющего устройства), маршрутизатора или оконечного устройства, поэтому перед его подключением к плате Raspberry Pi мы должны сконфигурировать его для работы в необходимом нам режиме. Делать мы это будем с помощью программного обеспечения XCTU.
Для подключения XBee модуля к ноутбуку мы использовали USB адаптер XBee (XBee explorer board), который преобразует сигналы интерфейса USB в сигналы для последовательного порта связи. Вам необходимо просто подключить модуль XBee к данному USB адаптеру, а его подсоединить к ноутбуку/компьютеру с помощью USB кабеля.
Если у вас нет подобного USB адаптера (или другого аналогичного конвертера), то для преобразования сигнала USB в сигнал последовательного порта связи можно использовать плату Arduino, которая в данном случае будет включаться между модулем XBee и ноутбуком. Просто загрузите пустой скетч в плату Arduino и она в данном случае будет работать как конвертер USB в последовательный порт (USB to Serial converter).
Конфигурирование модулей XBee
Скачайте программное обеспечение XCTU и установите его на свой ноутбук (компьютер). После этого откройте его (запустите на выполнение) и убедитесь в том, что ваш XBee модуль корректно подключен к компьютеру. Проверьте COM порт, к которому он подключен, в диспетчере устройств Windows.
1. После этого в программном обеспечении XCTU нажмите на кнопку поиска (search button). После этого у вас отобразится список всех радиочастотных устройств, подключенных к вашему компьютеру. В нашем случае этот будет один модуль XBee.
2. Выберите последовательный порт (Serial port), к которому подключен USB адаптер (плата Arduino), и нажмите на Next (следующий).
3. В следующем окне установите параметры USB порта как показано на рисунке ниже и нажмите на Finish (закончить).
4. Выберите Discovered device (обнаруженные устройства) и затем нажмите на Add selected device (добавить выбранное устройство). В результате этого ваш модуль XBee будет добавлен на панель инструментов XCTU.
5. Теперь в открывшемся окне вы можете конфигурировать (производить настройку) вашего модуля XBee. Вы можете это делать с помощью AT команд или вводить данные вручную. На представленном ниже рисунке вы можете увидеть букву "R" в левой панели – это означает что модуль XBee находится в режиме маршрутизатора (router mode). Нам необходимо установить его в режим координатора (Coordinator) – в этом режиме модуль XBee будет работать в передающей части нашего проекта.
Но перед этим необходимо обновить прошивку (Firmware) модуля, нажав на копку Update.
6. В следующем окне выберите семейство продуктов (Product family) вашего устройства (оно написано на обратной стороне модуля XBee). Выберите протокол связи (function set) и версию прошивки (firmware version) как показано на рисунке ниже и нажмите на Update.
7. Далее необходимо ввести данные ID, MY и DL чтобы осуществить подключение к другому модулю XBee. ID остаются теми же самыми (одинаковыми) для обоих модулей. А MY и DL должны быть взаимно противоположными, то есть параметр MY приемного модуля XBee становится параметром DL передающего модуля XBee и наоборот. Установите для параметра CE функцию Coordinator и нажмите на кнопку Write (записать).
ATDL | ATMY | ATID | |
XBee 1 coordinator | 1234 | 5678 | 2244 |
XBee 2 end device | 5678 | 1234 | 2244 |
8. После записи этих настроек в передающий модуль XBee отключите его от USB адаптера и подключите к адаптеру приемный модуль XBee. Повторите и для него описанные процессы настройки, только не забудьте изменить параметры DL, MY и CE соответствующим образом. Также не забудьте для приемного модуля установить параметр CE в режим оконечного устройства (End device).
9. Теперь наши модули XBee готовы к подключению к плате Raspberry Pi. Передающий модуль мы подключим к ноутбуку (компьютеру), а приемный – к плате Raspberry Pi. Передавать команды на приемный модуль мы будем с ноутбука.
Схема проекта
Схема подключения модуля XBee (ZigBee) к плате Raspberry Pi представлена на следующем рисунке.
В схеме необходимо сделать следующие соединения:
1. Tx (pin2) модуля XBee -> Tx of pin Raspberry Pi
2. Rx(pin3) модуля XBee -> Rx of pin Raspberry Pi
3. Gnd (pin10) модуля XBee -> GND of pin Raspberry Pi
4. Vcc (Pin1) модуля XBee -> 3.3v of pin Raspberry Pi
5. Светодиод подключен к GPIO 23
Настройка последовательной связи в Raspberry Pi
По умолчанию последовательная связь в плате Raspberry Pi отключена. Для того, чтобы ее включить, откройте сначала панель настроек платы с помощью команды raspi-config.
Выберите опцию 5 в настройках подключений (Interfacing options) и нажмите enter. После этого выберите P6 Serial option, затем Enable и затем save (сохранить).
Выйдите из окна терминала. Теперь можно приступить к установлению соединения между Raspberry Pi и модулем XBee. Контакты GPIO14 и 15 будут выступать в роли Tx и Rx (передатчика и приемника) для последовательной связи и они доступны на порту /dev/ttyS0 платы Raspberry Pi.
Теперь мы напишем скрипт на python который будет включать светодиод каждый раз когда наш приемный модуль XBee будет принимать символ ‘a’.
Объяснение программы для Raspberry Pi
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе нам необходимо подключить (импортировать) библиотеки time, serial и RPi.GPIO.
1 2 3 4 |
import time import serial import RPi.GPIO as GPIO … |
Далее установим параметры последовательного порта связи: имя порта, бодовую скорость, биты паритета и т.д.
1 2 3 4 5 6 7 8 |
ser = serial.Serial( port='/dev/ttyS0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) |
Организуем бесконечный цикл с помощью команды while, в котором будем передавать и принимать информацию:
1 |
while 1: |
Вы можете использовать функцию ser.write чтобы передавать сообщения передающей стороне. Раскомментируйте следующие строки если хотите передавать ответные сообщения при приеме информации.
1 2 3 |
#ser.write(str.encode('Write counter: %d \n'%(counter))) #time.sleep(1) #counter += 1 |
Для приема сообщений мы будем использовать функцию ser.readline(). Принятое сообщение мы будем сохранять в переменной и затем проверять условие. Если принятый символ равен ‘a’, то мы будем включать светодиод на 3 секунды, после чего выключать его.
1 2 3 4 5 6 7 |
x=ser.readline().strip() print(x) if x == 'a': GPIO.output(23,GPIO.HIGH) time.sleep(3) .. .. |
Полный код программы и видео, демонстрирующее работу проекта, приведены в конце статьи. Скопируйте приведенный код программы в любой текстовый редактор Raspberry Pi и сохраните его. Запустите программу на исполнение введя команду в терминале sudo python script_name.py (замените имя запускаемого скрипта на свое). Также запустить программу на выполнение вы можете используя Python IDE и Shell.
Тестирование работы проекта
Теперь у нас все готово для тестирования работы проекта. Чтобы дать команду передающему модулю XBee мы будем использовать консоль (терминал) программы XCTU. Нажмите на иконку консоли (Console icon) в настройках программы. Затем нажмите кнопку Open (открыть) чтобы соединить модуль XBee с ноутбуком (компьютером).
Введите в логе действий консоли (Console log) символ ‘a’. После этого вы увидите как светодиод зажгется на 3 секунды и потом потухнет.
Аналогичным образом вы можете подключить модуль XBee, который в нашем проекте подключен к ноутбуку, к плате Arduino и организовать таким образом беспроводную связь по технологии ZigBee между платами Raspberry Pi и Arduino.
Исходный код программы на Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/usr/bin/env python import time import serial import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(23,GPIO.OUT) ser = serial.Serial( port='/dev/ttyS0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) counter=0 while 1: #ser.write(str.encode('Write counter: %d \n'%(counter))) #time.sleep(1) #counter += 1 x=ser.readline().strip() print(x) if x == 'a': GPIO.output(23,GPIO.HIGH) time.sleep(3) else: GPIO.output(23,GPIO.LOW) |