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 🙏

© 2024 – Pkg Stats / Ryan Hefner

iotz

v0.4.7

Published

a containerized cross compiler box for arduino, arm mbed, espressif, micro-python, raspberry pi and ... more

Downloads

58

Readme

iotz - compile things easy

DISCLAIMER: I use this project for my day to day stuff and I know few other folks do the same. Concerned or have an idea? be vocal and create an issue.

in action

ARM mbed demo

requirements

Install Node.js 8+ and Docker.

!! if you are on Windows, use Linux containers and share the C drive from settings.

how to install

npm i iotz -g
iotz update

You may need sudo to run the update command. Try without sudo first

usage

usage: iotz <command> [options]

A quick start with an Arduino mxchip project

iotz create arduino mxchip myproject
cd myproject
iotz init
iotz compile

or a Raspberry Pi project

iotz create raspberry hello
cd hello
iotz init
iotz make

Alternatively, you might download an online Arduino, ARMmbed, Micropython, Raspberry Pi etc. sample and build it as we did with the tests / examples under test/

see extensions and how things work

The documentation below, applies to all extensions. However, you may find some extension specific details under their README. i.e. arduino mbed raspberry

commands

help

Display available options

version

Show version (semver)

update

Update base container to latest (from Docker registry) and re-install extensions on top of it. If there is a container associated with the current folder, delete that. (force update)

You may re-install iotz via npm install -g iotz to get latest changes. Post install process will automaticall call update command.

clean

Deletes the local container for the current path. Also, cleans up the auto generated files and folders.

compile

Compile the project on given path (may need an iotz.json on path)

compile triggers a set of platform specific commands to build the project on the path. Thus, it may require both target and toolchain are defined under iotz.json file.

A successful init phase (see below) will ensure that you have iotz.json file in place.

Some platforms (extensions) do not require a particular target hence you won't see issue by not having an iotz.json file in place.

connect

connect <additional args for docker>

Runs the current container bash in an interactive mode (tty is enabled). ../<current path> is attached by default.

create

create <toolchain name> <board name> <optional project name>

Creates an empty project for given toolchain and optinally board.

i.e.

iotz create arduino yun

The command above will create a sampleApplication.ino file and iotz.json config file on the current folder. If you give a project name as shown below;

iotz create arduino yun new_project

This will create a folder named new_project and put the code and config file under it.

<toolchain name> is the name of extension. i.e. arduino, mbed, raspberry... You may find the <board name>from here

Once creation is done, you need to call iotz init on the target project folder to setup the specialized container.

export

Exports a makefile (depends to extension)

init

init <optional target board name>

Initialize a specialized container for current path.

iotz initializes a specialized container per project. init phase is required for specialization. iotz detects the extension required for the project during this phase and installs as defined by the extension itself.

Beware. If you have previously initialized iotz for a project (path), once you call it again, it will clean up the previous initialization.

run

run <cmd> <args>

Runs the <cmd> on container's bash.

i.e. iotz run ls -l

apt / apt-get / pip / npm

Use package managers. i.e. apt-get install -y wget would add wget into the current container.

iotz runs on top of Docker containers. As a result, your scripts won't change the container. i.e. iotz run apt install -y wget will work but once the execution is complete, container will be back to its' original state. So, if you want to add packages into actual image, use the commands apt, apt-get, pip, npm directly.

P.S. Use -y with apt and apt-get P.S. npm is not available by default but once you install node package via apt, npm command will update the container image going forward.

predefined extensions

  arduino <args>                           :  run arduino cli with given args
  make <args>                              :  run make command
  mbed <args>                              :  run mbed cli with given args
  raspberry                                :  shows make, cmake, and gcc gnuhf versions
  micropython

other examples

  run:
    iotz run ls -l
  make:
    iotz make
  mbed:
    iotz mbed target -S
  arduino:
    iotz arduino --install-boards AZ3166:stm32f4

iotz.json file

