node.js - 如何从节点 js 到 ftdi 进行通信?(不带 ftdi 模块)
问题描述
我正在使用 nodejs 对一些东西进行排序,然后将其发送到 FTDI,但我无法弄清楚如何去做。
我尝试从 npm 安装ftdi,但它的安装脚本失败了,所以现在我想知道没有它怎么办(教一个人钓鱼)。我对让那个特定的包工作不感兴趣,但我真的很想知道它是如何工作的。
到目前为止,我的逻辑是这样的:
我已经为 ftdi 安装了驱动程序。我的信念是,当我将它连接到我的计算机时,它和我的计算机会就如何通信达成一致。这个协议是什么,我想知道。也许关于如何发送/接收的参数?
我已经安装了一种从节点 js 连接到 usb 的方法,在这种情况下,我使用的是npm usb。也许有更直接的路线?
serialport
我在搜索中看到了。我应该能够使用节点 USB 找到我的 ftdi。我尝试过使用
usb.getDeviceList()
,但没有办法从列表中辨别出什么是什么。一旦我选择了设备,我应该能够向它发送数据(我的计算机处理如何发生这种情况的物流)。
所有这些看起来都正确吗?或者,是否有人愿意向我展示一个查找 ftdi 设备并发送串行数据的小示例(假设已安装驱动程序)?
解决方案
在这个网站上找到了答案:https ://itp.nyu.edu/physcomp/labs/labs-serial-communication/lab-serial-communication-with-node-js/
从 ftdi 安装驱动程序。他们将为您的操作系统提供最新的说明。
安装
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 驱动程序发生了什么,但这可能是另一个问答。
推荐阅读
- python - Jupyter 没有启动
- javascript - Firestore 执行后需要很长时间才能结束执行
- android - 延迟协程中的挂起函数不起作用
- pandas - 熊猫数据框列中的特殊计数
- rust - 更改 Rust 打印函数的默认文件描述符
- javascript - 从 HTML 标记中删除事件
- flutter - I want to initialize the state. ( RiverPod : StateNotifier )
- android - Android Parcelable 问题 - 解组时出现 ClassNotFoundException
- r - R - 如何从 2 列中提取信息
- sql - 合并记录以显示开始日期和结束日期 SQL