Visualizzazione post con etichetta Lora. Mostra tutti i post
Visualizzazione post con etichetta Lora. Mostra tutti i post

giovedì 1 febbraio 2024

APRS Lora con IGate

 Ho provato ad usare il tracker APRS basato su Lora ed il gateway verso internet 

https://github.com/lora-aprs/LoRa_APRS_Tracker

https://github.com/lora-aprs/LoRa_APRS_iGate


il progetto e' sviluppato in Platformio 

Come Lora board ho modificato il file.ini del progetto in board = ttgo-t-beam

Le altre configurazioni si trovano nel file Json dove si trovano le impostazioni del trasmettitore/ricevitore Lora, il callsign
Il progetto si compila semplicemente ...l'unica accortezza e' quella alla fine di lanciare Upload Filesystem Image per caricare anche il file di configurazione oltre al programma

Sul IGate nel file di configurazione is-cfg.json si impostano i dati della rete WiFi ed il proprio account presso il servizio aprs2.net per poter inviare su Internet i dati ricevuti e visualizzarli su https://aprs.fi/#!lat=43.75867&lng=11.29033









venerdì 14 luglio 2023

Lora32 come scheda di rete

Un po ' di tempo fa avevo sperimentato l'uso del protocollo AX25 usando Lora  con in moduli SX1278

Questa volta provo ad usare Lora32 Lilygo con il software di RNode

Per prima cosa si deve impostare un ambiente virtuale in Python (in Debian non permette di fare pip al di fuori di in venv) per installare 

pip install rns



rnodeconf --autoinstall
(per la Lilygo Lora32 che ho usato io l'opzione della scheda e' la numero 3)

rnodeconf /dev/ttyuUSB0 -T --freq 868000000 --bw 125000 --txp 2 --sf 7 --cr 5

(qui si impostano sulle schede le impostazione di trasmissione Lora)



per configurare il dispositivo come una scheda di rete wireless si usa tncattach 

tncattach /dev/ttyUSB0 115200 -d --noipv6 --noup --mtu 572

La configurazione puoà essere come punto punto 

ifconfig tnc0 10.0.0.1 pointopoint 10.0.0.2
(ovviamente scambiando gli indirizzi sulle due schede)

