Reloj en Tiempo Real en Orange Pi
Publicado en Mayo de 2017Instalar 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.
No olvides añadir tu distribución y tu placa.
Todos los comentarios serán validados antes de su publicación.
George
Genial, FUNCIONA PERFECTO!! Gracias, gran trabajo
Juan Miguel
Hola. Excelente tutorial. Pero tengo un problema: Mi placa es una Orange Pi Plus 2e, y al parecer el bus GPIO está colocado en el lado contrario que en la placa que usas para el tutorial. Por eso, si quiero conectar el módulo de RTC como lo haces tú, quedaría mirando hacia la parte de fuera, pero no eso no puede ser porque la placa está dentro de una carcasa.
¿Hay alguna solución para este problema? Es decir, alguna manera de conectar el módulo, que quede mirando hacia adentro.
Muchas graciasl
Administrador OrangePiWeb.es
Hola Juan Miguel. Puedes usar cables Dupont para cablear las conexiones y ponerlo fuera de la caja.
Pincha aquí para ver un ejemplo
Necesitarías el Macho a Hembra, pero no está de más tener más opciones. Saludos
Copyright © 2024 desde 2016. Todos los derechos reservados | Diseño JaviPSantos