Node.js on Raspberry PI

Juan Pablo Kutianski
Juan Pablo KutianskiCo-fundador at Meetup Node.js Argentina
Node.JS y RaspBerry Pi
     Meetup NodeJS Argentina
RaspBerry Pi
Arquitectura ARMv6 (Broadcom BCM2835, ARM1176JZF-S @700 Mhz)
256 (modelo A o B v1) / 512 Mb de RAM (modelo B v2)
Filesystem en tarjeta SD
Ethernet 10/100 Mbps (solo modelo B, el EC esta conectado via USB 2.0)
2 x USB 2.0 (1x USB 2.0 en el modelo A)
Video HD 1920 x 1080p @ > 30fps (Broadcom VideoCore IV)
Salidas de video HDMI, DSI (no existen displays soportados) y video compuesto
Conector CSI para camaras tipo celular. No existen cámaras soportadas por CSI. La
fundación está desarrollando una de 14 megapixels con lente fijo.
Salidas de audio digital via HDMI y analogica via PWM en conector jack stereo
Soporta protocolo CEC via HDMI
8 GPIO (4 GPIO extras en el Bv2), SPI (2 x multiplexado), I2C, UART (3V3)
Node.js en RaspBerry Pi
Los binarios de la última versión se pueden bajar de http:
//nodejs.org/dist/latest/ en formato .tar.gz
La recomendación es localizarlos en /usr/local/
En el caso de necesitar compilar Node.js se recomienda seguir la guia de Nathan Rajlich para cross
compiling http://n8.io/cross-compiling-nodejs-v0.8/

Algunos módulos necesitan tener instalado node-gyp.
Por lo cual es recomendable instalarlo con "sudo npm install node-gyp -g"


Existen módulos para acceder al GPIO.
Interface entre señales 3V3 y 5V
Acceso al GPIO via SYSFS
1. Exportar el pin 27 via IO via SYSFS
   sudo echo "27" > /sys/class/gpio/export
   al hacer esto aparece el directorio /sys/class/gpio/gpio27
2. Para definir el pin como entrada
   sudo echo "in" > /sys/class/gpio/gpio27/direction
   Para definir el pin como salida
   sudo echo "out" > /sys/class/gpio/gpio27/direction
3. Para invertir la señal en el pin
   sudo echo "1" > /sys/class/gpio/gpio27/active_low
4. Para establecer un estado en el pin
   sudo echo "1" > /sys/class/gpio/gpio27/value
5. Para leer un estado del pin
   sudo cat /sys/class/gpio/gpio27/value
6. Las interrupciones se manejan via poll() de value
WiringPi
WiringPi es similar al lenguaje Wiring de Arduino
Soporta los modulos GertBoard y PiFace.
Tiene mapeo de pins (BCM name, wiring like, pinout)
Tiene librerías para manejo de:
●   I2C
●   SPI
●   SoftPWM
●   Shift()
●   Serial Port
●   Interrupciones
●   LCD

Soporta multi-threading y mutex (mutual exclusions)
Utiliza /dev/mem (que es mas rapido) en lugar de SYSFS.
        Dado que el código tiene que correr como root es potencialmente más inseguro
Modulos para acceder al GPIO via Node.js
GpiO
     https://github.com/EnotionZ/GpiO
pi-gpio
     https://github.com/rakeshpai/pi-gpio
rpi-gpio
     https://github.com/JamesBarwell/rpi-gpio.js
node-wiringpi (wrapper de wiringPi incompleto)
     https://github.com/OhMeadhbh/node-wiringpi
rpi-gpiod (gpio via unix socket)
     https://blog.mayflower.de/2073-Using-GPIO-on-Raspberry-Pi.html
No se recomienda ejecutar como root si la RPi puede ser accedida desde internet. No se
recomienda node-wiringpi ya que debe ser corrido como root dado que wiringPi utiliza /dev/mem
para acceder al GPIO. Utilizar rpi-gpiod en su lugar.
Acceso al modulo 1wire via SYSFS
Cargar los modulos 1wire del kernel
   sudo modprobe w1-gpio
   sudo modprobe w1-therm

