После того, как вы загрузили эскиз на одну из ваших плат Arduino, трудно точно знать, какой исходный код привел к этому эскизу.
Действительно, вы можете изменить исходный код своего эскиза на своем ПК, не обновляя его (в двоичном формате) на своей плате.
У меня была идея создать своего рода « хранилище эскизов », которое будет заполняться, как только я загружу эскиз на одну из своих досок. Затем я мог получить исходный код для эскиза, работающего на любой из моих досок.
Для такого хранилища мне сначала нужно было бы иметь « индекс », который позволил бы мне узнать, с какой платой связан исходный код эскиза.
Как правило, такой индекс должен быть уникальным для каждой платы Arduino.
Отсюда мой вопрос: как я могу получить уникальный идентификатор для платы Arduino?
Редактировать:
Это мой текущий список плат (минимальный список, который должен поддерживаться одним уникальным идентификатором):
- UNO R3
- Мега 2560
- Yun
- Робот Arduino (должно быть 2 доски, эквивалентные Леонардо)
В будущем я также могу создавать свои собственные платы (эквивалентные Uno, но без основы, без FTDI), поэтому, если подход также поддерживает их, это было бы лучше.
источник
Ответы:
Есть несколько методов, которые вы можете использовать здесь, чтобы получить уникальный идентификатор.
Проблема в том, что нет варианта, кроме 5, который будет работать на всех платах.
Если ваше решение будет общим, я бы предположил, что использование USB ID - это не путь вперед. У меня ~ 30 плат на Arduino, и только 5 из них имеют встроенное USB-оборудование. Всем остальным необходимо запрограммировать внешний кабель FTDI. Это означает, что все они будут иметь одинаковый идентификатор.
источник
Насколько я знаю, чип не имеет какого-либо уникального идентификатора, но вы можете запрограммировать его в EEPROM своих плат.
EEPROM документирование
Вы будете писать по конкретному адресу, и тогда будущие наброски смогут прочитать ID и делать с ним что угодно.
Вы также можете увидеть уникальный идентификатор или адрес на стороне хоста. Я не знаю достаточно об USB-устройствах, чтобы рассказать вам больше, но чип, обрабатывающий USB-связь, может иметь уникальный идентификатор, который вы можете использовать. Ваш код Arduino не сможет использовать это, однако.
В качестве альтернативы, просто используйте производителя этикеток и поместите этикетку на каждую доску.
источник
Некоторые платы при подключении к компьютеру публикуют их серийный номер. Мой Arduino Uno R3 говорит
Хотя я не уверен, насколько он уникален.
источник
Насколько мне известно, все чипы USB поставляются с уникальным серийным номером, по крайней мере, для чипов FTDI. В Linux вы можете легко назначать уникальные имена устройств из этого, проверьте мой сайт .
Помимо этого, то, что вы описываете, является в значительной степени простой формой контроля версий . Убедитесь, что ваши исходные файлы имеют номера версий. Чтобы идентифицировать свой Arduino, вы можете указать его
Serial.Print();
имя и версию кода во времяsetup();
.источник
__DATE__
и__TIME__
. Так что, по крайней мере, вы можете автоматически сохранить эту информацию в своем .hex файле @jfpoilpretЯ сомневаюсь, что интерфейс USB на Uno дает вам уникальный серийный номер. Любой номер будет частью кода, загруженного в чип, который, следовательно, будет одинаковым для нескольких Unos.
Одним из подходов является микросхема DS2401 «Силиконовый серийный номер», в которой используется однопроводный интерфейс. Для этого потребуется только один свободный пин-код и некоторый код (возможно, проблема в коде).
Наименее навязчивый и, возможно, самый надежный способ - просто прочитать код и проверить его. Это именно то, что я делаю с моим детектором подписи чипа . Однако, это только обнаруживает (как в настоящее время написано) подпись загрузчика. Довольно незначительное изменение, и оно может суммировать MD5 всего кода эскиза.
Пример вывода:
Эта сумма MD5 (последняя строка) фактически является сигнатурой этого конкретного загрузчика. Фактически самая последняя версия ищет их в таблице:
Так что вы могли бы при загрузке эскиза сгенерировать сумму MD5 шестнадцатеричного кода. Есть довольно простые способы сделать это. Затем вы можете выполнить операцию «git tag» в своем исходном коде, а затем (используя некоторый автоматический или ручной процесс) запомнить, что конкретная сумма шестнадцатеричного кода MD5 представляет код эскиза в определенный момент.
Какая-то база данных вроде:
Теперь, чтобы найти источник на плате, вы устанавливаете сумму кода MD5 (считывая ее с доски), а затем ищите ее в своей базе данных.
источник
Я подключил однопроводный датчик температуры, каждый из которых поставляется с уникальным я. Все наброски читали я при загрузке и записывали адрес на каждом последовательном соединении. Я сделал щит со всем необходимым оборудованием, поэтому, если мне понадобится перейти с Uno на Mega, устройство сохранит свою уникальность.
источник
Существует небольшая библиотека для чтения и записи вашего пользовательского идентификатора оборудования в EEPROM. Вы можете использовать его, чтобы не выдвигать неправильный эскиз к вашему Arduino или идентифицировать устройство для других целей.
https://github.com/skoumalcz/arduino-id-guard
Отказ от ответственности: я автор библиотеки :-)
источник