我如何从节点 js 与 ftdi 通信? (没有 ftdi 模块)
How can I communicate from node js to ftdi? (without ftdi module)
我正在使用 nodejs 对一些内容进行排序,然后将其发送到 FTDI,但我不知道该怎么做。
我尝试从 npm 安装 ftdi,但它的安装脚本失败了,所以现在我想知道没有它怎么办(授之以渔)。我对让那个特定的包工作不感兴趣,但我真的很想知道它是如何工作的。
到目前为止我的逻辑是这样的:
我已经安装了 ftdi 的驱动程序。我相信当我将它连接到我的电脑时,它和我的电脑就如何通信达成了协议。这个协议是什么,我想知道。或许参数就如何send/receive?
我已经安装了一种从节点 js 连接到 usb 的方法,在本例中我使用的是 npm usb。也许有更直接的路线?我在搜索中看到 serialport
。
我应该可以使用 node usb 找到我的 ftdi。我试过使用 usb.getDeviceList()
,但发现无法辨别列表中的内容。
一旦我选择了设备,我应该能够向它发送数据(我的计算机处理如何发生的逻辑)。
所有这些看起来都正确吗?或者,有人愿意向我展示一个查找 ftdi 设备并向其发送串行数据的小示例(假设已安装驱动程序)吗?
在此站点上找到答案:https://itp.nyu.edu/physcomp/labs/labs-serial-communication/lab-serial-communication-with-node-js/
从 ftdi 安装驱动程序。他们会收到关于您 os.
的 most 最近的说明
安装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 驱动程序发生了什么,但这可能是另一个问答。
我正在使用 nodejs 对一些内容进行排序,然后将其发送到 FTDI,但我不知道该怎么做。
我尝试从 npm 安装 ftdi,但它的安装脚本失败了,所以现在我想知道没有它怎么办(授之以渔)。我对让那个特定的包工作不感兴趣,但我真的很想知道它是如何工作的。
到目前为止我的逻辑是这样的:
我已经安装了 ftdi 的驱动程序。我相信当我将它连接到我的电脑时,它和我的电脑就如何通信达成了协议。这个协议是什么,我想知道。或许参数就如何send/receive?
我已经安装了一种从节点 js 连接到 usb 的方法,在本例中我使用的是 npm usb。也许有更直接的路线?我在搜索中看到
serialport
。我应该可以使用 node usb 找到我的 ftdi。我试过使用
usb.getDeviceList()
,但发现无法辨别列表中的内容。一旦我选择了设备,我应该能够向它发送数据(我的计算机处理如何发生的逻辑)。
所有这些看起来都正确吗?或者,有人愿意向我展示一个查找 ftdi 设备并向其发送串行数据的小示例(假设已安装驱动程序)吗?
在此站点上找到答案:https://itp.nyu.edu/physcomp/labs/labs-serial-communication/lab-serial-communication-with-node-js/
从 ftdi 安装驱动程序。他们会收到关于您 os.
的 most 最近的说明
安装
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 驱动程序发生了什么,但这可能是另一个问答。