Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Rellotge de temps real

El microcontrolador Arduino MKR WIFI 1010 incorpora un rellotge de temps real, és a dir un sistema per mantenir la data i l'hora amb precisió. Mentre el microcontrolador mantingui l'alimentació, la data i l'hora es mantindrà al dia. La funció setEpoch ens permet posar el rellotge en hora, per exemple agafant-la d'internet, com es mostra en aquest exemple.

Per emprar el rellotge de temps real, disposem de la biblioteca RTCZero.h. A continuació hi ha la llista de les funcions més interessants.

Funció Paràmetres Comentaris
begin Inicialitza el rellotge de temps real
setEpoch instant actual
(unsigned long)
Permet posar les dades corresponents a l'instant actual
per exemple, agafades d'internet amb getTime
getDay Torna el dia del mes
getMonth Torna el mes
getYear Torna l'any (dues xifres)
getHours Torna l'hora
getMinutes Torna els minuts
getSeconds Torna els segons
setDate dia, mes, any
(tots tres byte)
(l'any només dues xifres)
Canvia l'hora completa
setDay dia (byte) Canvia el dia del mes
setMonth mes (byte) Canvia el mes
setYear any en dues xifres
(byte)
Canvia l'any
setTime hores, minuts, segons
(tots tres byte)
Canvia l'hora completa
setHours hora (byte) Canvia l'hora
setMinutes minuts (byte) Canvia els minuts
setSeconds segons (byte) Canvia els segons

A més, podem fer que s'executi una funció quan es donen unes determinades condicions, de manera similar a programar una alarma. També podem posar el microcontrolador en repòs i que es reactivi en un instant determinat. El rellotge de temps real no s'atura en mode de repòs. Les funcions principals són les següents:

Funció Paràmetres Comentaris
enableAlarm Tipus d'alarma Activa l'alarma
El tipus d'alarma és un dels que apareixen a la taula que hi ha més avall
disableAlarm Desactiva l'alarma
attachInterrupt Funció
(void)
Assigna la funció que s'ha d'executar quan s'activi l'alarma
detachInterrupt Desassigna la funció
standbyMode Activa el mode de repòs
setAlarmDate dia, mes, any
(tots tres byte)
(l'any només dues xifres)
Estableix l'hora completa
setAlarmDay dia (byte) Estableix el dia del mes
setAlarmMonth mes (byte) Estableix el mes
setAlarmYear any en dues xifres
(byte)
Estableix l'any
setAlarmTime hores, minuts, segons
(tots tres byte)
Estableix l'hora completa
setAlarmHours hora (byte) Estableix l'hora
setAlarmMinutes minuts (byte) Estableix els minuts
setAlarmSeconds segons (byte) Estableix els segons

En aquest exemple tenim una possible aplicació.

Els tipus d'alarma poden ser els següents:

Tipus Utilització
MATCH_SS Han de coincidir els segons
MATCH_MMSS Han de coincidir els minuts i els segons
MATCH_HHMMSS Ha de coincidir l'hora completa
MATCH_DHHMMSS Han de coincidir el dia i l'hora completa
MATCH_MMDDHHMMSS Han de coincidir el dia, el mes i l'hora completa
MATCH_YYMMDDHHMMSS Han de coincidir la data completa i l'hora completa

Important: La funció standbyMode no s'ha de fer servir dins de la funció d'interrupció ja que mentres aquesta s'executa les interrupcions estaran desctivades i si s'entra en mode descans no es podrà despertar per interrupció.

Atenció: Si intentem enviar el programa mentre el microcontrolador està en mode descans, pot passar que ens doni un error. En cas que el microcontrolador estigui en mode descans, convindrà prémer el polsador de reset quan es pica el botó d'enviar el programa.

A continuació tenim alguns exemples de sintaxi:

RTCZero rtc;

void funcioAlarma() {
  ...
}

  rtc.setAlarmTime(0, 0, 0);
  rtc.enableAlarm(rtc.MATCH_SS);
  rtc.attachInterrupt(funcioAlarma);

  rtc.standbyMode();

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.