oppure multi punto (ma e' decisamente piu' lenta

tncattach /dev/ttyUSB0 115200 -d -e --noipv6 --mtu 554 --ipv4 10.91.0.1/24

per le prove che ho fatto il sistema e' lento ma in ogni caso in una punto punto si riesce ad interagire in modo discreto con una sessione SSH

domenica 14 giugno 2020

Configurare AS32-TTL100-V2.0

Si impostano M0 ed M1 a 0 togliendo i jumper dalla scheda



Su un terminale si inviano i dati
Per configurare la porta si usa stty
stty 9600 cs8 -cstopb -ixoff -F /dev/ttyUSBx

(per la configurazione si usano sempre 9600 indipendentemente da come era configurata
la UART in precedenza) 

con echo si inviano i dati
echo -en '\xC1\xC1\xC1' > /dev/ttyUSB3

su un altro terminale si riceve la risposta
cat < /dev/ttyUSB3


per configurare il dispositivo si devono inviare 6 Byte in formato esadecimale

C0h 
00h High Address
00h Low Address
25h = 00-100-101  00 indica 8N1, 100 indica 19200, 101 19200 airspeed
17h = canale di trasmissione (433 MHz)
44h = 0-1-000-100 0 transparent mode, 1 IO Drive, 000 wakeup time, 1 Fec switch, 00 30 dBm
 

19200 Air 19200 USB/Seriale
echo -en '\xC0\x00\x00\x25\x17\x44' > /dev/ttyUSB3

9600 Air 9600 USB/Serial
echo -en '\xC0\x00\x00\x1C\x17\x44' > /dev/ttyUSB3

19200 Air 9600 USB/Serial
echo -en '\xC0\x00\x00\x1D\x17\x44' > /dev/ttyUSB3

venerdì 5 aprile 2019

LoraWan TheThingsNetwork con Arduino MKR1300

Dopo aver settato il gateway Dragino LG-01 vediamo come poter trasmettere i dati al cloud di TheThingsNetwork

Le impostazioni del gateway per LoraWAN sono le seguenti

Come si vede e' stato impostato uno spreading factor di 7, bandwith 125 KHz e CR 4 per una velocita' di circa 3400 bps. Tali valori devono essere compatibili con quelli dello sketch

Per prima cosa si imposta crea (dopo aver il gateway funzionante ed onlinea) una Application sulla console di TTN


dopo aver creato una App si devono creare i Devices
Ogni device e' identificato dal proprio EUI. Questo codice esadecimale puo' essere letto per esempio lanciando lo sketch FirstConfiguration degli esempi della libreria MKRWAN



Si passa poi alla programmazione Arduino.
Il dispositivo MKR1300 viene attivato come ABP (activation by personalization) e non OTAA. Mi e' stato spiegato sul forum di Arduino che Dragino LG-01 e' un gateway monocanale e gestisce solo ABP

E' stato modificato lo script di esempio LoraSendandReceive (eliminado la parte di ricezione che non mi serve). In giallo le modifiche sostanziali
----------------------------------------
#include <MKRWAN.h>

LoRaModem modem;

String devAddr;
String nwkSKey;
String appSKey;

void setup() {
  Serial.begin(115200);
  if (!modem.begin(EU868)) {
    Serial.println("Failed to start module");
    while (1) {}
  };
//chiavi
devAddr = "26011xxxx";
nwkSKey = "C05AB32C3F7B4Dxxxxxxxxxxxxxxxxxx";
appSKey = "1C8567078CB4613B168xxxxxxxxxxxxxx";

    int connected = modem.joinABP(devAddr, nwkSKey, appSKey);
    if (!connected) {
    Serial.println("Errore di connessione");
    while (1) {}
  }
    {
    Serial.println("connesso");
    }
}

void loop() {
  modem.setPort(3);
  modem.setADR(true);
  modem.dataRate(5);
  delay(5000);
  modem.minPollInterval(60);
  
  String msg = "Luca";


  int err;
  modem.beginPacket();
  modem.print(msg);
  err = modem.endPacket(false);
  if (err > 0) {
    Serial.println("Message sent correctly!");
  } else {
    Serial.println("Error sending message :(");
  }

  delay(20000);
}
----------------------------------------

Ed ecco apparire i dati sul cloud





In questo modo i dati sono pero' abbastanza inutili ..
Per processarli sullla propria macchina conviene abilitare una Integration dalla console di TTN ed nel mio caso in particolare il Data Storage


con questa modalita' i dati vengono conservati per 7 giorni

sul servizio Swagger



da cui  i dati possono essere scaricati mediante una chiamata CURL (dopo aver autorizzato il servizio mediante apposita chiave)

curl -X GET --header 'Accept: application/json' --header 'Authorization: key ttn-account-v2.p-Sxxxxxxx' 'https://hello_world_mkr1300.data.thethingsnetwork.org/api/v2/query'

e questo e' un esempio di dato ricevuto 

{"device_id":"mkr1300_1","raw":"THVjYTI=","time":"2019-04-05T08:54:01.208249737Z"}

altrimenti si possono scaricare i dati mediante Python con 

-----------------------------------------------------
import time
import ttn

app_id = "hello_world_mkr1300"
access_key = "ttn-account-v2.g_-r8AT6eTxxxxxxxxxxxxxxxxxxxxxxxxxx"

def uplink_callback(msg, client):
  print("Received uplink from ", msg.dev_id)
  print(msg)
  print("\n")

handler = ttn.HandlerClient(app_id, access_key)

# using mqtt client
mqtt_client = handler.data()
mqtt_client.set_uplink_callback(uplink_callback)
mqtt_client.connect()
time.sleep(600)
mqtt_client.close()
---------------------------------------------------

i dati ricevuti sono molto piu' dettagliati rispetto a quelli di Swagger

('Received uplink from ', u'mkr1300_1')
MSG(dev_id=u'mkr1300_1', counter=177, app_id=u'hello_world_mkr1300', payload_raw=u'THVjYTI=', hardware_serial=u'A8610A3233258909', port=3, metadata=MSG(location_source=u'registry', data_rate=u'SF7BW125', modulation=u'LORA', altitude=50, longitude=11.290198, airtime=51456000, coding_rate=u'4/5', frequency=868100000, gateways=[MSG(gtw_id=u'eui-a840411bf188ffff', timestamp=2951977680, longitude=11, rf_chain=0, snr=7.8, time=u'2019-04-05T08:58:15.615108Z', latitude=43.111, rssi=-62, channel=7)], time=u'2019-04-05T08:58:15.719069012Z', latitude=43.758617))


 

venerdì 29 marzo 2019

Dragino LG01 Lora Gateway su TheThingsNetwork

Un gateway Lora e' un dispositivo che legge il traffico Lora e lo rilancia su Internet e nel caso sul cloud di TheThingsNetwork (abbreviato TTN)
Ci sono molti Gateway Lora compreso quello originale Arduino ma a causa dei costi (Lora Gateway Arduino costa circa 350 euro) ho preso Dragino LG01, a canale singolo 868 MHz (standard Italia) che e' molto simile ad una Arduino Yun (si  programma via Arduino IDE con la libreria Bridge)


Le istruzioni ufficiale si trovano al link seguente
https://wiki.dragino.com/index.php?title=Connect_to_TTN#Create_TTN_account

(il manuale completo si trova qui)

Ma prima di iniziare si deve creare un account se TheThingsNetwork, andare nella console a creare un Gateway


Per il codice identificativo si puo'utilizzare il Mac Address (riempiendo i byte rimanenti per arrivare a 16 con FF) ed impostando Legacy Packet Forwarder

Successivamente ci si collega alla WiFi aperta del Dragino al 10.130.1.1 (od alla porta LAN) con le credenziali root/dragino. Il sistema di base e' OpenWRT per cui e' semplice configurare l'access point in WPA e controllare che il gateway sia connesso ad Internet


Si va poi sul Dragino e si scarica da qui  il file single_pkt_fwd_v004.hex. Attenzione : il file sul server si chiama single_pkt_fwd_v004.ino.hex... ho dovuto rinominare il file
Poi si va Sensor/Flash MCU, si seleziona il file sopra indicato e si aggiorna. Da questa pagina si puo' controllare che il caricamento sia avvenuto in modo corretto



Si imposta la radio sullo standard europeo


Si configura il Lora Gateway per dialogare con TheThingsNetwork indicando l'indirizzo router.eu.thethings.network, ed il Gateway ID che e' riportato nella consolle di TTN (ma senza i primi 4 caratteri ovvero senza eui-)




e si seleziona LorWan come IoT server


Se tutto e' andato bene sulla consolle di TTN il gateway sara' visto come online 

venerdì 15 febbraio 2019

Lora SX1278 con AS15-USB-T2 e AS32-TTL-100

Volevo provare Lora con Arduino e mi sono comprato i due moduli AS15-USB-T2 e AS32-TTL-100 (il primo per la connessione al computer via USB ed il secondo il vero e proprio modulo radio con SX 1278)





Quando mi e' arrivata la coppia di radio l'ho inserita in due computer ed ho aperto Minicom per vedere se riuscivo a creare un collegamento visto che i moduli possono essere usati anche seriali virtuali

La cosa ha funzionato (dopo aver impostato la connessione 9600 8N1  mettendo ad OFF Hardware Flow Control) ma al momento di trasferire un file la connessione e' crollata

Ho provato a montare un SX1278 ad una Arduino via Seriale ma dopo aver trasmesso un po' di byte ancora una volta la trasmissione si e' arrestata. Ed a questo punto RTFM....leggendo infatti nel dettaglio le istruzioni che si trovano a questo link si vede che la trasmissione e' a pacchetti (piu' nel dettaglio a pacchetti da 58 byte). Non si puo' inviare semplicemente un flusso di dati ma basta mettere un ritardo di tempo tra due pacchetti