El sensor aparece en ls /sys/bus/w1/devices/
   ls -l /sys/bus/w1/devices
   28-000003b0d431 -> ../../../devices/w1_bus_master1/28-000003b0d431
   w1_bus_master1 -> ../../../devices/w1_bus_master1

El archivo w1_slave dentro del directorio del dispositivo
1wire contiene la información de la medición
   cat w1_slave
   87 01 4b 46 7f ff 09 10 48 : crc=48 YES
   87 01 4b 46 7f ff 09 10 48 t=24437

Si el CRC = YES la medición es correcta t = a la
temperatura en °C / 1000
Acceso al modulo 1wire desde Node.js
// Tom Holderness 03/01/2013
// Ref: www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/temperature
var fs = requiere('fs');

function readTemp(id,callback){
  fs.readFile(''/sys/bus/w1/devices/' + id + '/w1_slave'', function(err, buffer)
          {
     if (err){
        console.error(err);
        process.exit(1);
     }

    // Read data from file (using fast node ASCII encoding).
    var data = buffer.toString('ascii').split(" "); // Split by space

    // Extract temperature from string and divide by 1000 to give celsius
    var temp = parseFloat(data[data.length-1].split("=")[1])/1000.0;

    // Round to one decimal place
    temp = Math.round(temp * 10) / 10;

    // Add date/time to temperature
        var data = {
        temperature_record:[{
        unix_time: Date.now(),
        celsius: temp
        }]};

    // Execute call back with data
    callback(data);
  });
};
1 of 9

Recommended

Reporte practica 8 by
Reporte practica 8Reporte practica 8
Reporte practica 8Norma Mónica Fraire Osornio
380 views32 slides
Corrección del examen 2do trimestre by
Corrección del examen 2do trimestreCorrección del examen 2do trimestre
Corrección del examen 2do trimestreXavi Devaluado
121 views2 slides
Utilerías by
Utilerías Utilerías
Utilerías Eva Quiñones
536 views43 slides
Wep by
WepWep
WepJulio Caguano
140 views15 slides
6. RS232 interfaces ARDUINO - 2020 by
6. RS232 interfaces   ARDUINO - 20206. RS232 interfaces   ARDUINO - 2020
6. RS232 interfaces ARDUINO - 2020David Narváez
659 views25 slides

More Related Content

What's hot

Comandos básicos para utilizar squid o squid3 by
Comandos básicos para utilizar squid o squid3Comandos básicos para utilizar squid o squid3
Comandos básicos para utilizar squid o squid3ALBERTO CHUICA
4.4K views1 slide
Comandos configuracion de redes by
Comandos configuracion de redes Comandos configuracion de redes
Comandos configuracion de redes Darlin Diaz
120 views1 slide
Voice OVER IP by
Voice OVER IPVoice OVER IP
Voice OVER IPFundación Proydesa
3.4K views99 slides
Asterix: simplemente... by
Asterix: simplemente...Asterix: simplemente...
Asterix: simplemente...Fundación Proydesa
1.2K views26 slides
Vlsm rip by
Vlsm   rip  Vlsm   rip
Vlsm rip Taringa!
442 views2 slides
Corrección del examen de sistemas informáticos by
Corrección del examen de sistemas informáticosCorrección del examen de sistemas informáticos
Corrección del examen de sistemas informáticosPeque Uli
1.7K views5 slides

What's hot(20)

