Hace unas semanas recibí mi Onion Omega2+.
Hoy ha llegado mi @OnionIoT Omega2+ y su Power Dock. Estoy haciéndole la puesta en marcha. pic.twitter.com/OT3aKw0UlI
— Jorge García (@jorgegarciadev) January 4, 2017
Es un pequeño ordenador basado en el Ralink MT7688, viene con una distribución Linux basada en OpenWRT que se llama LEDE, y aunque el firmware está todavía en fase beta funciona bastante bien, hasta el punto de que ya he comenzado a desarrollar un nuevo proyecto con él.
Unas de las partes del proyecto requiere un RTC (Real Time Clock) y tengo un puñado de DS3231 por casa, así que he cogido el módulo de Python para la Raspberry Pi y lo he modificado para los Onion Omega. El resultado está en mi Github.
Es muy fácil de usar, importas el módulo y creas un objeto con la clase SDL_DS3231.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from SDL_DS3231 import *
rtc = SDL_DS3231()
No es necesario ningún parámetro porque tanto el puerto i2c, la dirección del DS3231 y de la memoria flash están definidas en la función de inicio.
Hay diferentes métodos para introducir y acceder a la fecha y la hora, voy a intentar explicar los que me parecen más importantes.
La mejor forma de introducir la fecha y hora actual es mediante el método write_now, que toma la fecha y hora del sistema y la escribe en el RTC.
rtc.write_now()
Si quisiesemos introducir otra fecha y hora, por ejemplo la UTC, podemos hacerlo mediante el método write_datetime pasándole el objeto datetime correspondiente.
utc = datetime.utcnow()
rtc.write_datetime(utc)
Para acceder a la fecha y hora existen varios métodos pero los más útiles son read_all y read_datetime. El primero devuelve un tuple que contiene: año, mes, día, día de la semana, hora, minutos y segundos.
rtc.read_all()
(17, 1, 18, 2, 8, 38, 14)
La otra opción es read_datetime, que devuelve un objeto datetime que es mucho más versátil.
rtc.read_datetime()
datetime.datetime(2017, 1, 18, 8, 38, 49)
Existen más métodos en la clase SDL_DS3231 pero el código está bien cometado y tiene docstrings que creo dejan claro el funcionamiento de la clase. En el caso de que no sea así estoy abierto a preguntas.
No tengo ningún módulo con DS1307 con que probarlo, pero dado que las direcciones i2c y los registros en la memoría son los mismo el código debería también funcionar con los DS1307.