---
# System prepended metadata

title: Tutorial about P2P connection using Lora Module and ad-hoc Wifi on Raspberry Pi 3
tags: [rpi]

---

###### tags: `rpi`
# Tutorial about P2P connection using Lora Module and ad-hoc Wifi on Raspberry Pi 3


## 1. TestBed
    Laptop 
    Rasperry Pi 3 (B, B+) x2 (Ubuntu 22.04)
    Lora module (lora-sx1276) x2
    
### SSH (optional)
#### Connect a PC and two Raspberry PIs with Ethernet, and connect the PC to a router. So you can use SSH to control both Raspberry PIs on the computer.
<!--
     IP:
        Computer: 10.0.1.10
        PiB: 10.0.0.1
        PiB+: 10.0.1.1
<!-->        
## 2. Lora
### Connect LoRa modules to PIs 
<!--->![](https://i.imgur.com/1de1vPG.jpg)
<!-->
![Screenshot 2023-12-11 at 5.56.35 PM](https://hackmd.io/_uploads/BktEdtBLa.png)
![IMG_3244](https://hackmd.io/_uploads/rkEPh5BIp.jpg =300x400)
![IMG_3243](https://hackmd.io/_uploads/rkqhhcrLp.jpg =300x400)
:::success
Pin connection on the Raspberry Pi and the mini LoRa chip.
:::
### Enable SPI interface
    sudo raspi-config
![Screenshot from 2023-12-12 15-40-45](https://hackmd.io/_uploads/H1JsAtr8T.png)

    #Select 3 Interface Options
![Screenshot from 2023-12-12 15-42-36](https://hackmd.io/_uploads/HJk-k9SI6.png)

    #Select I4 SPI
![Screenshot from 2023-12-12 15-45-00](https://hackmd.io/_uploads/Sk1sk5HIT.png)

    #Enter

### Download the sample code from Github to both Raspberry PIs
https://github.com/piepie-tw/lora-sx1276

### Test if the pin connection work
    cd /lora-sx1276
    sudo python3 test_lora.py
![Screenshot from 2023-12-12 15-51-07](https://hackmd.io/_uploads/ry3xbcrLp.png)

### Display the parameters
##### Frequency, Bandwidth, and Spreading Factor must be the same on 2 Raspberry Pis for P2P to work.
    sudo python3 lora_util.py
   ![Screenshot_from_2023-12-12_15-53-47](https://hackmd.io/_uploads/ry1aGqHLT.png)
### P2P connection

#### For receiver
    cd 02-p2p/
    sudo python3 p2p_recv.py
    
#### For sender
    cd 02-p2p/
    sudo pytonh3 p2p_sender.py
    
    
###  Change LoRaWAN settting 
    SX127x /
    | --- Lora.py # Change setting manually
    
### Change Tx power
    set_pa_config(pa_select = 1)
    set_pa_dac(True)
    set_pa_config(max_power=0x0f, output_power=0x0f) # Max power
    set_pa_config(max_power=0x00, output_power=0x00) # Min power
    
#### Test Tx power

Compare the difference between max power and min power, and change the setting in p2p_recv.py and p2p_send.py

    Max power: 15dBm          RSSI: -101
    Min power: -4.2dBm        RSSI: -30
    

### Test Throughput, Latency, Packet loss rate, RSSI and SNR

Run lora_test_ssh.py to remotely connect to rpis. Test and copy the log files 

    Avg Throughput: 3.6769099248991153 kbps
    Avg Latency: 217.57399999999998 ms
    Packet Loss Rate: 0.0 %
    Avg RSSI: -123.0
    Avg SNR: 58.0

## 3. WiFi

### Change wifi into ad-hoc mode
essid need to be the same on Pi B and Pi B+
:::info 
Attached to external Wi-Fi dongle is required
:::
    sudo ifconfig wlan1 down
    sudo iwconfig wlan1 mode ad-hoc 
    sudo iwconfig wlan1 essid Pi_adhoc 
    sudo iwconfig wlan1 channel 1
    
### Set IP on Pi B
    sudo ifconfig wlan1 up
    sudo ifconfig wlan1 192.168.1.5
    
### Set IP on Pi B+
    sudo ifconfig wlan1 up
    sudo ifconfig wlan1 192.168.1.6  
    
### Use ping and traceroute to check whether they are connected
    ping 192.168.1.6
    traceroute 192.168.1.6
    
### Test throughout: iperf
    sudo apt install iperf
 
 Server (192.168.1.6)

    iperf -s
    
 Client (192.168.1.5)
     
     iperf -c 192.168.1.6 -t 10 -i 1

 Result: 21Mb/s
 
    [  1] local 192.168.0.108 port 5001 connected with 192.168.0.80 port 55132
    [ ID] Interval       Transfer     Bandwidth
    [  1] 0.0000-10.5462 sec  26.4 MBytes  21.0 Mbits/sec
    
### Test latency and packet loss rate: mtr
    sudo apt install mtr
    
    
 Client (192.168.0.80)
 
     mtr --no-dns --report  --report-cycle 10 192.168.0.108
     
 Result: 14.5 ms
 
    HOST: Pi3B                        Loss%   Snt   Last   Avg  Best  Wrst StDev
      1.|-- 192.168.0.108              0.0%    10    7.8  14.5   6.9  42.4  10.7

## Flow to get Figs

Run wifi_setting_1.sh on client (192.168.1.5)
Run wifi_setting_2.sh on server (192.168.1.6)

Run T3_wifi_test_server.py on server to activate iperf.
Run T3_wifi_test_client.py on client.

Retrive the log file.
```
cd wifi_log
```
Use scp command to copy the log file to the local host.
```
scp rpi@192.168.0.108:/home/rpi/smartagr/wifi_log/T3_wifi_send_0.log ~/Desktop/
```

Run `T3_parser_new.py` to get figs. 
:::info
Modify to multiple distances is required (todo)
:::

## Experiment result

Test with differnet distance between two nodes: 10cm, 20cm, 40cm, 80cm, 160cm

### Wifi
Throughput
![](https://i.imgur.com/djK8Z1V.png =400x300)

RSSI
![](https://i.imgur.com/etFrIOH.png =400x300)

### LoRa
Throughput
![](https://i.imgur.com/52S7ftC.png =400x300)

RSSI
![](https://i.imgur.com/WptMUI5.png =400x300)

SNR
![](https://i.imgur.com/EnjHodz.png =400x300)

