Как я могу общаться от узла js до ftdi? (без модуля ftdi) - PullRequest
1 голос
/ 14 апреля 2019

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

Я попытался установить ftdi из npm, но его скрипт установки не удался, так что теперь я хотел бы знать, как обойтись без него (научить ловить рыбу).Я не заинтересован в том, чтобы заставить этот конкретный пакет работать, но мне бы очень хотелось узнать, как он работает вместо этого.

Пока моя логика такова:

  1. Я установил драйвер для ftdi.Я считаю, что когда я подключаю его к компьютеру, он и мой компьютер договариваются о том, как общаться.Что это за соглашение, я хотел бы знать.Возможно параметры о том, как отправлять / получать?

  2. Я установил средство подключения к usb с узла js, в этом случае я использую npm usb .Возможно, есть более прямой маршрут?В своих поисках я видел serialport.

  3. Я должен быть в состоянии найти свой ftdi, используя узел usb.Я попытался использовать usb.getDeviceList() и не нашел способа определить, что к чему из списка.

  4. После выбора устройства я смогу отправлять данныек этому (с моей компьютерной логистикой обработки того, как это происходит).

Кажется ли все это правильным?Или кто-нибудь захочет показать мне небольшой пример поиска устройства ftdi и отправки ему последовательных данных (при условии, что драйверы установлены)?

1 Ответ

1 голос
/ 14 апреля 2019

На этом сайте нашли ответ: https://itp.nyu.edu/physcomp/labs/labs-serial-communication/lab-serial-communication-with-node-js/

  1. установить драйвер из ftdi.У них будут самые последние инструкции для вашей ОС.

  2. install npm i serialport

(я использую машинопись, так что конвертируйте этов js, если необходимо)

Затем перечислите все порты.Попробуйте перечислить с подключенным и отключенным ftdi.Вы должны увидеть одну дополнительную запись.Если нет ... извините.Мой был назван "/dev/tty.usbserial-A5XK3RJT"

import SerialPort from 'serialport';

// list serial ports:
SerialPort.list(function (err, ports) {
  ports.forEach(function(port) {
    console.log("PORT", port.comName);
  });
});

Как только у вас есть имя вашего последовательного порта, просто отправьте ему буфер Uint8Array.Например:

import SerialPort from 'serialport';

// baudRate is specific to my project 
const myPort = new SerialPort("/dev/tty.usbserial-A5XK3RJT", { baudRate: 57600 });
​var bellOnMidi = new Uint8Array(3);
bellOnMidi[0] = (0b1001 << 4) + 2;
bellOnMidi[1] = 1;
bellOnMidi[2] = 0;
myPort.write(Buffer.from(bellOnMidi));

​var bellOffMidi = new Uint8Array(3);
bellOffMidi[0] = (0b1000 << 4) + 2;
bellOffMidi[1] = 1;
bellOffMidi[2] = 0;
setTimeout(() => myPort.write(Buffer.from(bellOffMidi)), 500);

Я все еще не уверен, что происходит с драйверами USB, но это, вероятно, для другого Q & A.

...