SLEEPING e modalità di RISVEGLIO
Per la modalità di utilizzo dell'accoppiamento BLUETOOTH con Smartphone vedere il seguente Link:
Controllo territorio GFA di Capracotta - ESP32 con DHT11- HC-SR04 P-LIDAR - OLED
BLUETOOTH SLEEPING e RISVEGLIO 6.5.2024
La maggior parte delle aree rurali e boschive, in molti casi, sono sprovviste di internet "libero".
Per limitare al minimo il consumo di energia elettrica posso sfruttare alcune peculiarità dell'ESP32, es:
Test di simulazione con GPS di due moduli distinti:
N.B.
Caratteristiche elettroniche di ogni singolo Pin dell'ESP32:
I Sensori alimentati dal modulo LoRa devono essere del tipo a 3.3 Vcc.
Specifiche PINOUT del modulo HELTEC:
CARATTERISTICHE:
Considerazioni personali sull'utilizzo del modulo WIFI LoRa 32(V2) che utilizzo per la trasmissione dati.
ESP32 ha 3 interfacce hardware seriali.
Per collegare es.: un GPS ad una seriale hardware del modulo WIFI LoRa 32(V2) devo definire una seriale personale,ecco perchè.
L'interfaccia seriale standard 0,collegata ai Pin GPIO3 (RX) e GPIO1 (TX), viene utilizzata per la comunicazione con l'IDE Arduino ed è permanentemente cablata al CP2102.
L'interfaccia seriale 1 dell'ESP 32 normale è collegata ai pin GPIO9 (RX) e GPIO10 (TX).
I pin GPIO9 (RX) e GPIO10 (TX) non sono presenti sul modulo WIFI LoRa 32(V2).
Sul modulo WIFI LoRa 32(V2) i Pin 9 e 10 vengono utilizzati per controllare la memoria flash e pertanto non sono accessibili.
L'interfaccia seriale 2 è normalmente collegata ai pin GPIO16 (RX) e GPIO17 (TX).
Il pin GPIO16 è collegato al ripristino del display OLED , se utilizzato in un programma il display rimane scuro
Si constata dalla figura del Pinout Diagram del modulo WIFI LoRa 32(V2) che:
i pin 4 - 15 - 16 sono utilizzati per l'OLED
Non bisogna utilizzare il controller SSD1306.
N.B. La libreria #include "heltec.h" gestisce il buon funzionamento e collegamenti :
dei PIN della scheda LoRa
dei Pin dell'OLED.
Cambiano i comandi per gestire l'OLED rispetto ai comandi del controller SSD1306.
es.
....................
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
.......
Heltec.display->drawString(96,48, String(temprature));
Heltec.display->drawString(0,54, "Umidità’ %: ");
Heltec.display->drawString(96,54, String(h));
Heltec.display->display();
.............
i pin da 32 a 39 sono attivi solo come INPUT (possono essere utilizzati anche come RX)
i pin 22 - 23 - 2 - 17 - 25 - 12 - 13 sono disponibili come INPUT/OUTPUT
Bene, la soluzione al mio problema è molto semplice (momentaneamente prendo a prestito i pin 2 e 17).
In seguito utilizzerò un pin arbitrario come RX dal blocco 32-39 per avere a disposizione 7 pin come OUTPUT.
..................
#define SERIAL1_RX 2 // TX del GPS -> al PIN
2 dell'ESP32
#define SERIAL1_TX 17 // RX del GPS_-> al PIN 17 del'ESP32
.........
void setup () {
..........
Serial1.begin(9600, SERIAL_8N1, SERIAL1_RX, SERIAL1_TX);
Heltec.begin(1,1,1,1, BAND);
LoRa.setTxPower(20,RF_PACONFIG_PASELECT_PABOOST);
..............................
Definisco l'interfaccia la Serial1 con 9600 baud e 8 bit senza parità(N) più 1 bit di stop sui pin GPIO 2 (RX) e GPIO 17 (TX).
Il chip ESP32 è in grado di collegare le interfacce hardware seriali (UARTS) a quasi tutti i pin IO.
La trasmissione dal GPS è costituita da:
Una stringa è costituita da alcuni blocchi alfabetici separati dal simbolo virgola.
SIGNIFICATO:
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
Attenzione all'ORA DI RICEZIONE:
E' riferita all'ora di GREENWICH - Aggiungere 1 per ora legale
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
TABELLA DI RIFERIMENTO DEI CAMPI:
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 // RX del GPS_-> al PIN 17 del'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 T A ");
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:
ESP32 WROOM -WIFI e Bluetooth - 38 Pin
Collegamento dell'ESP32(38 Pin) al GPS e Oled LCD:
Quando si vuole realizzare un progetto è indispensabile definire quali GPIO devono essere utilizzati.
Metodo personale di programmazione:
Non utilizzo GPIO relativi per future applicazioni es. LCD, SD,GPS,ecc.
Es.: Lista di Occupazione personale(Reminescenza di programmazione P.L.C. Lab. Automazione I.T.I.S.)
Programma adattato con l'uso dell'Oled.