Пошаговое руководство по развертыванию LoRa-шлюза RAK 831 на Raspberry Pi 3
История
Введение
Это пошаговое руководство для разработчиков, желающих создать свой LoRa-шлюз с помощью потрясающего модуля RAK831 LoRa radio front-end от RAK Wireless. Руководство предполагает базовые знания экосистемы Raspberry Pi, железа и Debian OS, а также GPIO и периферии Pi.
Что такое LoRa?
LoRa Alliance™ Technology. LoRaWAN™ — спецификация LPWAN (Low Power Wide Area Network) для беспроводных батарейных устройств в региональных, национальных или глобальных сетях. LoRaWAN адресует ключевые требования IoT: безопасную двустороннюю связь, мобильность и услуги локализации.
courtesy SemtechДиаграмма выше показывает части LoRa-архитектуры. Некоторые важные части кратко объяснены ниже:
Ключевые особенности LoRa и протокола LoRaWAN
- ГЕОЛОКАЦИЯ: GPS-free, низкоэнергетические трекинговые приложения
- НИЗКАЯ СТОИМОСТЬ: Снижение затрат тремя способами: инфраструктура, эксплуатация, конечные датчики
- СТАНДАРТИЗАЦИЯ: Глобальная интероперабельность ускоряет внедрение
- НИЗКОЕ ПОТРЕБЛЕНИЕ: Протокол для максимального времени автономной работы — до 20 лет
- ДАЛЬНОСТЬ: Одна базовая станция покрывает густонаселенные городские/внутренние зоны и сельские районы до 30 миль
- БЕЗОПАСНОСТЬ: Встроенное сквозное AES128 шифрование
- ВЫСОКАЯ ЕМКОСТЬ: Миллионы сообщений на базовую станцию, идеально для операторов
RAK 831 — это LoRa Radio frontend; он принимает входящие LoRa-пакеты и передает их агрегатору управления ПО/железу. Также может передавать LoRa-пакеты по запросу хоста. В нашем случае Raspberry Pi 3 — хост, управляющий RAK 831.
Выбор бэкхола
Бэкхол — это способ подключения Raspberry Pi к Интернету. Руководство фокусируется на Wi-Fi как бэкхоле, но можно использовать Ethernet или 3G/4G. Если есть Ethernet рядом со шлюзом, лучше использовать его вместо Wi-Fi или 3G/4G, так как дополнительный радиосигнал внутри корпуса создает шумы. Софт справляется с шумовой средой, но чем меньше шумов, тем лучше. Можно совместить с Power-over-Ethernet для минимизации кабелей.
Если выбираете Wi-Fi вместо Ethernet, старайтесь использовать донгл с внешней антенной и вынесите антенну за корпус для меньшего шума внутри.
Настройка железа:
Перед подключением и включением выполните настройки на Raspberry Pi и модуле RAK 831:
RASPBERRY PI
1) Получите Raspberry Pi 3 и подготовьте 8 ГБ micro SD с Raspbian. Можно купить NOOBS-карту с предустановленным софтом. Инструкции по прошивке ОС: https://www.raspberrypi.org/learning/hardware-guide/
2) Подключите Pi к блоку питания 5 В 2 А. ЭТО ОЧЕНЬ ВАЖНО. LoRa-модуль может потреблять пиковые 700 мА во время активных беспроводных транзакций, поэтому нужен качественный блок питания.
RAK 831:
1) Еще до включения подключите антенну из комплекта к антенному винтовому терминалу. ЭТО ОБЯЗАТЕЛЬНО.
Детали подключения:
Таблица подключения rak831 к Raspberry Pi:
rpi v3 to rak 831 pin connection
rak 831 silk screen map to the rak 831 pins.
rak 831 silk screen map to the rak 831 pins
Для понимания распиновки Raspberry Pi GPIO см.: https://www.raspberrypi.org/documentation/usage/gpio/
Заметки:
- Пин сброса можно подключить к любому GPIO на Raspberry Pi 3.
- Критически важно правильно подключить пины питания, чтобы не повредить плату RAK 831.
Включение SPI:
SPI по умолчанию выключен. Для включения:
- Запустите
sudo raspi-config. - Стрелкой вниз выберите 9 Advanced Options.
- Стрелкой вниз до A6 SPI.
- Выберите yes для включения SPI.
- Также выберите yes для автоматической загрузки модуля ядра.
- Стрелкой вправо выберите <Finish>.
- Выберите yes для перезагрузки.
Система перезагрузится. После входа выполните:
>ls /dev/*spi*
Pi должен ответить:
/dev/spidev0.0 /dev/spidev0.1
Это SPI-устройства на chip enable пинах 0 и 1. Обычно интерфейс поддерживает максимум два периферийных устройства, но есть случаи дेजзи-чейнирования нескольких устройств на одном chip enable.
Питание платы:
Беспроводные проекты часто требуют больше питания, чем хост-плата может дать через пины питания. Две схемы ниже описывают питание RAK 831 и Raspberry Pi 3:
1) Питание 5 В рельсы от Raspberry Pi
2) Отдельное питание 5 В рельсы на Raspberry Pi и RAK831
Установка программного обеспечения:
На Raspberry Pi выполните:
- Включите SPI: используйте raspi-config ([5] Interfacing options → P4 SPI) и расширьте файловую систему ([7] Advanced options → A1 Expand filesystem):
$ sudo raspi-config
- Убедитесь, что git установлен:
sudo apt-get update sudo apt-get upgrade sudo apt-get install git
- Управляйте Wi-Fi на Pi
- Настройте Wi-Fi учетные данные:
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Добавьте в конец файла, заменив SSID и пароль:network={ ssid="The_SSID_of_your_wifi" psk="Your_wifi_password" } - Клонируйте установщик и запустите установку:
$ git clone -b spi https://github.com/ttn-zh/ic880a-gateway.git ~/ic880a-gateway $ cd ~/ic880a-gateway $ sudo ./install.sh spi
- Установка спросит, хотите ли включить удаленную конфигурацию. Введите 'y' или 'yes' и продолжите. В начале установки скрипт покажет Gateway EUI — ЗАПИШИТЕ ЕГО!
- Для удаленной конфигурации создайте JSON-файл с именем вашего Gateway EUI (например, B827EBFFFE7B80CD.json) в репозитории Gateway Remote Config: https://github.com/ttn-zh/gateway-remote-config. Сделайте форк, добавьте файл с правильной конфигурацией, закоммитьте и отправьте pull request. Пример JSON:
{
"gateway_conf": {
"gateway_ID": "id from install.sh output",
"servers": [{
"server_address": "router to connect to",
"serv_port_up": 1700,
"serv_port_down": 1700,
"serv_enabled": true
}],
"ref_latitude": "lat of rak 831 gateway",
"ref_longitude": "long of rak 831 gateway",
"ref_altitude": 40,
"contact_email": "contact email",
"description": "short description"
}
}
Примечание: Список валидных роутеров: https://www.thethingsnetwork.org/wiki/Backend/Connect/Gateway
- По умолчанию установщик меняет хостнейм Pi на ttn-gateway (чтобы избежать коллизий). В не-remote режиме можно переопределить.
- УРА, ваш шлюз должен работать. Перезапустите шлюз на следующий день для загрузки JSON-файла на RPi3.
- Обратите внимание: global_config.json нужно скорректировать по: https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json
- Для mp_pkt_fwd вместо старого poly packet forwarder см. инструкции: https://github.com/kersing/packet_forwarder/tree/master/mp_pkt_fwd. Отредактируйте global_conf.json и скопируйте в bin после компиляции.
Настраиваемые параметры в global_conf.json:
Файл находится в ./bin/global_conf.json от базы проекта после запуска install.sh. Параметры для редактирования:
1) Конфигурация «radio_0» или «radio_1», особенно Frequency и min/max frequency sweep.
2) Секция «gateway_conf», особенно gateway ID / EUI.
3) Порты server up/down в gateway_conf вместе с адресом TTN-сервера или вашим приложением.
Сброс платы:
При каждом запуске Pi хорошей практикой сбрасывать подключенный RAK831. Два способа:
- Через Shell-скрипт:
Небольшой скрипт для сброса RAK831 перед доступом LoRa-драйвера к железу. Пример (GPIO 17 / pin 11 подключен к пину сброса RAK831):
#!/bin/bash
echo "17" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
echo "1" > /sys/class/gpio/gpio17/value
sleep 5
echo "0" > /sys/class/gpio/gpio17/value
sleep 1
echo "0" > /sys/class/gpio/gpio17/value
Сохраните как «rak831_reset.sh». Вызывайте скрипт после каждой загрузки для чистого состояния концентратора.
- Через WiringPi:
На Raspberry Pi можно написать маленький C-инструмент для сброса RAK831. Библиотека wiringPi (https://wiringpi.com) упрощает доступ к GPIO. Пример RAK831_reset.c:
#include
#include
#define GPIO_RESET_PIN 0 // см. wiringPi mapping!
int main() {
wiringPiSetup();
pinMode(GPIO_RESET_PIN, OUTPUT);
digitalWrite(GPIO_RESET_PIN, HIGH);
sleep(5);
digitalWrite(GPIO_RESET_PIN, LOW);
return 0;
}
Компиляция и запуск:
gcc -Wall -o blink blink.c -lwiringPi
sudo ./blink
Регистрация шлюза в сети TTN:
Чтобы узлы отправляли данные в облако, TheThingsNetwork предоставляет облачный сервис для парсинга и хранения данных от LoRa-узлов через LoRa...
Читать подробнее: Getting started with the RAK 831 Lora Gateway and RPi3
Производственный процесс
- Эффективный мониторинг температуры серверных с Raspberry Pi и Nagios
- Домашний энергетический центр: мониторинг солнечных панелей, тепловых коллекторов и температуры комнат на Ra…
- Интеграция данных сенсоров в Raspberry Pi: практическое руководство
- Создание умного домашнего контроллера 433 МГц с Sensorflare и Raspberry Pi
- Практическое руководство: real-time панорамирование/наклон для отслеживания лиц на Raspberry Pi
- Создайте автоматизированную аэропоническую систему с Raspberry Pi и датчиком влажности
- Интеграция импульсного радара Acconeer A111 с Raspberry Pi: практическое руководство
- Начало работы с TJBot: сборка, настройка и голосовое управление ИИ-роботом
- NanoPi K1 Plus за $35: Raspberry Pi-подобный SBC с 2 ГБ RAM, Allwinner H5, HDMI, Gigabit Ethernet — идеален для киосков, медиа-центров и DIY
- Построение дешевого одноканального LoRa-шлюза на Raspberry Pi