Difference between revisions of "Dragino Lora/GPS HAT"
From ArmadeusWiki
(→LoRa™) |
(→Tested Software) |
||
| (22 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| − | |||
| − | Instructions to use Dragino Lora/GPS HAT on [[OPOS6ULDev]] (thanks to RaspberryPi™ compatible connector). | + | Instructions to use the Dragino Lora/GPS HAT on [[OPOS6ULDev]] (thanks to RaspberryPi™ compatible connector). |
[http://wiki.dragino.com/index.php?title=File:Hatpin.png] | [http://wiki.dragino.com/index.php?title=File:Hatpin.png] | ||
| − | + | =LoRa™= | |
| − | * RESET is connected to RPi GPIO0 which is gpio24 on [[OPOS6UL]] | + | ==Setup== |
| − | * nSS is connected to RPi GPIO6, which is gpio97 on [[OPOS6UL]] | + | * RESET is connected to RPi GPIO0 which is gpio24 on [[OPOS6UL]] set as output |
| − | * DIO0 is connected to | + | * nSS is connected to RPi GPIO6, which is gpio97 on [[OPOS6UL]] set as output |
| − | + | * DIO0 is connected to RPi GPIO7, which is gpio10 on [[OPOS6UL]] set as input | |
| − | * | + | * on recent models (like the one we tested) DIO1 is connected to RPi GPIO4, which is gpio18 on [[OPOS6UL]] set as input |
| + | * on recent models (like the one we tested) DIO1 is connected to RPi GPIO5, which is gpio19 on [[OPOS6UL]] set as input | ||
| + | * This Hat/Shield is using HOPERF RFM96W module (clone of Semtech's SX1276 ?) which is controlled through SPI bus. | ||
<pre class="apf"> | <pre class="apf"> | ||
# modprobe spidev | # modprobe spidev | ||
</pre> | </pre> | ||
| − | + | === Testing that chip is recognized with python spidev === | |
| − | + | * Bring chip out of reset: | |
<pre class="apf"> | <pre class="apf"> | ||
# echo 24 > /sys/class/gpio/export | # echo 24 > /sys/class/gpio/export | ||
| Line 23: | Line 24: | ||
# echo 1 > /sys/class/gpio/gpio24/value | # echo 1 > /sys/class/gpio/gpio24/value | ||
</pre> | </pre> | ||
| − | + | * activate it: | |
<pre class="apf"> | <pre class="apf"> | ||
# echo 97 > /sys/class/gpio/export | # echo 97 > /sys/class/gpio/export | ||
| Line 29: | Line 30: | ||
# echo 0 > /sys/class/gpio/gpio97/value | # echo 0 > /sys/class/gpio/gpio97/value | ||
</pre> | </pre> | ||
| − | + | * read ID (register 0x42): | |
<source lang="python"> | <source lang="python"> | ||
import spidev | import spidev | ||
| Line 40: | Line 41: | ||
</source> | </source> | ||
| − | == | + | ==Tested Software== |
| − | * | + | ===Gateway=== |
| + | * https://github.com/tftelkamp/single_chan_pkt_fwd | ||
| + | * To compile/install it: | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | ! Buildroot !! Debian | ||
| + | |- | ||
| + | | | ||
| + | <pre class="host"> | ||
| + | $ make lora-forwarder | ||
| + | </pre> | ||
| + | || | ||
| + | * [[AsDevices]] library (0.18+) and '''git''' are needed. Board date/time should be correct to use ''git clone''. Then: | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# cd | ||
| + | root@opos6ul:~# git clone https://github.com/tftelkamp/single_chan_pkt_fwd.git | ||
| + | root@opos6ul:~# cd single_chan_pkt_fwd/ | ||
| + | root@opos6ul:~/single_chan_pkt_fwd# make CFLAGS="-Wall -I/usr/include/as_devices/" LIBS="-las_devices" | ||
| + | </pre> | ||
| + | |} | ||
| + | |||
| + | * If not already loaded, load ''spidev'' driver: | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# modprobe spidev | ||
| + | </pre> | ||
| + | |||
| + | * edit a script and put in it: | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# vim /root/start_gateway.sh | ||
| + | </pre> | ||
| + | |||
| + | <source lang="bash"> | ||
| + | #!/bin/sh | ||
| + | |||
| + | echo 9 > /sys/class/gpio/export | ||
| + | echo 24 > /sys/class/gpio/export | ||
| + | echo 97 > /sys/class/gpio/export | ||
| + | echo out > /sys/class/gpio/gpio97/direction | ||
| + | echo out > /sys/class/gpio/gpio24/direction | ||
| + | echo in > /sys/class/gpio/gpio9/direction | ||
| + | |||
| + | /root/single_chan_pkt_fwd/single_chan_pkt_fwd | ||
| + | </source> | ||
| + | |||
| + | * Make it executable: | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# chmod a+x /root/start_gateway.sh | ||
| + | </pre> | ||
| + | |||
| + | * Launch it ! ;-) | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# /root/start_gateway.sh | ||
| + | </pre> | ||
| + | |||
| + | * To get & printout UDP data forwarded by the gateway (if -i runtime option is used): | ||
| + | <source lang="python"> | ||
| + | #!/usr/bin/python | ||
| + | |||
| + | import socket | ||
| + | import json | ||
| + | |||
| + | UDP_IP = "192.168.1.28" # my IP | ||
| + | UDP_PORT = 1700 | ||
| + | |||
| + | sock = socket.socket(socket.AF_INET, # Internet | ||
| + | socket.SOCK_DGRAM) # UDP | ||
| + | sock.bind((UDP_IP, UDP_PORT)) | ||
| + | |||
| + | while True: | ||
| + | data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes | ||
| + | json_msg = data[12:] | ||
| + | # print "received JSON message:", json_msg | ||
| + | |||
| + | try: | ||
| + | decoded = json.loads(json_msg) | ||
| + | # print json.dumps(decoded, sort_keys=True, indent=4) | ||
| + | if decoded.get('rxpk'): | ||
| + | print "Packet data: ", decoded['rxpk'][0]['data'] | ||
| + | |||
| + | except (ValueError, KeyError, TypeError): | ||
| + | print "JSON format error" | ||
| + | </source> | ||
| + | |||
| + | ===Node=== | ||
| + | * http://wiki.dragino.com/index.php?title=Use_Lora/GPS_HAT_%2B_RaspberryPi_to_set_up_a_Lora_Node | ||
| + | |||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | ! Buildroot !! Debian | ||
| + | |- | ||
| + | | | ||
| + | <pre class="host"> | ||
| + | $ make lmic-pi | ||
| + | </pre> | ||
| + | || | ||
| + | * [[AsDevices]] library (0.18+) and ''unzip'' (''apt-get install unzip'') are needed. Then: | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# cd | ||
| + | root@opos6ul:~# wget https://github.com/ernstdevreede/lmic_pi/archive/master.zip | ||
| + | root@opos6ul:~# unzip master.zip | ||
| + | root@opos6ul:~# cd lmic_pi-master/lmic | ||
| + | root@opos6ul:~# make CFLAGS="-c -Wall -I/usr/include/as_devices/" LIBS="-las_devices" | ||
| + | root@opos6ul:~# cd ../examples/thethingsnetwork-send-v1/ | ||
| + | root@opos6ul:~# make CFLAGS="-Wall -I/usr/include/as_devices/ -I../../lmic" LDFLAGS="-las_devices" | ||
| + | root@opos6ul:~# chmod a+x thethingsnetwork-send-v1 | ||
| + | </pre> | ||
| + | |} | ||
| + | |||
| + | * edit a script and put in it: | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# vim /root/start_node.sh | ||
| + | </pre> | ||
| + | |||
| + | <source lang="bash"> | ||
| + | #!/bin/sh | ||
| + | |||
| + | echo 9 > /sys/class/gpio/export | ||
| + | echo 18 > /sys/class/gpio/export | ||
| + | echo 19 > /sys/class/gpio/export | ||
| + | echo 24 > /sys/class/gpio/export | ||
| + | echo 97 > /sys/class/gpio/export | ||
| + | |||
| + | echo out > /sys/class/gpio/gpio97/direction | ||
| + | echo out > /sys/class/gpio/gpio24/direction | ||
| + | echo in > /sys/class/gpio/gpio9/direction | ||
| + | echo in > /sys/class/gpio/gpio18/direction | ||
| + | echo in > /sys/class/gpio/gpio19/direction | ||
| + | |||
| + | /root/lmic_pi/examples/thethingsnetwork-send-v1/thethingsnetwork-send-v1 & | ||
| + | </source> | ||
| + | |||
| + | <pre class="apf"> | ||
| + | # modprobe spidev | ||
| + | </pre> | ||
| + | |||
| + | * Make it executable: | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# chmod a+x /root/start_node.sh | ||
| + | </pre> | ||
| + | |||
| + | * Launch it ! ;-) | ||
| + | <pre class="apf"> | ||
| + | root@opos6ul:~# /root/start_node.sh | ||
| + | </pre> | ||
| + | |||
| + | =GPS= | ||
| + | * GPS is connected to UART2 (''/dev/ttymxc1'') | ||
| + | * [[NTP#Time_synchronisation_from_GPS|Use GPS to get time/date with NTP]] | ||
| − | + | =Links= | |
* http://www.dragino.com/products/module/item/106-lora-gps-hat.html | * http://www.dragino.com/products/module/item/106-lora-gps-hat.html | ||
* http://wiki.dragino.com/index.php?title=Lora/GPS_HAT | * http://wiki.dragino.com/index.php?title=Lora/GPS_HAT | ||
| Line 51: | Line 199: | ||
RaspberryPi is a registered trademark of RaspberryPi Foundation. | RaspberryPi is a registered trademark of RaspberryPi Foundation. | ||
| + | |||
| + | [[Category:RPi_Hats]] | ||
| + | [[Category:LoRa]] | ||
| + | [[Category:GPS]] | ||
Latest revision as of 18:01, 21 April 2017
Instructions to use the Dragino Lora/GPS HAT on OPOS6ULDev (thanks to RaspberryPi™ compatible connector).
Contents
LoRa™
Setup
- RESET is connected to RPi GPIO0 which is gpio24 on OPOS6UL set as output
- nSS is connected to RPi GPIO6, which is gpio97 on OPOS6UL set as output
- DIO0 is connected to RPi GPIO7, which is gpio10 on OPOS6UL set as input
- on recent models (like the one we tested) DIO1 is connected to RPi GPIO4, which is gpio18 on OPOS6UL set as input
- on recent models (like the one we tested) DIO1 is connected to RPi GPIO5, which is gpio19 on OPOS6UL set as input
- This Hat/Shield is using HOPERF RFM96W module (clone of Semtech's SX1276 ?) which is controlled through SPI bus.
# modprobe spidev
Testing that chip is recognized with python spidev
- Bring chip out of reset:
# echo 24 > /sys/class/gpio/export # echo out > /sys/class/gpio/gpio24/direction # echo 0 > /sys/class/gpio/gpio24/value # echo 1 > /sys/class/gpio/gpio24/value
- activate it:
# echo 97 > /sys/class/gpio/export # echo out > /sys/class/gpio/gpio97/direction # echo 0 > /sys/class/gpio/gpio97/value
- read ID (register 0x42):
import spidev
spi = spidev.SpiDev()
spi.open(3,0)
to_send=[0x42,0x00]
spi.xfer(to_send)
[255, 255]
Tested Software
Gateway
- https://github.com/tftelkamp/single_chan_pkt_fwd
- To compile/install it:
| Buildroot | Debian |
|---|---|
$ make lora-forwarder |
root@opos6ul:~# cd root@opos6ul:~# git clone https://github.com/tftelkamp/single_chan_pkt_fwd.git root@opos6ul:~# cd single_chan_pkt_fwd/ root@opos6ul:~/single_chan_pkt_fwd# make CFLAGS="-Wall -I/usr/include/as_devices/" LIBS="-las_devices" |
- If not already loaded, load spidev driver:
root@opos6ul:~# modprobe spidev
- edit a script and put in it:
root@opos6ul:~# vim /root/start_gateway.sh
#!/bin/sh
echo 9 > /sys/class/gpio/export
echo 24 > /sys/class/gpio/export
echo 97 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio97/direction
echo out > /sys/class/gpio/gpio24/direction
echo in > /sys/class/gpio/gpio9/direction
/root/single_chan_pkt_fwd/single_chan_pkt_fwd
- Make it executable:
root@opos6ul:~# chmod a+x /root/start_gateway.sh
- Launch it ! ;-)
root@opos6ul:~# /root/start_gateway.sh
- To get & printout UDP data forwarded by the gateway (if -i runtime option is used):
#!/usr/bin/python
import socket
import json
UDP_IP = "192.168.1.28" # my IP
UDP_PORT = 1700
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
json_msg = data[12:]
# print "received JSON message:", json_msg
try:
decoded = json.loads(json_msg)
# print json.dumps(decoded, sort_keys=True, indent=4)
if decoded.get('rxpk'):
print "Packet data: ", decoded['rxpk'][0]['data']
except (ValueError, KeyError, TypeError):
print "JSON format error"
Node
| Buildroot | Debian |
|---|---|
$ make lmic-pi |
root@opos6ul:~# cd root@opos6ul:~# wget https://github.com/ernstdevreede/lmic_pi/archive/master.zip root@opos6ul:~# unzip master.zip root@opos6ul:~# cd lmic_pi-master/lmic root@opos6ul:~# make CFLAGS="-c -Wall -I/usr/include/as_devices/" LIBS="-las_devices" root@opos6ul:~# cd ../examples/thethingsnetwork-send-v1/ root@opos6ul:~# make CFLAGS="-Wall -I/usr/include/as_devices/ -I../../lmic" LDFLAGS="-las_devices" root@opos6ul:~# chmod a+x thethingsnetwork-send-v1 |
- edit a script and put in it:
root@opos6ul:~# vim /root/start_node.sh
#!/bin/sh
echo 9 > /sys/class/gpio/export
echo 18 > /sys/class/gpio/export
echo 19 > /sys/class/gpio/export
echo 24 > /sys/class/gpio/export
echo 97 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio97/direction
echo out > /sys/class/gpio/gpio24/direction
echo in > /sys/class/gpio/gpio9/direction
echo in > /sys/class/gpio/gpio18/direction
echo in > /sys/class/gpio/gpio19/direction
/root/lmic_pi/examples/thethingsnetwork-send-v1/thethingsnetwork-send-v1 &
# modprobe spidev
- Make it executable:
root@opos6ul:~# chmod a+x /root/start_node.sh
- Launch it ! ;-)
root@opos6ul:~# /root/start_node.sh
GPS
- GPS is connected to UART2 (/dev/ttymxc1)
- Use GPS to get time/date with NTP
Links
- http://www.dragino.com/products/module/item/106-lora-gps-hat.html
- http://wiki.dragino.com/index.php?title=Lora/GPS_HAT
LoRa is a registered trademark of Semtech.
RaspberryPi is a registered trademark of RaspberryPi Foundation.