如何从Node js到ftdi通讯? (不带ftdi模块)

时间:2019-04-14 20:03:23

标签: node.js ftdi

我正在使用nodejs对一些东西进行排序,然后将这些东西发送到FTDI,但是我不知道该怎么做。

我尝试从npm安装ftdi,但是其安装脚本失败,所以现在我想知道如何不使用它(教别人钓鱼)。我对使该特定程序包正常工作不感兴趣,但我真的很想知道它是如何工作的。

到目前为止,我的逻辑是这样:

  1. 我已经安装了ftdi的驱动程序。我的信念是,当我将其连接到计算机时,它与计算机就如何通信达成了协议。我想知道这个协议是什么。也许是有关如何发送/接收的参数?

  2. 我已经安装了一种从节点js连接到usb的方法,在这种情况下,我正在使用npm usb。也许有更直接的路线?我在搜索中看到serialport

  3. 我应该能够使用节点usb找到我的ftdi。我尝试使用usb.getDeviceList(),但找不到从列表中分辨出什么的方法。

  4. 一旦我选择了设备,我就应该能够向它发送数据(用我的计算机来处理这种情况的发生)。

所有这些似乎都正确吗?或者,有人愿意给我看一个找到ftdi设备并发送串行数据(假设已安装驱动程序)的小例子吗?

1 个答案:

答案 0 :(得分:0)

在此网站上找到了答案:https://itp.nyu.edu/physcomp/labs/labs-serial-communication/lab-serial-communication-with-node-js/

    ftdi的
  1. 安装驱动程序。他们将为您的操作系统提供最新的说明。

  2. 安装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驱动程序会发生什么,但这可能是另一个问答。