ทำ Single Channel LoRaWAN gateway ใช้กับ TTS (TTN V.3)

Somsak Lima
6 min readSep 20, 2020

--

อุปกรณ์ที่ต้องมี

1. Raspberry Pi 3 Model B หรือ PI4 หรือ PI 0W 1 บอร์ด พร้อม Adapter ไฟ 5V ขนาดไม่น้อยกว่า 2 A
2. จอ Monitor HDMI , Mouse, Keyboard ใช้เฉพาะช่วงติดตั้ง
3. LoRaWan Shield for Raspberry Pi
4. Micro SD card ขนาดไม่ต่ำกว่า 16 G
5. สายแลนขั้ว RJ45

ตอนติดตั้งให้เลือก Raspberry Pi OS(other)

แล้วเลือก Raspberry Pi OS(Legacy, 64-bit) Full Debian Bulleye

วิธีติดตั้ง Hardware

  • นำ LoRaWan Shield ใส่ใน Socket Raspberry Pi ตามรูป
  • ใส่ Micro SDcard ที่ลงโปแกรมแล้วในช่องของ Raspberry Pi
  • เสียบสาย HDMI จอมอนิเตอร์
  • เสียบสายคีย์บอร์ดและเม้าส์เข้ากับ RPI ช่อง USB
  • เชื่อม RPI เข้ากับ Internet ผ่านสาย Lan
  • เสียบไฟให้กับ RPI จะเห็นไฟเขียวและไฟแดงกระพริบหลังจาก Boot เสร็จจะเห็นหน้าจอดังภาพ

หมายเหตุ
หากไม่มีหรือไม่ใช้ LoRaWan Shield ให้ใช้ RFM95W แทนโดยต่อสายจาก RFM95W เข้า Raspberry Pi ตามนี้

