FireBeetle NTP Clock Touch

FireBeetle NTP Clock Touch riprende un precedente progetto realizzato con l’ESP32 per aggiungere la funzionalità Touch.

FireBeetle NTP Clock Touch

Qualche settimana fa leggendo le caratteristiche della ESP32 ho scoperto che dispone di 10 pin di tipo Touch a cui non è necessario connettere alcuna resistenza o altro componente per renderli utilizzabili.

Ed ecco come è nata l’idea di questo progetto che utilizza:

per realizzare un firebeetle ntp clock touch in cui toccando il pin 4 ( GPIO4 ) attivi la visualizzazione dell’orario.

Costruisci il tuo FireBeetle NTP Clock Touch

la realizzazione del firebeetle ntp clock touch è davvero semplice se consideri che sia la ESP32 sia la matrice 24×8 sono della stessa famiglia FireBeetle e, pertanto, compatibili pin-to-pin.

FireBeetle Led 24x8 NTP client Clock

ti basta montarle l’una sull’altra come nella foto realizzata per l’articolo originale, da cui puoi prendere parte dello sketch che utilizzerai per questo esempio.

Pinout ESP32 e pin Tpouch

Anche se non si tratta della FireBeetle ESP32 trovi sul web il pinout di schede basate sull’ESP32:

FireBeetle-NTP-Clock-Touch-pinout-wemos

in cui in arancione sono riportati i pin TouchX in cui X va da 0 a 9 ( 10 pin Touch nativi ).

Per questo progetto userai il pin T0, touch0, connesso al pin 4 o GPIO4.

Lo sketch

Passa alla realizzazione dello sketch:

/*
 *  This sketch sends random data over UDP on a ESP32 device
 *
 */
#include <NTPClient.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include "DFRobot_HT1632C.h"

#if defined( ESP_PLATFORM ) || defined( ARDUINO_ARCH_FIREBEETLE8266 )  //FireBeetle-ESP32 FireBeetle-ESP8266
#define DATA D6
#define CS D2
#define WR D7
//#define RD D8
#else
#define DATA 6
#define CS 2
#define WR 7
//#define RD 8
#endif

// WiFi network name and password:
const char * ssid = "[[ YOUR SSID ]]";
const char * pwd  = "[[ YOUR PASSWORD ]]";

//The udp library class
WiFiUDP udp;

// FireBeetle Led Matrix
DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS);

char str[]  = "00:00";
int threshold = 100; // valore di soglia sotto cui attiva la funzione
boolean isShow = false;

// By default 'time.nist.gov' is used with 60 seconds update interval and
// no offset
NTPClient timeClient(udp,0);

void setup(){
  Serial.begin(115200);
  WiFi.begin(ssid, pwd);

  ht1632c.begin();
  ht1632c.isLedOn(true);
  ht1632c.clearScreen();
  ht1632c.setCursor(0,0);
  ht1632c.setPwm(0);
  ht1632c.print("wifi...");

  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }
  
  timeClient.begin();
  timeClient.setTimeOffset(3600);
  ht1632c.clearScreen();
  ht1632c.setCursor(1,0);
  ht1632c.print("...ok...");

  touchAttachInterrupt(T0, pinTouched, threshold);
}

void loop(){
  timeClient.update();
  
  ht1632c.clearScreen();
  ht1632c.setCursor(1,0);
 
  if ( (timeClient.getSeconds()%2) == 0 ) {
    sprintf(str,"%02d:%02d", timeClient.getHours(), timeClient.getMinutes());
  } else {
    sprintf(str,"%02d %02d", timeClient.getHours(), timeClient.getMinutes());
  }
  Serial.print("Topuch:"); Serial.print(touchRead(T0));
  Serial.print(" :: "); Serial.println(str);

  if ( isShow ) { ht1632c.print(str); delay(1000); isShow = false; }
  delay(100);
}
 
void pinTouched(){
  Serial.println("Pin Touch rilevato -------------------\n");
  isShow = true; 
}

lo sketch del firebeetle ntp clock touch è molto simile a quello pubblicato per il solo ntp clock a cui aggiungi le funzionalità touch.

Ti mostrerò solo le differenze in modo da evitare ripetizioni superflue.

la prima linea differente è la linea 33: in cui compare le variabile threshold di tipo integer ( intero ) che imposta la soglia sotto la quale il segnale di touch deve essere preso in considerazione;

la linea 34: definisce una variabile di tipo boolean ( true/false ) con cui conosci sempre se il display sta mostrando l’orario;

le linee successive sono le medesime che hai letto nell’articolo principale e che servono ad eseguire la connessione e darti un feedback sul display;

la linea 62: definisce l’utilizzo del pin T0, da parte della esp32,  come il pin su cui verificare il valore di soglia threshold definito alla linea 33 ed in caso di superamento ( verso il basso ) di tale soglia richiama la funzione pinTouched che trovi nelle linee successive;

nella funzione di loop() c’è solo una linea che cambia la linea 79 che dal solo uso del metodo ht1632c.print(str); usato nel precedente sketch passa ad essere un if in cui verifichi il valore della variabile isShow e di conseguenza mostra o meno sul display l’orario, attende 1 secondo e reimposta la medesima variabile a false, per i cicli successivi.

In questo modo ottieni l’effetto mostrato nel video:

ossia al tocco del pin T0 ( GPIO4 ) il display visualizza l’orario corrente recuperato dal server NTP di riferimento.

La funzione di callback pinTouched() è definita alla linea 83:

void pinTouched(){
  Serial.println("Pin Touch rilevato -------------------\n");
  isShow = true; 
}

in cui le operazioni eseguite sono relativamente poche:

la linea 84: scrive sul monitor seriale la frase “Pin Touch rilavato ————————\n”;

linea 85: imposta il valore della variabile isShow a true in modo che il ciclo di loop alla linea 79 sappia di dover visualizzare l’orario;

Come hai visto l’ultilizzo dei pin designati come touch è davvero semplice grazie alle funzioni di callback ed il comando di attach degli stessi.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/firebeetle-ntp-clock-touch.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.