Compartir en facebook Compartir en google+ Compartir en twitter Compartir en pinterest Compartir en linkedin

Reloj en Tiempo Real en Orange Pi

Publicado en Mayo de 2017

Instalar un reloj de tiempo real (RTC) en nuestros proyectos nos permite mantener la fecha y la hora del reloj interno de la placa, sincronizado con la fecha y hora real aunque el sistema se desconecte y se pierda la conexión a internet. Con este dispositivo evitaremos por tanto, perder la sincronía del reloj interno de nuestra Orange Pi en el caso de no tener alimentación, ya que las Orange Pi no disponen de una batería que haga este trabajo. Hay varios circuitos que pueden funcionar en Orange Pi, como DS1307 y el DS3231. En este caso usaremos el DS3231 por su bajísimo precio y la mayor precisión respecto al más antiguo DS1307.

Que necesitas:

Partimos de una Orange Pi con Armbian actualizado, en principio sin conexión a Internet para evitar que el reloj se sincronice al conectarse a la red.

Antes de encender la Orange Pi, conecta el RTC a los pines del GPIO. Pin + a 3.3v. Pin - a GND (masa).

Vcc --> pin 01 (3.3V)
SDA --> pin 03 (I2C SDA)
SCK --> pin 05 (I2C SCK)
GND --> pin 09 (GND)

Sólo debería tener una posición, pero ten cuidado y revisa todo antes de conectarlo. En una Orange Pi 2 quedaría así.

Vamos a obtener una lista de los dispositivos conectados a i2c. I2cdetect es un programa que sirve para escanear un bus I2C en busca de dispositivos. Devuelve una tabla con la lista de dispositivos detectados en el bus especificado. El parámetro I2cbus (más adelante lo veremos como "0" sudo i2cdetect -y 0) indica el número o el nombre del bus I2C a escanear y debe corresponder a uno de los buses enumerados por i2cdetect -l . Ejecuta primero lo siguiente:

root@orangepione:/boot# sudo i2cdetect -l

y obtendrás una salida como esta:

i2c-0   i2c             twi0                                    I2C adapter
i2c-1   i2c             twi1                                    I2C adapter

La librería i2c debería estar instalada, pero si no está, puedes instalarla con:

sudo apt-get install i2c-tools

Ahora vamos a comprobar si el RTC existe . Debería estar en i2c-0. Ejecuta:

root@orangepi2mini:~#  sudo i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Esto significa que tenemos el módulo correctamente conectado y en la dirección 0x68. Si ahora ejecutamos:

echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-0/new_device

y volvemos a ejecutar el comando anterior, obtendremos:

orangepi@orangepi2mini:~$ sudo i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Que quiere decir que el sistema ahora está usando nuestro RTC. Además, ahora debe existir un nuevo dispositivo /dev/rtc1

orangepi@orangepi2mini:~$ dmesg | grep rtc
[    0.717929] sunxi-rtc sunxi-rtc: rtc core: registered sunxi-rtc as rtc0
[   14.928238] rtc-ds1307 0-0068: rtc core: registered ds3231 as rtc1

Si la hora no es correcta, corrígela con el comando date:

orangepi@orangepi2mini:~$ date
Tue Mar 1 20:50:24 CET 2016
orangepi@orangepi2mini:~$ sudo date -s "15 may 2017 20:11"

Comprueba la fecha en el módulo RTC:

orangepi@orangepi2mini:~$ sudo hwclock -r
Thu 01 Jan 1970 01:32:46 AM CET -1.181072 seconds

Y escribimos la hora del sistema en el RTC:

sudo hwclock -w -f /dev/rtc1

Ahora comprueba que la hora se ha establecido en el módulo RTC:

sudo hwclock -r -f /dev/rtc1

Si todo ha ido bien, tendremos la fecha y la hora correcta en nuestro reloj interno. El RTC se encargará de mantenerla en caso de no haber corriente, pero debemos establecerla en el arranque del sistema. Para añadir la memoria RTC DS3231 al sistema y sincronizar los relojes, edita el archivo /etc/rc.local :

sudo nano /etc/rc.local

y agrega las siguientes líneas justo antes de exit 0 :

echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
hwclock -s -f /dev/rtc1

exit 0

Apaga el sistema, desconéctalo de la corriente y espera unos minutos. Arranca y comprueba que la fecha se ha mantenido y la hora se corresponde con la actual.

Espero que te haya sido de utilidad, no dudes en escribir un comentario si ves algún error o si puedo ayudarte.


Utiliza este espacio si quieres añadir algún comentario adicional o si tienes alguna duda.

Todos los comentarios serán validados antes de su publicación.
  1. George

    Genial, FUNCIONA PERFECTO!! Gracias, gran trabajo



Nombre*

Email* Nunca será publicado ni compartido

Comentario*



Copyright © 2016. Todos los derechos reservados | Diseño JaviPSantos

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012. Si continúa navegando consideramos que acepta el uso de cookies.

OK | Más información