RFM   WirePi
NAME NAME Physical
3.3V — 3.3V (header pin #1)
GND — GND (pin #6)
MISO — MISO (pin #21)
MOSI — MOSI (pin #19)
SCK — SCLK (pin #23)
NSS — GPIO6 (pin #22)
DIO0 — GPIO7 (pin #7)
RST — GPIO0 (pin #11)

วิธีติดตั้ง Software

  • ให้ติดตั้ง RPI ให้เรียบร้อยก่อน
  • เปิดการใช้งาน SPI

เรียก Raspberry Pi Configuration

เรียน เมนู Preference/ Raspberry Pi Configuration เลือกแทป Interfaces คลิก Enabled ที่ SSH และ SPI แล้วกด OK

Update RPI และลง wiringpi แล้ว Reboot

sudo apt update
sudo apt upgrade
sudo apt install wiringpi <==บางครั้งจะติดตั้งมาอยู่แล้ว ***
sudo apt autoremove
sudo reboot

***หมายเหตุ หากติดตั้ง wiringpi อัตโนมัติไม่ได้

เช็คดูว่าเป็น Raspberry Pi 4 ที่ติดตั้ง bulleye ซึ่งยังใช้ได้กับ wiringpi หรือเปล่า ดูรายละเอียด OS ด้วยคำสั่ง เช่น

pi@raspberrypi:~ $ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

การติดตั้ง wiringpi แบบแมนนวล

ให้เปิดเวป https://github.com/WiringPi/WiringPi/releases เลือก Download wiringpi ให้ตรงกับ OS ที่เลือกลงใน Pi ว่าเป็น Raspbian 32 bits หรือ 64 bits

หาก 32 bit ให้เลือก Download ไฟล์ wiringpi-2.61–1-armhf.deb แต่หาก OS ที่ติดตั้งอยู่เป็น 64 bits ให้เลือก Download ไฟล์ wiringpi-2.61–1-arm64.deb มาติดตั้ง

กรณี OS 64 bitใช้คำสั่ง

wget https://github.com/WiringPi/WiringPi/releases/download/2.61-1/wiringpi-2.61-1-arm64.deb

แล้วติดตั้งโดยใช้คำสั่ง

sudo dpkg -i wiringpi-2.61-1-arm64.deb

อาจจะติดตั้งด้วยวิธีด้านล่างแทน

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

เริ่มติดตั้งโปรแกรม Single Channel Packet Forward

ให้ Reboot Pi หนึ่งครั้ง เมื่อ PI เปิดมาอีกครั้งให้ดาวน์โหลดโปรแกรม Single Channel Packet Forward แล้ว Make โปรแกรม

cd /home/pi
git clone https://github.com/m2mlorawan/single_chan_pkt_fwd
cd ~/single_chan_pkt_fwd
sudo cp global_conf.json global_conf.json.org
make

Remark****
หลังจากใช้ Make จะเห็นการทำงานดังนี้ หากมี Warning ขึ้นก็ไม่ต้องสนใจ

g++ -std=c++11 -c -Wall -I include/ base64.cg++ -std=c++11 -c -Wall -I include/ single_chan_pkt_fwd.cppg++ single_chan_pkt_fwd.o base64.o -lwiringPi -o single_chan_pkt_fwd

หมายเหตุ
ถ้าใช้ RPI0 แก้ eth0 ในไฟล์ single_chan_pkt_fwd.cpp เป็น wlan0 ตรงบรรทัด 691 จาก
strncpy(ifr.ifr_name, “eth0”, IFNAMSIZ-1); // can we rely on eth0?
เป็น
strncpy(ifr.ifr_name, “wlan0”, IFNAMSIZ-1); // can we rely on eth0?

เข้าไปใน Directory single_chan_pkt_fwd

cd ~/single_chan_pkt_fwd

ก่อนใช้งานให้ตั้งค่า Config โดยแก้ค่าในไฟล์ global_conf.json ด้วยคำสั่ง

sudo nano global_conf.json

ตัวอย่าง

{
“SX127x_conf”:
{
“freq”: 923200000, <เลือกความถี่ที่ใช้>
“spread_factor”: 7,
“pin_nss”: 6,
“pin_dio0”: 7,
“pin_rst”: 0,
“pin_led1”:4
},
“gateway_conf”:
{
“ref_latitude”: 8.0809, <ใส่ตำแหน่งพิกัด GPS ละติจูด>
“ref_longitude”: 98.8747, <ลองติจูด>
“ref_altitude”: 10, <ความสูง>
“name”: “My Lora Gateway”, <ชื่อที่ต้องการ>
“email”: “contact@whatever.com”, <ใส่ Email>
“desc”: “Single Channel Gateway on RPI”, <ข้อมูลอื่นๆ>
“servers”:
[
{
“address”: “eu1.cloud.thethings.network”, <แก้เป็นตามตัวอย่าง>
“port”: 1700,
“enabled”: true
},
{
“address”: “au1.cloud.thethings.network”,
“port”: 1700,
“enabled”: false
}
]
}
}

ลอง Run โปรแกรมเพื่อให้โปรแกรมเช็คค่า Gateway ID ซึ่งเป็นค่าที่ต้องนำไปลงทะเบียนที่เวป TTN

sudo /home/pi/single_chan_pkt_fwd/single_chan_pkt_fwd

กรณีใช้ Raspbian เวอร์ชั่นใหม่การ run ด้วย sudo แล้วเจอ error Unrecognized transceiver: Success

อาจเปลี่ยนเป็นไม่ใช้ sudo ดังนี้

/home/pi/single_chan_pkt_fwd/single_chan_pkt_fwd

จะเห็นข้อความ

server: .address = eu1.cloud.thethings.network; .port = 1700; .enable = 1
server: .address = test.mosquitto.org; .port = 1883; .enable = 0
Gateway Configuration
Lora (yourname@gmail.com)
Single Channel Gateway
Latitude=8.07999992
Longitude=98.80999756
Altitude=10
Trying to detect module with NSS=6 DIO0=7 Reset=0 Led1=4
SX1276 detected, starting.
Gateway ID: b8:ab:ff:ff:ff:ff:ff:ff
Listening at SF7 on 923.200000 Mhz.
— — — — — — — — — — — — — — — — — -
stat update: 2017–11–13 23:02:20 GMT no packet received yet

ออกจากโปรแกรม กดCtrl C หยุด จดค่า Gateway ID: นำไปลงทะเบียนกับเวป TTN เช่น b8:ab:ff:ff:ff:ff:ff:ff

หากทดสอบการ Run แล้วทำงานปรกติให้ ติดตั้งโปรแกรมเพื่อให้ทำงานตอนเปิด Pi ทุกครั้ง

sudo make install

จะเห็นข้อความ

sudo cp -f ./single_chan_pkt_fwd.service /lib/systemd/system/
sudo systemctl enable single_chan_pkt_fwd.service
Created symlink /etc/systemd/system/multi-user.target.wants/single_chan_pkt_fwd.service ? /lib/systemd/system/single_chan_pkt_fwd.service.
sudo systemctl daemon-reload
sudo systemctl start single_chan_pkt_fwd
sudo systemctl status single_chan_pkt_fwd -l
? single_chan_pkt_fwd.service — Lora Packet Forwarder
Loaded: loaded (/lib/systemd/system/single_chan_pkt_fwd.service; enabled; ven
Active: active (running) since Mon 2017–11–13 22:56:57 UTC; 259ms ago
Main PID: 1136 (single_chan_pkt)
CGroup: /system.slice/single_chan_pkt_fwd.service
mq1136 /home/pi/single_chan_pkt_fwd/single_chan_pkt_fwd
Nov 13 22:56:57 raspberrypi systemd[1]: Started Lora Packet Forwarder.

Reboot เครื่องใหม่อีกครั้ง

sudo reboot

เช็คดูว่าโปรแกรม single_chan_pkt_fwd รันอยู่หรือเปล่าด้วยคำสั่ง ps ax จะเห็นบรรทัดคล้ายๆ ดังต่อไปนี้

728 ? Ss 0:02 /home/pi/single_chan_pkt_fwd/single_chan_pkt_fwd

Tip! ดู Gateway Log แบบ เรียวไทม์

journalctl -f -u single_chan_pkt_fwd

Tip! คำสั่ง Start หรือ Stop Service

systemctl start single_chan_pkt_fwd
systemctl stop single_chan_pkt_fwd
systemctl status single_chan_pkt_fwd

เมื่อ Run ด้วย Manual หาก gateway เริ่มทำงานและสามารถรับข้อมูลได้จะแสดงค่าออกมาบนหน้าจอตามตัวอย่าง

Packet RSSI: -62, RSSI: -118, SNR: 9, Length: 17 Message:’@j..&….l……`’
rxpk update: {“rxpk”:[{“tmst”:1933922638,”freq”:923.2,”chan”:0,”rfch”:0,”stat”:1,”modu”:”LORA”,”datr”:”SF7BW125",”codr”:”4/5",”rssi”:-62,”lsnr”:9.0,”size”:17,”data”:”QGoVASaAAAABbP4UEwjy7WA=”}]}
stat update: 2017–11–13 23:15:52 GMT 1 packet received
Packet RSSI: -72, RSSI: -116, SNR: 8, Length: 17 Message:’@j..&……….UY’
rxpk update: {“rxpk”:[{“tmst”:1964565663,”freq”:923.2,”chan”:0,”rfch”:0,”stat”:1,”modu”:”LORA”,”datr”:”SF7BW125",”codr”:”4/5",”rssi”:-72,”lsnr”:8.0,”size”:17,”data”:”QGoVASaAAwABuh2D3bjVVVk=”}]}

ปัจจุบัน TTN ได้ปรับปรุงระบบไปเป็น TheThings Stack Version 3. แล้วทำให้อาจจะมีปัญหาการใช้งานกับ Single Channel gateway แนะนำให้ใช้กับ LNS LoRaWAN Network Server ตัวอื่น เช่น Chirpstack, Gothardp เป็นต้น ทั้งสองตัวสามารถติดตั้งบน Raspberry Pi ได้

วิธีลงทะเบียน Gateway ใหม่ใน The Thing Stack หรือ TTN V.3

เปิดเวป www.thethingsnetwork.org สมัครเป็นผู้ใช้งานและยืนยันตัวตนให้เรียบร้อย เข้าที่ Console

เลือกเข้าไปจัดการ Gateway คลิก Go to gateways

คลิก +Add gateway สีฟ้า

กรอกค่าอื่นๆ คล้ายตามภาพ

นำค่า Gateway ID จาก Raspberry Pi มาป้อนที่ Gateway EUI โดยไม่ต้องใส่ โคลอน และเลือกตั้งชื่อ Gateway ID โดยชื่อต้องเป็นตัวเล็กไม่มี Space และไม่ซ้ำกับคนอื่น

หน้านี้ก็ให้เป็นตามเดิม

ความถี่ให้เลือก ASIA 923–925 Mhz และ เอา Enabled ตรง Enforce duty cycle ออก

เมื่อเรียบร้อยให้กดที่ด้านล่าง Create Gateway ก็จะจบการลงทะเบียน

เปิดดูสถานะของ Gateway
ที่ Gateway Overview จะเห็น Last seen ยังไม่มีข้อมูล หาก gateway ทำงานจะเริ่มเห็นข้อมูลที่ช่องนี้ และเมื่อมีการรับส่งข้อมูลจะเห็นเลขจำนวนหลังลูกศรชี้ขึ้น และ ในหน้าต่าง Live Dara จะเห็นข้อมูลเข้า

หากเข้าไปดู Live Data ของ Device ที่ส่งข้อมูลจะเห็นข้อมูลวิ่งเข้าคล้ายตามภาพ โดยหาก Device ส่ง เป็น CayenneLPP Format จะเห็นค่าที่อ่านแล้วเข้าใจตามรูป

หมายเหตุ

  • ทดสอบล่าสุดกับ TTN เมื่อวันที่ 9 ตค.2567 ก็ยังส่งข้อมูลเข้า TTN ได้
  • LoRaWan Shield for Raspberry สามารถสั่งซื้อได้จาก คลิก
  • Credit บทความจากเวป http://lorawan.lnwshop.com/
  • หากมีปัญหาส่งข้อมูลด้วย ABP แล้วได้บ้างไม่ได้บ้างให้ ตั้งค่าที่ตัว Node

ติกที่ Resets fame counters โดยเข้าที่เมนู General settings/Network layer/Advanced MAC settings

--

--

Somsak Lima
Somsak Lima

Written by Somsak Lima

สนับสนุนและส่งเสริมให้ผู้สนใจสามารถใช้งานเทคโนโลยี LoRa และ LoRaWAN ได้ โดยนำความรู้ที่ได้ไปต่อยอดเพื่อใช้งาน

Responses (1)