No artigo de hoje veremos como utilizar um RTC (Real Time Clock) com o dispositivo ESP8266. Este módulo incorpora funções Wi-Fi e foi pensado para projetos de baixo custo para mobilidade, eletrônicos vestíveis, Internet das Coisas (IoT), e o que sua criatividade permitir.
Este artigo pode ser um tanto quanto simples, mas utilizar um RTC (Real Time Clock) em um projeto é de grande importância as vezes. Principalmente quando desejamos monitorar algo em determinados horários. Vamos pegar um exemplo básico, supondo que você esteja monitorando a temperatura do ambiente, é interessante saber a hora da medição para calcular a variação de temperatura durante um determinado período. Sim, este é um exemplo simples, mas exemplifica claramente o uso de um RTC.
Antes de começar vamos a lista de materias necessários.
Material
Posso utilizar outro ESP?Sim e não, o ESP8266 possui interface I2C, porém não são todos os modelos de ESP que disponibilizam estes pinos. No caso do ESP-01 estes pinos não estão disponíveis no módulo, apesar de estarem no componente pricipal. Já o ESP-07 é basicamente o ESP-12 com antena externa, sendo assim é possível utilizá-lo.
DS3231
O DS3231 é um relógio de tempo real (Real Time Clock) de alta precisão e baixo consumo de energia com interface de comunicação I2C.
Código
O código abaixo esta escrito na linguagem de programação Lua, e para tal, você deve utilizar o firmware NodeMCU no seu ESP. Se você tem dúvidas de como alterar o firmware do seu ESP, eu recomento a leitura do NodeMCU: Lua para o ESP8266.
Na tabela abaixo são explicadas as constantes necessárias:
I2C_ADDRESS | Endereço I2C do DS3231. |
I2C_REG | Endereço iniciar de leitura |
I2C_ID | ID do I2C |
SDA_PIN | Pino onde esta o SDA (1-12) |
SCL_PIN | Pino onde esta o SCL (1-12) |
to_decimal
e to_bcd
para converter um número inteiro para BCD.O método get_time
é responsável por obter a data/hora atual. Inicialmente enviamos para o I2C qual endereço e posição vamos ler. Depois, solicitamos 7 bytes, pois sabemos quantos bytes ler e o que cada posição contém. Como cada parte da data/hora consome 1 byte e sabendo que o endereço inicial é 00h, a última porção da data/hora estará no endereço 06h. Conforme datasheet do DS3231, segue abaixo os endereços de cada parte:
00h | Segundos (00-59) |
01h | Minutos (00-59) |
02h | Horas (00-23) |
03h | Dia da Semana (1-7) |
04h | Dia do Mês (01-31) |
05h | Mês (01-12) |
06h | Ano (00-99) |
get_time_iso_8601
retorna a data/hora no formato ISO 8601, que é uma representação internacional de data e hora.Por fim, o método set_time
é similar ao get_time
. A ordem de gravação é a mesma ordem de leitura, assim como na leitura é necessário converter de inteiro para BCD.
Exemplo de uso
No exemplo abaixo, inicialmente alteramos a hora com a função set_time
, para ajustar o relógio. Em seguida solicitamos a hora atual com a função get_time
, esta função retorna uma tabela de inteiros. Por fim, solicitamos a hora atual no formato ISO 8601 com a função get_time_iso_8601
, que retornará uma string.
> =set_time(0, 11, 0, 3, 3, 2, 16) > =get_time() 06 11 00 03 03 02 16 > =get_time_iso_8601() 2016-02-03-T00:11:37
Para ajudar um pouco a quem está começando, a imagem abaixo demonstra como utilizar o ESPlorer para fazer o upload do arquivo e a execução dos comandos.
Clique na imagem para ampliá-la
Consideração finalEste é o primeiro projeto com o ESP de muitos que ainda estão por vir. Como o NodeMCU utiliza Lua, esta é uma linguagem de programação que iremos aprender ao longo dos artigos. Mesmo que você não conheça Lua, não precisa se preocupar, eu também não conhecia antes de utilizar o NodeMCU.
Gostaria de agradecer a FILIPEFLOP pelo material fornecido para a realização deste artigo.
Se ficou alguma dúvida, com o ESP, NodeMCU ou o ESPlorer, deixe um comentário que iremos ajudá-lo. :)