ArduinoUniqueID: ID único nativo no Arduino!

imagem de destaque 7

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!

Website | Veja + conteúdo

Me formei em engenheira elétrica em 2012 e desde então sou fascinado por eletrônica, programação e inovação. Hoje trabalho com projetos elétricos no Revit e sempre tento melhorar o fluxo de trabalho usando algoritimos e soluções inteligentes. Além disso, trabalho com design de PCB no Eagle, modelagem 3D no Fusion e no Revit, e conheço algumas linguagens de programação, como C#, Java e PHP. Sou responsável pelo projeto LoRaNow que tem como objetivo desenvolver hardware e software open source utilizando a tecnologia LoRa.

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.

Comentários:
Notificações
Notificar
guest
8 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Beche
Beche
10/10/2019 10:37

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
sla
Reply to  Beche
15/01/2020 10:02

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

Euclides Franco de Rezende
E
20/05/2019 13:27

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
weider
Reply to  E
26/05/2019 23:29

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

Ewerton Leandro
Ewerton
15/05/2019 15:46

Parabéns!

Weider Oliveira duarte
weideraju
14/05/2019 16:12

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
GIOVANNY MELO
14/05/2019 00:13

Muito bom!

Weider Oliveira duarte
Weider Oliveira Duarte
13/05/2019 23:53

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.

Talvez você goste:

Séries

Menu