Sobald Sie eine Skizze auf eines Ihrer Arduino-Boards hochgeladen haben, ist es schwierig, genau zu wissen, welcher Quellcode zu dieser Skizze geführt hat.
In der Tat können Sie den Quellcode Ihrer Skizze auf Ihrem PC ändern, ohne ihn (im Binärformat) auf Ihrem Board zu aktualisieren.
Ich hatte die Idee, eine Art " Skizzen-Repository " einzurichten , das gefüllt wird, sobald ich eine Skizze auf eines meiner Boards hochlade. Dann konnte ich später den Quellcode für eine Skizze abrufen, die auf einem meiner Boards lief.
Für ein solches Repository benötige ich zunächst einen " Index ", anhand dessen ich feststellen kann, mit welchem Board der Quellcode der Skizze verknüpft ist.
Typischerweise sollte ein solcher Index für jedes einzelne Arduino-Board eindeutig sein.
Daher meine Frage: Wie kann ich eine eindeutige ID für ein Arduino-Board erhalten?
Bearbeiten:
Dies ist meine aktuelle Liste der Boards (die Mindestliste, die von einem einzigen eindeutigen ID-Ansatz unterstützt werden soll):
- UNO R3
- Mega 2560
- Yun
- Arduino Robot (das müssen 2 Leonardo-Äquivalente sein)
In Zukunft kann ich auch meine eigenen Boards bauen (Uno-Äquivalent, aber Barebones, ohne FTDI). Wenn also ein Ansatz diese unterstützt, wäre das besser.
quelle
Antworten:
Es gibt eine Reihe von Techniken, mit denen Sie eine eindeutige ID erhalten können.
Das Problem dabei ist, dass es außer 5 keine Option gibt, die auf allen Platinen funktioniert.
Wenn es sich bei Ihrer Lösung um eine generische Lösung handelt, würde ich vorschlagen, dass die Verwendung einer USB-ID nicht der richtige Weg ist. Ich habe ~ 30 Arduino-basierte Boards und nur 5 von ihnen haben USB-Hardware eingebaut. Alle anderen benötigen ein externes FTDI-Kabel, um programmiert zu werden. Dies bedeutet, dass sie alle die gleiche ID haben würden.
quelle
Soweit ich weiß, hat der Chip keine eindeutige ID, aber Sie können eine in das EEPROM Ihrer Platinen programmieren.
EEPROM-Dokumentation
Sie würden an eine bestimmte Adresse schreiben und dann können zukünftige Skizzen die ID lesen und alles damit machen.
Möglicherweise sehen Sie auch eine eindeutige ID oder Adresse auf der Hostseite. Ich weiß nicht genug über USB-Geräte, um Ihnen mehr zu sagen, aber der Chip, der die USB-Kommunikation verwaltet, verfügt möglicherweise über eine eindeutige ID, die Sie verwenden können. Ihr Arduino-Code könnte dies jedoch nicht verwenden.
Alternativ können Sie auch einen Etikettendrucker verwenden und jedes Board mit einem Etikett versehen.
quelle
Bei einigen an einen Computer angeschlossenen Karten wird die Seriennummer veröffentlicht. Mein Arduino Uno R3 sagt
Obwohl ich nicht sicher bin, wie einzigartig es ist.
quelle
Nach meinem besten Wissen sind die USB-Chips alle mit einer eindeutigen Seriennummer versehen, zumindest für die FTDI-Chips. Unter Linux können Sie einfach eindeutige Gerätenamen zuweisen. Überprüfen Sie meine Website .
Abgesehen davon ist das, was Sie beschreiben, so ziemlich eine einfache Form der Versionskontrolle . Stellen Sie sicher, dass Ihre Quelldateien Versionsnummern haben. Um Ihren Arduino zu identifizieren, können Sie
Serial.Print();
während dessen den Namen und die Version des Codes eingebensetup();
.quelle
__DATE__
und__TIME__
. Zumindest können Sie diese Informationen also automatisch in Ihrer .hex-Datei @jfpoilpretIch bezweifle, dass Ihnen die USB-Schnittstelle des Uno eine eindeutige Seriennummer gibt. Jede Zahl wäre Teil des Codes, der auf den Chip hochgeladen wird, und wäre daher für mehrere Unos gleich.
Ein Ansatz ist der DS2401-Chip "Silicon Serial Number", der die Ein-Draht-Schnittstelle verwendet. Das würde nur einen freien Pin und einen Code erfordern (der Code wäre möglicherweise das Problem).
Die am wenigsten aufdringliche und wahrscheinlich zuverlässigste Methode wäre, den Code einfach zurückzulesen und die Summe zu überprüfen. Genau das mache ich mit meinem Chipsignaturdetektor . Dies erkennt jedoch nur (wie aktuell geschrieben) die Bootloader-Signatur. Eine ziemlich kleine Änderung und es könnte MD5-Summe des gesamten Skizzencodes sein.
Beispielausgabe:
Diese MD5-Summe (letzte Zeile) ist effektiv die Signatur dieses bestimmten Bootloaders. Tatsächlich schlägt die neueste Version sie in einer Tabelle nach:
Sie können also beim Hochladen einer Skizze eine MD5-Summe des Hex-Codes generieren. Es gibt ziemlich einfache Möglichkeiten, dies zu tun. Dann könnten Sie eine "Git-Tag" -Operation für Ihren Quellcode ausführen und sich dann (mithilfe eines automatisierten oder manuellen Prozesses) daran erinnern, dass eine bestimmte MD5-Summe von Hex-Code den Skizzencode zu einem bestimmten Zeitpunkt darstellt.
Eine Art Datenbank wie:
Um die Quelle von der Karte aus zu lokalisieren, müssen Sie die MD5-Summe des Codes ermitteln (indem Sie ihn von der Karte zurücklesen) und ihn dann in Ihrer Datenbank nachschlagen.
quelle
Ich habe einen Ein-Draht-Temperatursensor angeschlossen, der jeweils mit einem einzigartigen Ich geliefert wird. Alle Skizzen lasen das, was ich beim Booten hatte, und schrieben die Adresse auf jede serielle Verbindung. Ich habe ein Schild mit der ganzen Hardware erstellt, die ich brauchte. Wenn ich also von Uno auf Mega upgraden musste, behielt das Gerät seine einzigartige Qualität.
quelle
Es gibt eine winzige Bibliothek zum Lesen und Schreiben Ihrer benutzerdefinierten Hardware-ID in das EEPROM. Sie können es verwenden, um zu vermeiden, dass eine falsche Skizze auf Ihr Arduino übertragen wird, oder um das Gerät für andere Zwecke zu identifizieren.
https://github.com/skoumalcz/arduino-id-guard
Haftungsausschluss: Ich bin Autor der Bibliothek :-)
quelle