Controlando placas de IoT desde javascript


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 )

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:

void setup() {
pinMode(13, OUTPUT);    
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);  
delay(500);
}

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

  • 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)                          
  • 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 :


const five = require(‘johnny-five’);
const board = new five.Board();
board.on(‘ready’, () => {
 const led = new five.Led(13);
   led.blink(500);
});


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

 

 

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 

Ambiente 

  • Firmware / Runtime: : StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
Ping

SparkFun RedBoard 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

ping

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
Ping

 

Arduino leonardo 

Ambiente 

  • Firmware / Runtime:  StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
Ping

Arduino Mega 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
ping

Arduino Fio 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
Ping

Arduino Micro 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

  • Admite la extensión PING_READ , cuando se usa con PingFirmata .
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
One wire no
Paso a paso no
Serial / UART
Dac no
Ping

Arduino Mini 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

  • Admite la extensión PING_READ , cuando se usa con PingFirmata .
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
One wire no
Paso a paso no
Serial / UART
Dac no
Ping

Arduino Nano 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus (additional instructions)
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

  • Admite la extensión PING_READ , cuando se usa con PingFirmata .
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
Ping

Arduino Pro Mini 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus ( instrucciones adicionales )
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

  • Admite la extensión PING_READ , cuando se usa con PingFirmata .
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
One wire no
Paso a paso no
Serial / UART
Dac no
ping

BotBoarduino 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus ( instrucciones adicionales )
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere amarre.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
ping

chipkit uno32 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus ( instrucciones adicionales )
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere tethering.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
One wire
Paso a paso
Serial / UART
Dac no
ping

Spider Robot Controller 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus ( instrucciones adicionales )
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere  tetehering.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
ping

DFRobot Romeo 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus ( instrucciones adicionales )
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere amarre.

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART
Dac no
Ping

Teensy 3 

Ambiente 

  • Firmware / Runtime: StandardFirmataPlus ( instrucciones adicionales )
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a la placa a través de una serie USB , que actúa como un cliente ligero .Requiere amarre.
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART no
Dac no
ping

BeagleBone Black 

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

CHIP 

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo no
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
Ping no

Blend Micro v1.0 

Ambiente 

  • Complemento IO: BlendMicro-IO ( instrucciones adicionales )
  • Firmware / Runtime: BLEFirmata
  • El programa JavaScript se ejecuta en una máquina host que ejecuta Node.js. El programa transmite instrucciones básicas de E / S a través de Bluetooth a la placa, que actúa como un cliente ligero .
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
Ping no

 Electric Imp  April 

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.
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C no
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

Intel Galileo Gen 1 

Ambiente 

Plataforma específica 

  • Las compilaciones que no son IoTKit ya no son compatibles.
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

Intel Galileo Gen 2 

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
Silbido no

Intel Edison Arduino 

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 .
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
Silbido no

Intel Edison Mini 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
Silbido no

SparkFun Edison GPIO Block 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

SparkFun Arduino Block

Ambiente 

Plataforma específica 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable
Paso a paso
Serial / UART no
Dac no
ping no

Intel Joule 570x (Carrier Board) 

Ambiente 

Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

LightBlue Bean

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

Linino uno 

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

pcDuino3 Dev Board 

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo no
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

Pinoccio Scout 

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C no
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping no

Raspberry Pi 3 Modelo B 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
ping no

Raspberry Pi 2 Modelo B 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
Silbido no

Raspberry Pi Zero 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
ping no

Raspberry Pi Model A Plus 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
ping no

Frambuesa Pi Modelo B Plus 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
Silbido no

Raspberry Pi Modelo B Rev 1 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
Ping no

Raspberry Pi Modelo B Rev 2 

Ambiente 

Plataforma específica 

  • analogRead componentes analogRead pueden analogRead a través de instancias de Expander . Ver Expander API para ejemplos.
Lectura analógica no
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac no
ping no


Particle Core (Spark Core)

Ambiente 

Plataforma específica 

  • Los temporizadores se comparten en grupos: Temporizador 2: A0 , A1 , Temporizador 3: A4 , A5 , A6 , A7 , Temporizador 4: D0 , D1
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping


Particle Photon

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
ping no
Silbido

Sparkfun Photon RedBoard 

Ambiente 

Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART no
Dac no
ping

Tessel 2 

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
Lectura analógica
Lectura digital
Escritura digital
PWM
Servo
I2C
Un cable no
Paso a paso no
Serial / UART
Dac
ping no

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

Anuncios

Envio de correos desde Raspberry


En realidad es bastante sencillo poder enviar correos electrónicos  gracias a Mutt , un cliente de correo electrónico libre basado en texto, para sistemas similares a Unix que fue escrito originalmente por Michael Elkins en 1995 y publicado bajo la Licencia Pública General de GNU. Inicialmente se asemejaba a elm, ahora el programa es muy similar al lector de noticias slrn.

Mutt soporta la mayoría de los formatos de correo electrónico (en particular, tanto mbox y Maildir) y protocolos (POP3, IMAP, etc.)  También incluye soporte MIME, en particular PGP/GPG y S/MIME.

Este programa es  bastante configurable pues: tiene cientos de directivas de configuración y personalización de los comandos. Ademas permite cambiar todas las teclas y hacer macros de teclado para acciones complejas, así como los colores y el diseño de la mayoría de la interfaz. A través de las variantes de un concepto conocido como «ganchos», muchos de sus ajustes se pueden cambiar sobre la base de criterios tales como el actual o buzón de correo saliente los destinatarios del mensaje. Hay muchos parches disponibles y extensiones que añaden funcionalidad, como soporte NNTP o una barra lateral similar a los que a menudo se encuentran en clientes de correo gráfico.

Mutt es totalmente controlado con el teclado, y tiene soporte para hilos de correo, es decir, uno puede fácilmente desplazarse largas discusiones, como en listas de correo. Los mensajes nuevos se componen con un editor de texto externo por defecto, a diferencia de pine que incorpora su propio editor conocido como pico (aunque se puede configurar para depósito de pino a un editor externo).

Mutt. the e-mail client.png

Para  instalar  el cliente de correo mutt  en nuestra Raspberry Pi , la cual por ejemplo nos va  permite enviar correos desde una cuenta de gmail  tenemos que seguir unos sencillos pasos.

En primer lugar debe actualizar el sistema  e instalar la utilidad mutt; 

sudo apt-get update
sudo apt-get install mutt

