如何从节点js到ftdi进行通信? (没有ftdi模块)

问题描述 投票:1回答:1

我正在使用nodejs对一些东西进行排序,然后将其发送到FTDI,但我无法弄清楚如何这样做。

我尝试从npm安装ftdi,但它的安装脚本失败了,所以现在我想知道如何不用它(教一个钓鱼)。我不想让这个特定的包工作,但我真的很想知道它是如何工作的。

到目前为止我的逻辑是:

  1. 我已经为ftdi安装了一个驱动程序。我的意思是,当我将它连接到我的计算机时,它和我的计算机就如何通信达成了协议。这个协议是什么,我想知道。也许关于如何发送/接收的参数?
  2. 我已经安装了一个从节点js连接到usb的方法,在这种情况下我使用的是npm usb。也许有更直接的路线?我在搜索中看到了serialport
  3. 我应该能够使用节点usb找到我的ftdi。我尝试过使用usb.getDeviceList(),并且没有办法辨别列表中的内容。
  4. 一旦我选择了设备,我应该能够向它发送数据(我的计算机处理如何发生的物流)。

这一切看起来都是正确的吗?或者,是否有人愿意向我展示一个寻找ftdi设备并发送串行数据的小例子(假设安装了驱动程序)?

node.js ftdi
1个回答
1
投票

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

  1. 从ftdi安装驱动程序。他们将为您的操作系统提供最新的说明。
  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驱动程序会发生什么,但这可能是另一个Q&A。

© www.soinside.com 2019 - 2024. All rights reserved.