Примечание. Инструкции здесь были протестированы и подтверждены для работы с Orange Pi Zero, неясно, будет ли он работать на других типах Orange.
Подготовка системы
Установка ARMbian
Загрузите и установите образ ОС ARMbian (debian):
https://www.armbian.com/orange-pi-zero/
Установка sunxi-tools
Эти инструменты необходимы для изменений загрузчика системы:
1 2 |
sudo apt-get update sudo apt-get install sunxi-tools |
Настройка spidev
Добавте /dev/spidev1.0 это требуется для /dev/spidev0.0 используется для встроенной флэш-памяти NAND.
1 |
bin2fex /boot/script.bin /tmp/orange.fex |
Теперь отредактируйте /tmp/orange.fex:
1 |
nano /tmp/orange.fex |
Добавьте/измените следующее, чтобы выглядело точно так, как показано ниже:
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 29 30 31 32 33 34 35 36 |
[spi0] spi_used = 1 spi_cs_bitmap = 1 spi_mosi = port:PC00<3><default><default><default> spi_miso = port:PC01<3><default><default><default> spi_sclk = port:PC02<3><default><default><default> spi_cs0 = port:PC03<3><1><default><default> [spi1] spi_used = 1 spi_cs_bitmap = 1 spi_cs0 = port:PA13<2><1><default><default> spi_sclk = port:PA14<2><default><default><default> spi_mosi = port:PA15<2><default><default><default> spi_miso = port:PA16<2><default><default><default> [spi_devices] spi_dev_num = 2 [spi_board0] modalias = "spidev" max_speed_hz = 33000000 bus_num = 0 chip_select = 0 mode = 0 full_duplex = 1 manual_cs = 0 [spi_board1] modalias = "spidev" max_speed_hz = 33000000 bus_num = 1 chip_select = 0 mode = 0 full_duplex = 1 manual_cs = 0 |
Затем перекомпилируйте файл fex:
1 |
sudo fex2bin /tmp/orange.fex /boot/script.bin |
Перезагрузите систему:
1 |
sudo reboot |
Теперь должны быть 2 файла устройств:
1 2 3 |
$ ls -l /dev/spidev* crw------- 1 root root 153, 0 Jan 11 16:31 /dev/spidev0.0 crw------- 1 root root 153, 1 Jan 11 16:31 /dev/spidev1.0 |
Загрузите модуль GPIO
1 |
sudo modprobe gpio-sunxi |
Добавьте строку gpio-sunxi в /etc/modules для автоматической загрузки модуля во время загрузки:
1 |
echo "gpio-sunxi" >> /etc/modules |
Загрузка MySensors
Примечание. Поддержка OrangePi теперь включена в официальный репозиторий разработки MySensors.
1 2 |
git clone https://github.com/mysensors/MySensors.git cd MySensors |
Настройка
Всегда используйте номер GPIO для установки радио. Если вы следуете приведенной ниже схеме соединений, контакт CE подключен к выводу 22, который является номером 2 GPIO, а CS подключен к выходу 24, который является номером 13 GPIO.
1 |
./configure --spi-spidev-device=/dev/spidev1.0 --my-transport=nrf24 --my-rf24-ce-pin=2 --my-rf24-cs-pin=13 |
Последовательный порт
Если по какой-то причине вы не можете использовать контакты GPIO в Orange Pi, вы можете подключить радио к arduino с эскизом GatewaySerial и использовать через последовательный порт:
1 |
./configure --my-gateway=serial --my-serial-port=/dev/ttyACM0 --my-serial-baudrate=115200 |
Чтобы узнать правильное значение для последовательного порта, dmesg может дать вам подсказку.
Если вы используете контроллер на Orange Pi, который не поддерживает связь со шлюзом через ethernet, вы можете использовать виртуальный последовательный порт:
1 |
./configure --my-gateway=serial --my-serial-is-pty --my-serial-pty=/dev/ttyMySensorsGateway |
Для некоторых контроллеров необходимо использовать более простое имя: например, /Dev/ttyUSB020 (проверьте, чтобы он был свободен).
MQTT
Ниже приведен пример создания шлюза MQTT:
1 |
./configure --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.
Тест
Первый раз, запустите шлюз с включенными сообщениями отладки, чтобы убедиться, что он работает:
1 |
sudo ./bin/mysgw -d |
Следующее сообщение указывает, что связь с модулем nrf24 не удалась:
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 |
Эта команда также добавит инструкции по загрузке шлюза после перезагрузи.
Подключение
Oragen Pi Zero
NRF24L01+ радио
OrangePi Pin No. | NRF24L01+ | Цвет |
GND | GND | Чёрный |
3.3V | VCC | Красный |
22 / GPIO2 | CE | Оранжевый |
24 / GPIO13 | CSN/CS | Жёлтый |
23 / GPIO14 | SCK | Зелёный |
19 / GPIO15 | MOSI | Синий |
21 / GPIO16 | MISO | Фиолетовый |
Не поддерживается | IRQ | Серый |