라즈베리 파이 3에 RAK 831 LoRa 게이트웨이 배포 단계별 가이드
이 프로젝트는 RAK 831 LoRa 게이트웨이 모듈을 WiFi 백홀로 가동하는 데 필요한 모든 단계를 안내합니다.
시작하며
소개
이 단계별 가이드는 RAK Wireless의 훌륭한 RAK831 LoRa 라디오 프론트엔드 모듈을 사용하여 자신만의 LoRa 게이트웨이를 개발하려는 개발자를 대상으로 합니다. 이 가이드는 라즈베리 파이 생태계, 하드웨어, 관련 데비안 OS에 대한 기본 지식을 가정합니다. 또한 라즈베리 파이에 존재하는 GPIO와 주변장치에 대한 기본 지식도 가정합니다. 자, 시작해봅시다:
LoRa란?
LoRa Alliance™ Technology. LoRaWAN™은 지역, 국가 또는 글로벌 네트워크에서 무선 배터리 구동 Things를 위한 LPWAN(Low Power Wide Area Network) 사양입니다. LoRaWAN은 사물 인터넷의 핵심 요구사항인 안전한 양방향 통신, 이동성, 위치 서비스를 목표로 합니다.
위 다이어그램은 LoRa 무선 아키텍처의 다양한 부분을 보여줍니다. 중요한 부분들을 간단히 설명하면:
LoRa 기술과 LoRaWAN 프로토콜의 주요 특징
· GEOLOCATION: GPS 없는 저전력 추적 애플리케이션 지원
· LOW COST: 인프라 투자, 운영 비용, 엔드 노드 센서 세 가지 방식으로 비용 절감
· STANDARDIZED: 향상된 글로벌 상호운용성으로 LoRaWAN 기반 네트워크와 IoT 애플리케이션 채택 및 롤아웃 가속
· LOW POWER: 배터리 수명 최대 20년까지 연장하도록 특별히 설계된 프로토콜
· LONG RANGE: 단일 기지국이 밀집 도시/실내 지역의 깊은 침투 제공, 농촌 지역 최대 30마일 연결
· SECURE: 내장된 엔드투엔드 AES128 암호화
· HIGH CAPACITY: 기지국당 수백만 메시지 지원, 많은 고객 서비스하는 공공 네트워크 운영자에 이상적
RAK 831은 LoRa 라디오 프론트엔드입니다. 즉, 들어오는 LoRa 데이터 패킷을 수신하여 집계 관리 소프트웨어/하드웨어 호스트로 전달하는 수신기 역할을 합니다. 호스트 보드의 요청에 따라 LoRa 데이터 패킷 전송도 가능합니다. 우리 경우 라즈베리 파이 3이 RAK 831 프론트엔드를 제어하는 호스트 보드입니다.
백홀 선택
백홀이란? 백홀은 라즈베리 파이가 인터넷에 연결되는 방식을 의미합니다. 이 가이드는 WiFi 백홀 사용에 초점을 맞추지만, 이더넷이나 3G/4G도 사용 가능. 게이트웨이 근처에 이더넷이 있다면 WiFi나 3G/4G보다 선호. 인클로저 내 추가 무선 신호가 노이즈를 유발하기 때문. 소프트웨어가 노이즈 환경을 처리할 수 있어 큰 문제는 아니지만, 덜 노이즈가 더 좋음. Power-over-Ethernet과 결합하여 게이트웨이까지의 케이블 최소화 가능.
반면 WiFi를 이더넷 대신 선택한다면, 외부 안테나가 있는 동글 사용하고 안테나를 인클로저 밖으로 이동시켜 박스 내 노이즈 감소 시도.
하드웨어 설정:
연결하고 켜기 전에 라즈베리 파이와 RAK 831 모듈에서 다음 구성 완료:
라즈베리 파이
1) 라즈베리 파이 3 보드 준비, 8GB 마이크로 SD 카드에 라즈비안 소프트웨어 준비. NOOBS SD 카드 구매도 가능. SD 카드에 OS 플래싱 방법은 여기 참조: https://www.raspberrypi.org/learning/hardware-guide/
2) 라즈베리 파이를 5V 2암페어 전원 공급장치에 연결. 이것은 매우 중요합니다. LoRa 모듈이 활성 무선 트랜잭션 중 피크 700mA를 소모할 수 있으므로 라즈베리 파이용 좋은 파워 브릭 필요.
RAK 831:
1) 보드에 전원 켜기 전 키트에 포함된 안테나를 안테나 나사 단자에 연결. 필수적입니다.
연결 세부사항:
RAK831 모듈을 라즈베리 파이에 연결하는 방법을 보여주는 표:
rak 831 silk screen map to the rak 831 pins
라즈베리 파이 핀 레이아웃 이해는 https://www.raspberrypi.org/documentation/usage/gpio/ 참조.
주의사항:
- 리셋 핀은 라즈베리 파이 3의 아무 GPIO에나 연결 가능.
- RAK 831 보드 손상 방지를 위해 전원 공급 핀을 올바르게 연결하는 것이 필수적.
SPI 활성화:
SPI 주변장치는 기본적으로 꺼져 있습니다. 활성화하려면:
- sudo raspi-config 실행.
- 아래 화살표로 9 Advanced Options 선택
- 아래 화살표로 A6 SPI 선택.
- SPI 활성화 여부 물으면 yes 선택.
- 커널 모듈 자동 로드 여부에도 yes 선택.
- 오른쪽 화살표로 버튼 선택.
- 재부팅 여부 물으면 yes 선택.
시스템 재부팅. 다시 로그인 후 다음 명령 실행:
>ls /dev/*spi*
파이 응답:
/dev/spidev0.0 /dev/spidev0.1
이는 칩 인에이블 핀 0과 1의 SPI 디바이스를 나타냅니다. 이 핀들은 파이 내부에 하드와이어링되어 있습니다. 보통 인터페이스가 최대 두 주변장치 지원 의미하지만, 여러 장치가 단일 칩 인에이블 신호 공유하며 데이지 체인 가능한 경우도 있음.
보드에 전원 공급:
무선 프로젝트는 호스트 보드가 공급 핀으로 제공할 수 있는 것보다 더 많은 전원 필요 경향. 아래 두 방식은 RAK 831과 라즈베리 파이 3에 전원 공급하는 방법 열거:
1) 라즈베리 파이에서 5V 레일 전원 공급
2) 라즈베리 파이와 RAK831의 5V 레일 별도 전원 공급
소프트웨어 설치:
라즈베리 파이에서 필수 소프트웨어 설치를 위해 다음 단계 수행:
raspi-config 유틸리티로 SPI 활성화 ([5] Interfacing options -> P4 SPI) 및 파일시스템 확장 ([7] Advanced options -> A1 Expand filesystem):
$ sudo raspi-config
Sudo apt-get update
Sudo apt-get upgrade
Sudo apt-get install git
- WiFi 자격 증명 구성 (자세한 내용은 여기 확인)
$ 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' 입력 후 설치 계속. 명령줄 설치 시작 시 스크립트가 게이트웨이 EUI를 보여줍니다. 이는 다음 단계에 중요하니 반드시 기록해두세요!
- 원격 구성 옵션 사용 원한다면, 게이트웨이 EUI 이름으로 된 JSON 파일(예: B827EBFFFE7B80CD.json)을 Gateway Remote Config 저장소에 생성: https://github.com/ttn-zh/gateway-remote-config. 저장소 포크, 적절한 구성의 .json 파일 추가 후 포크 커밋. 완료되면 마스터 저장소에 풀 리퀘스트 보내고 다음 날 파일이 저장소에 나타날 것. 샘플 JSON:
{
"gateway_conf": {
"gateway_ID": "install.sh 콘솔 출력에서 기록한 id",
"servers": [
{
"server_address": "연결하려는 라우터",
"serv_port_up": 1700,
"serv_port_down": 1700,
"serv_enabled": true
}
],
"ref_latitude": rak 831 게이트웨이 위도,
"ref_longitude": rak 831 게이트웨이 경도,
"ref_altitude": 40,
"contact_email": "게이트웨이 소유자 연락처 이메일",
"description": "짧은 설명"
}
}
참고:
유효한 라우터 목록은 여기 확인: https://www.thethingsnetwork.org/wiki/Backend/Connect/Gateway
- 기본적으로 설치 프로그램이 라즈베리 파이 호스트명을 ttn-gateway로 변경(네트워크 내 다른 라즈베리 파이와 충돌 방지). 비원격 구성 모드에서 재정의 가능.
- 게이트웨이가 이제 작동해야 함. 다음 날 재시작하여 JSON 파일이 RPi3에 제대로 다운로드되게 하세요.
- global_config.json은 다음에 따라 조정 필요:
https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json
mp_pkt_fwd를 기존 poly 패킷 포워더 대신 사용하려는 분들은 여기 참고하여 동일하게 설치:
https://github.com/kersing/packet_forwarder/tree/master/mp_pkt_fwd. 다시 프로젝트 루트의 global_conf.json 파일에서 중요 섹션(아래 설명) 편집 후 컴파일 후 bin 폴더에 복사.
global_conf.json의 구성 가능한 엔티티들:
global_conf.json 파일은 설치 스크립트 실행 후 프로젝트 디렉토리 베이스에서 ./bin/global_conf.json에 있습니다. 특정 게이트웨이 구성에 맞게 편집하고 싶은 global_conf.json의 일부 엔티티 목록:
1) "radio_0" 또는 "radio_1" 구성, 특히 Frequency 파라미터와 min/max 주파수 스위프 파라미터.
2) "gateway_conf" 섹션. 특히 게이트웨이 ID 또는 게이트웨이 EUI.
3) 같은 gateway_conf 객체의 서버 업/다운 포트와 본인 TTN 서버 주소 또는 자체 애플리케이션 서버 주소(사용 가능한 경우).
보드 리셋:
라즈베리 파이 시작 시마다 연결된 RAK831 LoRa 모듈 리셋하는 것이 좋은 관행. 두 가지 방법:
LoRa 드라이버가 하드웨어에 접근하기 전 RAK831을 리셋하는 작은 쉘 스크립트 작성 가능. 내용 예시 (라즈베리 파이 GPIO 17(핀 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" 파일에 저장. 사용자는 부팅 후 매번 이 스크립트 한 번 호출하여 컨센트레이터 IC를 깨끗한 상태로 만듦.
호스트 시스템이 라즈베리 파이면 RAK831 리셋용 작은 C-도구 작성 가능. 라즈베리 파이 GPIO 핀 접근용 "wiringPi" 라이브러리가 저수준 세부사항 처리. https://wiringpi.com에서 다운로드 가능. 설치 및 사용 지침은 해당 사이트 참조. RAK831_reset.c 파일 내용 예시:
#include
#include
#define GPIO_RESET_PIN 0 // wiringPi 매핑 참조!
int main() {
wiringPiSetup();
pinMode(GPIO_RESET_PIN, OUTPUT);
digitalWrite(GPIO_RESET_PIN, HIGH);
sleep(5);
digitalWrite(GPIO_RESET_PIN, LOW);
return;
}
사용자는 부팅 후 매번 이 도구 한 번 호출하여 컨센트레이터 IC를 깨끗한 상태로 만듦.
gcc -Wall -o blink blink.c -lwiringPi
sudo ./blink
게이트웨이를 TTN 네트워크에 등록:
노드들이 데이터를 클라우드로 보내게 하려면 TheThingsNetwork가 LoRa 노드들이 LoRa 게이트웨이를 통해 보낸 데이터를 파싱하고 저장하는 클라우드 서비스 제공.
Read More Detail :Getting started with the RAK 831 Lora Gateway and RPi3