Как проверить, была ли прошивка уже загружена на Arduino Leonardo без загрузчика?

#python #performance #arduino #avrdude

Вопрос:

Я работаю со значительным количеством Arduino (около 2000 штук в партии), и все они нуждаются в прошивке, загруженной на них через usb. Я уже написал программы для ускорения этого процесса, но я не могу найти способ остановить программу от перезаписи прошивки на Arduino Leonardo, потому что единственным идентификатором, по-видимому, является номер com-порта. Чтобы обойти это, я нажимал клавишу каждый раз, когда подключал новые Arduinos, но это происходит медленно. Я хочу, чтобы программа оставалась в цикле, поэтому мне не нужно каждый раз нажимать клавишу или повторно запускать программу. Если я заставлю это работать, я смогу просто подключить как можно больше и продолжать отключать их, когда они закончат загрузку, потому что моя программа уже может загружаться на несколько устройств.

Я уже узнал о параметре avrdude-U, который позволяет программисту считывать или проверять файлы устройства, которые потенциально могут работать для проверки загруженных файлов, но для этого требуется загрузка Leonardo, что противоречит цели, по крайней мере, с точки зрения эффективности (требуется .5 секунд, чтобы Leonardo перешел в режим загрузчика). Я также думал о подключении к устройствам с прошивкой через ее пакет, но время ожидания для устройств, на которых еще не загружена прошивка, составляет около 5 секунд.

Есть ли в любом случае возможность проверить наличие ранее загруженной прошивки на Arduino Leonardo без использования загрузчика? Любая помощь была бы очень признательна.

(Просто для вашего сведения, я пишу эту программу на Python, используя пакеты Pyserial и Subprocess)

Комментарии:

1. Или вы могли бы найти настоящего программиста, даже программиста банды, и перестать возиться с загрузчиками. Если у вас есть реальные производственные мощности, это также легко заключить контракт.

2. Но я не уверен, что другие могли бы сделать лучшую работу, хотя спасибо за идею. Я довольно опытен в программировании и рассмотрел множество вариантов.

Ответ №1:

В diagnose() пакете есть tclab функция, как показано в документации. Простая функция-это, скорее всего, то, что вы уже пробовали, но не быстрее, чем ваш прототип.

 def check_firmware():
    import tclab
    import time
    try:
        start = time.time()
        lab = tclab.TCLab()
        print(lab.version)
        Q1w=lab.Q1(1); Q1r=lab.Q1()
        lab.close()
        if Q1w==Q1r:
            print('Firmware loaded')
        else:
            print('Firmware not loaded')
        print('Time: ',time.time()-start)
        return True
    except:
        print('Firmware not loaded')
        print('Time: ',time.time()-start)
        return False

print(check_firmware())
 

Вот некоторое время с загруженной прошивкой:

 TCLab version 0.4.9
Arduino Leonardo connected on port COM4 at 115200 baud.
TCLab Firmware 2.0.1 Arduino Leonardo/Micro.
TCLab Firmware 2.0.1 Arduino Leonardo/Micro
TCLab disconnected successfully.
Firmware loaded
Time:  4.687340974807739
True
 

Вот время без загруженной прошивки:

 TCLab version 0.4.9
Firmware not loaded
Time:  8.068862199783325
False
 

Функция возвращает True значение или False в зависимости от того, обнаруживает ли она встроенное ПО.