In questo articolo parleremo di come utilizzare la scheda ESP8266/Wemos D1 Mini e un display a 7 segmenti da 8 caratteri per creare un orologio WiFi.
Il display che andremo a collegare alla nostra scheda Wemos D1 Mini è il seguente di cui vi lascio il link Amazon per l’eventuale acquisto.
Per collegare lo schermo al Wemos utilizzeremo il seguente schema, molto semplice.
Sullo schermo sono presenti 5 collegamenti che andranno collegati alla scheda Wemos D1 Mini in questo modo:
SCHERMO Vcc -> Wemos D1 Mini 5V
SCHERMO GND -> Wemos D1 Mini Ground
SCHERMO Din -> Wemos D1 Mini Pin D8
SCHERMO CS -> Wemos D1 Mini Pin D6
SCHERMO CLK -> Wemos D1 Mini Pin D7
Una volta collegato come mostrato poco fà il display è pronto per essere utilizzato.
Per poter ricevere l’orario corretto utilizzeremo la libreria NTPClient.h grazie alla quale saremo in grado di collegarci ad un server NTP e recuperare l’ora esatta.
Ma cosa è l’NTP?
Il Network Time Protocol, in sigla NTP, è un protocollo per sincronizzare gli orologi dei computer all’interno di una rete a commutazione di pacchetto, quindi con tempi di latenza variabili ed inaffidabili. L’NTP è un protocollo client–server appartenente al livello applicativo ed è in ascolto sulla porta UDP 123.
// MAX7219 Pin e Configurazioni #define numDevices 1 // crea un'interfaccia di controllo del display a LED const char *ssid = "SSID"; const long utcOffsetInSeconds = 7200; //Offset in secondi per l'Italia WiFiUDP ntpUDP; void setup() { while (!Serial) ; // wait for Arduino Serial Monitor WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { if ( WiFi.status() == WL_CONNECTED ) { void loop() { void digitalClockDisplayLCD() { led_disp.setDigit(0,5,h,false); } void digitalClockDisplay() { void printDigits(int digits) { Buona giornata, alla prossima!#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <LedControl.h>
#define dinPin D8
#define csPin D6
#define clkPin D7
#define dispAddr 0
LedControl led_disp = LedControl(dinPin, clkPin, csPin, numDevices);
const char *password = "PASSWORD";
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds); //Mi collego al server NTP
int s, m, h;
Serial.begin(9600);
led_disp.shutdown(dispAddr, false); // riattivare il MAX7219 dalla modalità di risparmio energetico
led_disp.setIntensity(dispAddr, 10); // imposta il livello di luminosità (0-15)
led_disp.clearDisplay(dispAddr); // cancella registro display
led_disp.setChar(0,8,'C',false);
delay (500);
led_disp.setChar(0,8,'C',true);
delay (500);
Serial.print ( "." );
}
led_disp.setChar(0,8,'C',true);
}
else{
led_disp.setChar(0,8,'C',false);
}
}
digitalClockDisplay(); //Scrivo output sulla seriale
digitalClockDisplayLCD(); //Scrivo output sul display
}
int s,m,h,hlast,mlast,slast;
slast = second() % 10;
mlast = minute() % 10;
hlast = hour() % 10;
s = (second() - slast) / 10;
m = (minute() - mlast) / 10;
h = (hour() - hlast) / 10;
led_disp.setDigit(0,4,hlast,true);
led_disp.setDigit(0,3,m,false);
led_disp.setDigit(0,2,mlast,true);
led_disp.setDigit(0,1,s,false);
led_disp.setDigit(0,0,slast,false);
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}
Come sempre il codice è commentato e quindi non credo ci saranno grossi problemi ad utilizzarlo e a capirlo ma in caso scrivetemi pure nei commenti.