Программирование серийного описания

Можно ли запрограммировать собственное описание, чтобы моя программа на Python могла точно знать, к какому USB-порту подключаться для этого конкретного программирования?

Он должен иметь возможность найти любую плату с этой программой, поэтому лучший подход — это запрограммировать собственное описание с помощью загружаемой активной программы.

Я хочу, чтобы моя установка могла работать с несколькими платами Arduino и всегда знать, какой USB использовать для каждого конкретного случая.

Это находит обычное устройство Arduino:

for port in serial.tools.list_ports.comports():
    if "Arduino" in port.description:
        print "Arduino device!"

Но я хочу что-то вроде этого:

for port in serial.tools.list_ports.comports():
    if "proximity_sensor" in port.description:
        print "My specific Arduino program!"

, 👍0

Обсуждение

Использовать параметр serial_number, чтобы найти конкретную плату?, @Majenko

Да, это найдет одну конкретную доску. Я хочу найти серию плат со специфическим программированием. Я обновлю свой первоначальный вопрос, чтобы прояснить это., @Espen


1 ответ


Лучший ответ:

1

На обычной плате Arduino нет, это невозможно с точки зрения скетча. С помощью платы Leonardo или аналогичной платы на базе ATMega32U4 можно задать уникальную комбинацию VID/PID и даже, возможно, специальные строки производителя и продукта. Возможно, вы сможете сделать это, создав собственное определение платы в файле boards.txt (или, возможно, манипулируя ядром AVR), но я никогда не пробовал такого рода вещи с Arduino, поэтому не могу ручаться, насколько это будет просто.

Однако (здесь идет бесстыдная самореклама...), если вы откажетесь от Arduino и будете использовать плату ChipKIT, такую как Lenny (или любую другую плату ChipKIT с прямым USB-разъемом), соединение, например, платы Fubarino), тогда можно создать полностью собственный профиль USB из вашего скетча, включая VID/PID, строки производителя и продукта и даже то, какие устройства реализует плата. Например:

USBFS usbDevice;
USBManager USB(usbDevice, 0xf055, 0x1234, "Espentech", "My Little Widget");
CDCACM USBSerial;

void setup() {
    USB.addDevice(USBSerial);
    USB.begin();
}

void loop() {
    USBSerial.println(millis());
    delay(1000);
}

Что приводит к:

[  661.328155] usb 2-1.2.7: new full-speed USB device number 10 using ehci-pci
[  661.458613] usb 2-1.2.7: New USB device found, idVendor=f055, idProduct=1234
[  661.458616] usb 2-1.2.7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  661.458619] usb 2-1.2.7: Product: My Little Widget
[  661.458621] usb 2-1.2.7: Manufacturer: Espentech
[  661.458623] usb 2-1.2.7: SerialNumber: CK2660A05312F3
[  661.459181] cdc_acm 2-1.2.7:1.0: ttyACM0: USB ACM device
,