Wątpię, czy interfejs USB w Uno daje unikalny numer seryjny. Dowolna liczba byłaby częścią kodu przesłanego do układu, który byłby zatem taki sam wśród wielu Unos.
Jednym z podejść jest układ DS2401 „Silicon Serial Number”, który wykorzystuje interfejs One-wire. Wymagałoby to tylko jednego wolnego kodu PIN i trochę kodu (prawdopodobnie byłby to problem).
Najmniej natrętną i prawdopodobnie najbardziej niezawodną metodą byłoby po prostu ponowne odczytanie kodu i sprawdzenie go. Właśnie to robię z moim detektorem sygnatur chipów . Wykrywa to jednak tylko (obecnie zapisany) podpis bootloadera. Dość niewielka zmiana, która może sumować MD5 cały kod szkicu.
Przykładowe dane wyjściowe:
Signature detector.
Written by Nick Gammon.
Signature = 1E 95 0F
Fuses
Low = FF High = D6 Ext = FF Lock = CF
Processor = ATmega328P
Flash memory size = 32768
Bootloader in use: Yes
EEPROM preserved through erase: Yes
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
7E00: 02 01 02 03 0405 06 07 08 09 0A 0B 0C 0D 0E 0F
7E10: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7E20: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7E30: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
...
7FB0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FC0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FD0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FE0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
7FF0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
MD5 sum of bootloader = 56 72 75 2D 5D B5 0D BA 25 10 DF BE 87 D2 A1 27
Ta suma MD5 (ostatnia linia) jest faktycznie sygnaturą tego konkretnego programu ładującego. W rzeczywistości najnowsza wersja wyszukuje je w tabeli:
MD5 sum of bootloader = FB F4 9B 7B 59 73 7F 65 E8 D0 F8 A5 08 12 E7 9F
Bootloader name: optiboot_atmega328
Więc, co możesz zrobić, to podczas przesyłania szkicu wygenerować sumę MD5 kodu szesnastkowego. Są na to dość proste sposoby. Następnie możesz wykonać operację „git tag” na kodzie źródłowym, a następnie (przy użyciu zautomatyzowanego lub ręcznego procesu) pamiętać, że konkretna suma kodu szesnastkowego MD5 reprezentuje kod szkicu w danym momencie.
Jakaś baza danych, taka jak:
Chip: Uno
MD5 sum: D8 8C 70 6D FE 1F DC 38 82 1E CE AE 23 B2 E6 E7
Sketch: My_robot_sketch_42.ino
Git tag: version666
Teraz, aby zlokalizować źródło z tablicy, ustal sumę MD5 kodu (odczytując ją z tablicy), a następnie wyszukaj w swojej bazie danych.