> For the complete documentation index, see [llms.txt](https://theiotlearninginitiative.gitbook.io/embedded-linux/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://theiotlearninginitiative.gitbook.io/embedded-linux/application-development/nodejs.md).

# NodeJS

> In software development, Node.js is an open-source, cross-platform runtime environment for developing server-side Web applications. Although Node.js is not a JavaScript framework, many of its basic modules are written in JavaScript, and developers can write new modules in JavaScript. The runtime environment interprets JavaScript using Google's V8 JavaScript engine. [Wikipedia](https://en.wikipedia.org/wiki/Node.js)

* [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwaldron/idiomatic.js)
* [A set of node-red nodes for connecting to johnny-five IO Plugins](https://github.com/monteslu/node-red-contrib-gpio)
* [Intel Galileo & Intel Edison IO Plugin for Johnny-Five](https://github.com/rwaldron/galileo-io/)
* [Debug Node js remotely on Intel Edison with Jetbrains Idea](https://m2aglabs.com/2015/11/04/debug-node-js-remotely-on-intel-edison-with-jetbrains-idea/)
* [Arduino Experimenter's Guide for NodeJS](http://node-ardx.org/)
* [JavaScript: The Perfect Language for the Internet of Things (IoT)](https://blog.jscrambler.com/javascript-the-perfect-language-for-the-internet-of-things-iot/)
* [Node.Js for Embedded Systems](http://embeddednodejs.com/chapters.html)
* [Programming the Internet of Things with Node.Js](http://cdn.oreillystatic.com/en/assets/1/event/127/Programming%20the%20Internet%20of%20Things%20with%20Node_js%20and%20HTML5%20Presentation.pdf)
* [Fast, reliable, and secure dependency management](https://github.com/yarnpkg/yarn)

## Mraa

```bash
root@edison:~# nano mr.js
```

```javascript
var mraa = require('mraa');
var pinDigital = new mraa.Gpio(13);

console.log('MRAA Version: ' + m.getVersion());

pinDigital.dir(mraa.DIR_OUT);
pinDigital.write(1);
```

```bash
root@edison:~# node mr.js
```

## Nodejs, Socket.io and Intel Edison

```bash
root@edison:~# npm install -g express socket.io
-\|/-\|/-\|/-\-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/--\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\s
��├��─��─ escape-html@1.0.3
��├��─��─ range-parser@1.0.3
...
��├��─��─ socket.io-adapter@0.4.0 (socket.io-parser@2.2.2)
��└��─��─ socket.io-client@1.4.5 (to-array@0.1.4, indexof@0.0.1, component-
root@edison:~# git clone https://github.com/m2aglabs/socket.io-demo.git
Cloning into 'socket.io-demo'...
remote: Counting objects: 22, done.
remote: Total 22 (delta 0), reused 0 (delta 0), pack-reused 22
Unpacking objects: 100% (22/22), done.
Checking connectivity... done.
root@edison:~# cd socket.io-demo/
root@edison:~/socket.io-demo# ls
LICENSE.md        icon.png          package.json
README.md         index.html        thermo_demo.xdk
app.js            js                thermo_demo.xdke
root@edison:~/socket.io-demo# node app.js 
MRAA Version: v0.8.0
```

In a web browser go to <http://192.168.1.65:8085/>

## Using a Rotary Encoder on Intel Edison, XDK

* [Rotary Encoder Demo](https://github.com/m2aglabs/rotary_encoder_demo)

Requirements

* Grove Rotary Encoders on D2
* Grove Button on D4

```bash
itot@edison:~# git clone https://github.com/m2aglabs/rotary_encoder_demo.git
Cloning into 'rotary_encoder_demo'...
remote: Counting objects: 25, done.
remote: Total 25 (delta 0), reused 0 (delta 0), pack-reused 25
Unpacking objects: 100% (25/25), done.
Checking connectivity... done.
root@edison:~/trash# cd rotary_encoder_demo/
root@edison:~/trash/rotary_encoder_demo# ls
LICENSE.md        index.html        rotary_demo.xdk
README.md         js                rotary_demo.xdke
icon.png          package.json      server.js
root@edison:~/rotary_encoder_demo# node server.js 
MRAA Version: v0.8.0
```

In a web browser go to <http://192.168.1.65:8085/>

## NodeJS Modules

```bash
root@edison:~# ls /usr/lib/node_modules/
iotkit                    jsupm_grovevdiv           jsupm_mpl3115a2
iotkit-agent              jsupm_grovewater          jsupm_mpr121
iotkit-comm               jsupm_grovewfs            jsupm_mpu9150
jsupm_a110x               jsupm_guvas12d            jsupm_mq303a
jsupm_ad8232              jsupm_h3lis331dl          jsupm_my9221
jsupm_adafruitms1438      jsupm_hcsr04              jsupm_nrf24l01
jsupm_adafruitss          jsupm_hm11                jsupm_nrf8001
jsupm_adc121c021          jsupm_hmc5883l            jsupm_nunchuck
jsupm_adis16448           jsupm_hmtrp               jsupm_otp538u
jsupm_adxl335             jsupm_hp20x               jsupm_pca9685
jsupm_adxl345             jsupm_ht9170              jsupm_pn532
jsupm_am2315              jsupm_htu21d              jsupm_ppd42ns
jsupm_apds9002            jsupm_hx711               jsupm_pulsensor
jsupm_at42qt1070          jsupm_i2clcd              jsupm_rfr359f
jsupm_biss0001            jsupm_ina132              jsupm_rgbringcoder
jsupm_bmpx8x              jsupm_isd1820             jsupm_rotaryencoder
jsupm_buzzer              jsupm_itg3200             jsupm_rpr220
jsupm_cjq4435             jsupm_joystick12          jsupm_servo
jsupm_ds1307              jsupm_l298                jsupm_si114x
jsupm_ecs1030             jsupm_ldt0028             jsupm_sm130
jsupm_enc03r              jsupm_lm35                jsupm_st7735
jsupm_flex                jsupm_lol                 jsupm_stepmotor
jsupm_gas                 jsupm_loudness            jsupm_sx6119
jsupm_gp2y0a              jsupm_lpd8806             jsupm_ta12200
jsupm_grove               jsupm_lsm303              jsupm_tcs3414cs
jsupm_grovecircularled    jsupm_lsm9ds0             jsupm_th02
jsupm_grovecollision      jsupm_m24lr64e            jsupm_tm1637
jsupm_groveehr            jsupm_max31723            jsupm_tsl2561
jsupm_groveeldriver       jsupm_max31855            jsupm_ttp223
jsupm_groveelectromagnet  jsupm_max44000            jsupm_ublox6
jsupm_groveemg            jsupm_max5487             jsupm_uln200xa
jsupm_grovegprs           jsupm_maxds3231m          jsupm_waterlevel
jsupm_grovegsr            jsupm_maxsonarez          jsupm_wheelencoder
jsupm_grovelinefinder     jsupm_mg811               jsupm_wt5001
jsupm_grovemd             jsupm_mhz16               jsupm_yg1006
jsupm_grovemoisture       jsupm_mic                 jsupm_zfm20
jsupm_groveo2             jsupm_mlx90614            mraa
jsupm_grovescam           jsupm_mma7455             npm
jsupm_grovespeaker        jsupm_mma7660
root@edison:~#
```

## NodeJS Edison-Cli

```bash
xe1gyq@jessie:~$ sudo npm install -g edison-cli
npm WARN deprecated graceful-fs@3.0.8: graceful-fs v3.0.0 and before will fail on node releases >= v6.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.

> ws@0.4.32 install /usr/local/lib/node_modules/edison-cli/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/usr/local/lib/node_modules/edison-cli/node_modules/ws/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node: Finished
  COPY Release/bufferutil.node
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  SOLINK_MODULE(target) Release/obj.target/validation.node: Finished
  COPY Release/validation.node
make: Leaving directory '/usr/local/lib/node_modules/edison-cli/node_modules/ws/build'
/usr/local/bin/edison-cli -> /usr/local/lib/node_modules/edison-cli/bin/edison-cli
edison-cli@2.0.0 /usr/local/lib/node_modules/edison-cli
├── commander@2.9.0 (graceful-readlink@1.0.1)
├── temporary@0.0.8 (package@1.0.1)
├── mdns-js@0.1.5 (debug@0.8.1)
├── fstream@1.0.8 (inherits@2.0.1, graceful-fs@4.1.3, mkdirp@0.5.1, rimraf@2.5.2)
├── tar-edison@0.1.16 (inherits@1.0.2, block-stream@0.0.8, fstream@0.1.31)
└── ws@0.4.32 (tinycolor@0.0.1, options@0.0.6, commander@2.1.0, nan@1.0.0)
xe1gyq@jessie:~$ edison-cli list
Edison Devices Found: 2
1 - 192.168.1.70
2 - 192.168.1.70
xe1gyq@jessie:~$
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://theiotlearninginitiative.gitbook.io/embedded-linux/application-development/nodejs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
