npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@peapodtech/peapodos

v0.1.1

Published

Main software for PeaPod.

Readme

PeaPod OS

issuesopen issuesclosed opensource coffee 24/7 FLDSMDFR

Main software for PeaPod.

A cloud-connected isolated and automated plant growth environment, able to generate any environment from a combination of independent environment parameters.

Designed as both a hassle-free food production system and a research tool for precise and distributed mapping of the plant-environment relationship.


Table of Contents


Background


Production

Setting Up Raspberry Pi

The following are performed on a computer:

  1. Format a microSD card (>=4GB) with a single FAT partition.
  2. Download the Raspberry Pi Imager (Download).
  3. Flash the SD card with a Raspberry Pi OS Lite image.

Note: In Future, a custom PeaPod Raspberry Pi OS Lite image will be released with steps 5, 6, and 12 already complete.

  1. Plug in a keyboard and display, insert the microSD card, and power the Raspberry Pi device.

The following are performed on the Raspberry Pi, with a keyboard and monitor:

  1. Login with the default username (pi) and password (raspberry).
  2. Execute sudo raspi-config and perform these steps to setup the Pi:
    1. System Options > Wireless Lan - Setup WiFi and connect to the Internet
    2. System Options > Hostname - Set a unique host name (e.g. john-peapod)
    3. System Options > Boot/Auto Login - Select Console Autologin
    4. Interface Options > SSH - Enable SSH Server
    5. Interface Options > Serial Port - Disable serial login shell, but Enable the serial port hardware
    6. Performance Options > GPU Memory - 256 (MB)
    7. Localisation Options > Locale (i.e. en_US.UTF-8)
    8. Localisation Options > Timezone (i.e. US > Eastern)
    9. Localisation Options > Keyboard (i.e. Generic 105-key > English (US) > Default > No compose key)
    10. Optional: Advanced Options > Expand Filesystem
    11. Reboot to save: sudo reboot

You can now SSH into the Raspberry Pi to perform the rest of the setup (ssh [email protected], or with VS Code)

Note: In Future, steps 7-11 will be performed at runtime.

  1. Update Packages:
    1. Update package listings, upgrade existing packages: sudo apt-get update && sudo apt-get upgrade -y
    2. Install Node.JS, the Node package manager, and avrdude: sudo apt-get install -y nodejs npm avrdude python3-venv (could take a while)
    3. Install main software package: sudo npm i -g @peapodtech/peapodos --save
  1. Install PlatformIO Core with python3 -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"

  2. Create a custom configuration file for the AVR flash utility avrdude to be able to program the Arduino Nano via ICSP over the Raspberry Pi's GPIO pins:

    1. Create a local copy of the avrdude configuration file with cp /etc/avrdude.conf ~/software/microcontroller/avrdude_gpio.conf, then modify your copy with nano ~/software/microcontroller/avrdude_gpio.conf. Copy the following to the end of the file:

      # Raspberry Pi GPIO configuration for avrdude.
      programmer
        id    = "peapod";
        desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
        type  = "linuxgpio";
        reset = 5;
        sck   = 6;
        mosi  = 12;
        miso  = 13;
      ;

      (Ctrl-O to save, Ctrl-X to exit)

    2. Verify the configuration and connection to the Arduino with sudo avrdude -p m328p -C/avrdude_gpio.conf -c peapod -v. A successful output should look something like:

      avrdude: Version 6.3-20171130
           Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
           Copyright (c) 2007-2014 Joerg Wunsch
      
           System wide configuration file is "/home/pi/avrdude_gpio.conf"
           User configuration file is "/root/.avrduderc"
           User configuration file does not exist or is not a regular file, skipping
      
           Using Port                    : unknown
           Using Programmer              : peapod
           AVR Part                      : ATmega328P
           Chip Erase delay              : 9000 us
           PAGEL                         : PD7
           BS2                           : PC2
           RESET disposition             : dedicated
           RETRY pulse                   : SCK
           serial program mode           : yes
           parallel program mode         : yes
           Timeout                       : 200
           StabDelay                     : 100
           CmdexeDelay                   : 25
           SyncLoops                     : 32
           ByteDelay                     : 0
           PollIndex                     : 3
           PollValue                     : 0x53
           Memory Detail                 :
      
                                    Block Poll               Page                       Polled
             Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
             ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
             eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
             flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
             lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
             hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
             efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
             lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
             calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
             signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
      
           Programmer Type : linuxgpio
           Description     : Use the Linux sysfs interface to bitbang GPIO lines
           Pin assignment  : /sys/class/gpio/gpio{n}
             RESET   =  8
             SCK     =  11
             MOSI    =  10
             MISO    =  9
      
      avrdude: AVR device initialized and ready to accept instructions
      
      Reading | ################################################## | 100% 0.00s
      
      avrdude: Device signature = 0x1e950f (probably m328p)
      avrdude: safemode: lfuse reads as FF
      avrdude: safemode: hfuse reads as DA
      avrdude: safemode: efuse reads as FD
      
      avrdude: safemode: lfuse reads as FF
      avrdude: safemode: hfuse reads as DA
      avrdude: safemode: efuse reads as FD
      avrdude: safemode: Fuses OK (E:FD, H:DA, L:FF)
      
      avrdude done.  Thank you.
  3. Perform first-time flashing with ~/.platformio/penv/bin/platformio run -d ~/software/microcontroller/ --target upload

  4. Edit the sudoers file to allow avrdude to be executed using sudo without a password:

    1. Open the sudoers file: sudo visudo

    2. Add the following line to the end (assuming your username is pi, the hostname is peapod, and the avrdude binary is located at /usr/bin/avrdude):

      pi peapod = (root) NOPASSWD: /usr/bin/avrdude

      (Ctrl-O to save, Ctrl-X to exit; avrdude can be located with whereis avrdude)

  5. Install the UV4L camera library:

    1. curl https://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add -
    2. Add the package listings: echo "deb https://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main" | sudo tee /etc/apt/sources.list.d/uv4l.list
    3. Update packages: sudo apt-get update
    4. Install the core library, the Raspberry Pi driver, extra scripts, adn WebRTC support: sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras uv4l-webrtc-armv6
  6. Populate a .env file with Firebase and Google and/or GitHub auth keys (a template is provided as .env.template), as well as the field SERIALPORT="/dev/ttyS0" (Raspberry Pi Zero 2 W GPIO mini-UART).

  7. Run the main program by executing peapodos.

Development

Arduino Test Suite

To run the PlatformIO Arduino test suite: ~/.platformio/penv/bin/platformio test -d ~/software/microcontroller/

Raspberry Pi Serial Testing

To test the GPIO serial port (/dev/ttyS0), connect GPIO pins 8 and 10 (TX and RX) and execute the following:

  1. Install the Python package manager pip: sudo apt-get install pip
  2. Install the Serial package pyserial: pip install pyserial
  3. Execute the test script: python ~/PeaPod/software/tests/serialTest.py

Correct output should look like:

Serial port '/dev/ttyS0' ready for test:
Sent 20 bytes: 'Testing Raspberry Pi GPIO serial port ...'
Received 20 bytes: 'Testing Raspberry Pi GPIO serial port ...'
Port '/dev/ttyS0' is is setup correctly!

Build from Source

  1. Install TypeScript language support and compiler, as well as a Node build tool: sudo npm install -g typescript
  2. Clone source
  3. Navigate to software/ folder
  4. Build the serialport package from source: sudo npm install serialport --unsafe-perm --build-from-source
  5. Install all other Node dependencies: npm i
  6. Compile the source with tsc and execute with node .