Ahora con el paquete instalado,  lo vamos a configurar para enviar desde el directorio  root.de nuestra Raspberry Pi ,`para ello ,creamos el  fichero .muttrc   y rellenamos con nuestra  información sobre nuestra cuenta de correo.

Para ello ejecute el siguiente comando:

 sudo nano /root/.muttrc

Ahora en dicho  fichero deberá escribir el siguiente contenido:

set from = “[email protected]
set realname = “usuario gmail”
set imap_user = “[email protected]
set imap_pass = “password”
set folder = “imaps://imap.gmail.com:993”
set spoolfile = “+INBOX”
set postponed =”+[Gmail]/Drafts”
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates
set smtp_url = “smtp://[email protected]:587/”
set smtp_pass = “password”

 

Donde pone  [email protected] , lógicamente tendrá que escribir su  usuario de gmail y donde pone password la clave que usemos para acceder a este.  En smtp-url  tampoco olvide que  xxxx representa el usuario de gmail

Lógicamente salvaremos el fichero con nuestra información de nuestra cuenta de gmail  y abandonaremos el editor nano.

Ahora crearemos la siguiente carpeta ( cache) para lo cual ejectaremos, 

sudo mkdir -p /root/.mutt/cache


Ya estamos listos para enviar un correo para lo cual  recuerde que  hemos configurado el correo para enviar desde la carpeta root (si lo queréis desde el usuario pi donde pone root lo puede cambiar por pi).


Vamos a enviar nuestro primer correo para ello hacemos sudo su. Y tecleamos el siguiente código:


echo “Contenido” | mutt -s “Prueba” [email protected]m

 

Donde pone  [email protected] , lógicamente es el destinatario  de gmail, y  “Contenido ” es el contenido del mensaje y en Prueba ira el asunto del mensaje. 

Ahora ya  podemos ir  nuestra bandeja de entrada   y si la Raspberry Pi  contaba con conectividad  a Internet   via wifi ( si es una Raspberry pi 3)  o por ethernet ,  allí tendremos el correo.

Asimismo también  podemos enviar un archivo adjunto,  para lo cual  crearemos un archivo con nano adjunto.c y lo relleneraremos con texto.


Para adjuntar este fichero al correo se hace de la siguiente forma:

echo “Este correo incluye un adjunto” |  mutt -s “Archivo Adjunto” [email protected] -a /root/adjunto.c

donde /root/adjunto.c es la ruta del archivo del fichero a enviar  e [email protected] , lógicamente es el destinatario  de gmail, .

 

 

Puede  parecer una vanalidad  pero la  potencia de enviar correos desde la Raspberry Pi , es una idea muy interesante para automatizar  procesos  asociados a dispositivos conectados a  los GPIO  por ejemplo relacionados con el cambio de estado de un pin asociado a un pulsador o   cuando varíe un valor asociado a un determinado sensor

 

 

Conversión de Raspberry Pi en Google Home


Gracias a que se  liberó el SDK del Google Assistant , ya se  puede usar Google Home en  Español entre otros nuevos idiomas  con cualquier hw que los permita ! Así que ahora es posible montar nuestro propio Google Assistant en una Raspberry Pi, en pocos minutos, con un micrófono y un altavoz, tendrá a una Raspberry Pi lista para atender sus peticiones!

Ideal para ponerla en el salón o cualquier sitio escondida, con un buen micrófono omnidireccional, podremos hacerle consultas en nuestro propio idioma y medianamente nos las esquivará correctamente , Por cierto a parte del Español, también soporta Inglés, Alemán, Francés, Italiano y Japonés. 

El proyecto se llama AIY que resulta de la mezcla de AI (inteligencia artificial en sus siglas en inglés, Artificial Intelligence) y DIY (hazlo tú mismo, en sus siglas en inglés, Do it Yourself).

Echemos un vistazo a lo que necesitamos .

  • Raspberry Pi 3  con fuente de alimentación y tarjeta MicroSD
  • Micrófono USB. Se puede  utilizar el micrófono incluido en algunas cámaras web para las pruebas. La gran ventaja del mini micrófono es la potabilidad del prototipo pero cualquier producto similar hará el trabajo de forma satisfactoria.
  • Altavoces con entrada de audio de 3,5 mm  Aunque inclusive unos auriculares de cable son más que suficiente para realizar las pruebas, idealmente podremos contar con algún tipo de altavoz equipado con conector de 3.5mm para obtener una mejor experiencia de usuario
  • Ratón y teclado USB

 

Instalando el SO

Para instalar el software necesitamos nueva imagen descargada a partir del sitio  oficial Raspbian ,y flashearla en la microSD con un ordenador:

 

raspbian

 

Una vez descargada y descomprimida  la imagen correspondiente  en su ordenador siga los siguientes pasos:

  • Inserte la tarjeta SD en el lector de tarjetas SD  de su ordenador comprobando cual es la letra de unidad asignada. Se puede ver fácilmente la letra de la unidad, tal como G :, mirando en la columna izquierda del Explorador de Windows.
  • Puede utilizar la ranura para tarjetas SD, si usted tiene uno, o un adaptador SD barato en un puerto USB.
  • Descargar la utilidad Win32DiskImager desde la página del proyecto en SourceForge como un archivo zip; puede ejecutar esto desde una unidad USB.
  • Extraer el ejecutable desde el archivo zip y ejecutar la utilidad Win32DiskImager; puede que tenga que ejecutar esto como administrador. Haga clic derecho en el archivo y seleccione Ejecutar como administrador.
  • Seleccione el archivo de imagen que ha extraído anteriormente de Raspbian.
  • Seleccione la letra de la unidad de la tarjeta SD en la caja del dispositivo. Tenga cuidado de seleccionar la unidad correcta; si usted consigue el incorrecto puede destruir los datos en el disco duro de su ordenador! Si está utilizando una ranura para tarjetas SD en su ordenador y no puede ver la unidad en la ventana Win32DiskImager, intente utilizar un adaptador SD externa.
  • Haga clic en Escribir y esperar a que la escritura se complete.
  • Salir del administrador de archivos  y expulsar la tarjeta SD.
  • Ya puede insertar la SD en su Raspberry Pi en el adaptador de micro-sd , conectar un monitor por el hdmi , conectar un teclado y ratón en los  conectores USB, conectar la  con un cable ethernet  al router  conectividad a Internet y finalmente conectar la alimentación  para comprobar que la Raspeberry arranca con la nueva imagen

 

Cuando acabamos de flashear la tarjeta la colocamos en la Raspi y ya podemos empezar. Para arrancar la Raspberry Pi 3 con el Voice Kit vamos a necesitar un monitor con cable HDMI y un teclado con ratón. Conectamos todo y le damos energía a la Raspi.

El primer inicio del sistema puede tardar varios minutos. El sistema que corre en la Raspberry Pi es una versión de Debian modificada especialmente para este dispositivo y que se llama Raspbian. Debian es una de las distribuciones más extendidas de GNU/Linux y en la que se basan distribuciones tan famosas como Ubuntu.

Una vez tengamos el escritorio activo, arriba a la derecha vamos a poder conectarnos a nuestra red Wi-Fi entre los símbolos del Bluetooth y del volumen. 

Respecto al micrófono usb

Dado el precio y el tamaño, se necesita  un micrófono funcional que sea capaz de captar voces cercanas o grandes sonidos pero   sin gastarse una fortuna  requiriéndose  un micrófono  usb  que sea  reconocido y funcione con Raspbian en una Raspberry Pi3( por  ejemplo el modelo  RRunzfon de kinobo)

Este tipo de micrófonos no son de alta fidelidad de modo que cuando escuche las reproducciones está claro que hay mucha estática a menos que esté hablando directamente con el micrófono, pero para este proyecto  lo importante es que sea  capaz de funcionar para el reconocimiento de voz utilizando la compilación Alexa Raspberry Pi.

Es interesante instalar la activación “siempre encendida” para no tener que presionar un botón para activarla, y pero dadas  las características de este modesto micrófono  solo  funcionara   si está cerca de este

Dado el tamaño y el precio, esta es una de las maneras más fáciles de agregar un micrófono por menos de $ 10, pero si está esperando un audio de alta calidad, es mejor que busque otras opcion. Para aquellos que buscan un micrófono decente para uso diario, existen mejores opciones en cuanto a calidad de sonido. (lo que hace que este micrófono sea genial es lo pequeño y económico que es)

Para las personas que buscan probar Google Assistant  con  Raspberry Pi, este micrófonono funciona con RPI v1, pero sí funciona con RPI v3 de fábrica. Cuando lo conecta al puerto USB, se detecta automáticamente y puede verlo en la salida “arecord -l“.

Bajo el sistema operativo Linux, parece que el sonido grabado es un poco bajo. Es posible que necesite normalizar (aumentar la ganancia) en el sonido usando un programa como mp3gain, ffmpeg, sox, etc. o mejor aún aumentar la ganancia en el receptor usando pulseaudio. Si eleva el volumen a un nivel alto, obtendrá una gran cantidad de estática, que es de esperar.

 

 

 

 

Prueba de sonido

Usaremos una Raspberry Pi 3 con Raspbian instalado y actualizado, lo primero será verificar que el audio nos funciona bien, tanto el del micrófono como los altavoces por donde queremos sacar el sonido ,para ello editamos nuestro fichero de configuración de audio ‘~/.asound’ y especificamos el micrófono que estamos usando, en este caso un USB específico, pero también podríamos usar el micro de una webcam, así como el audio que me lo saque por la predeterminada

Antes de continuar pues  debemos configurar el sistema de audio en la Raspberry Pi.

  1. Encontrar los dispositivos de grabación y reproducción.

    1. Coloque el micrófono USB en la lista de dispositivos de hardware de captura. Anote el número de tarjeta y el número de dispositivo.

      arecord -l
    2. Coloque el altavoz en la lista de dispositivos de hardware de reproducción. Anote el número de tarjeta y el número de dispositivo. Tenga en cuenta que el conector de 3,5 mm se etiqueta típicamente o (no). Analogbcm2835 ALSAbcm2835 IEC958/HDMI

      aplay -l
  2. Crear un nuevo archivo llamado .asoundrec  en el directorio home(/home/pi). Asegúrese de que tiene las definiciones de derecho esclavo para micrófono y altavoz; Utilice la configuración  a continuación pero cambie <card number><device number>  con el número que anotó en el paso anterior. Hacer esto para ambos y..asoundrc/home/pi<card number><device number>pcm.micpcm.speaker

    pcm.!default {
      type asym
      capture
    .pcm "mic"
      playback
    .pcm "speaker"
    }
    pcm
    .mic {
      type plug
      slave
    {
        pcm
    "hw:<card number>,<device number>"
     
    }
    }
    pcm
    .speaker {
      type plug
      slave
    {
        pcm
    "hw:<card number>,<device number>"
     
    }
    }
  3. Verificar esa grabación y la reproducción del ejemplo:

    1. Ajustar el volumen de reproducción.

      alsamixer

      Pulse la tecla de flecha hacia arriba para ajustar el volumen de reproducción nivel a alrededor de 70.

    2. Reproducir un sonido de prueba (se trata de una persona que habla). Presione Ctrl + C al hecho. Si no se oye nada cuando se ejecuta esto, Compruebe la conexión del altavoz.

      speaker-test -t wav
    3. Grabar un clip audio corto.

      arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw
    4. Compruebe la grabación por reproducirlo. Si no se oye nada, puede que necesite registrar el volumen de grabación. alsamixer

      aplay --format=S16_LE --rate=16000 out.raw

    Si están trabajando la grabación y reproducción, ya se ha configurado el  audio. Si no es así, verifique que el micrófono y el altavoz están correctamente conectados. Si no es el problema, intente un diferentes micrófono o altavoz.

    Tenga en cuenta que si tiene un monitor HDMI y un altavoz de jack de 3,5 mm conectado, usted puede reproducir audio por  cualquiera de los dos. Ejecute el siguiente comando:

    sudo raspi-config

    Ir a Opciones avanzadas > Audio y seleccione el dispositivo de salida deseada.

 

Activación servicio

Para activar el servicio nos iremos  a la consola de las Acciones de Google, nos validaremos con una cuenta de Google válida y crearemos un nuevo proyecto de Google Cloud Platform,.Con la API de Google Assistant instalada en nuestra Raspberry accederemos para realizar consultas y el proyecto nos mostrará los datos sobre los consumos.

En primer lugar nos iremos  a la consola de las Acciones de Google, en https://console.actions.google.com, deberemos validarnos con una cuenta de Google válida y crear un nuevo proyecto de Google Cloud Platform, para ello pulsamos en “Add/Import project”

Si no tiene ningún proyecto creado, nos aparece una ventana para  aceptar las condiciones de servicio. Es importante en este punto no olvidar  si queremos cambiar el idioma a español   para las Acciones  así como  seleccionar nuestro País, 

 

Tenemos que tener en cuenta  que el máximo de proyectos gratuitos es 3 ,por lo que  no podremos añadir nuevos, así que una opción es eliminar proyectos antiguos o incluso seleccionar alguno de estos proyectos antiguos de Google App Engine  como origen  de automatización ( ese es el caso de nuestro ejemplo “soloelectronicossalva”)

En caso de no tener ningún proyecto en la nube de Google ,deberemos  indicar el nombre del Proyecto (recordar que  aparecerá un combo si tiene ya varios proyectos creados)

Ahora tenemos que habilitar la API de Google Assistant API para nuestro proyecto , por lo que nos iremso a  https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview y daremos al boton de Habilitar . Si no estamos situados en nuestro proyecto  seleccionamos del combo nuestro proyecto y pulsamos en “Habilitar”,(API > Enable API > Google Assistant > Enable)

 

Y al pulsar el botón  quedara habilitado el API  de Google Assistant para nuestro proyecto

 

 

Observe que no es completamente gratuito, estando limitado a 500 peticiones al día  con un máximo de 60 peticiones/minuto , aspectos que podemos estudiar en el menú  de Cuotas

Ahora ya podríamos ir a registrar nuestro dispositivo! Vamos de nuevo a la Consola, en https://console.actions.google.com/
Ir a “Device registration” > “Register Model” y lo crearíamos

 

En caso de haber importado un proyecto que ya teníamos, el proceso es diferente, pues repetiremos las dos opciones primeras de Add/Import  , pero esta vez en el menú que nos aparece seleccionaremos  Device registration” > “Register Model” y lo creariamos (la url seria del tipo https://console.actions.google.com/u/0/project/proyecto_importado/deviceregistration/)

 

 

En ambos casos, llegado a este punto, pulsaremos al botón   “Device registration

 

 

 

Tendremos que ponerle un nombre o ‘Product Name’ (que anotaremos), un nombre del fabricante o ‘Manufacter Name’  y seleccionamos si queremos algún tipo de dispositivo, que en nuestro caso al ser una raspberry Pi 3 lo dejaremos en ‘Auto’, pulsamos en “Register Model”,

 

 

 

 

Nos toca ahora descargar el fichero con los credenciales de acceso al servicio de Google Assistant, pulsamos en “Download OAuth 2.0 credentials” y los guardamos en una ruta de nuestro ordenador que nos sea fácil de recordar

Ahora   copiaremos   dichos archivo  a la Raspberry Pi  en la ruta  /home/pi,

 

 

En este ultimo paso , es interesante las opciones que nos ofrece:

  • Brillo: Este rasgo cubre cómo controlar el brillo de un dispositivo. La configuración de brillo absoluto se encuentra en un rango normalizado de 0 a 100 (las luces individuales pueden no ser compatibles con todos los puntos del rango según su configuración de LED). 
  • ColorSpectrum Este rasgo pertenece a cualquier dispositivo que pueda establecer un espectro de color. Esto se aplica a las bombillas de color “completas” que toman rangos de color RGB. Las luces pueden tener cualquier combinación de ColorSpectrum y ColorTemperature, las luces de acento y las tiras de LED solo pueden tener Spectrum, mientras que algunas bombillas de lectura solo tienen Temperatura. Las bombillas básicas, o luces tontas en enchufes inteligentes, no tienen ninguno.
  • Temperatura del color: Este rasgo pertenece a cualquier dispositivo que pueda ajustar la temperatura del color. Esto se aplica a las bombillas de “calor” que tienen un punto de color en Kelvin. Esta es generalmente una modalidad separada de ColorSpectrum, y es posible que haya puntos blancos disponibles a través de la temperatura que Spectrum no pueda alcanzar. Según los rasgos disponibles, Google puede elegir el modo apropiado para usar según la solicitud y el tipo de luz (por ejemplo, si las luces de la sala de estar están en blanco podrían enviar comandos de temperatura a algunas bombillas y comandos de espectro a tiras de LED).
  • Muelle: Este rasgo está diseñado para dispositivos auto-móviles que pueden ser ordenados a regresar para la carga. En general, estas son aspiradoras robóticas actualmente, pero esto también se aplicaría a algunos drones, robots de entrega y otros dispositivos futuros. 
  • Encendido apagado :La funcionalidad básica de encendido y apagado para cualquier dispositivo que tenga activado y desactivado el binario, incluidos enchufes e interruptores, así como muchos dispositivos futuros. Tenga en cuenta que los termostatos tienen una configuración de ‘modo’ expandida, que es un interruptor de múltiples vías que incluye encendido y apagado, pero los termostatos generalmente no tienen esta característica. 
  • StartStop :Este rasgo cubre iniciar y detener el dispositivo. Iniciar y detener un dispositivo cumple una función similar para encenderlo y apagarlo. Los dispositivos que heredan este rasgo funcionan de manera diferente cuando se encienden y cuando se inician. Algunas lavadoras, por ejemplo, pueden encenderse y modificar sus configuraciones antes de comenzar a operar.
  • Ajuste de temperatura : Este rasgo cubre el manejo tanto del punto de temperatura como de los modos. 

Para  nuestro ejemplo no seleccionaremos ninguna de esta opciones por el momento y pulsaremos  “SaveTraits

 

Nos debe aparece ahora  al entrada    con la configuración definida:

 

 

Si pinchamos en la entrada  podemos cambiar algunos de los parámetros ya definidos ( no olvidar darle al botón de “save“) 

 

 

 

 

Grabamos el dispositivo que acabamos de registrar, pulsando en “SAVE”,

 

 

Configruacion de la Raspberry Pi

 

Bien, ahora en la Raspberry Pi configuraremos el entorno virtual de Python para aislar el SDK y sus dependencias de los paquetes Python del sistema, nos escogemos la opción de Python 3:

sudo apt-get install python-dev python-virtualenv

virtualenv env –no-site-packages

env/bin/python -m pip install –upgrade pip setuptools wheel

source env/bin/activate

Instalamos las dependencias necesarias además de  Google Assistant SDK que nos permitirá tener Google Assistant corriendo en la Raspberry Pi:

sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev


Mediante pip instalamos la última versión de Python en el entorno virtual:

python -m pip install --upgrade google-assistant-sdk[samples]

Instalamos o actualizamos la herramienta de autorización:

python -m pip install --upgrade google-auth-oauthlib[tool]

 

Ahora generamos los credenciales para ejecutar los ejemplos, usaremos el fichero JSON que nos hemos descargado previamente:

google-oauthlib-tool –scope 

https://www.googleapis.com/auth/assistant-sdk-prototype –scope

 https://www.googleapis.com/auth/gcm –save –headless –client-

secrets /home/pi/client_secret_xxxx.apps.googleusercontent.com.json

 

 

Si todo es correcto, nos pondrá algo como:

Please visit this URL to authorize this application: https://..."
 

Copiamos la URL y vamos a ella con un navegador que esté validado con nuestra cuenta de Google. Tras permitir el acceso o nos dará un código de autenticación que debemos pegar en la shell.

Y ahora, ya estamos listos para probar un ejemplo!

En el mismo entorno virtual, ejecutamos el siguiente comando indicando nuestro ID de Proyecto y nuestro ID de modelo, En caso de no haber  anotando estos datos , ambos estan  en la Consola de Actions de Google buscando en las opciones generales del proyecto y del dispositivo.

Si esta todo OK ejecutamos el siguiente comando y quedará listo para que hablemos con el Assistantar:

 

  googlesamples-assistant-hotword --project_id entrada-txarlatana --device_model_id entrada-txarlatana-entrada-xxxx

 

Por cierto, para cambiar el idioma de nuestro Asistente, lo haremos directamente con nuestro teléfono móvil, con la app del Assistant que supongo la tendréis instalada (y si no os la instaláis :P, la abrís, pulsamos arriba en la brújula, y en la siguiente pantalla en Explorar debemos ir a “Ajustes”,

En Ajustes debemos buscar en Dispositivos el dispositivo que hemos registrado antes, lo seleccionamos, y ahí ya le podremos dar acceso a más datos nuestros a los señores de Google o seleccionar el idioma que queremos para interactuar con el Assistant!

 

 

MEJORA DEL MICRÓFONO 

Finalmente, dependiendo de la calidad de tu micrófono, notará que tiene algunos problemas a la hora de escucharle. En lugar de gritar  cada vez que quiera usarlo, lo que haremos será regular el micrófono mediante la línea de comandos una vez más.

  • Introduzca  en la termina ssh  el siguiente comando:
     alsaixer
  • Pulsee F6 para seleccionar un USB diferente. Use, las flechas para seleccionar tu micrófono.
  • Usa las flechas para aumentar el volumen de captura.
  • Cuando esté satisfecho con el volumen, pulse  ESC para salir.
  • Escriba el siguiente comando para hacer permanentes los cambios.
     sudo alsactl store

Ahora será capaz de comunicarte con su Echo casero hablando de manera normal   en lugar de gritando. Desde esta misma pantalla también se puede cambiar el volumen por defecto si lo necesitara.

 

Tenemos el servicio montado bajo una Raspberry Pi, si volvemos a ejecutar el ejemplo anterior estará el Asistente en nuestro idioma pero  tendremos que constantemente pulsar Enter o decir ‘OK, Google’ independientemente de los ejemplos que tenemos para interactuar.

Si no nos  interesa que el micrófono esté siempre escuchando y así también evitar la necesidad de decir ‘OK Google’ todo el rato, mediante un script  en c-shell   podemos   iniciar  o detener el Assistant

google_assistant_para.sh

cd /home/pi/

source env/bin/activate

nc -l 12345 | /home/pi/env/bin/python3 /home/pi/env/bin/googlesamples-assistant-pushtotalk –project-id txarlatana –device-model-id txarlatana-pitxarlatana-xxxx &

 

google_assistant_para.sh

pkill python3

pkill google

pkill nc

 

 

Mas información en  https://developers.google.com/assistant/sdk/guides/library/python/

 

 

 

 

 

 

 

OpenAuto


Y es que en lugar de tener que gastar una fortuna en una pantalla para el coche que incluya Android Auto de marca como Pioneer o Sony el desarrollador Polaco Michal Szwaj   se decidió a crear este proyecto cuando buscaba incorporar un sistema Android Auto en su viejo coche,  por lo que descartado comprar un costoso equipo ,  la primera alternativa que se le ocurrió  fue  OpenAuto que  se lanzó  en el primer trimestre de 2018 de manera pública ( dado que las primeras versiones de Android Auto oficialmente no admitían autorradios de  terceros baratos ) , Desgraciadamente  como hemos visto,  instalarlo  a pesar  de  que existe un script que  puede hacer  todas las funciones , es algo complejo porque al fin al cabo requiere compilar código ,   así como añadir una serie de configuraciones para hacerla funcionar, motivo por el cual se lanzó a hacerlo todavía más sencillo creando una imagen en unas SD  con todo ya instalado  y pre-configurado .

En efecto se  puede hacer casi  lo mismo que Android Auto  gracias a la  nueva distribución de GNU/Linux llamada Crankshaft para lo cual  solo necesitaremos la Raspberry Pi  3 y una pantalla táctil, la cual desgraciadamente  tiene  una gran peculiaridad :sólo  funciona con la  pantalla táctil de 7″ oficial de la fundación Raspeberry ( unos 100€) . Sólo si se cuenta con ambas condiciones tan  solo habrá que  instalar  la imagen de Crankshaft y por supuesto encontrarle un hueco en el salpicadero de nuestro coche(su creador recomienda que compremos la pantalla oficial y una carcasa)

 

 

Crankshaft  esta en fase alfa y se puede descargar  gratuitamente desde su página web oficial pero sus autores no se responsabilizan de ningún problema que pueda surgir durante su utilización, ya que se distribuye de forma altruista y no una versión estable desarrollada por Google (por tanto, tenga mucho cuidado si lo utiliza  y depende  de esta).

Los  conceptos  sobre los que se centra esta distribución;

  • Amistoso y divertido:Una instalación base que debe “sólo trabajar” sin ninguna configuración extra , es decir sin tener que ejecutar un solo comando desde la consola .

  • Software libre ; respeta su libertad garantizada por la GPLv3, desarrollado por Open. Código fuente.

  • De gran alcance: nos  lo pone fácil para personalizar y desarrollar en él.

Android Auto es más que un concepto,  pues mientras Android Auto puede tomar la forma de software pre-instalado en un a elegante unidad principal de su coche  nuevo , en un contexto de Crankshaft,  Auto Android es, ante todo un reflejo de la aplicación que se ejecuta en tu teléfono Android   y por ende donde reside toda la magia , por lo que no es software que se ejecuta en una unidad principal (en este caso una  Rasbperry Pi 3  ) ya que  a aplicación Android Auto funciona en su teléfono que  sirve como  software de proyección – más simplemente mediante un cable USB – de sí mismo y admitiendo  incluso  aplicaciones como Google Maps, funcionando en su teléfono. Open fue desarrollado originalmente para su uso en el hardware como el Pi de Raspberry pi  con una pantalla táctil,  para usarlo en  combinación con  un teléfono con Android con  la aplicación Android Auto, proyectando la salida de la aplicación Android Auto un Raspberry Pi equipado con una pantalla táctil y funcionamiento Open, se convierte en una unidad principal de coche potencialmente muy bajo costo y eficaz comparable a la funcionalidad ofrecida por unidades principales actuales.

Crankshaft es una distribución Linux ha sido desarrollada para hacer más fácil de usar Open para configurar y ejecutar proporcionando la funcionalidad adicional de ayuda fuera de la caja que no es estrictamente parte de Open.

Una unidad principal de funcionamiento del Crankshaft:

  1. Tiene muy poco control sobre el teléfono y qué aplicaciones se ejecutan en él
  2. Solo maneja entradas relacionadas cuando toca la pantalla táctil   enviando estos datos a la aplicación de Auto Android en su teléfono
  3. Puede negarse a ayudar al audio del teléfono aunque esto puede ser útil si desea utilizar un Bluetooth estéreo ya trabajando en su coche
  4. Podría considerarse vinculada al teléfono Android que es el servidor con  todos los beneficios y límites que conlleva

 

Hardware 

Necesita los siguientes elementos

Getting started materials

  1. Una Raspberry Pi:

    • Los modelos 3B y 3B + son la opción razonable.

    • El Pi 2 sería conveniente pero carece de WiFi y Bluetooth a bordo que podría ser de utilidad.

    • El cero de Pi, A + y B Pi original pueden hacerlas a pesar de la aceleración de GPU de Open.

  2. Por lo menos una tarjeta de microSD de 4GB  :Tarjetas Sandisk y Samsung (la línea EVO) son grandes

  3. Pantalla táctil de frambuesa Pi : de hecho el oficial 7″ modelo funciona muy bien alimentado desde el Pi a través de los pines GPIO, como física pin 2 (5V) y la clavija 6 (GRND)

  4. Un smartphone con Android 5.0 o superior  con la aplicación de Android Auto instalada

  5. Un cable USB para conectar el teléfono a su Raspberry Pi

  6. Una fuente de energía como un enchufe accesorio de 12V al convertidor del USB.

    • Conseguir una adecuada con alto amperaje (Amp 2 o más).

    • No compre los baratos en las tiendas de articulos orientales.

  7. Un cable USB a micro USB para alimentar el Pi.

  8. Una solución de salida de audio como la radio del coche.

    • Un cable de audio 3.5mm Macho a macho le permitirá conectar el Raspberry Pi para Aux zócalo de su coche, si tienes uno.

    • Otra opción es audio Bluetooth.

  9. Un micrófono USB Si desea utilizar al asistente de “Google OK”.

 

Si usted está confundido con la pantalla táctil, consulte a la guía de “construcción de la pantalla” en ThePiHut.

Assembled screen

La pantalla montada debería verse como esto.

Después de conectar el cable de cinta, necesitarás conectar dos cables adicionales más.

Estos son algunos diagramas útiles

Corresponde a:

Usted tendrá que conectar los 2 pines: tierra (GND/negro) y 5V (rojo) a los 2 pines etiquetado GND y 5V de la pantalla táctil. N

Tome  mucha  precaución al conectar lo 5V/GND, ya que podría freír la pantalla / el Pi si lo conecta mal.

Software

Vaya a la sección lanzamientos de Crankshaft y descargue el archivo ZIP de 500 MB o así a su ordenador.

Una vez ,  descargada la imagen correspondiente  en su ordenador  siga los siguientes pasos:

  • Inserte la tarjeta SD en el lector de tarjetas SD  de su ordenador comprobando cual es la letra de unidad asignada. Se puede ver fácilmente la letra de la unidad, tal como G :, mirando en la columna izquierda del Explorador de Windows.
  • Puede utilizar la ranura para tarjetas SD, si usted tiene uno, o un adaptador SD barato en un puerto USB.
  • Descargar la utilidad Win32DiskImager desde la página del proyecto en SourceForge como un archivo zip; puede ejecutar esto desde una unidad USB.
  • Extraer el ejecutable desde el archivo zip y ejecutar la utilidad Win32DiskImager; puede que tenga que ejecutar esto como administrador. Haga clic derecho en el archivo y seleccione Ejecutar como administrador.
  • Seleccione el archivo de imagen que ha extraído anteriormente de la imagen de Raspbian de Crankshaft .
  • Seleccione la letra de la unidad de la tarjeta SD en la caja del dispositivo. Tenga cuidado de seleccionar la unidad correcta; si usted consigue el incorrecto puede destruir los datos en el disco duro de su ordenador! Si está utilizando una ranura para tarjetas SD en su ordenador y no puede ver la unidad en la ventana Win32DiskImager, intente utilizar un adaptador SD externa.
  • Haga clic en Escribir y esperar a que la escritura se complete.
  • Salir del administrador de archivos  y expulsar la tarjeta SD.
  • Ya puede insertar la SD en su Raspberry Pi en el adaptador de micro-sd , conectar un monitor por el hdmi , conectar un teclado y ratón en los  conectores USB, conectar la  con un cable ethernet  al router  conectividad a Internet y finalmente conectar la alimentación  para comprobar que la Raspeberry arranca con la nueva imagen

 

Por último, poner todo en iniciar su coche y conecte el teléfono!

No es un software de nivel alpha, por lo que. No es seguro  que funcione  al 100%   incluso con el hw probado  y sw de Google o Android. T

Si es  un desarrollador que es capaz de compilar software en Linux, puedes seguir las instrucciones de Open incluso cuando el Crankshaft  no funcione en su hardware personalizado.

Puede ver en este hilo una lista de compatibilidad de teléfonos y Hardware.El listado de móviles compatibles incluye prácticamente todos los recientes, y puede comprobar el listado de usuarios que afirma que funciona con su móvil en la página de GitHub   pero como decíamos al principio de este post el problema es la pantalla táctil pues de no ser la oficial  puede que visualize  perfectamente el interfaz  pero que no reaccione a las pulsaciones .

Personalmente lo he probado con la pantalla  kuman de 5”  ( bastante mas económica que la de 7″ oficial ) pero desgraciadamente aunque  la imagen es  perfecta del interfaz  desgraciadamente  no responde a las pulsaciones ante la pantalla 

Al estar todavía en fase experimental, le faltan bastantes funcionalidades. Por ejemplo, no cuenta con implementación para micrófono, por lo que el control por voz mediante Ok Google no funciona. Tampoco tiene Bluetooth, por lo que es necesario conectar el móvil mediante USB para poder usarlo con el sistema

 

Via instructables

Como convertir una impresora 3D en una impresora Wifi


Geeetech es un fabricante chino fundada  en 2011, y que se ha dedicado a la I + D integrada, la producción y la distribución de EDB (placas de desarrollo integrada), MCU, así como a hardware de código abierto, destacando por sus desarrollos en impresión 3d. De hecho son una de las compañías más grandes de impresoras 3D en China, ya que han producido más de 100,000 impresoras, siendo ademas de las pocas compañías de impresoras 3D de código abierto en China.

Precisamente  dada su trayectoria no podían olvidar el desarrollo de un modulo que ofrezca  conectividad inalámbrica con el único objetivo de permitir que todos los aficionados a la impresión en 3D puedan controlar su impresora de forma inalámbrica. 

Dicho modulo inalámbrico   llamado 3D WiFi es ampliamente compatible con muchos tipos diferentes de impresoras 3D en el mercado: el único requisito es que el chip conversor de  USB a serie de su impresora pertenezca a uno de estos tres :CH340, FT232 y PL2303   y esté controlado por las instrucciones G.code, así que si cumple esto  dicho o Módulo 3D WiFi puede actualizar su máquina como Wi-Fi habilitada y hacerla comparable a otras impresoras 3D conectadas Wi-Fi prohibitivamente caras.

3D-wifi 10.jpg

El módulo  3D WiFi compone principalmente de dos partes: placa de control y módulo Wi-Fi  siendo de tamaño muy pequeño ( mas o menos como una caja de cerillas)  pero  lo suficientemente potente como para conectar su impresora 3D con el servidor en la nube de Geeetech, para  controla un dispositivo desde la aplicación EasyPrint 3D sin mas configuraciones dado que el módulo de WiFi en 3D está listo para usar de inmediato: solo necesita conectar su impresora 3D al puerto USB del este dispositivo y finalizar las configuraciones simples por medio de  la aplicación para Android EasyPrint 3D y a partir de ahí  ya puede  comenzar a controlar su impresora de forma inalámbrica.

 A través de la aplicación EasyPrint 3D, es extremadamente simple y conveniente controlar directamente su impresora en cualquier lugar y en cualquier momento pues solo necesitara conectar su impresora 3D al puerto USB del módulo 3D WiFi , completar configuraciones sencillas en la aplicación 3D EasyPrint ( que vamos a ver )  y ya luego puede controlar su dispositivo inalámbrico y comenzar a imprimir  .Además, se da a acceso a una gran galería en la nube( al estilo thinginverse ) , que cubre 9 categorías de modelos 3D para imprimir desde hobby, hogar, moda, arte a gadgets, herramientas, juguetes, educación y piezas de impresión en 3D. 

También se puede grabar y compartir  diseños desde  la aplicación EasyPrint 3D en segundos .

Quizás una de las facilidades mas interesantes es la de control remoto  su impresora 3d en tiempo real. Incluso puede configurar los parámetros de impresión relevantes y recibir notificaciones instantáneas durante su trabajo de impresión.

Ademas de ser compatible  3D WiFi  con todas las impresoras de Geetech, se ha probado con la siguientes impresoras:

Creality-CR-10.jpg
Anycubic-I3-Mega.jpg
Anet-A8.jpg
Monoprice2.jpg
Monoprice1.jpg


El módulo 3D WiFi   también es compatible con impresoras 3d controladas por las siguientes placas:

Arduino-Mega-R3.jpg
Iduino-Mega-R3.jpg
Rumba.jpg.

Carastericticas del 3D WiFi  

  • Alimentación: 5V DC
  • Corriente de trabajo: 150mA (en promedio), 500mA (pico)
  • USB 2.0 de velocidad completa
  • Soporte de tarjeta TF: SDSC, SDHC (<32G); CLASS2, CLASS4
  • WIFIFrecuencia: 2.4G ~ 2.5G (2400M ~ 2483.5M)
  • Potencia de transmisión: 802.11b: + 20 dBm / 802.11g: +17 dBm / 802.11n: +14 dBm
  • Sensibilidad de recepción: 802.11b: -91 dBm (11 Mbps) / 802.11g: -75 dBm (54 Mbps) / 802.11n: -72 dBm (MCS7)
  • Antena: antena PCB a bordo
  • Modo Wi-Fi: Estación / SoftAP 
  • Estándar WLAN: 802.11 b / g / n /
  • Mecanismo de seguridad: WPA / WPA2
  • Tipo de cifrado: WEP / TKIP / AES
  • Protocolo de red: IPv4 、 TCP / UDP / HTTP / FTP / MQTT
  • Tamaño: 49.37 * 25.87 * 16.5mm
  • Tamaño de empaquetado: 52.44 * 28.94 * 17 mm

 

Aplicación EasyPrint 3D

EasyPrint 3D se desarrolló como una aplicación de impresión 3D, estando orientada tanto para principiantes en impresión 3D como para profesionales experimentados, con el objetivo de llevar la tecnología de impresión 3D a nuestra vida diaria. Usa  un interfaz de usuario simple y elegante  proporcionando un flujo de operación fácil y una experiencia de usuario receptiva.

EasyPrint 3D viene con cuatro características principales:

  • Monitorizacion en tiempo real: con EasyPrint 3D, un colaborador considerado, le resultará conveniente monitorear el estado de su impresora y el progreso de la impresión en tiempo real cuando está ocupado completando su trabajo, haciendo footing, comprando o visitando amigos.
  • Control remoto: al conectar su impresora con EasyPrint 3D, puede dirigir el control remoto sobre el proceso general de impresión. Le permite elegir un modelo 3D favorito de la tarjeta SD y la galería de aplicaciones en la nube. Solo unos pocos clics en su teléfono para configurar su máquina, obtener una vista previa del archivo de modelo, calibrar y nivelar su impresora, modificar la temperatura de la extrusora y el semillero y la velocidad de impresión, y comenzar a imprimir. Durante la impresión, recibirá de inmediato una notificación cuando se corte la energía. En este caso emergente, la impresora se detendrá y guardará el estado de impresión en tiempo real de inmediato. Cuando encienda la impresora la próxima vez, aparecerá un mensaje emergente para que usted elija reanudar la impresión anterior o iniciar una nueva.
  • Cloud slicer: esta característica le permite transformar archivos .stl en comandos g.code en su palma de la mano. Eficiente y conveniente.
  • Una galería en la nube de modelos en 3D: esta galería en la nube cubre 9 categorías de modelos 3D GRATIS, que incluyen arte, moda, hogar, pasatiempos, educación, partes de impresoras 3D, dispositivos, juguetes y herramientas. El desarrollo de una galería de nubes de este tipo surge de nuestra idea: compartir y desarrollar. En la próxima versión, puede tener acceso a un gran volumen de modelos 3D gratuitos compartidos por aficionados a la impresión en 3D de todo el mundo.

Veamos a continuación los pasos para configurar el modulo 3D WiFi :

  • Descargue la aplicación EasyPrint 3D aquí e instálela siguiendo las instrucciones o también puede descargar la aplicación EasyPrint 3D en Google Play y App Store.
  • Abra la aplicación EasyPrint 3D. Haga clic en el botón [Iniciar sesión] en la interfaz [Me] para finalizar su registro.
Inicia sesión.jpg
  •  Para principiantes, haga clic en [Cuenta] para registrarse. Ingrese su propia información de cuenta.(Nota: no hay espacio en el nombre de usuario. Para usuarios extranjeros, seleccione “Inglés” para la dirección de su servidor).
15 register.jpg   16 register.jpg  17 register.jpg
  •  Haga clic en [Registrarse ahora] y aparecerá una interfaz emergente para que revise su correo electrónico.
20 register.jpg
  •  Haga clic en OK y revise su correo electrónico.
  •  Inicie sesión con la información de su cuenta.

Enlazar la impresora 3D a la aplicación EasyPrint 3D

  • Inicie sesión y enlace la impresora. En [Me] – [Mi impresora 3D], finalice el proceso de encuadernación siguiendo las instrucciones de la aplicación.
  •  Haga clic en [Mi impresora 3D].
13 Me.jpg
  • Haz clic en el botón “Comenzar para enlazar”.
21 empezar a bind.jpg
  • Haga clic en el botón en la imagen de abajo para ingresar el número de serie manualmente.
Image021.jpg   22 número de serie.jpg
  • Haga clic en “Siguiente” y aparecerá la siguiente imagen para informarle que el proceso de encuadernación es exitoso.
Image024.jpg
  • Luego verá la siguiente interfaz, que muestra que la impresora está fuera de línea.
Imagen026.jpg
  • !Ese es todo el proceso de unión.! 

En el siguiente punto, terminaremos las configuraciones de Wi-Fi paso a paso.

Configuración de Wi-Fi

Los procedimientos de configuración detallados son los siguientes:

  •  Conecte su impresora 3D al puerto USB del módulo WiFi 3D con su cable USB para la transmisión de datos. Use el cable de alimentación para conectar el módulo WiFi 3D con su adaptador para encenderlo.
33 (1) .png
  • Compruebe si los tres indicadores luminosos están encendidos: Wi-Fi, USB, fuente de alimentación de izquierda a derecha en orden. Inserte la tarjeta TF en la ranura.
11- (1) .png
  •  Presione prolongadamente el orificio etiquetado con “establecer” con un alfiler, hasta que la luz de Wi-Fi se apague y parpadee rápidamente. Afloje el pin y el Wi-Fi 3D entrará en el modo de configuración. Nota: Si no afloja el pin, la luz parpadeará lentamente para entrar en el modo de reinicio.
  • Abra la aplicación EasyPrint 3D y haga clic en “Imprimir”. En la página de la ventana emergente, haga clic en el ícono “Wi-Fi” para ingresar al modo de configuración de Wi-Fi, como se muestra en la imagen a continuación.
Image032.jpg Image034.jpg Imagen036.png
  • Haga clic en [Siguiente] para comenzar a detectar el Wi-Fi integrado en la impresora. Si se detecta la conexión Wi-Fi, podría ver la siguiente imagen.
Imagen038.png
  • Si no se detecta, aparecerá un mensaje emergente “La impresora no se detectó Wi-Fi”. Haga clic en [Aceptar] y nuevamente haga clic en [Siguiente] para volver a detectar.
Imagen040.jpg
  •  Después de detectar el Wi-Fi integrado en la impresora, haga clic en [Siguiente] y elija un punto de acceso Wi-Fi, como se muestra en la imagen a continuación.
  • Haz clic en [Siguiente]. Si el punto de acceso Wi-Fi necesita una contraseña, la interfaz mostrará el cuadro de entrada de la contraseña de Wi-Fi.Simplemente ingrese la contraseña correcta y luego haga clic en [OK], como se muestra en la imagen a continuación. (si no es necesario ingresar la contraseña, continúe con el siguiente paso).
Image044.png

 

  • Cuando logre conectar la red Wi-Fi, la interfaz mostrará que la configuración ha finalizado. Haga clic en [Aceptar] y la interfaz mostrará que la impresora está en línea.
Imagen046.png Image048.jpg


Hasta aquí, la configuración entre la aplicación y su impresora ha finalizado. Ahora puede imprimir y controlar la impresión a través de la aplicación EasyPrint 3D.

  •  Haga clic en [Siguiente] para comenzar a detectar el Wi-Fi integrado en la impresora. Si se detecta la conexión Wi-Fi, podría ver la interfaz de “Configuración” en su teléfono.
Imagen036.png Image051.png
  • Haga clic en el botón de Wi-Fi para conectar la zona activa “Geeetech-Printer”, como se muestra en la imagen.
Image053.png
  • Haga clic en el botón [Siguiente] en la imagen de abajo.
Image055.png
  •  Ingrese el nombre WLAN y la contraseña de su router. Haga clic en [Aceptar] para conectar su Wi-Fi.
Image057.png
  • Cuando logre conectar el Wi-Fi, la interfaz mostrará que la configuración ha finalizado, como se muestra en la imagen a continuación.
Imagen046.png
  • Haga clic en [Aceptar] y la interfaz mostrará que la impresora está en línea.
Image048.jpg


Hasta aquí, la configuración entre la aplicación y su impresora , de modo  que ya ha finalizado todos los ajustes oportunos. Ahora puede imprimir y controlar la impresión 3d con el modulo  3D WiFi  a través de la aplicación EasyPrint 3D.

 

Resumiendo en el siguiente vídeo podemos ver  todos los pasos de configuración de este modulo 3D WiFi    con la  aplicación easyprint3d:

 

 

 

 

 

Como instalar una pantalla tactil de 5″ en una Raspberry Pi 3


En realidad, en efecto,  es bastante sencillo y “económico”  dotar a nuestra Raspberry Pi 3 de una pantalla táctil  siempre que no optemos por adquirir la version oficial  , la cual es mucho mas cara ( sobre unos 70€  mas gastos de envió  ) en clara  contraposición de  versiones de otras pantallas mas pequeñas pero mas económicas .

La cuestión es que la  pantalla oficial ofrece ,excepto por su tamaño, características muy similares a las de otros fabricantes, pues de  hecho las características de  la version oficial  son las siguientes:

  • Tamaño: 7″
  • Resolución: 800×480 hasta 60fps
  • Color: hasta 24bits
  • Táctil: capacitiva de 10 puntos
  • Placa adicional para hacer la conexión, también que sirve para alimentar la Raspberry Pi 3 por lo que con un solo cable de alimentación tendremos todo funcionando
  • Función dual screen de esta pantalla y la salida HDMI que pueden estar activas de forma simultánea

Es de destacar  que la pantalla al final no es tan nativa como cuentan pues  ademas usa una placa intermedia para convertir la señal de la salida directa de la placa a una señal de un tipo más simple y que abarata el tipo de pantalla. Esta placa básicamente es un convertidor LVDS a  HDMI quedando integrada con la pantalla y con la Raspberry Pi 3 bastante bien pero no mejor que con otras soluciones. Dual screen permitiría usar como pantalla principal un monitor HDMI y mantener esta como secundaria pudiendo hacer cosas como lanzar una app desde esta pantalla TFT, OMXPlayer por ejemplo, y que se vean en la otra, esto da mucho juego pero tampoco quizás no sea  algo tan frecuente .

En contraposición a la pantalla oficial vamos a ver  una  solución mucho  mas barata propuesta por Kuman  que cuenta mas de la mitad  de la solución oficial .(unos 35€  a Amazon.es) El modelo  que vamos  que hemos probado en este blog  es el modelo Kuman 5 Pulgadas , con pantalla resistiva, resolución  800×480  con salida  HDMI para Raspberry Pi 3 2 Modelo B RPI 1 B B + A A + SC5A

Estas son algunas de las características de este modelo de kuman,

  • Pantalla estándar TFT de 5 ‘”
  • Resolución 800 × 480
  • Con pantalla táctil resistiva, control táctil compatible
  • Con control de luz de fondo(  la luz de fondo se puede apagar para ahorrar energía con un interruptor integrado)
  • Es compatible con la entrada de interfaz HDMI estándar
  • Se puede insertar directamente con Raspberry Pi (3ª, 2ª y 1ª generación)
  • Se puede usar como monitor HDMI de uso general, por ejemplo: conectando un ordenador  por medio del HDMI como pantalla secundaria (la resolución debe poder forzar la salida de 800 x 480)
  • Por supuesto se puede usar con Raspberry Pi  siendo compatible con Raspbian, Ubuntu, Kodi, win10 IOT (táctil resistiva)
  • Puede funcionar como monitor de PC  pues es compatible con XP, win7, win8, sistema win10 (no admite touch) touch Certificación CE, RoHS

A diferencia del modelo oficial este modelo de kuman, cuenta con interfaz USB para alimentarlo externamente por ejemplo  para usar la pantalla de forma independiente ,de modo que  cuando se conecta a la Raspberry Pi a través del conector de expansión   de 13×2 se pude  obtener  5V de alimentación del  propio  conector  USB  y obviamente no haya que alimentar  a la  raspberry  y al   modulo   de kuman,de forma independiente,

Respecto al vídeo  al incorporar el interface Interfaz HDMI simplemente hay que conectar un puente macho hdmi- macho hdmi  entre la Raspberry Pi  y la placa de  la pantalla  lo cual ademas permite mantener unidas ambos módulos

Por cierto , cuenta con  interruptor de encendido de la luz de fondo para controlar la retroiluminación encendida y apagarla  cuando no se necesite  para ahorrar energía por ejemplo en aplicaciones portátiles

A diferencia de otras soluciones   la conexión del digitalizador  adherido a  la pantalla se  hace  directamente    por medio del  socket de 13 * 2 pines , el cual ademas sirve   para alimentar con 5V al   modelo de kuman, desde  el pin de potencia de la Rasperry Pi  al mismo tiempo que  se transfiera la señal táctil

De vuelta a la Raspberry Pi algo muy interesante es la interface interfaz extendida  de la placa  pues de la señal 13 * 2   volvemos a tener nuevamente los mismo pines en la placa de control para poderlo usar para  nuestras  aplicaciones   con la importante salvedad que para el digitalizador se usan los pines 19(MI) , 22(IRQ), 21 (MO) , 23 (SCK)  y 26 (TC) , pines que por tanto no deben ser usados en otras aplicaciones.

1) "NC" significa No conectado, los pines "NC" no se utilizan en esta pantalla LCD.
2) SI solo se usa para visualización (sin tocar), puede dejar que este Pin 13 * 2 sea libre, solo conecte el USB ySeñal HDMI para hacerla mostrar.
3) 13 * 2 señales de pin extendidas para el usuario.

Una vez entendida las conexiones de la placa, veamos los pasos para conectar el   modulo de kuman,   a la  raspeberry Pi;

Software

Instalación automática

Con este  modulo de kuman   se adjuntan en un dvd  tres imágenes  con los drivers  ya instalados   y configurados  .Estas  imágenes corresponden   a  tres sabores de Linux:  KALI, RASPBIAN  y UBUNTU , y  que deberemos copiar desde el propio dvd. Estos son los nombres de los ficheros:

  • 5inch_KALI2017.01.7z
  • 5inch_raspbian20180418.7z
  • 5inch-RPI3-RPI2-ubuntu-mate-16.04-beta2.7z

Una vez haya decidido   que imagen vaya   a instalar ( recomendamos la de Raspbian 20180418 ) , necesitara  descomprimir el ficheo con el programa gratuito 7zip

Con la imagen correcta del S.O.  ahora   realice  el formateo de tarjeta TF  usando  SDFormatter

Por ultimo grabe la imagen oficial en la tarjeta TF utilizando Win32DiskImager.
Cuando termine  el proceso , saque la memoria  sd del lector del pc  ,   e introduzca esta en su Raspberry Pi
Observe que las credenciales de acceso  , según la imagen que  haya grabado en la sd son diferentes:

  • <5inch_raspbian20170705> user:pi      password:raspberry
  • <5inch-RPI3-RPI2-ubuntu-mate-16.04-beta2> user:pi password:raspberry
  • <5inch_kali2017.01> user:root  password:toor

Instalación manual

Podemos hacer una instalación  automática  que ya hemos hablado, en la que se han incluido  todos los drivers  necesarios para soportar el digitalizador, o bien podemos hacer la instalación controlada , veamos ahora los pasos a seguir:
En primer lugar necesitamos   instalar la imagen oficial de Raspbian o UbuntuMate ,para  ello descargue desde el sitio web oficial: https://www.raspberrypi.org/downloads/   o https://ubuntu-mate.org/download/ .

Con la imagen correcta del S.O.  ahora   realice  el formateo de tarjeta TF  usando  SDFormatter

Por ultimo grabe la imagen oficial en la tarjeta TF utilizando Win32DiskImage

Ahora nos toca instalar manualmente los drivers para lo cual podemos usar dos métodos parecidos en función de que tenga  la Raspebrry Pi o conexión a internet

Método 1: instalación en línea

En este  método  la Raspberry Pi necesita conectarse a Internet,
Los pasos  a seguir son los siguientes:

  1.  Inicie sesión en la Raspberry Pi usando el programa y Putty SSH (Usuario: pi; Contraseña: raspberry)
  2. Ejecute los siguientes comando (puede hacer clic con el botón derecho del ratón para pegar después de copiarlo en Putty)                                                                                                        git clone https://github.com/goodtft/LCD-show.git
    chmod -R 755 LCD-show
    cd LCD-show/
    sudo ./LCD5-show
  3. Espere hasta finalizar la ejecución del ultimo comando antes de usar el panel LCD

Método 2: instalación fuera de línea

  1. Escanee el código QR en el lado derecho    .
  2. Puede copiar el fichero    llamado  “LCD – show – 160701. The tar. gz” desde  el  DVD   al directorio raíz de la tarjeta del sistema Raspberry Pi; (Sugerencia: copie directamente en su pc  directamente a la tarjeta TF después de completar el paso inicial, o copie por SFTP u otros métodos para copia remota).
  3. Descomprima y extraiga los archivos del disco con los siguientes comandos                                                                                                                cd /boot
    sudo tar zxvf LCD-show-160701.tar.gz
    cd LCD-show/
    sudo ./LCD5-showmo el siguiente comando:cd / bootsudo tar zxvf LCD-show-160701.tar.gzcd LCD-show /sudo ./LCD5-show3)
  4. Cuando termine  el proceso , saque la memoria  sd del lector del pc  ,   e introduzca esta en su Raspberry Pi

Instalación hardware

Una vez tengamos  ya instalado el S.O.   con los drivers del digitalizador , es hora de instalar esta  en nuestras Raspberrry Pi  (i (3ª, 2ª y 1ª generación).
En primer lugar  colocaremos los  4  separadores roscados en la pantalla  >Ahora  solo hay que conecte el zócalo del Pin LCD 13 * 2 a la Raspberry Pi como se muestra en la imagen de abajo.Observe que  encaja en el conector exactamente , pero ademas también debe  encajar uno de los separadores roscados en uno de los orificios de las Rasberry Pi así como debe estar alineados ambos conectores hdmi ( el de la placa con el de la raspberry Pi)  Conecte  ahora  la pantalla LCD y la Raspberry Pi con el adaptador HDMI  espacial .Observe  que debe encajar  el puente hdmi -hdmi  entre ambas placas , lo cual  ademas le dará rigidez mecánica al montaje

Observe por cierto en la parte de atrás abajo a la izda el interruptor que permite apagar la luz de retro-iluminación de la pantalla
A su favor esta placa  también que sirve para alimentar la Raspberry por lo que con un solo cable de alimentación tendremos todo funcionando  y el montaje queda bastante robusto  que difiere por cierto   bastante diferente  la versión  oficial  cuyo conjunto es  un poco endeble con mucho cablecito plano y mucho hilo suelto que no parecen encajar bien con un entorno tipo educativo.

En la imagen  mas abajo podemos ver el montaje terminada a falta de la carcasa , donde se aprecia claramente que es manejable con el dedo   aunque  también  se pueda usar el lápiz táctil que acompaña este kit

Para terminar , si hecha de menos una caja , hay un diseño  que la podemos descargar desde aqui :https://www.thingiverse.com/thing:1698162

Para terminar una nota de aplicación : por si  no nos parece suficiente la  pantalla conectada  a la Raspberry Pi ,   si desconectamos el adaptador  hdmi -hdmi entre la pantalla y la Raspberry Pi , podemos conectar la salida HDMI desde  un ordenador  a la interfaz LCD HDMI mediante un cable normal  HDMI. Luego solo   necesitaremos conectar  el microUSB  del LCD a  un  puerto USB del   pc  mediante un cable USB  y así podremos usar este pequeño LCD , como segundo monitor  o    incluso monitor de   pruebas( obviamente como monitor de pc  la función táctil no estará disponible).

Para terminar , este kit esta accesible en Amazon  por unos 36€

Cámara trasera inteligente con Raspberry Pi. Parte 2


Añadiendo reconocimiento de imágenes

 

En los tutoriales de instalación de OpenCV  se  recomienda compilar desde la fuente; sin embargo, en el último año ha sido posible instalar OpenCV a través de pip, el propio administrador de paquetes de Python. Si bien la instalación desde la fuente le dará el mayor control sobre su configuración de OpenCV, también es la más difícil y la que más tiempo consume. Si está buscando la manera más rápida posible de instalar OpenCV en su sistema, querrá  usar pip para instalar OpenCV, pero hay algunas cosas que pueden hacer que se tropiece en el camino, así que asegúrese de leer el resto de este  post. 

Script  en Python

Ahora  este script    puede  ser nombrado  como  car_detector.py  y lanzarlo desde  la consola  .

Ojo no basta con lanzarlo F5 desde el propio Python pues dará probablemente error a l ahora de importar al libreria cv2, pero no se preocupe situarse en la ruta del scrript  en prython  y   ejecutar

sudo python car_detector.py

IMG_20181113_224935[1].jpg

A partir desde ahí debería funcionar la detección de imágenes  con lo que capte la imagen de  la Raspberry Pi

En el siguiente vídeo podemos ver el script en acción

 

 

Como vemos en elvideo en pequeña escala, lo hizo bastante bien detectando un montón de objetos innecesarios, ( aunque  a veces detecta las sombras como objetos.)En un escenario del mundo real, los resultados fueron sorprendentemente precisos ,pero si es  cerca de las condiciones perfectas, Tenga en cuenta que el código es  básico actualmente y necesitaria muchas más pruebas y depuración)

De los dos métodos,este  método , pero el primer método  es más confiable en múltiples situaciones. Así que si usted fuera a hacer esto para su coche, iría con el método  inicial ( el que usa overlay).

 

 

Conexión hacia la Raspberry Pi via vnc

Ya que se ha conectado exitósamente a la consola de comandos por ssh , seguro que le interesa también poderse conectar tambien  al interfaz gráfico por lo que ahora nos toca instalar y configurar el servidor de VNC sobre Raspberry Pi  en su tablet/smartphone.

Para instalar y configurar el VNC viewer en su tablet/smartphon en  android  siga los siguientes pasos:

  • Descargue la app Vnc Viewwer desde Google Play desde la url  oficial https://play.google.com/store/apps/details?id=com.realvnc.viewer.android
  • Al ejecutar la   app por primera vez le pedira una cuenta de  vnc, de modo qeu si no la tiene tendra que creala desde la propia aplicacion introduciendo una cuenta de correo, un nombre , apellido,pais   y un catcha,
  • En nuestro correo electrónico recibiremos un email que debemos validar para confirmar que  cuenta nos pertenece
  • Una vez que haya confirmado los datos puede intentar volver a entrar en la app VNV Viewer ingresando las credenciales que introdujo
  •  Ahora  siga el procedimiento similar al del ssh
    • Haga clic en el el Boton del signo más en la parte inferior izquierda de la pantalla y seleccione la opción Nuevo Host.
    • Entrar los siguientes datos:

    Alias: cualquier nombre es aceptable como por ejemplo Raspberry Pi 

    Username: pi

    Nombre de host: la  dirección Ip  obatnida con el comando ifconfig

    Contraseña: la pwd que haya puesto

    Los demás campos se pueden dejar espacios en blanco, luego toque la marca de verificación en la derecha superior. Después de eso, haga clic en una Conectar cuando se le preguntó ” Si desea conectar el dispositivo

  • Para  conectarse  a  su Raspberry Pi , dado que ya ha creado la conexión, pulse  sobre el icono nuevo que aparece en la pantalla de inicio
  • Enseguida deberían aparecer   las credenciales de acceso  y probablemente el pwd en blanco que deberemos completar  .
  • Finalmente progresar la conexión  pulsando en CONTINUE
  • Una vez dado el botón de conectar debería aparecer la pantalla principal de Raspbian que ahora podremos controlar desde nuestro smartphone
  • Podemos ver la imagen de la cámara  ahora desde el propio teléfono

Screenshot_2018-11-13-22-55-52-301_com.realvnc.viewer.android[1]

 

Mas información en :https://www.hackster.io/tinkernut/raspberry-pi-smart-car-8641ca