Per esempio questo script funziona
70 millisecondi e' l'intervallo minimo per cui si deve separare due pacchetti, per tempi piu' brevi viene spedito un solo pacchetto

Per le connessioni su Arduino ho usato un level converter per portare tutto a 3.3 V nonostante i pin siano dati per compatbili per 3.3V e 5V ma se si guarda la configurazione di AS15-USB-T2 si vede che e' configurato a 3.3 V
Per settare il Mode 0 (ovvero trasmissione) ho connesso sia MD0 che MD1 a GND. Il pin D1TX di Arduino e' stato connesso (via level converter) a RXD di SX1278



=================================================
void setup() {
  Serial.begin(9600);
}
void loop() {
  for (int t=0; t<40; t++)
      {
      int sensorValue = analogRead(A0);
      float voltage = sensorValue * (5.0 / 1023.0);
      Serial.println(voltage);
      }
   delay(70);
}
=================================================
mentre questo non funziona 
=================================================
void setup() {
  Serial.begin(9600);
}
void loop() {
      int sensorValue = analogRead(A0);
      float voltage = sensorValue * (5.0 / 1023.0);
      Serial.println(voltage);
}
=================================================


A seconda della posizione di M0 ed M1 si possono ottenere le impostazioni di configurazione oppure modalita' di powersave


