Raspberry Pi — это небольшой компьютер, который потребляет очень мало энергии (2-3 Вт). Но он достаточно мощный для работы в качестве контроллера «все-в-одном» с поддержкой облачных вычислений.
Некоторые контроллеры, описанные здесь, могут запускаться на RPi. Например. MajorDomo, OpenHAB и PiDome.
Скачивание MySensors
Войдите в свой Raspberry Pi и скачайте код из репозитория MySensors (master branch):
1 |
git clone https://github.com/mysensors/MySensors.git --branch master cd MySensors |
Чтобы использовать версию разработки с последними обновлениями:
1 2 |
git clone https://github.com/mysensors/MySensors.git --branch development cd MySensors |
Конфигурация
Список параметров для установки шлюза можно получить, выполнив команду:
1 |
./configure --help |
Примечание: В параметрах, для которых требуется номер вывода, используйте физический пин-код Raspberry Pi, а не номера GPIO.
Транспортный уровень
Доступны следующие транспортные уровни: nrf24, rs485, rfm95, rfm69
NRF24
--my-transport=nrf24RFM69
Примечание: RFM69 поддерживается только в ветке разработки.
1 |
--my-transport=rfm69 --my-rfm69-frequency=868 --my-is-rfm69hw |
Примечание. В RaspberryPi используется новый драйвер RFM69, который несовместим со старым (= по умолчанию) RFM69-драйвером, вам нужно добавить #define MY_RFM69_NEW_DRIVER на свои узлы для правильной связи с шлюзом (доступно только в ветке разработки).
Тип шлюза
Доступны следующие типы: ethernet, serial, mqtt
Ethernet-шлюз
По умолчанию шлюз построен для сети Ethernet, и он прослушивает порт 5003:
1 |
--my-gateway=ethernet --my-port=5003 |
Чтобы установить шлюз как клиент, который подключается к контроллеру, используйте:
1 |
--my-gateway=ethernet --my-controller-url-address=YOUR-CONTROLLER-ADDRESS |
или
1 |
--my-gateway=ethernet --my-controller-ip-address=YOUR-CONTROLLER-IP |
Шлюз последовательного порта
Если вы используете контроллер на Raspberry Pi, который не поддерживает связь с шлюзом через ethernet, вы можете использовать виртуальный последовательный порт:
1 |
--my-gateway=serial --my-serial-is-pty --my-serial-pty=/dev/ttyMySensorsGateway |
Для некоторых контроллеров необходимо использовать более узнаваемое имя: например. /dev /ttyUSB020 (проверьте, является ли он свободным).
MQTT
Ниже приведен пример построения шлюза MQTT:
1 |
--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 |
Сборка
Чтобы собрать, запустите:
1 |
make |
Если все пойдет хорошо, будет создан файл bin/mysgw.
Тестирование
Шлюз должен иметь права root для запуска. Чтобы посмотреть список параметров, нужно запустить команду:
1 |
sudo ./bin/mysgw -h |
При первом запуске шлюз, включите сообщения отладки, чтобы убедиться, что он работает:
1 |
sudo ./bin/mysgw -d |
Следующее сообщение указывает, что сообщение с радио модулем не выполнено:
1 2 3 4 5 6 7 8 |
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 |
Сообщение об успешном завершении:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 |
Установка
Чтобы установить запустите:
1 |
sudo make install |
Это команда опишет инструкции по добавлению шлюза при каждой загрузке.
Исправление проблем
При установке в качестве службы лог шлюза будет передаваться в syslog в /var/log/syslog.
Если вы хотите получить полный отладочный вывод от шлюза для входа в syslog (включая протокол), вам необходимо отредактировать следующий файл: /etc/systemd/system/mysgw.service
Добавьте параметр -d в строку ExecStart
1 2 |
[Service] ExecStart=/usr/local/bin/mysgw -d |
Затем перезапустить процесс systemd и перезапустите шлюз
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart mysgw.service sudo systemctl enable mysgw.service |
Теперь вывод шлюза можно контролировать
1 |
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:
1 |
--my-transport=nrf24 --my-rf24-irq-pin=15 |
Информационные светодиоды
Ниже приведен пример того, как добавить светодиоды для мигания ERR / RX / TX.
Raspberry | Светодиоды | Цвет |
12 | ERR | Красный |
16 | RX | Жёлтый |
18 | TX | Зелёный |
1 |
--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:
1 |
--extra-cxxflags=-DMY_DEBUG_VERBOSE_RFM95 |