Revista 100% Verde

Controlando placas de IoT desde javascript

Por Soloelectronicos @soloelectronico

Node.js framework fue creado por Bocoup para controlar placas de desarrollo en una configuración de host-cliente aunque realmente su uso mayoritario sea como plataforma web siendo Johnny-Five la plataforma open source de Robótica e IoT de JavaScript

En realidad existen diferentes plataformas donde se puede ejecutar el programa Johnny-Five :

  • En un entorno Linux a bordo: beagleBone Black,Chip,Intel Galileo gen 1,Intel Galileo Gen 2,Intel Edison Arduino,Intel Edison Mini, SparkFun Edison GPIO Block,SparkFun Arduino Block, Intel Joule 570x (Carrier Board),Linino One,pcDuino3 Dev Board,Raspberry Pi 3 Model B, Raspberry Pi 2 Model B. Raspberry Pi Zero,Raspberry Pi Model A Plus,Raspberry Pi Model B Plus, Raspberry Pi Model B Rev 1, Raspberry Pi Model B Rev 2, Tessel 2
  • En una máquina host conectada (a través de Serial USB o Ethernet) a un cliente.: Arduino Uno,SparkFun RedBoard, On a host machine communicating over Bluetooth to the client. Arduino Uno,Arduino Leonardo, Arduino Mega, Arduino Fio,Arduino Micro,Arduino Mini,arduino Nano,Arduino pro Mini,Boatduino,chipKit uno32,Spider robot Controller,DfRobot Romeo,Teensy 3,
  • En una máquina host que se comunica por wifi al cliente: Electric Imp April, pinoccio Scout, Particle Core ( Spark Core) ,Particle Photon, Sparkfun Photon RedBoard
  • En una máquina host que se comunica a través de Bluetooth al cliente :Blend Micro v1.0,LightBlue bean,

Johnny-Five como vemos hacer un énfasis especial en la robótica, pero tambien puede hacer muchas cosas diferentes con el software.De hecho ha existido durante hacer más tiempo que la mayoría de los marcos de JavaScript para hardware . Ademas iene una API clara y "fresca" ,ambas cosas ideales para los principiantes de hardware.

Lanzado porBocoup en 2012, Johnny-Five esta mantenido por una comunidad de desarrolladores de software apasionados e ingenieros de hardware. De hecho más de 75 desarrolladores han hecho contribuciones para construir un ecosistema robusto, extensible y muy versatil.

Hola Mundo!

A los microcontroladores y las plataformas SoC nos gusta decir "Hola mundo" con un simple LED parpadeante, así que veamos en primer lugar un ejemplo como lo hariamos usando el Ide clásico de Arduino

Como vemos en la imagen ,conectaremos un led entre el pin 13 y masa , respetando la polaridad (el ánodo al pin13 y el cátodo o pin corto a masa )

Controlando placas desde javascript

Para hacer destellear el citado led, estos son los pasos básicos que tenemos que seguir en nuestro sketch programandolo desde el IDE de Arduino:

  1. Configurar el pin 13 (con LED incorporado) como una SALIDA
  2. Establecer el pin 13 ALTO para encender el LED
  3. Esperamos 500 ms (medio segundo)
  4. Establecer el pin 13 BAJO para apagar el LED

Y este es el código completo para ejecutar desde el Ide de Arduino:

Y ahora vamos a ver el mismo ejemplo , pero ejecutandolo en Javascript por medio de node-js,

Desgraciadamente si usamos un Arduino o alguno de sus variantes (Arduino Uno,SparkFun RedBoard, On a host machine communicating over Bluetooth to the client. Arduino Uno,Arduino Leonardo, Arduino Mega, Arduino Fio,Arduino Micro,Arduino Mini,arduino Nano,Arduino pro Mini,Boatduino,chipKit uno32,Spider robot Controller,DfRobot Romeo,Teensy 3,) necesitaremos que el programa JavaScript se ejecute en una máquina host que ejecute Node.js. de modo que el programa transmitirá instrucciones básicas de E / S a la placa a través de una interfaz serie USB , que actuara como un cliente ligero .

El método host-cliente implica la comunicación a través de una API común entre el host y el cliente. El marco Node.js usado con Arduino y placas similares , Johnny-Five, se comunica (de forma predeterminada) con las placas utilizando un protocolo llamado Firmata, protocolo que permite que los hosts (computadoras) y los clientes (microcontroladores) intercambien mensajes de ida y vuelta en un formato basado en mensajes MIDI. El protocolo Firmata especifica cómo deben ser esos mensajes de comando y datos. La implementación de Firmata de Arduino proporciona el firmware real que puede poner en su tablero para hacer que "hable" Firmata. Toma la forma de un boceto de Arduino que sube al tablero.

