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:

Module_Fipy_masurare_teren
Modulele pregătite pentru măsurarea în teren

RSSI_apropiat
Nivelul RSSI=0 pentru module apropiate, ca mai sus

Pentru operativitate util este a folosi un automobil:
Masuratori_teren_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 Yagi_Uda_izolat_RSSI-115
2 2,2 -115 Yagi-Uda boom metalic Stick Yagi_Uda_aluminium_RSSI-115
3 2,2 -121 Stick Stick Stick_RSSI-115
4 2,9 -127 Yagi-Uda boom izolat Stick Yagi_Uda_izolat_RSSI-126
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.