Une fois que vous avez téléchargé un croquis sur l'une de vos cartes Arduino, il est difficile de savoir exactement quel code source a conduit à ce croquis.
En effet, vous pouvez modifier le code source de votre sketch sur votre PC sans le mettre à jour (au format binaire) sur votre carte.
J'ai eu l'idée de mettre en place une sorte de " dépôt de croquis " qui serait rempli dès que je téléchargerais un croquis sur une de mes planches. Ensuite, je pourrais récupérer, plus tard, le code source d'un croquis exécuté sur l'une de mes planches.
Pour un tel référentiel, je devrais d'abord avoir un " index " qui me permettrait de savoir à quelle carte le code source de l'esquisse est lié.
En règle générale, un tel index doit être unique pour chaque carte Arduino unique.
D'où ma question: comment obtenir un identifiant unique pour une carte Arduino?
Modifier:
Voici ma liste actuelle de cartes (la liste miniumum devant être prise en charge par une seule approche d'identification unique):
- UNO R3
- Mega 2560
- Yun
- Arduino Robot (qui doit être 2 cartes équivalentes Leonardo)
À l'avenir, je pourrai peut-être également créer mes propres cartes (équivalent Uno mais barebones, sans FTDI), donc si une approche les prend également en charge, ce serait mieux.
la source
Réponses:
Il existe un certain nombre de techniques que vous pouvez utiliser ici pour obtenir un ID unique.
Le problème avec ces derniers est qu'il n'y a pas d'option sauf 5 qui fonctionnera sur toutes les cartes.
Si votre solution va être générique, je dirais que l'utilisation d'un ID USB n'est pas la voie à suivre. J'ai environ 30 cartes basées sur Arduino, et seulement 5 d'entre elles ont un matériel USB intégré. Tous les autres ont besoin d'un câble FTDI externe pour être programmés. Cela signifie qu'ils auraient tous le même identifiant.
la source
La puce n'a aucune sorte d'ID unique pour autant que je sache ... mais vous pouvez en programmer un dans l'EEPROM de vos cartes.
Documentation EEPROM
Vous écririez à une adresse spécifique, puis les futurs croquis pourront lire l'ID et faire quoi que ce soit avec.
Vous pouvez également voir un identifiant ou une adresse non valide côté hôte. Je ne connais pas suffisamment les périphériques USB pour vous en dire plus, mais la puce qui gère la communication USB peut avoir un identifiant unique que vous pouvez utiliser. Cependant, votre code Arduino ne pourrait pas l'utiliser.
Alternativement, utilisez simplement une étiqueteuse et mettez une étiquette sur chaque planche.
la source
Certaines cartes, lorsqu'elles sont connectées à un ordinateur, publient leur numéro de série. Mon Arduino Uno R3 dit
Même si je ne sais pas à quel point c'est unique.
la source
À ma connaissance, les puces USB sont toutes fournies avec un numéro de série unique, au moins pour les puces FTDI. Sous Linux, vous pouvez facilement attribuer des noms d'appareils uniques à partir de cela, consultez mon site Web .
En dehors de cela, ce que vous décrivez est à peu près une forme simple de contrôle de version . Assurez-vous que vos fichiers source ont des numéros de version. Pour identifier votre Arduino, vous pouvez lui faire le
Serial.Print();
nom et la version du code pendantsetup();
.la source
__DATE__
et__TIME__
. Donc, au moins, vous pouvez stocker automatiquement ces informations dans votre fichier .hex @jfpoilpretJe doute que l'interface USB de l'Uno vous donne un numéro de série unique. Tout numéro ferait partie du code téléchargé sur la puce qui serait donc le même parmi plusieurs Unos.
Une approche est la puce DS2401 "Silicon Serial Number" qui utilise l'interface à un fil. Cela ne nécessiterait qu'une seule broche gratuite et du code (le code pourrait être le problème, éventuellement).
La méthode la moins intrusive, et probablement la plus fiable, serait simplement de relire le code et de le vérifier. C'est exactement ce que je fais avec mon détecteur de signature de puce . Cependant, cela ne détecte (comme actuellement écrit) que la signature du chargeur de démarrage. Un changement assez mineur et il pourrait résumer MD5 la totalité du code d'esquisse.
Exemple de sortie:
Cette somme MD5 (dernière ligne) est effectivement la signature de ce chargeur de démarrage particulier. En fait, la version la plus récente les recherche dans un tableau:
Donc, ce que vous pourriez faire, c'est lors du téléchargement d'un croquis, générer une somme MD5 du code hexadécimal. Il existe des moyens assez simples de le faire. Ensuite, vous pouvez effectuer une opération "git tag" sur votre code source, puis (en utilisant un processus automatisé ou manuel) vous rappeler qu'une somme MD5 particulière de code hexadécimal représente le code d'esquisse à un moment particulier.
Une sorte de base de données comme:
Maintenant, pour localiser la source de la carte, vous établissez la somme MD5 du code (en la relisant à partir de la carte), puis la recherchez dans votre base de données.
la source
J'ai connecté un capteur de température à un fil qui est livré avec un unique. Toutes les esquisses lisent le je suis au démarrage et écrivent l'adresse sur chaque connexion série. J'ai fait un bouclier avec tout le matériel dont j'avais besoin, donc si je devais passer d'Uno à Mega, l'appareil garderait son caractère unique.
la source
Il y a une petite bibliothèque pour lire et écrire votre ID de matériel personnalisé dans l'EEPROM. Vous pouvez l'utiliser pour éviter de pousser un mauvais croquis sur votre Arduino ou pour identifier un appareil à d'autres fins.
https://github.com/skoumalcz/arduino-id-guard
Avertissement: je suis l'auteur de la bibliothèque :-)
la source