Zone di controllo con la tecnologia HELTEC LoRa V2 :trasmissione e ricezione a disposizione
La maggior parte delle aree rurali e boschive, in molti casi, sono sprovviste di internet "libero".
La trasmissione dati, in parte, può essere risolta con l'uso della tecnologia LoRa.
Utilizzo dei moduli per la Trasmissione/ Ricezione LoRa a mia disposizione
L'uso di due antenne permettono di raggiungere un range di circa 10 km.(senza ostacoli):
una GROUND PLANE omnidirezionale per il trasmettitore
una YAGI direttiva per il ricevitore
permettono di raggiungere un range di circa 10 km.(senza ostacoli)
Antenna omnidirezionale ground plane 433MHz Antenna direzionale YAGI 433MHz
Modulo HELTEC SX1276 V2 Lora ESP32 LX6 Dual-Core 0.96 Pollici Blue OLED CP2012 868MHZ-915MHz oppure 433 MHz
Il modulo GPS a 50 canali UBLOX NEO-6M: il campo di alimentazione è compreso tra 3 volt e 5volt
Il chip ESP32 è in grado di collegare le interfacce hardware seriali (UARTS) a quasi tutti i pin IO.
La trasmissione dal GPS è costituita da:
• blocchi di stringhe contraddistinte dal simbolo $
• ogni intestazione es.. GPMRC - GPGGA- ecc.. ha la sua peculiarità
• una stringa $GPMRC è simile alla stringa $GPMRA
• la stringa $GPMRA non comprende la data
$GPRMC,090112.00,A,4537.78411,N,00901.30136,E,0.022,,160516,,,A*7F
$GPVTG,, T,,H,0.022,11,0.041,K,A*26
$GPGGA,090112.00,4537.78411,N,00901.30136,E,1,06,1.39,230.4,M,47.2,H,,*54
$GPGSA,A,3,28,15,18,30,17,13,,,,,,,2.55,1.89,1.71*07
$GPGSV,3,1,09,05,17,196,26,10,00,335,,12,01,213,,13,76,127,32*7E
$GPGSV,3,2,09,15,63,294,35,17,24,113,29,18,20,311,37,28,49,055,47*79
$GPGSV,3,3,09,30,16,075,33*46
$GPGLL,4537.78411,N,00901.30136,E,090112.00,A,A*63
$GPRMC,090113.00,A,4537.78425,N,00901.30138,E,0.054,,160516,,,A*76
$GPVTG,,T,,H,0.054,W,0.100,K,A*23
$GPGGA,090113.00,4537.78425,N,00901.30138,E,1,06,1.90,230.6,M,47.2,H,,*56
$GPGSA,A,3,28,15,18,30,17,13,,,,,,,2.55,1.90,1.71*0F
$GPGSV,3,1,09,05,17,196,26,10,00,335,,12,01,213,,13,76,127,32*7E
$GPGSV,3,2,09,15,63,294,36,17,25,113,29,18,20,311,37,28,49,055,47*7E
$GPGSV,3,3,09,30,16,075,33*46
$GPGLL,4537.78425,N,00901.30138,E,090113.00,A,A*6B
$GPRMC,090429.00,A,4537.77772,N,00901.30238,E,0.051,,160516,,,A*75
$GPVTG,,T,,M,0.051,N,0.094,K,A*2A
$GPGGA,090114.00,4537.78434,N,00901.30139,E,1,06,1.90,230.8,M,47.2,H,,*5E
Una stringa è costituita da alcuni blocchi alfabetici separati dal simbolo virgola.
DESIDERO ESTRAPOLARE SOLO LA STRINGA DEL $GPRMC :
$GPRMC,090429.00,A,4537.77772,N,00901.30238,E,0.051,,160516,,,A*75
Attenzione all'ORA DI RICEZIONE:
E' riferita all'ora di GREENWICH - Aggiungere 1 ora + 1 ora (ora legale)
Interpretazione dei valori da assegnare alla latitudine e longitudine desunti dalla stringa:
La LATITUDINE (Altezza) varia da 0° a 90° pertanto occorre selezionare i primi due caratteri per i gradi
La LONGITUDINE(Orizzontale) varia da 0 a 180° pertanto occorre selezionare i primi tre caratteri per i gradi
TEST di visualizzazione dati GPS sulla Serial Monitor e OLED
SCHEDA:ESP32 LoRa V2 433 Mhz WIFI OLED a 0,96"
TX del GPS = = > PIN 2 del'ESP32
RX del GPS = = > PIN 17 del'ESP32
TEST DI LETTURA:
//FILE:HELTEC_V2_GPS_13_FEBBRAIO_2023_FUNZIONANTE_CON_heltec_oled
//SCHEDA da impostare Heltec WiFi Lora 32
// anche se è la scheda ver.2
// IDE arduino 1.8.12
#include "heltec.h"
#define BAND 433E6
#define SERIAL1_RX 2 // TX del GPS -> al PIN 2 dell'ESP32
#define SERIAL1_TX 17// RXdel GPS_-> al PIN 17del'ESP32
String read_sentence;
void setup() {
Serial.begin(115200);
Serial.println("TTGO GPS TEST");
delay(2000);
Serial1.begin(9600, SERIAL 8N1, SERIAL1 RX, SERIAL1_TX);
Heltec.begin(1,1,1,1, BAND);
LoRa.setTxPower(20,RF_PACONFIG_PASELECT_PABOOST);
}
void loop() {
Get_Gps_data();
//****INizio VOID GET_GPS_DATA // Dati da visualizzare vedere la numerazione dei campi della tabella soprastante
void Get_Gps_data(){
read_sentence = Serial1.readStringUntil(13); //13 = return (ASCII)
read_sentence.trim();
if (read_sentence.startsWith("$GPRMC")) {
String gps_ora = sentence_sep(read_sentence, 1); //Orario
String gps_lat = sentence_sep(read_sentence, 3); //Latitudine
String gps_lat_o = sentence_sep(read_sentence, 4); //Orientamento (N or S)
String gps_lon = sentence_sep(read_sentence, 5); //Longitudine
String gps_lon_o = sentence_sep(read_sentence, 6); //Orientamento (E or W)
String gps_dat = sentence_sep(read_sentence, 9); //DATA
Heltec. display->clear();
Heltec. display- >setTextAlignment(TEXT_ALIGN_LEFT);
Heltec. display- >setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, "Giardino Flora Appenninica");
//Heltec.display->drawString(0, 12, " C A P R A C O T TA ");
Heltec.display->drawString(0, 12, "ORA ");
Heltec. display->drawString(24, 12,gps_ora );
Heltec. display- >drawString(0,24, "LAT");
Heltec.display->drawString(24,24, gps_lat);
Heltec.display->drawString(0, 32, "LON ");
Heltec. display- >drawString(24,32, gps_lon);
Heltec.display->drawString(0,40, "DATA: ");
Heltec.display->drawString(32,40, gps_dat);
Heltec. display- > display();
Serial.print("ORA: ");
Serial.print(gps_ora);
Serial.print(" ");
Serial.print("LAT: ");
Serial.print(gps_lat);
Serial.print("LON: ");
Serial.print(gps_lon);
Serial.print("DATA ");
Serial.println(gps_dat);
delay(2000);
}
}
String sentence_sep(String input, int index) {
int finder = 0;
int strIndex[] = { 0, -1 };
int maxindex = input.length() -1;
for (int i = 0; i < = maxindex && finder < = index; i++) {
if (input.charAt(i) == ',' || i == maxindex) {//',' = separator finder+ +;
strindex[0] = strindex[1] + 1;
strindex[1] = (i == maxindex) ? i + 1 : i;
}
}
return finder > index ? input.substring(strindex[0], strindex[1]) : ""; }
Questo è il risultato: