Una vez que haya cargado un boceto en una de sus placas Arduino, es difícil saber exactamente qué código fuente llevó a ese boceto.
De hecho, puede cambiar el código fuente de su boceto en su PC sin actualizarlo (en formato binario) a su placa.
Tuve la idea de configurar una especie de " depósito de bocetos " que se llenaría tan pronto como cargara un boceto en uno de mis tableros. Entonces podría recuperar, más adelante, el código fuente de un boceto que se ejecuta en cualquiera de mis tableros.
Para tal repositorio, primero necesitaría tener un " índice " que me permitiera saber a qué tablero está vinculado el código fuente del boceto.
Por lo general, dicho índice debe ser único para cada placa arduino.
De ahí mi pregunta: ¿cómo puedo obtener una identificación única para una placa Arduino?
Editar:
Esta es mi lista actual de tableros (la lista mínima debe ser respaldada por un único enfoque de ID único):
- UNO R3
- Mega 2560
- Yun
- Robot Arduino (que deben ser 2 tableros equivalentes a Leonardo)
En el futuro, también puedo construir mis propios tableros (equivalente a Uno pero sin esquemas, sin FTDI), por lo tanto, si un enfoque también es compatible con estos, sería mejor.
fuente
Respuestas:
Hay una serie de técnicas que puede usar aquí para obtener una identificación única.
El problema con estos es que no hay ninguna opción, excepto 5, que funcione en todos los tableros.
Si su solución va a ser genérica, sugeriría que usar una ID de USB no sea el camino a seguir. Tengo ~ 30 placas basadas en Arduino, y solo 5 de ellas tienen hardware USB incorporado. Todos los demás necesitan un cable FTDI externo para ser programado. Esto significa que todos tendrían la misma identificación.
fuente
El chip no tiene ningún tipo de identificación única hasta donde yo sé ... pero podría programar uno en la EEPROM de sus placas.
Documentación EEPROM
Escribiría a una dirección específica y luego los bocetos futuros pueden leer la ID y hacer lo que sea con ella.
También es posible que pueda ver una ID o dirección no solicitada en el lado del host. No sé lo suficiente sobre dispositivos USB para contarle más, pero el chip que maneja la comunicación USB podría tener una identificación única que podría usar. Sin embargo, su código Arduino no podrá usar esto.
Alternativamente, solo use una rotuladora y coloque una etiqueta en cada pizarra.
fuente
Algunas placas, cuando están conectadas a una computadora, publican su número de serie. Mi Arduino Uno R3 dice
Aunque no estoy seguro de lo único que es.
fuente
Que yo sepa, todos los chips USB vienen con un número de serie único, al menos para los chips FTDI. En Linux puede asignar fácilmente nombres de dispositivos únicos a partir de eso, consulte mi sitio web .
Aparte de eso, lo que está describiendo es más o menos una forma simple de control de versiones . Asegúrese de que sus archivos de origen tengan números de versión. Para identificar su Arduino, puede hacer que
Serial.Print();
nombre y versión del código durantesetup();
.fuente
__DATE__
y__TIME__
. Así que al menos puede almacenar automáticamente esa información en su archivo .hex @jfpoilpretDudo que la interfaz USB en el Uno te dé un número de serie único. Cualquier número sería parte del código cargado en el chip, por lo que sería el mismo entre múltiples Unos.
Un enfoque es el chip DS2401 "Número de serie de silicio" que utiliza la interfaz de un cable. Eso solo requeriría un pin libre y algo de código (el código podría ser el problema, posiblemente).
El método menos intrusivo, y probablemente el más confiable, sería simplemente volver a leer el código y verificarlo. Eso es exactamente lo que hago con mi detector de firma de chip . Sin embargo, eso solo detecta (como está escrito actualmente) la firma del gestor de arranque. Un cambio bastante menor y podría sumar MD5 todo el código del boceto.
Salida de ejemplo:
Esa suma MD5 (última línea) es efectivamente la firma de ese gestor de arranque en particular. De hecho, la versión más reciente los busca en una tabla:
Entonces, lo que podría hacer es, al cargar un boceto, generar una suma MD5 del código hexadecimal. Hay formas bastante simples de hacerlo. Luego, podría hacer una operación de "etiqueta git" en su código fuente, y luego (usando algún proceso automático o manual) recuerde que una suma MD5 particular de código hexadecimal representa el código de boceto en un momento particular.
Algún tipo de base de datos como:
Ahora para ubicar la fuente desde el tablero, establezca la suma MD5 del código (leyéndola desde el tablero) y luego búsquela en su base de datos.
fuente
Conecté un sensor de temperatura de un cable que viene con un único. Todos los bocetos leen el arranque de I y escribieron la dirección en cada conexión en serie. Hice un escudo con todo el hardware que necesitaba, por lo que si necesitaba actualizar de Uno a Mega, el dispositivo mantendría su carácter único.
fuente
Hay una pequeña biblioteca para leer y escribir su ID de hardware personalizado en EEPROM. Puede usarlo para evitar enviar un boceto incorrecto a su Arduino o para identificar el dispositivo para otros fines.
https://github.com/skoumalcz/arduino-id-guard
Descargo de responsabilidad: soy autor de la biblioteca :-)
fuente