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:

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 :

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.