A questo link c'e' una libreria per il modulo  E32-TTL-100 molto simile a quello che uso.  

https://github.com/Bob0505/E32-TTL-100/blob/master/E32-TTL-100.ino

Ho provato ad usarlo con AS32-TTL-1000 con le connessioni suggerite anche se al posto dei suggeriti resistori da 4.7 KOhm  ho connesso con un level converter

    | D7         | <------------------> | M0   |
    | D8         | <------------------> | M1   |
    | A0         | <------------------> | AUX  |
    | D10(Rx)| <------------------> | Tx   |
    | D11(Tx)| <------------------> | Rx   |

Con questa connessione e' possibile programmare la modalita' di LoRa comandandando D7 e D8
Per usare il file .ino si deve inserire nella medesima directory anche il file E32-TLL-100.h

Per settare la modalita' trasmissione ricezione/trasmissione si deve modificare il parametro alla riga 133 (DEVICE_B per trasmettere, DEVICE_A per ricevere)

RTL-SDR e Lora SX1278

Ho provato a vedere il comportamento della radio Lora del modulo SX1278 mediante il programma gqrx


La larghezza di banda della Lora nella configurazione di base risulta essere di 500 KHz. Non si tratta di un picco ma sul grafico la trasmissione si configura come un rettangolo

lunedì 27 agosto 2018

BSFrance LoRa43u4

Una scheda di sviluppo con un 32u4 (tipo Arduino) ed una radio LoRa RA-02 SX 1276 a 433 MHz

Non si vede completamente ma si intuisce che dal vertice in basso a sinistra esce l'antenna


Questo e' il pinout... la cosa interessante e' nell'angolo in basso a destra ovvero come sono connessi i pin della radio con il 32u4. Questo per poi programmare la scheda con Arduino IDE


Per aggiungere la scheda all'Arduino IDE si deve fare a mano scaricando questo file
https://quadmeup.com/wp-content/uploads/2017/10/bsfrance.zip

Questa e' invece la libreria per gestire la radio
https://github.com/sandeepmistry/arduino-LoRa

Un aspetto interessante e' che il dispositivo puo' essere alimentato con una Lipo ed ha un circuito di ricarica dal lato USB (alimentando la USB quindi si puo' ricaricare la LiPo)...inoltre il pin subito al di sotto del connettore JST denominato BAT puo' essere usato da sketch per minitorare la carica della batteria (e' necessario comunque un divisore di tensione perche' una LiPo puo' arrivare al oltre 4 V mentre i pin digitali possono reggere fino a 3.3V)

Lo sketch contenuto negli esempi della librerie deve essere modificato come segue (sia per quanto riguarda i pin che la frequenza di trasmissione)

La radio puo' essere configurata attraverso i seguenti comandi

LoRa.sleep(); spenge la radio

LoRa.setTxPower(txPower);
  cambia la potenza di trasmissione (da 0 a 20 default 17)

LoRa.setSpreadingFactor(spreadingFactor);  (da 6 a 12 default 7)

LoRa.setSignalBandwidth(signalBandwidth);

LoRa.enableCrc(); abilita il CRC sui dati


-------------------------------------------------------------
#include <SPI.h>
#include <LoRa.h>

const int csPin = 1;         
const int resetPin = 4;       
const int irqPin = 7;

void setup() {
  Serial.begin(9600);
  while (!Serial);

  Serial.println("LoRa Receiver");
  LoRa.setPins(csPin, resetPin, irqPin);// set CS, reset, IRQ pin


  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // received a packet
    Serial.print("Received packet '");

    // read packet
    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }

    // print RSSI of packet
    Serial.print("' with RSSI ");
    Serial.println(LoRa.packetRssi());
  }
}

Geologi

  E so anche espatriare senza praticamente toccare strada asfaltata