npm 包 spi-device 使用教程

阅读时长 7 分钟读完

前言

在嵌入式系统的开发中,Serial Peripheral Interface (SPI) 是一种常用的通信协议。将其应用于Node.js 开发中,可以实现快速、可靠的数据传输,从而大大简化硬件程序的开发。本文将介绍如何使用 npm 包 spi-device 来管理 SPI 设备,并对其进行配置和数据传输。

硬件

在本次编写的应用中使用的硬件为 Raspberry Pi 3 Model B,上面连接了一个 ADC 模块 (ADS1115),详见ADS1115 Datasheet

准备工作

使用 spi-device 需要硬件上的 SPI 设备连接好,并准备好相关的驱动程序。在 Raspberry Pi 系统中,SPI 通常已经被配置为良好的预设值。要确保 SPI 设备功能正常运行,可以使用以下指令:

安装 SPI 设备库

我们将使用 npm 包 spi-device 来编写 JavaScript 程序。安装该库可以使用以下指令:

构建示例

我们将构建一个简单的模块,其中将从 ADS1115 设备读取单个模拟输入通道。

-- -------------------- ---- -------
----- --- - ----------------------

----- ------ - --
    ------- -----------------
    ----- --
    -------------------- -----
    ----------- -------
-- -
    ------- -----------------
    ----- --
    -------------------- -----
    ----------- -------
---

----- ----------- - -----

-------- ------------------- -------- --- -
    ----- ------- - --
        ----------- ------------------------ - -------- ----- -------
        -------------- ----------------
        ----------- --
        -------- -----
    ---

    ------------------------ ----- -------- -- -
        -- ----- -
            --------
        - ---- -
            ----- -------- - ----------------------------- -- -- - ---------------------------- -- --
            -------- ----------
        -
    ---
-

------------------- ----- ------- -- -
    -- ----- -
        -----------------
        -------
    -

    ------------------- -- ----- ------ -- -
        -------------------
        ---------------
    ---
---

代码解读

模块依赖

首先,加载了 spi-device 模块。这个模块封装了从 SPI 设备读、写、传输数据的底层API。

设备配置

使用 spi-device 读、写设备之前,首先需要将 SPI 设备进行配置,如设备文件、模式、芯片选择等参数。

-- -------------------- ---- -------
----- ------ - --
    ------- -----------------
    ----- --
    -------------------- -----
    ----------- -------
-- -
    ------- -----------------
    ----- --
    -------------------- -----
    ----------- -------
---

这里我们同时配置了两个设备来展示多个设备如何配置。在这个示例中,我们将 SPI 设备文件/dev/spidev0.0、/dev/spidev0.1 分别绑定到这两个配置对象中。

mode 参数设置 SPI 模式。SPI 具有四种不同的模式,通常为数字 0 到 3。

chipSelectActiveLow 参数设置芯片选择信号的极性。它应该是一个布尔值,表示接口极性的引脚是否具有低电位有效特性,此处设置为 true 表示设置起于低电位上。

maxSpeedHz 是 SPI 接口传输的最大速度,最大值为2000000000,本例中设置为 1000000Hz。

这就是我们可选配置中的一些例子,每个 SPI 设备可能有不同的配置,更多信息详见 spi-device API 文档。

读取通道值

本示例主要是读取从 ADS1115 模块的 0 通到读取数字信号。

在运行时,会使用以下代码将配置应用于我们想要打开的设备:

-- -------------------- ---- -------
------------------- ----- ------- -- -
    -- ----- -
        -----------------
        -------
    -

    ------------------- -- ----- ------ -- -
        -------------------
        ---------------
    ---
---

该代码打开了第一个配置对象中的设备(/dev/spidev0.0),并将它传递到readChannel()方法进行读取。

device 参数是读取通道值将要打开的设备对象,channel 参数是要读取的通道号,cb 回调函数是当读取完成后将要执行的函数。

应用发送三个字节的数据包给 ADS1115 设备,将读取的通道编号(PWM 紧随其后),而这些字节的第一位被用于启动单次的 ADC 转换(0x80 字节):

在读写轮流执行的传输完成后,回调函数传递包含一个标志读取值的 Buffer 而不是数据本身。

总结

本文主要介绍了在 Raspberry Pi 中如何使用 spi-device 包来读取 SPI 设备中的数据。必要的步骤包括安装 spi-device 包,设置设备配置,并使用 API 函数进行读写操作。我们编写了一个简单的代码示例来演示如何实现这些步骤,让你可以通过它了解 spi-device 在实践中用法。祝你好运。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/146846