25 de outubro de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Como ler tag iButton com Arduino

iButton com Arduino

Essas tags iButton são demais! Diferente do RFID, são resistentes a eletromagnetismo, líquidos etc. Por essa razão acredito que ela é muito mais adequada para portarias, principalmente por serem extremamente duráveis. Nesse artigo veremos como ler tag iButton com Arduino.

iButton para identificação

Existem outros tipos de iButton, mas esse é para identificação. Na tag tem um valor gravado, correspondente ao código gravado nela. A única vez que vi esse tipo de tag em campo foi na Oi do Rio de Janeiro, em Copacabana, quando estive configurando os servidores de borda para gerenciar os dispositivos CPE via TR069. Esse caso foi bastante complexo, até escrevi um artigo sobre o assunto. Bem, para entrar no CPD era necessário que alguém autorizasse, colocando a tag para destrancar a porta. Na época era uma coisa impressionante, mas como ainda hoje (não faço ideia do porquê) não é popular, deve causar impressões impactantes – e aí fica a sugestão: Vai fazer controle de portaria? Use iButton com Arduino ou outra placa! É barato, durável e não vai te causar aborrecimento, tendo que recadastrar cartões e chaveiros RFID cada vez que alguém guardar as chaves junto do celular.

Características

Não tem nada muito especial a falar porque é bastante simples, tanto o hardware quanto a implementação. O dispositivo é one-wire e possui um LED no centro, que pode ser manipulado como desejar. Nesse artigo estou fazendo a apresentação e a demonstração de leitura, como fiz com o RC522 nesse outro artigo – mas o propósito de ambos é o mesmo: fazer uma maquineta para o banco imobiliário. Aqui veremos a configuração com Arduino, mas a implementação final será com ESP8266 ou ESP32, porque vou adicionar uma característica bem interessante que depende de Internet. Mãos à obra.

Wiring do iButton com Arduino

Utilizando a técnica de FCC (Fast Control+Chups) encontrei no Google Images um Wiring bonitinho. Essa imagem é do Augusto Campos, da br-arduino.org, que também escreveu sobre o mesmo tema. O Augusto (muito querido) é dono também do linux-br, que começou em 1997 como Linux in Brazil no domínio linux.trix.net, do qual escrevi artigos desde o final de 1997, sendo o primeiro sobre o Corel Draw 9 para Linux. Bom, o wiring:

iButton com Arduino - wiring

Um cabo vai ao GND e o outro ao pino de GPIO, por convenção, só vejo a utilização de one-wire no pino 2, mas não é fundamental.

O resistor R1 de 2k4 vai do pino de dados ao VCC, para fazer pull-up (coloquei um de 2k2 e 2 de 100 Ohms em série na protolixo). O R2 é um resistor para o LED; o fio preto é o ANODO. Ele pode ir ao 5V com um resistor de 330 Ohms e a outra perna a um GPIO para fazer PWM, blink ou seja lá o que tiver em mente; o outro fio do LED é o branco.

Sketch para iButton com Arduino

Como já citei, ele é um dispositivo one-wire (como o DS18B20), portanto utilizaremos a biblioteca OneWire para interagir com ele. A tag possui 64 bits, portanto devemos ler 4 bytes de sua saída. É só isso mesmo; verificamos se há dados a serem lidos, fazemos a leitura dos 4 bytes e exibimos na serial. Vamos aproveitar pra por em prática um pouco do que temos visto nos artigos sobre ponteiros.

O sketch fica desse jeito (se não estiver usando VScode, remova o primeiro include):

#include <Arduino.h>
#include <OneWire.h>

#define LED 8

OneWire ibutton(2);

void getValue(){
    uint8_t *reading = new uint8_t [8];
    if (ibutton.search(reading)){
    Serial.println(*reading);
        if (reading[0] == 1){
            Serial.print("Tag: ");
            for (uint8_t i=4;i>0;i--){
                Serial.print(reading[i],HEX);
                Serial.print(" ");
            }
            Serial.println(" ");
            delay(1000);
        }
    }
    ibutton.reset();
    delete [] reading;
    delay(10);
}

void setup() {
    Serial.begin(9600);
    pinMode(LED,OUTPUT);
    analogWrite(8,180);
}

void loop() {
    getValue();
}

Fácil ou não? Agora vou começar a implementar a maquineta do Banco Imobiliário, que vai aceitar RFID e iButton; RFID para dinheiro e o iButton ainda é surpresa!

A saída na serial ficou assim (li duas vezes cada tag, mas só coube 5 prints):

iButton com Arduino - leitura

Onde comprar o iButton?

Esse é um produto do nosso parceiro AutoCore Robótica. Eis o link para o leitor iButton e também o link para a tag iButton. Prestigie o blog adquirindo com nosso parceiro!

Onde comprar o Arduino Micro?

O Arduino Micro é um espetáculo. Um Atmega 32u4, com duas seriais, minúsculo e cheio de recursos. Essa belezinha usada nesse artigo é da Saravati, cujo link do produto é esse. Atente-se ao comprar porque tem 3v3, 5v e USB micro ou USB mini!

Vídeo de demonstração do iButton com Arduino

Fiz um vídeo bem simples, mas como podem chegar primeiro ao vídeo invés do artigo, dei uma explicada rápida sobre o que escrevi. Tenha 2 minutos de paciência e assista pelo menos 50% do vídeo. Se gostar, deixe um like e SE PUDER FAZER A GENTILEZA, inscreva-se no canal. Ficarei feliz de acordar com mais “1” inscrito em nosso humilde canal.

Até a próxima!

Revisão: Ricardo Amaral de Andrade