#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
в зависимости от того, обнаруживает ли она встроенное ПО.