ArduinoUniqueID: ID único nativo no Arduino!

Você sabia que a placa do Arduino possui um ID único, uma espécie de MAC address? É basicamente isso que a biblioteca ArduinoUniqueID faz, ela retorna esse valor de identificação do chip. O mais interessante é que essa característica não está descrita no datasheet do microcontrolador atmega328p (Arduino Uno), e como que eu acabei descobrindo esse hidden ID?

Hidden Serial Number

Tudo começou quando decidi compra alguns chips atmega328p em SMD para um projeto utilizando LoRa. O problema é que acabei comprando a versão ‘b’ do chip, no caso atmega328pb, que é uma versão bofada do atmega328p.

Chip Atmega328pb - Use a ArduinoUniqueID para ler Unique ID
Figura 01 - Chip Atmega328pb

Mas o que tem de diferente um chip do outro? Este datasheet demonstra exatamente isso.

A parte interessante dessa versão bufada é que ela possui um ‘Serial Number’, um número de série de 10 bytes único em cada chip. Já que o projeto que estava desenvolvendo era com LoRa, esse detalhe me chamou a atenção. No caso seria uma maneira de identificar cada placa sem precisar criar vários códigos.

Pensando...Talvez o chip atmega328p possuísse esse número de série, mas o datasheet não fala nada sobre...

Sim, o Arduino possui um número de série não oficial. Pelos testes que fiz, o atmega328p possui um número de série com 9 bytes. E acabei encontrando algo que confirma essa teoria, um datasheet antigo da versão ‘b’ que mostra que o chip possui um número serial de 9 bytes.

Pensando assim outros chips da Atmel devem ter essa característica. No caso, testei os chips Atmega2560 e Attiny85, mostrando que esses chips possuem um número serial de 9 bytes.

Para simplificar as coisas, desenvolvi uma biblioteca para poder obter esse número de série.

ArduinoUniqueID

Esta biblioteca permite obter o número de série de alguns chips, como Atmel AVR, SAM, SAMD e ESP. Você pode baixar a biblioteca utilizando o gerenciador de bibliotecas dentro do Arduino IDE, basta procurar ArduinoUniqueID. Ou pode baixar pelo github, que possui toda a documentação da mesma.

Para começar a utilizar a biblioteca é muito simples, basta inserir este include:

Para visualizar o número de série do chip basta inserir a função UniqueIDdump() depois do Serial.begin.

Neste caso vamos ter algo parecido com isto no monitor serial:

Já que a biblioteca funciona em diversos tipos de chips e cada chip possui uma quantidade de bytes de UniqueID, adicionei uma variável UniqueID8 que retorna os 8 últimos bytes do número serial.

Utilizando a função UniqueID8dump é possível visualizar:

Claro, você pode utilizar o exemplo da biblioteca para poder verificar o número de série do chip. Reference no github sempre é um bom local pra verificar os features da biblioteca. Se você achou esse feature útil, be free to use!

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » ArduinoUniqueID: ID único nativo no Arduino!
Talvez você goste:
Comentários:

8
Deixe um comentário

avatar
6 Comentários
2 Respostas
0 Seguidores
 
Discussão de maior alcance
Discussão mais quente
6 Autores de comentários
slaBecheWeider Oliveira duarteEuclides Franco de RezendeEwerton Leandro Comentários recentes
  Notificações  
recentes antigos mais votados
Notificar
Beche
Visitante
Beche

Olá bom dia amigo, estou fazendo um projeto de pesquisa e seria muito interessante esta metodologia de pegar o id no arduino, peço desculpas pelo poco intendimento do mesmo, mas como eu posso fazer para transferir os dados para uma String ? tentei de diversas formas mas não consegui Ex:
string a = UniqueIDdump(Serial);
Entre outras tentativas frustradas, teria como por gentileza dar uma "luz" ?
Dês de já muito obrigado por ter postado este conhecimento para todos nós.
Abraços

sla
Visitante
sla

Estou tentando fazer isso, mas não estou conseguindo também, você conseguiu resolver isso?

Euclides Franco de Rezende
Visitante
E

E como faz para por em uma variável em vez de enviar para a serial???
Se toda vez que precisar disso, eu tiver que ler pela serial, usar um desktop pendurado no Arduino e criar um programa pra devolver o código pro Arduino...
Seja prático, ponha em variáveis a saída de qualquer coisa. O usuário decide se quer ou não mandar pra serial.
Grato pela compreensão.

Weider Oliveira duarte
Visitante
weider

amigo, veja abaixo o exemplo que postei, o exemplo ensina a fazer o que você deseja.

Ewerton Leandro
Visitante
Ewerton

Parabéns!

Weider Oliveira duarte
Membro
weideraju

Incrível Luiz, funcionou !

Eu criei um código que aproveita o resultado da sua biblioteca pra criar sketchs unicos, que so rodam em um unico arduino.
Isso abre a porta para criacao de Hard Keys com arduino, e projetos ultra seguros.
Cara, muito obrigado por ter compartilhado o conhecimento.

GIOVANNY MELO
Visitante
GIOVANNY MELO

Muito bom!

Weider Oliveira duarte
Visitante
Weider Oliveira Duarte

Incrivel, nao tenho um arduino a mao agira, mas amanha eu test, ja imaginou o potencial dessa descoberta pra evitar a clonagem de projetos ou codigos? AfinL ja li que era possivel extrair o .HEX e instalar em outro chip, mas com uma id nativa a cada chip, isso se tornara quase impossivel. Obrigado.

Séries

Menu