Firmata es lo suficientemente popular como para que los bocetos de Firmata que necesita vengan empaquetados con el IDE de Arduino asi que bastara con subir este a Arduino una única vez ya que el código javascript correra en el host usando node.js.

Puede seguir estos pasos para cargar el interfaz correcto de Firmata en su Arduino para que se pueda utilizar como cliente en una configuración de host-cliente:

Resumidamente estos son los pasos previos para ejecutar el mismo ejemplo del led parpadeante que hemos visto pero en javascript en una placa Arduino;

  • En primer lugar conectar su Arduino mediante USB a su ordenador
  • Lanzar el IDE de Arduino.
  • Asegurarse que esta configurada la version de su placa, así como el puerto COM virtual al que esta conectado
  • Acceda al menú Archivo> Ejemplos> Firmata
  • Seleccione StandardFirmataPlus de la lista y despliegue este sw sobre su Arduino
Controlando placas de IoT desde javascript
  • Ahora Instale Node.js en su pc . Funciona con ultima version 11.3.0 de 64 bit que incluye npm 6.4 (no olvidar de chequear que se instalen otros componentes )Este es el link de descarga https://nodejs.org/en/download/
  • En la instalación de Node.js, repetimo no debemos olvidar de chequear que se instalen otros componentes pues con ellos se instalara automáticamente
    • Python 2.7.3 (http://www.python.org/getit/releases/2.7.3/)
    • Visual Studio Express 2010 de 32 bits (con las dependencias de C ++)
    • El comando npm
    • Alternativamente si dispusiésemos de npm podríamos instalar ambos entornos con npm --add-python-to-path install --global --production windows-build-tools
  • Este pasos anterior ( instalacion de componentes ) es innecesario si chequeamos en la instalación de node.js pues se instalaran esos componentes automáticamente
  • Ahora instalar node-gyp medianete el comando npm install -g node-gyp (esto instalará node-gyp globalmente)
    Controlando placas desde javascript
  • Ya puede crear su primer proyecto Johnny-Five, por lo que en primer lugar cree un directorio para él e instale el paquete framework npm, como se muestra en la siguiente lista:
    • < mkdir hello-world
    • < cd hello-world
    • < npm install johnny-five
  • Ejecute el comando "npm install johnny-five" desde la carpeta del proyecto
    Ya por fin podemos crear el fichero javascript con su editor de texto que contendrá el código en javascript .

Realmente estos son los pasos que tenemos que seguir:

  1. Requerir el paquete johnny-five
  2. Inicializar un nuevo objeto Board que represente a su placa .
  3. Esperar a que el tablero dispare el evento listo
  4. Crear una instancia de un objeto LED en el pin 13 (el pin LED incorporado de Uno)
  5. Hacer que el LED parpadee cada 500 ms

Este es el código en js :


Guarde el archivo como hello-world.js y conecte su Arduino a un puerto USB en su ordenador si aún no está conectado.

En una terminal de windows vaya al directorio del proyecto y ejecute este comando:

<node hello-world.js


Verá una salida como la siguiente en su terminal ejecutando hello-world.js en una terminal

Controlando placas desde javascript

Si el LED incorporado parpadea ,!enhorabuena ! !acaba de controlar una placa Arduino con JavaScript! ¿a que es realmente sencillo?.

Aunque en el caso de la familia Arduino tiene la innegable penalización de necesitar un host para operar , la ventajas de este modelo son evidentes pues no tenemos que estar constantemente compilando y subiendo el sketch con el ide de Arduino ya que el programa corre en host . Ademas podemos usar un simple editor de texto para cambiar el código en javascript fácilmente

Asimismo el lenguaje javascript ha ido evolucionando hasta un ritmo que no podemos imaginar incluyendo muchas características que no son soportadas de forma directa desde Arduino

Por ultimo mencionar la autentica potabilidad del código , pues el código que hemos visto en el ejemplo podremos usarlos en múltiples plataformas tan diferentes como Raspberry pi, Intel Edison , etc usando siempre el mismo código fuente aun siendo soportado por placas muy diferentes ¿ a que es interesante?

Placas soportadas

Johnny-Five ha sido probado con una variedad de tableros compatibles con Arduino .

Para los proyectos que no están basados ​​en Arduino, los complementos de IO específicos de la plataforma están disponibles. Los complementos IO permiten que el código Johnny-Five se comunique con cualquier hardware en cualquier idioma que la plataforma hable.

Como comentábamos existen diferentes formas de ejecutar el programa Johnny-Five segun la placa:

  • En un entorno Linux a bordo: beagleBone Black,Chip,Intel Galileo gen 1,Intel Galileo Gen 2,Intel Edison Arduino,Intel Edison Mini, SparkFun Edison GPIO Block,SparkFun Arduino Block, Intel Joule 570x (Carrier Board),Linino One,pcDuino3 Dev Board,Raspberry Pi 3 Model B, Raspberry Pi 2 Model B. Raspberry Pi Zero,Raspberry Pi Model A Plus,Raspberry Pi Model B Plus, Raspberry Pi Model B Rev 1, Raspberry Pi Model B Rev 2, Tessel 2) , Es facil adivinar qeu este es el mabiente ideal pues dentro de la placa se oprtan tanto el host como el cliente por lo qeu no ncesitamos conectarnos con otro dispositivo
  • En una máquina host conectada (a través de Serial USB o Ethernet) a un cliente.: Arduino Uno,SparkFun RedBoard, On a host machine communicating over Bluetooth to the client. Arduino Uno,Arduino Leonardo, Arduino Mega, Arduino Fio,Arduino Micro,Arduino Mini,arduino Nano,Arduino pro Mini,Boatduino,chipKit uno32,Spider robot Controller,DfRobot Romeo,Teensy 3,
  • En una máquina host que se comunica por wifi al cliente.: Electric Imp April, pinoccio Scout, Particle Core ( Spark Core) ,Particle Photon, Sparkfun Photon RedBoard
  • En una máquina host que se comunica a través de Bluetooth al cliente :Blend Micro v1.0,LightBlue bean,

