Depois de fazer o upload de um esboço em uma de suas placas do Arduino, é difícil saber exatamente qual código fonte levou a esse esboço.
Na verdade, você pode alterar o código fonte do seu esboço no seu PC sem atualizá-lo (em formato binário) para o seu quadro.
Eu tive a ideia de configurar um tipo de " repositório de esboço " que seria preenchido assim que eu enviar um esboço para um dos meus quadros. Depois, pude recuperar, mais tarde, o código fonte de um esboço em execução em qualquer uma das minhas placas.
Para esse repositório, primeiro eu precisaria ter um " índice " que me permitisse saber a qual placa o código-fonte do esboço está vinculado.
Normalmente, esse índice deve ser exclusivo para todas as placas do arduino.
Daí a minha pergunta: como posso obter um ID exclusivo para uma placa Arduino?
Editar:
Esta é a minha lista atual de placas (a lista mínima a ser suportada por uma única abordagem de ID exclusiva):
- UNO R3
- Mega 2560
- Yun
- Robô Arduino (que deve ser 2 placas equivalentes a Leonardo)
No futuro, também posso construir minhas próprias placas (equivalente Uno, mas barebones, sem FTDI); portanto, se uma abordagem também oferecer suporte a elas, isso seria melhor.
fonte
Respostas:
Há várias técnicas que você pode usar aqui para obter um ID exclusivo.
O problema é que não há opção, exceto a 5, que funcionará em todas as placas.
Se sua solução for genérica, sugiro que o uso de um ID USB não seja o caminho a seguir. Tenho ~ 30 placas baseadas em Arduino, e apenas 5 delas possuem hardware USB. Todos os demais precisam de um cabo FTDI externo para ser programado. Isso significa que todos teriam o mesmo ID.
fonte
Até onde eu sei, o chip não possui nenhum tipo de ID exclusivo ... mas você pode programar um na EEPROM de suas placas.
Documentação da EEPROM
Você escreveria para um endereço específico e, em seguida, esboços futuros poderão ler o ID e fazer o que quiser com ele.
Você também pode ver um ID ou endereço não solicitado no lado do host. Não sei o suficiente sobre dispositivos USB para lhe contar mais, mas o chip que lida com a comunicação USB pode ter um ID exclusivo que você possa usar. Seu código do Arduino não seria capaz de usar isso, no entanto.
Como alternativa, basta usar um fabricante de etiquetas e colocar uma etiqueta em cada placa.
fonte
Algumas placas, quando conectadas a um computador, publicam seu número de série. Meu Arduino Uno R3 diz
Embora eu não tenha certeza de como é único.
fonte
Que eu saiba, todos os chips USB vêm com um número de série único, pelo menos para os chips FTDI. No Linux, você pode atribuir facilmente nomes de dispositivos exclusivos a partir disso, consulte meu site .
Fora isso, o que você está descrevendo é basicamente uma forma simples de controle de versão . Verifique se os arquivos de origem têm números de versão. Para identificar seu Arduino, você pode torná-lo com o
Serial.Print();
nome e a versão do código durantesetup();
.fonte
__DATE__
e__TIME__
. Assim, pelo menos você pode armazenar automaticamente essa informação em sua .hex arquivo @jfpoilpretDuvido que a interface USB no Uno ofereça um número de série único. Qualquer número faria parte do código carregado no chip, o que seria, portanto, o mesmo entre vários Unos.
Uma abordagem é o chip DS2401 "Silicon Serial Number", que usa a interface One-wire. Isso exigiria apenas um pino gratuito e algum código (o código seria o problema, possivelmente).
O método menos invasivo, e provavelmente o mais confiável, seria simplesmente ler novamente o código e fazer uma verificação sumária. É exatamente isso que faço com meu detector de assinatura de chip . No entanto, isso apenas detecta (como atualmente está escrito) a assinatura do carregador de inicialização. Uma alteração bastante pequena e poderia somar MD5 todo o código de esboço.
Exemplo de saída:
Essa soma MD5 (última linha) é efetivamente a assinatura desse carregador de inicialização específico. De fato, a versão mais recente as procura em uma tabela:
Então, o que você pode fazer é, ao fazer upload de um esboço, gerar uma soma MD5 do código hexadecimal. Existem maneiras bastante simples de fazer isso. Depois, você pode fazer uma operação "tag git" no seu código-fonte e, em seguida (usando algum processo automatizado ou manual), lembrar que uma soma MD5 específica de código hexadecimal representa o código do esboço em um determinado momento.
Algum tipo de banco de dados como:
Agora, para localizar a fonte do quadro, você estabelece a soma MD5 do código (lendo-o novamente no quadro) e, em seguida, procura no seu banco de dados.
fonte
Conectei um sensor de temperatura de um fio, cada um com um eu único. Todos os esboços leram o eu na inicialização e escreveram o endereço em todas as conexões seriais. Eu fiz uma blindagem com todo o hardware necessário, então, se eu precisasse atualizar do Uno para o Mega, o dispositivo manteria o seu exclusivo.
fonte
Há uma pequena biblioteca para ler e gravar seu ID de hardware personalizado na EEPROM. Você pode usá-lo para evitar enviar esboços incorretos ao seu Arduino ou identificar o dispositivo para outros fins.
https://github.com/skoumalcz/arduino-id-guard
Disclaimer: Eu sou o autor da biblioteca :-)
fonte