Comandos básicos para utilizar squid o squid3 by ALBERTO CHUICA
Comandos básicos para utilizar squid o squid3Comandos básicos para utilizar squid o squid3
Comandos básicos para utilizar squid o squid3
ALBERTO CHUICA4.4K views
Comandos configuracion de redes by Darlin Diaz
Comandos configuracion de redes Comandos configuracion de redes
Comandos configuracion de redes
Darlin Diaz120 views
Vlsm rip by Taringa!
Vlsm   rip  Vlsm   rip
Vlsm rip
Taringa!442 views
Corrección del examen de sistemas informáticos by Peque Uli
Corrección del examen de sistemas informáticosCorrección del examen de sistemas informáticos
Corrección del examen de sistemas informáticos
Peque Uli1.7K views
Practica nas andrei by cfgmi
Practica nas andreiPractica nas andrei
Practica nas andrei
cfgmi187 views
Monica Gabriela Oliva Garcia by skapunk
Monica Gabriela Oliva GarciaMonica Gabriela Oliva Garcia
Monica Gabriela Oliva Garcia
skapunk1.3K views
Comandos dispositivos by Joan Diiz
Comandos dispositivosComandos dispositivos
Comandos dispositivos
Joan Diiz102 views
T fase1 103380_a_grupo224 by Camilo Andres
T fase1 103380_a_grupo224T fase1 103380_a_grupo224
T fase1 103380_a_grupo224
Camilo Andres158 views
Asegúr@IT II - Seguridad en VoiP by Chema Alonso
Asegúr@IT II - Seguridad en VoiPAsegúr@IT II - Seguridad en VoiP
Asegúr@IT II - Seguridad en VoiP
Chema Alonso1.3K views
Recovery ios by 1 2d
Recovery iosRecovery ios
Recovery ios
1 2d203 views
Las Variaciones de la Replicación de PostgreSQL by EDB
Las Variaciones de la Replicación de PostgreSQLLas Variaciones de la Replicación de PostgreSQL
Las Variaciones de la Replicación de PostgreSQL
EDB345 views
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013] by RootedCON
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
RootedCON1.5K views

Viewers also liked

Presentacion minecraft-pi SciPyLa2015 by
Presentacion minecraft-pi SciPyLa2015Presentacion minecraft-pi SciPyLa2015
Presentacion minecraft-pi SciPyLa2015José María Guaimas
774 views14 slides
Raspberry pi & Python. UAC by
Raspberry pi & Python. UACRaspberry pi & Python. UAC
Raspberry pi & Python. UACJesus Taboada
492 views11 slides
Jupyter e IPython para manipulación de datos by
Jupyter e IPython para manipulación de datosJupyter e IPython para manipulación de datos
Jupyter e IPython para manipulación de datosSoftware Guru
952 views8 slides
Programación con Pygame VI by
Programación con Pygame VIProgramación con Pygame VI
Programación con Pygame VIFernando Salamero
1.2K views10 slides
Programación con Pygame (II) by
Programación con Pygame (II)Programación con Pygame (II)
Programación con Pygame (II)Fernando Salamero
3.5K views59 slides
Intro Pygame Capitulo 2 by
Intro Pygame Capitulo 2Intro Pygame Capitulo 2
Intro Pygame Capitulo 2Ricardo Daniel Quiroga
1.7K views18 slides

Viewers also liked(19)

Raspberry pi & Python. UAC by Jesus Taboada
Raspberry pi & Python. UACRaspberry pi & Python. UAC
Raspberry pi & Python. UAC
Jesus Taboada492 views
Jupyter e IPython para manipulación de datos by Software Guru
Jupyter e IPython para manipulación de datosJupyter e IPython para manipulación de datos
Jupyter e IPython para manipulación de datos
Software Guru952 views
Transmisión de datos de temperatura por medio de red lan by Rubén Loredo
Transmisión de datos de temperatura por medio de red lanTransmisión de datos de temperatura por medio de red lan
Transmisión de datos de temperatura por medio de red lan
Rubén Loredo1.1K views

Similar to Node.js on Raspberry PI

Ajustes posteriores a la instalación de cent os 6 by
Ajustes posteriores a la instalación de cent os 6Ajustes posteriores a la instalación de cent os 6
Ajustes posteriores a la instalación de cent os 6Isaac Gómez M
867 views6 slides
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes by
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redesguest5d7f33c
507 views48 slides
Lw2010 Pedro Valera by
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valeraguestf280e2
410 views48 slides
Trabajo IOS de CISCO by
Trabajo IOS de CISCOTrabajo IOS de CISCO
Trabajo IOS de CISCOcyberleon95
2.6K views18 slides
VoIP con Asterisk Marzo 2010 by
VoIP con Asterisk Marzo 2010VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010Gabriel Astudillo
2.3K views104 slides
Redes by
RedesRedes
Redesdinamizadores
1.8K views17 slides