Veamos ahora cada caso en concreto;

Arduino Uno

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

SparkFun RedBoard

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

ping

Arduino leonardo

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Arduino Mega

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Arduino Fio

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Arduino Micro

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Arduino Mini

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Arduino Nano

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Arduino Pro Mini

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

BotBoarduino

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

chipkit uno32

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Spider Robot Controller

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

DFRobot Romeo

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Teensy 3

Controlando placas de IoT desde javascript

Ambiente

BeagleBone Black

Controlando placas de IoT desde javascript

Ambiente

CHIP

Controlando placas de IoT desde javascript

Ambiente

Blend Micro v1.0

Controlando placas de IoT desde javascript

Ambiente

Electric Imp April

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

    Requiere una conexión WiFi conectada a Internet y está sujeto a la limitación de la tasa de solicitud por parte del servidor de Electric Imp API.

Intel Galileo Gen 1

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

    Las compilaciones que no son IoTKit ya no son compatibles.

Intel Galileo Gen 2

Controlando placas de IoT desde javascript

Ambiente

Intel Edison Arduino

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

  • El hardware es capaz de soportar solo 4 salidas PWM. Como resultado, los enlaces nativos no admiten PWM en los pines 10 y 11.
  • Aunque Galileo-io / Edison-io / Joule-io todavía no admite comunicaciones en serie, puede enlazar a / dev / ttyFMD1 en la placa Edison Arduino usando el módulo serialport .

Intel Edison Mini

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

SparkFun Edison GPIO Block

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

SparkFun Arduino Block

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Intel Joule 570x (Carrier Board)

Controlando placas de IoT desde javascript

Ambiente

LightBlue Bean

Controlando placas de IoT desde javascript

Ambiente

Linino uno

Controlando placas de IoT desde javascript

Ambiente

pcDuino3 Dev Board

Controlando placas de IoT desde javascript

Ambiente

Pinoccio Scout

Controlando placas de IoT desde javascript

Ambiente

Raspberry Pi 3 Modelo B

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Raspberry Pi 2 Modelo B

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Raspberry Pi Zero

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Raspberry Pi Model A Plus

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Frambuesa Pi Modelo B Plus

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Raspberry Pi Modelo B Rev 1

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

Raspberry Pi Modelo B Rev 2

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica


Particle Core (Spark Core)

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

    Los temporizadores se comparten en grupos: Temporizador 2: A0 , A1 , Temporizador 3: A4 , A5 , A6 , A7 , Temporizador 4: D0 , D1


Particle Photon

Controlando placas de IoT desde javascript

Ambiente

Sparkfun Photon RedBoard

Controlando placas de IoT desde javascript

Ambiente

Tessel 2

Controlando placas de IoT desde javascript

Ambiente

Plataforma específica

  • El soporte de servo se proporciona a través de componentes I2C (por ejemplo, PCA9685 )
  • DAC está limitado a Puerto B, Pin 7

Mas información en http://johnny-five.io/platform-support/


Volver a la Portada de Logo Paperblog