Novelty Polygonal Mathematics


    2.0.3 • Public • Published


    Node.js interface for pigpiod on the Raspberry Pi Zero, 1, 2, or 3.




    Step 1

    This step can be skipped on Raspbian Jessie 2016-05-10 or newer as it includes the pigpio C library and pigpiod.

    The pigpio package is based on the pigpio C library so the C library needs to be installed first. Version V41 or higher of the pigpio C library is required. It can be installed with the following commands:

    cd PIGPIO
    sudo make install

    Step 2

    npm install pigpio

    I have developed and tested on Node.js 6.2.0, so it should be working ok here. It might very well work on the earlier versions of Node.js.


    const pigpiod = require('pigpiod');
    let pi  = pigpiod.pigpio_start();
    let spi = pigpiod.spi_open(pi, 0); // SPI channel 0
    // read A-D converter value on MCP3204 on SPI channel 0, MCP channel 0
    const a2dValue = pigpiod.mcp3204(pi, spi, 0);
    console.log(`a2dValue = ${a2dValue}`);
    // DHT22 (this is a C-based implementation reading the sensor data)
    dhtResult = pigpiod.dht22(pi, 18); // read DHT22 sensor on port 18
    pigpiod.spi_close(pi, spi);

    Standard pigpiod API

    Following APIs are already implemented. See for details:

    Where not explicitly stated, the parameters are the same.

    The error handling is different, though: Instead of returning an error code, an exception is thrown.

    [x] pigpio_start Connects to a pigpio daemon
    [x] pigpio_stop Disconnects from a pigpio daemon
    [x] set_mode Set a GPIO mode
    [x] get_mode Get a GPIO mode
    [x] set_pull_up_down Set/clear GPIO pull up/down resistor
    [x] gpio_read Read a GPIO
    [x] gpio_write Write a GPIO
    [ ] set_PWM_dutycycle Start/stop PWM pulses on a GPIO
    [ ] get_PWM_dutycycle Get the PWM dutycycle in use on a GPIO
    [ ] set_servo_pulsewidth Start/stop servo pulses on a GPIO
    [ ] get_servo_pulsewidth Get the servo pulsewidth in use on a GPIO
    [x] callback Create GPIO level change callback
    [ ] callback_ex Create GPIO level change callback
    [x] callback_cancel Cancel a callback
    [ ] wait_for_edge Wait for GPIO level change
    [ ] gpio_trigger Send a trigger pulse to a GPIO.
    [x] set_watchdog Set a watchdog on a GPIO.
    [ ] set_PWM_range Configure PWM range for a GPIO
    [ ] get_PWM_range Get configured PWM range for a GPIO
    [ ] set_PWM_frequency Configure PWM frequency for a GPIO
    [ ] get_PWM_frequency Get configured PWM frequency for a GPIO
    [ ] read_bank_1 Read all GPIO in bank 1
    [ ] read_bank_2 Read all GPIO in bank 2
    [ ] clear_bank_1 Clear selected GPIO in bank 1
    [ ] clear_bank_2 Clear selected GPIO in bank 2
    [ ] set_bank_1 Set selected GPIO in bank 1
    [ ] set_bank_2 Set selected GPIO in bank 2
    [ ] start_thread Start a new thread
    [ ] stop_thread Stop a previously started thread
    [ ] get_PWM_real_range Get underlying PWM range for a GPIO
    [ ] notify_open Request a notification handle
    [ ] notify_begin Start notifications for selected GPIO
    [ ] notify_pause Pause notifications
    [ ] notify_close Close a notification
    [ ] bb_serial_read_open Opens a GPIO for bit bang serial reads
    [ ] bb_serial_read Reads bit bang serial data from a GPIO
    [ ] bb_serial_read_close Closes a GPIO for bit bang serial reads
    [ ] bb_serial_invert Invert serial logic (1 invert, 0 normal)
    [ ] hardware_clock Start hardware clock on supported GPIO
    [ ] hardware_PWM Start hardware PWM on supported GPIO
    [x] set_glitch_filter Set a glitch filter on a GPIO
    [x] set_noise_filter Set a noise filter on a GPIO
    [ ] store_script Store a script
    [ ] run_script Run a stored script
    [ ] script_status Get script status and parameters
    [ ] stop_script Stop a running script
    [ ] delete_script Delete a stored script
    [ ] wave_clear Deletes all waveforms
    [ ] wave_add_new Starts a new waveform
    [ ] wave_add_generic Adds a series of pulses to the waveform
    [ ] wave_add_serial Adds serial data to the waveform
    [ ] wave_create Creates a waveform from added data
    [ ] wave_delete Deletes one or more waveforms
    [ ] wave_send_once Transmits a waveform once
    [ ] wave_send_repeat Transmits a waveform repeatedly
    [ ] wave_send_using_mode Transmits a waveform in the chosen mode
    [ ] wave_chain Transmits a chain of waveforms
    [ ] wave_tx_at Returns the current transmitting waveform
    [ ] wave_tx_busy Checks to see if the waveform has ended
    [ ] wave_tx_stop Aborts the current waveform
    [ ] wave_get_micros Length in microseconds of the current waveform
    [ ] wave_get_high_micros Length of longest waveform so far
    [ ] wave_get_max_micros Absolute maximum allowed micros
    [ ] wave_get_pulses Length in pulses of the current waveform
    [ ] wave_get_high_pulses Length of longest waveform so far
    [ ] wave_get_max_pulses Absolute maximum allowed pulses
    [ ] wave_get_cbs Length in cbs of the current waveform
    [ ] wave_get_high_cbs Length of longest waveform so far
    [ ] wave_get_max_cbs Absolute maximum allowed cbs
    [ ] i2c_open Opens an I2C device
    [ ] i2c_close Closes an I2C device
    [ ] i2c_write_quick smbus write quick
    [ ] i2c_write_byte smbus write byte
    [ ] i2c_read_byte smbus read byte
    [ ] i2c_write_byte_data smbus write byte data
    [ ] i2c_write_word_data smbus write word data
    [ ] i2c_read_byte_data smbus read byte data
    [ ] i2c_read_word_data smbus read word data
    [ ] i2c_process_call smbus process call
    [ ] i2c_write_block_data smbus write block data
    [ ] i2c_read_block_data smbus read block data
    [ ] i2c_block_process_call smbus block process call
    [ ] i2c_write_i2c_block_data smbus write I2C block data
    [ ] i2c_read_i2c_block_data smbus read I2C block data
    [ ] i2c_read_device Reads the raw I2C device
    [ ] i2c_write_device Writes the raw I2C device
    [ ] i2c_zip Performs multiple I2C transactions
    [ ] bb_i2c_open Opens GPIO for bit banging I2C
    [ ] bb_i2c_close Closes GPIO for bit banging I2C
    [ ] bb_i2c_zip Performs multiple bit banged I2C transactions
    [x] spi_open Opens a SPI device
    [x] spi_close Closes a SPI device
    [ ] spi_read Reads bytes from a SPI device
    [ ] spi_write Writes bytes to a SPI device
    [x] spi_xfer Transfers bytes with a SPI device

    | | SERIAL | | --- | --- | --- | | [x] | serial_open | Opens a serial device (/dev/tty*) | | [x] | serial_close | Closes a serial device | | [x] | serial_write_byte | Writes a byte to a serial device | | [x] | serial_read_byte | Reads a byte from a serial device | | [x] | serial_write | Writes bytes to a serial device | | [x] | serial_read | Reads bytes from a serial device | | [x] | serial_data_available | Returns number of bytes ready to be read |

    [ ] custom_1 User custom function 1
    [ ] custom_2 User custom function 2
    [x] get_current_tick Get current tick (microseconds)
    [x] get_hardware_revision Get hardware revision
    [x] get_pigpio_version Get the pigpio version
    [ ] pigpiod_if_version Get the pigpiod_if2 version
    [ ] pigpio_error Get a text description of an error code.
    [1] time_sleep Sleeps for a float number of seconds
    [2] time_time Float number of seconds since the epoch

    1: use js setTimeout() instead.

    2: use moment() or Date() instead.

    API documentation


    pigpio library and pigpiod Thanks to joan2937 for the development and documentation of the pigpio C library.

    pigpio Thanks for fivdi for his work on the pigpio module for Node.js. I used this as the base for my development and got additional development help.

    Breaking change


    The dht22 call has been switched to an asynchronous implementation, returning a promise.


    I have to revert the changes released in 1.0.0, as the async dht22 API works fine in a standalone example, but causes intermittent process hangs in a project using additional API calls.


    npm i @stheine/pigpiod

    DownloadsWeekly Downloads






    Last publish


    • stheine