Сборка Raspberry Pi Gateway

Raspberry Pi — это небольшой компьютер, который потребляет очень мало энергии (2-3 Вт). Но он достаточно мощный для работы в качестве контроллера «все-в-одном» с поддержкой облачных вычислений.

Некоторые контроллеры, описанные здесь, могут запускаться на RPi. Например. MajorDomo, OpenHAB и PiDome.

Скачивание MySensors

Войдите в свой Raspberry Pi и скачайте код из репозитория MySensors (master branch):

git clone https://github.com/mysensors/MySensors.git --branch master cd MySensors

Чтобы использовать версию разработки с последними обновлениями:

git clone https://github.com/mysensors/MySensors.git --branch development
cd MySensors

Конфигурация

Список параметров для установки шлюза можно получить, выполнив команду:

./configure --help

Примечание: В параметрах, для которых требуется номер вывода, используйте физический пин-код Raspberry Pi, а не номера GPIO.

Транспортный уровень

Доступны следующие транспортные уровни: nrf24, rs485, rfm95, rfm69

NRF24

—my-transport=nrf24

RFM69

Примечание: RFM69 поддерживается только в ветке разработки.

--my-transport=rfm69 --my-rfm69-frequency=868 --my-is-rfm69hw

Частоту можно установить равной 315,433,868 или 915 МГц; —my-is-rfm69hw позволяет использовать мощные радиостанции rfm69hw.

Примечание. В RaspberryPi используется новый драйвер RFM69, который несовместим со старым (= по умолчанию) RFM69-драйвером, вам нужно добавить #define MY_RFM69_NEW_DRIVER на свои узлы для правильной связи с шлюзом (доступно только в ветке разработки).

Тип шлюза

Доступны следующие типы: ethernet, serial, mqtt

Ethernet-шлюз

По умолчанию шлюз построен для сети Ethernet, и он прослушивает порт 5003:

--my-gateway=ethernet --my-port=5003

Чтобы установить шлюз как клиент, который подключается к контроллеру, используйте:

--my-gateway=ethernet --my-controller-url-address=YOUR-CONTROLLER-ADDRESS

или

--my-gateway=ethernet --my-controller-ip-address=YOUR-CONTROLLER-IP

Шлюз последовательного порта

Если вы используете контроллер на Raspberry Pi, который не поддерживает связь с шлюзом через ethernet, вы можете использовать виртуальный последовательный порт:

--my-gateway=serial --my-serial-is-pty --my-serial-pty=/dev/ttyMySensorsGateway

Для некоторых контроллеров необходимо использовать более узнаваемое имя: например. /dev /ttyUSB020 (проверьте, является ли он свободным).

MQTT

Ниже приведен пример построения шлюза MQTT:

--my-gateway=mqtt --my-controller-ip-address=127.0.0.1 --my-mqtt-publish-topic-prefix=mysensors-out --my-mqtt-subscribe-topic-prefix=mysensors-in --my-mqtt-client-id=mygateway1

Сборка

Чтобы собрать, запустите:

make

Если все пойдет хорошо, будет создан файл bin/mysgw.

Тестирование

Шлюз должен иметь права root для запуска. Чтобы посмотреть список параметров, нужно запустить команду:

sudo ./bin/mysgw -h

При первом запуске шлюз, включите сообщения отладки, чтобы убедиться, что он работает:

sudo ./bin/mysgw -d

Следующее сообщение указывает, что сообщение с радио модулем не выполнено:

mysgw: Starting gateway...
mysgw: Protocol version - 2.2.0-beta
mysgw: MCO:BGN:INIT GW,CP=RNNG---,VER=2.2.0-beta
mysgw: TSM:INIT
mysgw: TSF:WUR:MS=0
mysgw: !TSM:INIT:TSP FAIL
mysgw: TSM:FAIL:CNT=1
mysgw: TSM:FAIL:PDT

Сообщение об успешном завершении:

mysgw: Starting gateway...
mysgw: Protocol version - 2.2.0-beta
mysgw: MCO:BGN:INIT GW,CP=RNNG---,VER=2.2.0-beta
mysgw: TSF:LRT:OK
mysgw: TSM:INIT
mysgw: TSF:WUR:MS=0
mysgw: TSM:INIT:TSP OK
mysgw: TSM:INIT:GW MODE
mysgw: TSM:READY:ID=0,PAR=0,DIS=0
mysgw: MCO:REG:NOT NEEDED
mysgw: Listening for connections on 0.0.0.0:5003
mysgw: MCO:BGN:STP
mysgw: MCO:BGN:INIT OK,TSP=1

Установка

Чтобы установить запустите:

sudo make install

Это команда опишет инструкции по добавлению шлюза при каждой загрузке.

Исправление проблем

При установке в качестве службы лог шлюза будет передаваться в syslog в /var/log/syslog.
Если вы хотите получить полный отладочный вывод от шлюза для входа в syslog (включая протокол), вам необходимо отредактировать следующий файл: /etc/systemd/system/mysgw.service
Добавьте параметр -d в строку ExecStart

[Service]
ExecStart=/usr/local/bin/mysgw -d

Затем перезапустить процесс systemd и перезапустите шлюз

sudo systemctl daemon-reload
sudo systemctl restart mysgw.service
sudo systemctl enable mysgw.service

Теперь вывод шлюза можно контролировать

tail -f /var/log/syslog

Имейте в виду, что в лог шлюза теперь имеет дополнительные данные syslog!

Подключение проводов

Используйте физический вывод, а не GPIO.

Raspberry Pi 2/3

Raspberry Pi 1

NRF24L01+ радио

Raspberry NRF24L01+ Цвет
 GND GND Чёрный
 3.3V(*) VCC Красный
22 CE Оранжевый
24 CSN/CS Жёлтый
23 SCK Зелёный
19 MOSI Синий
21 MISO Фиолетовый
15 (Опционально) IRQ Серый

 

(*): Если вы используете версию nrf24 PA / LNA, вам нужно использовать регулятор 5V-> 3.3V.

RFM69 радио

Raspberry RFM69 Цвет
GND GND Чёрный
3.3V VCC Красный
x NSS Жёлтый
x SCK Зелёный
x MOSI Синий
x MISO Фиолетовый
x DI00 Серый
 (*) ANA Антенна

(*): Припаяйте кусок проволоки, подробнее здесь

Улучшение пропускной способности для nrf24

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

Есть еще один способ: вывод прерывания из модулей nrf24 используется для уведомления о поступлении нового сообщения и немедленно добавляется в очередь для дальнейшей обработки. Чтобы использовать этот метод, подключите вывод прерывания от модуля nrf24 к вашему Raspberry Pi (проверьте подключение проводов с национальной информацией) и используйте опцию «—my-rf24-irq-pin = PIN» для сборки шлюза.

В следующем примере вывод прерывания подключен к контакту 15 Raspberry Pi:

--my-transport=nrf24 --my-rf24-irq-pin=15

Информационные светодиоды

Ниже приведен пример того, как добавить светодиоды для мигания ERR / RX / TX.

Raspberry Светодиоды Цвет
12 ERR Красный
16 RX Жёлтый
18 TX Зелёный

 

 

 

 

 

 

--my-leds-err-pin=12 --my-leds-rx-pin=16 --my-leds-tx-pin=18

Дополнение

Другие настройки можно сделать, отредактировав файл example_linux/mysgw.cpp и MyConfig.h

Также можно установить любое определение из команды configure, добавив его в -extra-cxxflags. Пример отладки rfm95:

--extra-cxxflags=-DMY_DEBUG_VERBOSE_RFM95