Similar to Node.js on Raspberry PI(20)

Ajustes posteriores a la instalación de cent os 6 by Isaac Gómez M
Ajustes posteriores a la instalación de cent os 6Ajustes posteriores a la instalación de cent os 6
Ajustes posteriores a la instalación de cent os 6
Isaac Gómez M867 views
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes by guest5d7f33c
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
guest5d7f33c507 views
Lw2010 Pedro Valera by guestf280e2
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valera
guestf280e2410 views
Trabajo IOS de CISCO by cyberleon95
Trabajo IOS de CISCOTrabajo IOS de CISCO
Trabajo IOS de CISCO
cyberleon952.6K views
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ... by Victor Asanza
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ...⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ...
⭐⭐⭐⭐⭐ DISEÑO DE SISTEMAS DIGITALES, TALLER RESUELTO 1ra EVALUACIÓN (2019 2do ...
Victor Asanza2K views
IoT: Servidor web con_arduino_ethernet_shield_y_display_lcd 44780 by Osvaldo Cantone
IoT: Servidor web con_arduino_ethernet_shield_y_display_lcd 44780IoT: Servidor web con_arduino_ethernet_shield_y_display_lcd 44780
IoT: Servidor web con_arduino_ethernet_shield_y_display_lcd 44780
Osvaldo Cantone203 views
Configuracion de Firewalls e Pasarelas by Miguel Morales
Configuracion de Firewalls e PasarelasConfiguracion de Firewalls e Pasarelas
Configuracion de Firewalls e Pasarelas
Miguel Morales6.4K views
David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013] by RootedCON
David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013]David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013]
David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013]
RootedCON1.7K views
Administración de red servidores y seguridad by Emilio
Administración de red servidores y seguridadAdministración de red servidores y seguridad
Administración de red servidores y seguridad
Emilio1.2K views
Memorias by nandobhe
MemoriasMemorias
Memorias
nandobhe462 views
Microcontroladores: Tutorial de microcontrolador AVR desde 0 by SANTIAGO PABLO ALBERTO
Microcontroladores: Tutorial de microcontrolador AVR desde 0Microcontroladores: Tutorial de microcontrolador AVR desde 0
Microcontroladores: Tutorial de microcontrolador AVR desde 0
Hack like a pro with custom gadgets - Bitup2018 by Alejandro Quesada
Hack like a pro with custom gadgets - Bitup2018Hack like a pro with custom gadgets - Bitup2018
Hack like a pro with custom gadgets - Bitup2018
Seminario de arduino DeustoTech by Adolfo García
Seminario de arduino DeustoTechSeminario de arduino DeustoTech
Seminario de arduino DeustoTech
Adolfo García3.6K views
¿Que falló en Playstation 3? by GUEIM
¿Que falló en Playstation 3?¿Que falló en Playstation 3?
¿Que falló en Playstation 3?
GUEIM910 views