Introducing a yet another project file is not desirable. Yet, a basic configuration is needed to keep toolchain user from repeating entries.

A basic iotz.json file for mxchip AZ3166

{
  "toolchain": "arduino",
  "target": "mxchip",
  "filename": "sample.ino"
}

mbed nucleo l476rg with a lib

{
  "toolchain": "mbed",
  "target": "nucleo_l476rg",
  "deps":
  [
    {
      "name": "NDefLib",
      "url" : "https://developer.mbed.org/teams/ST/code/NDefLib/#31f727872290"
    }
  ]
}

WARNING: deps names are case sensitive (and optional)

toolchain: name of the extension. i.e. arduino or mbed or anything else!

target: target device name. see board names

deps: array of {name, url} pairs to defined dependencies

filename: main source code filename.

mountConfig: By default, iotz mounts from ../. If depth of the current path is 3 or more folders, iotz mounts from ../... This approach may not fit for all. So, you may use mountConfig to define a relative mount point manually. i.e. "mountConfig": "../build"

_*Depending to extension, you might have other required definitions.

F.A.Q

How to update iotz?

npm i -g iotz

Once it's complete

iotz update

You may need sudo to run the update command. Try without sudo first

where can I find the target board names

iotz doesn't control the extensions and what targets those extensions support. You will find a basic info below. Please check extension's page for better coverage.

ARM mbed target names are available from https://os.mbed.com/. Simply find your board there. On the board page, you will find the TARGET NAME for that board.

Arduino target names might be a bit more tricky to find but the list below should help for starters;

  AZ3166 MXCHIP_AZ3166 - arduino yun - arduino uno - arduino diecimila
  arduino nano - arduino mega - arduino megaADK - arduino leonardo - arduino leonardoeth
  arduino micro - arduino esplora - arduino mini - arduino ethernet - arduino fio
  arduino bt - arduino pro - arduino atmegang - arduino robotControl - arduino robotMotor
  arduino gemma - arduino circuitplay32u4cat - arduino yunmini - arduino chiwawa - arduino one
  arduino unowifi - esp8266 generic - esp8266 esp8285 - esp8266 espduino - esp8266 huzzah
  esp8266 espresso_lite_v1 - esp8266 espresso_lite_v2 - esp8266 phoenix_v1 - esp8266 phoenix_v2 - esp8266 nodemcu
  esp8266 nodemcuv2 - esp8266 modwifi - esp8266 thing - esp8266 thingdev - esp8266 esp210
  esp8266 d1_mini - esp8266 d1_mini_pro - esp8266 d1_mini_lite - esp8266 d1 - esp8266 espino
  esp8266 espinotee - esp8266 wifinfo - esp8266 arduino-esp8266 - esp8266 gen4iod - esp8266 oak

iotz arduino extension helps with the names. i.e. iotz init arduino mxchip is sufficient instead of iotz init arduino MXCHIP_AZ3166

how your project folder structure should look like?

Similar to folder structure for ARMmbed or Arduino or other.. Keep it the same! If you are just starting and don't have a particular structure, please visit their websites and see the sample projects.

You might also visit test/ folder and see by yourself. Also, see run.batch for the test commands.

how containers are managed ?

iotz creates a sub container that is tailored for your project and depend on azureiot/iotz container.

In order to benefit from docker caching, below naming is used.

aiot_iotz_ folder_ino

i.e. aiot_iotz_7396162

more info is available here

how should I clean up the containers ?

Try pruning! -> https://docs.docker.com/config/pruning/

unable to find mbed or arduino or arm-linux-gnueabihf-g++ ....

Update might possibly fix it.

Try iotz update and / or iotz clean

open preproc/ctags_target_for_gcc_minus_e.cpp: no such file or directory

Try iotz clean and then compile again

roadmap

See active list of features under development.

contributing

Please test the changes and code style (eslint) prior to sending a PR. (Running the tests may take some serious amount of time and your network traffic.)

cd test && node runtests.js

LICENSE

MIT