Biblioteca Arduino para verificar a data e temperatura do DS3231 integrado via I2C

Biblioteca Arduino para verificar a data e temperatura do DS3231 integrado via I2C

Biblioteca Arduino para verificar a data e temperatura do DS3231 integrado via I2C

ATUALIZADO: Visite também o novo biblioteca para gerenciar data e hora com o módulo DS3231 RTC e Arduino com melhorias como o horário sazonal.

A operação do IC de relógios em tempo real (RTC) mais populares que são controlados usando o ônibus eu2C Geralmente é muito semelhante. Além da Biblioteca de fios de Arduino simplifica muito as comunicações com dispositivos Interface serial de dois fios (TWI), I2C, em concreto.

Tabela de conteúdos

    Em termos gerais, o processo consiste em

    1. Inicie a comunicação como escravo ou mestre (definido por padrão) com a função Wire.begin(endereço). Se “endereço” for omitido, as comunicações começam com o μC o professor de ônibus eu2C.

    2. Ativar comunicação I2C com o dispositivo através do endereço de memória onde ele está localizado, usando o comando Wire.beginTransmission(endereço).

    3. Escreva um pedido no ônibus eu2C para informar ao dispositivo a operação que você deseja que ele execute, usando Wire.write(comando), em que “ordem” é o código da operação.

    4. Desative as comunicações para liberar o ônibus eu2C com função Wire.endTransmission().

    5. Solicite ao dispositivo o envio de uma determinada quantidade de dados que corresponda à operação que foi solicitada (neste caso, a data e hora) com a função Wire.requestFrom(endereço,valor).

    6. Aguarde até que os dados solicitados com a função fiquem disponíveis para leitura Wire.available (), que retorna o número de dados que já foram recebidos e podem ser lidos.

    7. Leia os dados enviados pelo dispositivo (o relógio de tempo real, neste caso) usando a função Fio.ler() quantas vezes forem indicados os bytes Wire.available () que estão disponíveis.

    8. Normalmente os dados são enviados em formatos muito compactos pelo que é muito provável que seja necessário interpretar os dados recebidos de uma forma que corresponda à representação dos dados feita no programa que utiliza o dispositivo.

    Em relação ao DS3231 (e outros compatíveis da mesma série, como o DS3232) e a interpretação dos dados, de acordo com as especificações do integrado, por exemplo, os valores dos diferentes dígitos que representam o tempo são representados em decimal codificado binário (BCD) que será mais conveniente expressar como um valor decimal (um byte) para usar em Arduino

    Na mesma linha, a temperatura é expressa como um byte em complemento de dois para a parte inteira e dois bits para o degrau, com resolução de um quarto de grau, da parte decimal. Estes e outros aspectos da representação de dados no relógio foram discutidos exaustivamente no código da biblioteca abaixo. DS3231

    Para verificar a temperatura com esta biblioteca, basta usar o método leitura_temperatura() do objeto DS3231 instanciado no início. Para ler a data e a hora, elas são primeiro carregadas e depois solicitadas em um dos formatos (compacto, humano...) disponíveis para diferentes usos, documentados no documento de cabeçalho da biblioteca de códigos abaixo.

    A seguir está um exemplo de código para mostrar como usar a biblioteca. Como mencionado acima, a temperatura é simplesmente lida com a função leitura_temperatura() do objeto de classe DS3231 mas, para ignorar erros na leitura, são utilizadas duas constantes que armazenam, respectivamente, a temperatura máxima e mínima do dispositivo de acordo com a ficha técnica e que são lidas com as funções correspondentes.

    A leitura da temperatura é realizada em duas etapas: primeiro carrega-se o valor, para que os diferentes usos da data ou hora sejam consistentes (não mostrarão valor superior em casos desfavoráveis) e em segundo lugar é utilizado de acordo com o formato que é preciso. O programa de exemplo (que não é muito prático, embora explique todas as possibilidades) mostra todos os formatos disponíveis

    • A função data_hora_valor() que retorna um ponteiro para um array carbonizar (bytes) contendo os sete valores numéricos que representam a data e a hora em um relógio DS3231 convertido para decimal (eles estão em BCD no dispositivo)

    • Usando a função número_dia_da_semana() Obtém-se um valor que corresponde ao número do dia da semana que começa no domingo. Para exibi-lo como texto, um array é usado e um é subtraído para começar no índice zero, domingo.

    • Para consultar a data no formato "local" (espanhol), utilize a função data_humana(), que retorna um ponteiro para uma string na qual a data é representada no formato DD/MM/AAAA, onde DD é o dia representado com 2 dígitos, MM é o mês com 2 dígitos e AAAA é o ano com 4 dígitos.

    • A função hora_humana() retorna a hora no formato hh:mm:ss, sendo hh a hora (no formato 24) representada com 2 dígitos, mm sendo os minutos com 2 dígitos e ss sendo os segundos com 2 dígitos.

    • Para usar facilmente a data e a hora arquivos de registro a função foi programada compact_date_time(), que entrega o valor da data e hora no formato AAAMMDDhhmmss sendo AA o ano representado com os 2 últimos dígitos, MM o mês com 2 dígitos, DD o dia com 2 dígitos, hh a hora (no formato 24) com 2 dígitos, mm os minutos com 2 dígitos e ss os segundos com 2 dígitos. Este formato, mesmo sendo texto, ocupa pouco espaço e permite uma ordenação alfabética muito simples.

    • A função data_hora_MySQL() serve para apresentar a data e hora no formato utilizado pelo gerenciador de banco de dados MySQL (ou o novo e mais livre MariaDB) AAAA-MM-DD hh:mm:ss, onde AAAA é o ano representado com 4 dígitos, MM é o mês com 2 dígitos, DD é o dia com 2 dígitos, hh é a hora (no formato 24) com 2 dígitos , mm são os minutos com 2 dígitos e os segundos com 2 dígitos.

    Embora existam muitos formatos para representar a data e a hora, o que você precisa pode não estar lá, mas certamente com base em um dos existentes e usando-o como exemplo, será fácil adicionar um novo método de acordo com outras especificações. Por favor, se você adicionar novas funções, compartilhe o código (libere-o!) e explique-nos como funciona, para que possamos melhorar a biblioteca aos poucos. Obrigado!

    A saída do programa de exemplo acima poderia ser algo parecido com o mostrado na imagem a seguir: uma lista de 7 valores (segundos, minutos, hora, dia da semana, dia do mês, mês e ano) a data e a hora expressa de forma "humana" (de acordo com o estilo espanhol), a hora como um número inteiro no formato de relógio de quatro dígitos, a data e a hora no formato de banco de dados MySQL, data e hora em formato compacto (para toras) e a temperatura interna do DS3231.

    Biblioteca de saída do console Arduino, relógio em tempo real (RTC) e temperatura DS3231 via barramento I2C

    Postar Comentário

    Você pode ter perdido