Node.js on Raspberry PI

  • 1. Node.JS y RaspBerry Pi Meetup NodeJS Argentina
  • 2. RaspBerry Pi Arquitectura ARMv6 (Broadcom BCM2835, ARM1176JZF-S @700 Mhz) 256 (modelo A o B v1) / 512 Mb de RAM (modelo B v2) Filesystem en tarjeta SD Ethernet 10/100 Mbps (solo modelo B, el EC esta conectado via USB 2.0) 2 x USB 2.0 (1x USB 2.0 en el modelo A) Video HD 1920 x 1080p @ > 30fps (Broadcom VideoCore IV) Salidas de video HDMI, DSI (no existen displays soportados) y video compuesto Conector CSI para camaras tipo celular. No existen cámaras soportadas por CSI. La fundación está desarrollando una de 14 megapixels con lente fijo. Salidas de audio digital via HDMI y analogica via PWM en conector jack stereo Soporta protocolo CEC via HDMI 8 GPIO (4 GPIO extras en el Bv2), SPI (2 x multiplexado), I2C, UART (3V3)
  • 3. Node.js en RaspBerry Pi Los binarios de la última versión se pueden bajar de http: //nodejs.org/dist/latest/ en formato .tar.gz La recomendación es localizarlos en /usr/local/ En el caso de necesitar compilar Node.js se recomienda seguir la guia de Nathan Rajlich para cross compiling http://n8.io/cross-compiling-nodejs-v0.8/ Algunos módulos necesitan tener instalado node-gyp. Por lo cual es recomendable instalarlo con "sudo npm install node-gyp -g" Existen módulos para acceder al GPIO.
  • 5. Acceso al GPIO via SYSFS 1. Exportar el pin 27 via IO via SYSFS sudo echo "27" > /sys/class/gpio/export al hacer esto aparece el directorio /sys/class/gpio/gpio27 2. Para definir el pin como entrada sudo echo "in" > /sys/class/gpio/gpio27/direction Para definir el pin como salida sudo echo "out" > /sys/class/gpio/gpio27/direction 3. Para invertir la señal en el pin sudo echo "1" > /sys/class/gpio/gpio27/active_low 4. Para establecer un estado en el pin sudo echo "1" > /sys/class/gpio/gpio27/value 5. Para leer un estado del pin sudo cat /sys/class/gpio/gpio27/value 6. Las interrupciones se manejan via poll() de value
  • 6. WiringPi WiringPi es similar al lenguaje Wiring de Arduino Soporta los modulos GertBoard y PiFace. Tiene mapeo de pins (BCM name, wiring like, pinout) Tiene librerías para manejo de: ● I2C ● SPI ● SoftPWM ● Shift() ● Serial Port ● Interrupciones ● LCD Soporta multi-threading y mutex (mutual exclusions) Utiliza /dev/mem (que es mas rapido) en lugar de SYSFS. Dado que el código tiene que correr como root es potencialmente más inseguro
  • 7. Modulos para acceder al GPIO via Node.js GpiO https://github.com/EnotionZ/GpiO pi-gpio https://github.com/rakeshpai/pi-gpio rpi-gpio https://github.com/JamesBarwell/rpi-gpio.js node-wiringpi (wrapper de wiringPi incompleto) https://github.com/OhMeadhbh/node-wiringpi rpi-gpiod (gpio via unix socket) https://blog.mayflower.de/2073-Using-GPIO-on-Raspberry-Pi.html No se recomienda ejecutar como root si la RPi puede ser accedida desde internet. No se recomienda node-wiringpi ya que debe ser corrido como root dado que wiringPi utiliza /dev/mem para acceder al GPIO. Utilizar rpi-gpiod en su lugar.
  • 8. Acceso al modulo 1wire via SYSFS Cargar los modulos 1wire del kernel sudo modprobe w1-gpio sudo modprobe w1-therm El sensor aparece en ls /sys/bus/w1/devices/ ls -l /sys/bus/w1/devices 28-000003b0d431 -> ../../../devices/w1_bus_master1/28-000003b0d431 w1_bus_master1 -> ../../../devices/w1_bus_master1 El archivo w1_slave dentro del directorio del dispositivo 1wire contiene la información de la medición cat w1_slave 87 01 4b 46 7f ff 09 10 48 : crc=48 YES 87 01 4b 46 7f ff 09 10 48 t=24437 Si el CRC = YES la medición es correcta t = a la temperatura en °C / 1000
  • 9. Acceso al modulo 1wire desde Node.js // Tom Holderness 03/01/2013 // Ref: www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/temperature var fs = requiere('fs'); function readTemp(id,callback){ fs.readFile(''/sys/bus/w1/devices/' + id + '/w1_slave'', function(err, buffer) { if (err){ console.error(err); process.exit(1); } // Read data from file (using fast node ASCII encoding). var data = buffer.toString('ascii').split(" "); // Split by space // Extract temperature from string and divide by 1000 to give celsius var temp = parseFloat(data[data.length-1].split("=")[1])/1000.0; // Round to one decimal place temp = Math.round(temp * 10) / 10; // Add date/time to temperature var data = { temperature_record:[{ unix_time: Date.now(), celsius: temp }]}; // Execute call back with data callback(data); }); };