Testare nivel RSSI
Pentru realizarea codului sursă s-a folosit Visual Studio Code cu extensia Pymakr instalată.
În vederea testelor de comunicație s-au folosit două module Fipy, în care unul a fost desemnat a fi Emițător iar cel de al doilea Receptor.
La receptor pentru a determina pragurile privind nivelul/calitatea semnalului recepționat RSSI s-a folosit indicare ledul RGB cu care este dotat modulul Fipy. De asemenea, la unele măsurători, s-a folosit și comunicația serială în vederea determinării în valori absolute a RSSI.
Codul sursă folosit pentru emițător Tx este:
# main.py -- put your code here!
# codul pentru modulul LoRa Tx Fipy
import pycom
import time
pycom.heartbeat(False)
time.sleep(1)
pycom.rgbled(0x7f0000)
time.sleep(1)
pycom.rgbled(0x7f7f00)
time.sleep(1)
pycom.rgbled(0xff00)
time.sleep(1)
#############################
from network import LoRa
import socket
import time
import ubinascii
time.sleep(1.0)
lora = LoRa(mode=LoRa.LORA, region=LoRa.EU868, frequency=868000000) # atenție variabila frequency sa fie aceeași și la receptor
s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
s.setblocking(False)
while True: # rulez la infinit
s.send('Ping') # trimit mesajul
pycom.rgbled(0xFF0000) # programez LED-ul RGB pentru culoarea Rosu
time.sleep(1) # pauza o secundă
pycom.rgbled(0x7f7f00) # programez LED-ul RGB pentru culoarea Oliv
time.sleep(1) # pauza o secundă
pycom.rgbled(0x00FF00) # programez LED-ul RGB pentru culoarea Verde
time.sleep(1) # pauza o secundă
#############################
Codul sursă pentru receptor Rx este:
# main.py -- put your code here!
# codul pentru modulul LoRa Rx Fipy
from network import LoRa
import socket
import time
import pycom
# Se va alege o regiune corespunzător cu locația noastră unde folosim modulul
# Asia = LoRa.AS923
# Australia = LoRa.AU915
# Europa = LoRa.EU868
# Statele Unite = LoRa.US915
lora = LoRa(mode=LoRa.LORA, region=LoRa.EU868, frequency= 868000000)
s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
s.setblocking(False)
pycom.heartbeat(False)
while True:
if s.recv(64) == b'Ping':
status=lora.stats()
rssi = status.rssi
snr = status.snr
# print(lora.stats())
print("RSSI= %s" %rssi)
print("SNR= %s" %snr)
int_rssi=int(rssi)
if int_rssi >=-71:
pycom.rgbled(0x00FF00) # LED Verde
elif int_rssi <=-71 and int_rssi >=-120:
pycom.rgbled(0x000FF0) # LED Abastru
elif int_rssi <= -121:
pycom.rgbled(0xFF0000) # LED Rosu
int_rssi=0 # initializez valoarea RSSI
Pentru a ne putea conecta prin wifi folosind protocolul ftp se va realiza conexiunea cu routerul wifi folosind fișierul boot.py:
boot.py -- run on boot-up
import machine
import os
uart = machine.UART(0, 115200) # Sterge linia daca nu se doreste port serial
os.dupterm(uart) # Sterge linia daca nu se doreste terminal la portul serial
if machine.reset_cause() != machine.SOFT_RESET:
from network import WLAN
# Stabilim care este reteaua wireless la care ne conectam, daca nu se conecteaza va trece in modul implicit AP
known_nets = [('SSID', 'parola')]
wl = WLAN()
original_ssid = wl.ssid()
original_auth = wl.auth()
wl.mode(WLAN.STA)
available_nets = wl.scan()
nets = frozenset([e.ssid for e in available_nets])
known_nets_names = frozenset([e[0] for e in known_nets])
net_to_use = list(nets & known_nets_names)
try:
net_to_use = net_to_use[0]
pwd = dict(known_nets)[net_to_use]
sec = [e.sec for e in available_nets if e.ssid == net_to_use][0]
wl.connect(net_to_use, (sec, pwd), timeout=10000) # Timpul de asteptare pentru conectare (ms)
except:
wl.init(mode=WLAN.AP, ssid=original_ssid, auth=original_auth, channel=6, antenna=WLAN.INT_ANT)
Pentru început s-a măsurat valorile RSSI cu emițătorul și receptorul apropiate, obținându-se valori perfecte pentru RSSI=0, ca în figura de mai jos:
Modulele pregătite pentru măsurarea în teren
Nivelul RSSI=0 pentru module apropiate, ca mai sus
Pentru operativitate util este a folosi un automobil:
Măsurători în teren
Nr. crt. | Distanța [km] | RSSI [dBm] | Tip antenă Receptor | Tip antenă Emițător | Captura ecran |
---|---|---|---|---|---|
1 | 2,2 | -115 | Yagi-Uda boom izolat | Stick | |
2 | 2,2 | -115 | Yagi-Uda boom metalic | Stick | |
3 | 2,2 | -121 | Stick | Stick | |
4 | 2,9 | -127 | Yagi-Uda boom izolat | Stick | |
5 | 2,9 | - | Stick | Stick | Fără recepție |
Încercările au fost realizate în următoarele condiții:
- Înălțimile antenelor față de sol la aproximativ 1,8 m;
- Încercările au fost realizate în interiorul unui municipiu cu blocuri și alte edificii destul de înalte;
- Încercările 1-3 sunt realizate pe o direcție cu mai multe case decât blocuri până la limita municipiului;
-
Încercările 4-5 sunt realizate pe o direcție cu mai multe blocuri și clădiri înalte.
Concluzia este că la recepție o antenă cu câștig ridicat face diferența și se pot obține distanțe lungi sau consumuri mai mici, în funcție de ce se dorește. Antele Yagi-Uda de 12 elemente sunt cele de aici. Antena cu boom izolat este mai puțin zgomotoasă ca cea cu boom-ul din aluminium dar este mai puțin rezistentă în timp, la intemperii.