Anuncios

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

Como ver la previsión del tiempo desde una Raspberry Pi


Wttr.in es un servicio de previsión del tiempo orientada a la consola que admite varios métodos de representación de información tal como secuencias ANSI de  terminal,  estando orientado tanto para clientes de consola HTTP (Rizo, httpie o wget), como  para navegadores web en HTTP  , o incluso para visualizadores gráficos en formato PNG .

El servicio wttr.in utiliza  visualización de  wego y diferentes fuentes de datos para obtener información de la previsión del tiempo.

Lo puede ver funcionando aquí: wttr.in desde  un navegador,   pero lo mas interesante de esta utilidad ,  es que  se puede lanzar desde una consola  en nuestra Raspberry pi , para  lo que únicamente  necesitaremos:

  • Conectividad  bien vía WIFI o por cable ethernet
  • Tener instalado el curl 
  • No es fundamental usar la ultima versión Rasperry Pi 3, pues esta utilidad funciona  perfectamente con la versión 2 e incluso en versiones anteriores.

 

Instalar curl en un Raspberry Pi

El comando curl es bastante útil y flexible siendo su  objetivo servir como  herramienta de transferencia de  datos, sin interacción del usuario, hacia o desde un servidor, utilizando uno de los muchos protocolos admitidos.

Si tiene PHP 5 instalado en la Rasperry Pi 3,    y no tiene instado curl cuando instaló Raspbian  ,para ejecutar la utilidad de previsión del tiempo se requiere . Para ello puede hacer lo siguiente:

sudo apt-get update

Y entonces:

sudo apt-get install php5-curl

Estos dos comandos únicamente son los que  realmente todo lo que tenemos que lanzar en el peor de los casos  ya  que puede que  tenga instalado curl en la    Rasperry Pi ,.

 

Ejecución de wttr

Para ver la previsión de tiempo de wttr en la Raspberry Pi  lo podemos  hacer accediendo  desde el navegador Web  Chromiun  e ir a la url http://wttr.in  , pero es mucho mas interesante y rápido (y obtendremos el mismo resultado)  si hacemos la llamada  desde un shell.

Previamente antes de lanzar el comando ,para que se visualice correctamente la salida de texto de este servicio , abriremos la consola de terminal desde la propia Rasperry Pi ,  y  ajustaremos la ventana   del valor  por defecto (80 x25 ) a  130 x24 ,  por lo que nos iremos a Editar –>Preferencias –>Mostrar y seleccionaremos como  ventana por defecto los valores  al menos de  130 x 24  en lugar de la marcada por defecto de 80 x25 .

 

Ahora pulsaremos Aceptar  y cerraremos la ventana  del Terminal

Nuevamente abriremos otra consola de shell  en la Raspberry Pi  y escribiremos : 

curl  wttor.in

Como resultado desde la misma consola veremos  un informe en  tiempo real para su ubicación   sin haber tenido  que especificar nada  más ,  ya  que  es   sensible tanto para la fecha actual como para la localización:

Como es de suponer ,la  ubicación real  se obtiene  de su dirección IP real    tomando  no solo la localización sino la zona horaria  y la hora .

 

Si quiere obtener la información meteorológica para un lugar específico  también se puede Agregar la ubicación deseada a la URL en su solicitud como esta:

$ curl wttr.in/London
$ curl wttr.in/Moscow

Recuerde , como hemos hablado  que si se omite el nombre de la ubicación, obtendrá el informe de su ubicación actual, basado en su dirección IP.

También se puede utilizar códigos del aeropuerto de 3 Letras con el fin de obtener la información del tiempo en un determinado aeropuerto:

$ curl wttr.in/muc      # Weather for IATA: muc, Munich International Airport, Germany
$ curl wttr.in/ham      # Weather for IATA: ham, Hamburg Airport, Germany

Digamos que quieres obtener el tiempo en un lugar geográfico que no sea un pueblo o ciudad – tal vez una atracción en una ciudad, un nombre de montaña o en algún lugar especial. Agregar el carácter antes del nombre para ver nombre ubicación especial antes de que el tiempo es entonces obtenido:~

$ curl wttr.in/~Vostok+Station
$ curl wttr.in/~Eiffel+Tower
$ curl wttr.in/~Kilimanjaro

Hay muchos ejemplos, debajo de la salida del tiempo en que se muestra los resultados de geolocalización de buscar la ubicación:

Location: Vostok Station, станция Восток, AAT, Antarctica [-78.4642714,106.8364678]
Location: Tour Eiffel, 5, Avenue Anatole France, Gros-Caillou, 7e, Paris, Île-de-France, 75007, France [48.8582602,2.29449905432]
Location: Kilimanjaro, Northern, Tanzania [-3.4762789,37.3872648] 

También puede utilizar (directa) de direcciones IP o nombres de dominio (con el prefijo) para especificar una ubicación:@

$ curl wttr.in/@github.com
$ curl wttr.in/@msu.ru

Por ultimo también ofrece  información detallada en línea, para lo cual  solo se necesita acceder a la página de /:help :

$ curl wttr.in/:help
Mas información en  su sitio de Github https://github.com/chubin/wttr.in

Como emular un mando con Arduino


A veces   puede ser  interesante emular del comportamiento  de un mando infrarrojo  con el fin de automatizar procesos  que de otra manera  seria mucho mas complejo . Como ejemplo típico de dispositivos que podemos controlar vía infrarojos, hablamos de  reproductores de cámaras, televisores, DVD, VCR, lectores de blueray, equipos de sonidos, descodificadores  y  un largo etcétera 

Aunque pueda parecer descabellado repetir las mismas señales desde una placa Arduino , lo cierto  es que no es descabellado querer emular este comportamiento , porque  podemos  hacer cosas  que seria muy dificultoso  sin la ayuda del procesamiento de señales de infrarojos como por ejemplo  encender automáticamente  el Aire Acondicionado  cuando la temperatura  suba un determinado valor , o se desconecte a una determinadas horas ,  se apague  cuando no haya movimiento  y un largo  etcétera 

Como paso previo  debemos analizar las señales infrarrojas emitidas por el mando usado para el control de ese dispositivo  por lo que deberemos averiguar  cómo recibir los códigos y luego una vez conocidas intentar ver como transmitirlas.

Para nuestra tarea necesitamos :

  • 1 x Arduino (cualquier versión sirve  siempre que pueda procesar señales  “PWM” )
  • 1 x LED IR   (usted puede conseguir éstos de cualquier TV remoto)
  • 1 x receptor IR (usted puede conseguir éstos de cualquier TV remoto)

 

Preparación para recibir señales

Para el análisis  de las señales infrarrojas  producidas por el mando del  dispositivo a controlar en primer lugar necesitaremos  un receptor de infrarrojos ,   que bien  puede proceder de   uno reciclado de cualquier viejo proyecto que ya no utilice  o bien adquirido específicamente  en el comercio

Una interesante opción son los famosos kits para Arduino que integran por unos 4€  todo los necesario para habilitar la comunicación en los dos sentidos  gracias a un led IRDa, un receptor IRDA  y un mando para pruebas.

Kit Modulo Receptor Infrarojo IR Protocolo Nec con Mando a Distancia Arduino

Como sugerencia  para captar el código correcto , deberíamos poner el receptor IR y el mando en una caja opaca  o algo que sea oscuro  lo cual  asegurará que habrá el mínimo de interferencias y  podremos tener el código más claro para que no tengamos que programar  nuestro  Arduino  muchas veces para una simple tarea. También, asegúrese de que estar alejados de personas viendo la televisión.

Realmente el circuito es bastante sencillo pues únicamente tendremos que alimentar con 5v DC  ( que podemos tomar directamente desde nuestro Arduino )   y luego conectar la salida del receptor digital al pin digital A2 de Arduino

 

Picture of Preparing to Receive Signals

Una vez montado el simple circuito del receptor de infrarrojo es hora de  subir el programa a su Arduino  para  poder descodificar la señal infrarroja .

El siguiente programa utiliza el Arduino y un PNA4602 para descifrar IR recibido lo cual se  puede utilizar para hacer un receptor de infrarrojos. (buscando un código en particular) o transmisor (pulsando un LED IR a ~ 38KHz para el duraciones detectadas,

Este código es de dominio público (visite http://www.ladyada.net y adafruit.com), pero en esta ocasión se ha traducido para que sea mas legible y fácil de entender:


// Necesitamos usar los métodos de lectura de pin ‘raw’  porque el tiempo es muy importante aquí y el digitalRead () es un  procedimiento s más lento!

#define IRpin_PIN PIND
#define IRpin 2

// el pulso máximo que escucharemos: 65 milisegundos es mucho tiempo
#define MAXPULSE 65000

// lo que debería ser nuestra resolución de tiempo, más grande es mejor ya que es más ‘preciso’ – pero demasiado grande y no se conseguirá  tiempo exacto
#define RESOLUTION 20

// almacenaremos hasta 100 pares de pulsos (esto son muchos )
uint16_t pulses[100][2]; // par es pulso alto  y bajo 
uint8_t currentpulse = 0; // indice para pulsos que estamos almacenando

void setup(void)

{
Serial.begin(9600);
Serial.println(“Ready to decode IR!”);
}

void loop(void)

{

// tiempo de almacenamiento temporal
uint16_t highpulse, lowpulse;

//empezar sin pulso 
highpulse = lowpulse = 0;

//esto es demasiado lento!
while (IRpin_PIN & (1 << IRpin)) {
// pin esta a nivel alto

// continúa otros microsegundos
highpulse++;
delayMicroseconds(RESOLUTION);

// Si el pulso es demasiado largo, ‘se agotó el tiempo’ – o bien nada / se recibió o el código está terminado, así que imprima lo que  hemos obtenido hasta ahora, y luego reiniciamos
if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
printpulses();
currentpulse=0;
return;
}
}
// no nos detuvimos, así que escondamos la lectura
pulses[currentpulse][0] = highpulse;

// lo mismo que arriba
while (! (IRpin_PIN & _BV(IRpin))) {
// pin esta aun bajo
lowpulse++;
delayMicroseconds(RESOLUTION);
if ((lowpulse >= MAXPULSE) && (currentpulse != 0)) {
printpulses();
currentpulse=0;
return;
}
}
pulses[currentpulse][1] = lowpulse;

// leemos un pulso alto-bajo con éxito, ¡continuamos!
currentpulse++;
}

void printpulses(void) {
Serial.println(“\n\r\n\rReceived: \n\rOFF \tON”);
for (uint8_t i = 0; i < currentpulse; i++) {
Serial.print(pulses[i][0] * RESOLUTION, DEC);
Serial.print(” usec, “);
Serial.print(pulses[i][1] * RESOLUTION, DEC);
Serial.println(” usec”);
}
}


Una vez que hemos subido el código anterior  y  todo está configurado correctamente, abrir el serial monitor haciendo clic en el botón en el programa de Arduino que es el botón de un círculo en la imagen y  ya estára en marcha así que ahora usted necesitará encontrar un control remoto que desee usar para controlar algo con Arduino

El proceso  esquemáticamente  a seguir es el siguiente :

  1. Encontrar el mando a distancia del dispositivo  que quiere controla
  2. Ejecutar el código del  receptor anteriormente citado
  3. Presione el botón del mando cuyo  código desea obtener 
  4. Ver el Monitor Serial
  5. Pegar el todo el código del monitor serie  en un editor de texto 
  6. Repetir los paso 3, 4 6  con todos los botones del mando que desee descodificar 

 Interpretando las señales

Una vez siga la secuencia de paso anteriores recibirá un montón de números seguidos por “usecs” o “usec”.
Asegúrese de que ha copiado la señal que se desea formateando la salida para más fácil referencia.

Se verá algo como esto:
500 usec, 300 usec
600 usec, usec 1200

Pero habrá números mucho más que eso.

Ahora en el programa emisor  verá esto bastantes veces:

delayMicroseconds();
pulseIR();

Es decir tenemos que  tomar el primer número y poner paréntesis en delayMicroseconds(“here”); el  valor obtenido en el monitor
y a su vez   tomar el segundo número de la misma línea como el de la delayMicroseconds()  valorar y poner en el paréntesis de pulseIR(); valor.

Veamos otro ejemplo .Si conseguimos esto en el monitor serial:

OFF ON
1660 usec, usec 580
1640 usec, usec 560

Ahroa para poner los  correspondiente valores en sus áreas correspondientes lo haremos asi :

delayMicroseconds(1660);
pulseIR(580);
delayMicroseconds(1640);
pulseIR(560);

Como puede apreciar ,la  tarea de transcripción  es muy fácil.

Una vez que tenga los códigos que desee, abra un nuevo  archivo IR_SEND.pde en el programa de Arduino y luego tendremos que  poner  los valores que tiene del monitor de serie entre paréntesis haciéndolo  del mismo modo  que hemos visto anteriormente .

Ahora, una vez que tenemos los códigos que desea y haya cargado el programa con la señal que desea enviar, todo lo que tiene que hacer es conectar el LED IR al pin 13 y luego a tierra  No necesita la resistencia si tiene un Duemilanove Arduino porque tiene una resistencia integrada para PIN 13, por lo que no tiene que preocuparse.


Como ejemplo veamos este código cuando se presiona el botón para subir el canal en un  control remoto de Comcast. . Aquí está el código de Serial Monitor: Recibido:

OFF  ON
36328 usec, 280 usec
820 usec, 300 usec
1580 usec, 320 usec
640 usec, 240 usec
2740 usec, 240 usec
1280 usec, 240 usec
1240 usec, 240 usec
1120 usec, 240 usec
2600 usec, 240 usec
12740 usec, 240 usec
840 usec, 240 usec
980 usec, 240 usec
700 usec, 240 usec
700 usec, 240 usec
720 usec, 240 usec
2460 usec, 260 usec
700 usec, 240 usec
700 usec, 240 usec
14904 usec, 260 usec
820 usec, 240 usec
1660 usec, 240 usec
700 usec, 260 usec
2740 usec, 240 usec
1240 usec, 240 usec
1260 usec, 240 usec
1100 usec, 240 usec
2620 usec, 240 usec
12720 usec, 260 usec
840 usec, 220 usec
2080 usec, 240 usec
1780 usec, 260 usec
700 usec, 240 usec
700 usec, 240 usec
2480 usec, 240 usec
700 usec, 240 usec
700 usec, 240 usec

Aquí está el código realizado a partir de los datos en bruto anteriores  pero no se  asociado al código  

En el siguiente  programa   se ha introducido  un detalla original ; Arduino cambiará el canal cada diez segundos para que se puedan hacer otras cosas , Por ejemplo mientras se ve televisión y esta haciendo otras cosa  así  no tendrá que cambiar el canal de modo que el sw  recorrerá los canales para que tenga las manos libres. (todos sabemos que presionar un botón es tan difícil, ¿por qué no hacerlo de forma automática?)

 

He aquí el programa realizado por Wally_Z:


int IRledPin =  13;    // LED conectado al pin digital 13

// El método setup () se ejecuta una vez, cuando comienza el boceto

void setup()   {               
  // initializa  el pin como salida :
  pinMode(IRledPin, OUTPUT);     

  Serial.begin(9600);
}

void loop()                    
{
  SendChannelUpCode();

  delay(20*1000);  // espera veinte segundos (20 segundos * 1000 milisegundos) Cambia este valor para diferentes intervalos.

}

// Este procedimiento envía un pulso de 38KHz al IRledPin  para un cierto  numero de microsegundos. Usaremos esto siempre que tengamos que enviar códigos.

void pulseIR(long microsecs)

{
  // contaremos desde la cantidad de microsegundos que se nos dice que esperemos

  cli();  // esto apaga cualquier interrupción de fond

  while (microsecs > 0) {
   // 38 kHz tiene aproximadamente 13 microsegundos de alto y 13 microsegundos de bajo
   digitalWrite(IRledPin, HIGH);  //Esto lleva alrededor de 3 microsegundos
   delayMicroseconds(10);         // esperar 10 microseconds
   digitalWrite(IRledPin, LOW);   // esto toma sobre 3 microseconds
   delayMicroseconds(10);         // esperar   10 microseconds

   // asi que  26 microseconds  todo junto
   microsecs -= 26;
  }

  sei();  // esto devuelve el control
}

void SendChannelUpCode()

{
  // Este es el código para CHANNEL + para TV COMCAST.
 
  delayMicroseconds(36328);      //Tiempo libre (columna IZQUIERDA)      
  pulseIR(280);                               //Tiempo en (columna DERECHA) <——- NO MEZCLAR ESTOS ARRIBA
  delayMicroseconds(820);
  pulseIR(300);
  delayMicroseconds(1580);
  pulseIR(320);
  delayMicroseconds(640);
  pulseIR(240);
  delayMicroseconds(1280);
  pulseIR(240);
  delayMicroseconds(1240);
  pulseIR(240);
  delayMicroseconds(1120);
  pulseIR(240);
  delayMicroseconds(2600);
  pulseIR(240);
  delayMicroseconds(12740);
  pulseIR(240);
  delayMicroseconds(840);
  pulseIR(240);
  delayMicroseconds(980);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(240);
  delayMicroseconds(720);
  pulseIR(240);
  delayMicroseconds(2460);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(240);
  delayMicroseconds(14904);
  pulseIR(240);
  delayMicroseconds(820);
  pulseIR(240);
  delayMicroseconds(1600);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(260);
  delayMicroseconds(2740);
  pulseIR(240);
  delayMicroseconds(1240);
  pulseIR(240);
  delayMicroseconds(1260);
  pulseIR(240);
  delayMicroseconds(1100);
  pulseIR(240);
  delayMicroseconds(2620);
  pulseIR(240);
  delayMicroseconds(12720);
  pulseIR(260);
  delayMicroseconds(840);
  pulseIR(220);
  delayMicroseconds(2080);
  pulseIR(240);
  delayMicroseconds(1780);
  pulseIR(260);
  delayMicroseconds(700);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(240);
  delayMicroseconds(2480);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(240);
  delayMicroseconds(700);
  pulseIR(240);
}

 

Via Instrucables.com

 

 

 

Error ORA-03114


Hay aplicaciones que usan un cliente Oracle para gran parte de la funcionalidad ofrecidas ,  de modo que es vital en estos casos asegurar que el servicio de  acceso a la  BBDD este funcionando adecuadamente

Puede  que su aplicación  encuentre el siguiente error al ejecutar flujos de trabajo u otros procedimientos que requieran procesamiento dentro de la base de datos de Oracle:

25/01/2019 10:21:48: Sentencia sql: SELECT *  FROM  …………. 
25/01/2019 10:21:48: Error en el proceso de conversión. Error 5: ORA-03114: no conectado a ORACLE

Cuando esto ocurre, la conexión a la base de datos se perderá   lo cual  normalmente se traduce  que la  aplicación encuentra un error grave y probablemente se cerrara.

Este error puede  producirse  si su sesión de Oracle se ha quedado sin memoria.

Para reiniciar el valor de asignación de  memoria a una sesión de Oracle, lo mas fácil es seguir estos pasos:

  1. Cierre cualquier aplicación o servicio adicional  que pueda esta usando el cliente Oracle
  2. Reinicie  el cliente de Oracle  (en versiones antiguas puede llamarse oracleHome8ClientCache  )
  3. Para ello, en el menú Inicio de Windows, abra el panel de Control y vaya a Herramientas administrativas > Servicios. 
  4. Seleccione el cliente Oracle en la listen versiones antiguas puede llamarse oracleHome8ClientCache  ) y  pulse  en Detener el servicio.
  5. Vuelva al menú Inicio de Windows, abra el panel de Control y vaya a Herramientas administrativas > Servicios. 
  6. Seleccione el cliente  Oracle (en versiones antiguas puede llamarse oracleHome8ClientCache  ) en la lista y pulse en Iniciar  el servicio.

 

Para asignar más memoria a una sesión de Oracle se requiere conexión en el propio  servidor de BBDD  así como tambien a los clientes que estén usando esos servicios.Si es su caso puede seguir estos pasos:

  1. Cierre cualquier aplicación o servicio que pueda estar usando el cliente Oracle
  2. Detenga los servicios de Oracle en  Servicios de Windows. Para ello, en el menú Inicio de Windows, abra el panel de  Control y vaya a Herramientas administrativas > Servicios. Seleccione Oracle en la lista y detener el servicio.
  3. Asegúrese de que el servicio “OracleService” se ha detenido. De lo contrario, aparecerá un mensaje de error.
  4. Asegúrese de que los clientes no están conectadon al servidor.
  5. Cada sesión de Oracle tiene una cantidad limitada de memoria disponible. Para ver la memoria actual, escriba el  siguiente comando en la máquina en la que reside el servidor de Oracle :  orastack oracle.exe
  6. El resultado será como se indica a continuación, que muestra la asignación de memoria en el equipo:   Corriente de reserva memoria; PerThread = 1048576  y  Corriente de memoria asignada  = 4096 
  7. Nos situamos desde  [ORACLE_HOME] en la  subcarpeta bin. El siguiente comando aumentará la memoria para cada sesión (hasta 5 MB):           orastack oracle.exe 5000000 
  8. Reiniciar la los servicios de Oracle.
  9. Inicie la aplicación que usa  el cliente Oracle

 

 

Para asignar más memoria a una sesión de Oracle también se puede hacer desde los  clientes  que están usando  esos servicios.Si es su caso puede seguir estos pasos:

  1. Cierre cualquier aplicación o servicio que pueda estar usando el cliente Oracle
  2. Detenga los servicios de Oracle en  Servicios de Windows. Para ello, en el menú Inicio de Windows, abra el panel de  Control y vaya a Herramientas administrativas > Servicios. Seleccione Oracle en la lista y detener el servicio.
  3. Asegúrese de que el servicio “OracleService” se ha detenido. De lo contrario, aparecerá un mensaje de error.
  4. Asegúrese de que los clientes no están conectadon al servidor.
  5. Como el   servidor no es el mismo que  la máquina , este  se denomina con un nombre de servicio (p. ej. GISTEST) y, a continuación, el comando siguiente desde  [ORACLE_HOME] en subcarpeta bin  : orastack tnslsnr.exe 5000000
  6. Cuando el  servidor se reinicie o se reinicie la instancia  los  parámetros se pierden y se tienen que volver a aplicar.

 

 

Resultado:

Con esta opció, cada sesión de Oracle reserva 5 MB de memoria lo cual debería bastar para no dar problemas.

 Windows (32 bits) sólo puede direccionar 2 GB de memoria para cada proceso, lo que  significa que Oracle tiene un máximo de 2 GB de memoria, independientemente de la cantidad de memoria del servidor.Como el valor por defecto del parámetro de Oracle asigna 892 MB de área SGA (sistema global) más 297 MB de programa global PGA (área) por ejemplar.,por tanto, aproximadamente se  tiene 1,2 GB de memoria asignada para el proceso de Oracle, sin ninguna sesión de usuario. lo cual significa  que hay  aproximadamente 800 MB disponibles para sesiones de usuario

Con 5 MB por usuario  se pueden permitir un número máximo de 160 usuarios o 150 usuarios .Para estar seguros si se ejecuta con más de 150 usuarios simultáneos, puede considerar la posibilidad de reducir la memoria total por sesión de usuario.

Shell script: programas externos, E/S y dirección de shell


Bash , c-shell  o simplemente shell scripting es  un lenguaje de script  creado a fines de la década de 1980 por un programador llamado Brian Fox, que trabajaba para la Free Software Foundation . Fue pensado como una alternativa de software libre para el shell Bourne (de hecho, su nombre es un acrónimo de Bourne Again SHell ), e incorpora todas las características de ese shell, así como nuevas características como la aritmética de enteros y el control de trabajo

Bash es un “shell de Unix”, es decir  una interfaz de línea de comandos para interactuar con el sistema operativo por lo que está ampliamente disponible, siendo el shell predeterminado en muchas distribuciones de GNU / Linux y en Mac OSX, con puertos existentes para muchos otros sistemas.

En post anteriores hemos hablado en una primera aproximación  al lenguaje c-sheall  con el primer ejemplo famoso de  Hello world y avanzando comandos ,tuberías ,variables ,parámetros y salidas posibles y en un segundo post  sobre el  uso de las Tuberías , sustitución de comandos,operadores ,asignación de variables ,Bucles , literales , variables   y aritmética no entera

Asimismo   en un  post  anterior continuamos  avanzando en el conocimiento de este lenguaje con el uso de las funciones, subshells  y las  variables de entorno

En esta ocasión vamos a ver el uso de funciones de shell, funciones de e/s y la redirección shell

close up code coding computer

 

 

 

Funciones de shell 

Programas externos

Bash, como un shell, es en realidad un lenguaje de “pegamento”. Ayuda a los programas a cooperar entre sí, y se beneficia de ello. Siempre busque en Internet lo que desea: hay muchas utilidades de línea de comandos disponibles.

Usando whiptail 

Whiptail es un programa que permite que los scripts de shell muestren cuadros de diálogo al usuario con fines informativos, o para obtener información del usuario de manera amigable. Whiptail se incluye de forma predeterminada en Debian y en varias otras distribuciones de GNU / Linux.

Desde el diccionario GNU / Linux : whiptail es un reemplazo de “diálogo” que usa newt en lugar de ncurses.
Desde su README: whiptail está diseñado para ser compatible con el cuadro de diálogo (1), pero tiene menos funciones: algunos cuadros de diálogo no están implementados, tales como caja de cola, caja de tiempo, caja de calendario, etc.

Usando man, info y ayuda 

Estos tres programas son donde puede encontrar ayuda o referencia de. man muestra las páginas de manual de roff , la información muestra las documentaciones de texinfo, mientras que la ayuda muestra las ayudas integradas.

Al añadir --long-ayuda , --help o --usage a un programa de línea de comandos puede también le da la información de uso. Posibles sinónimos incluyen -H y -h .

Solo prueba estos:

man --help
man man

info --help
man info
info info

help help

Presionar h en las interfaces de man and info también puede darle alguna dirección.

Entrada / Salida

La lectura incorporada 

De la ayuda leída :

read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

Lea una línea de la entrada estándar y divídala en campos. La lectura es excelente tanto para las entradas del usuario como para la lectura de entradas / tuberías estándar.

Un ejemplo de entrada de usuario:

 # 'readline' pronuncie el nombre de la variable predeterminada 
read -e -p "Haga esto:" -i "destruye el  comando " commmand

echo  "$command "

O incluso más simple:

pause ()  {  read -n 1 -p "Presione cualquier tecla para continuar ..."  ;  }

Ejemplo de nivel de Hola-mundo de la operación stdout:

 echo  'Hola mundo!'  | {  read hola
 echo  $hola  }

Solo se creativo. Por ejemplo, en muchos sentidos, leer puede reemplazar el látigo. Aquí hay un ejemplo, extraído del script de shell de Arthur200000 :

# USAGE 
# yes_or_no "title" "text" width ["yes text"] ["no text"] 
# INPUTS 
# $ LINE = (y / n) - Si debemos usar el estilo de entrada basado en líneas (lectura) 
# $ _DEFAULT = (opcional) - El valor predeterminado para leer yes_or_no ()  { 
yes_or_no() {
  if [ "$LINE" == "y" ]; then
    echo -e "\e[1m$1\e[0m"
    echo '$2' | fold -w $4 -s
    while read -e -n 1 -i "$_DEFAULT" -p "Y for ${5:-Yes}, N for ${6:-No}[Y/N]" _yesno; do
      case $_yesno in
        [yY]|1)
          return 0
          ;;
        [nN]|0)
          return 1
          ;;
        *)
          echo -e "\e[1;31mINVALID INPUT\x21\e[0m"
       esac
  else whiptail --title "${1:-Huh?}" --yesno "${2:-Are you sure?}" ${3:-10} ${4:-80}\
         --yes-button "${5:-Yes}" --no-button "$6{:-No}"; return $?
  fi
}
# USAGE  # user_input var_name ["title"] ["prompt"] [altura] [ancho] 
 # ENTRADAS  # $ LINE = (y / n) - Si debemos usar el estilo de entrada basado en líneas (lectura) 
 # $ _DEFAULT = ( opcional) - El valor predeterminado para leer; por defecto a nada. user_input () 
user_input(){
  if [ "$LINE" == "y" ]; then
    echo -e "\e[1m${2:-Please Enter:}\e[0m" | fold -w ${4:-80} -s
    read -e -i "${_DEFAULT}" -p "${3:->}" $1
  else
    eval "$1"=$(whiptail --title "$2" --inputbox "$3" 3>&1 1>&2 2>&3)
  fi
}
 

Redirección de shell 

En shells, la redirección se usa para la E / S de archivos. El uso más común de es redirigir secuencias estándar (stdin, stdout y stderr) para aceptar la entrada de otro programa a través de tuberías, para guardar la salida del programa como un archivo, y para suprimir la salida del programa redireccionando una secuencia a / dev / null .

Índice de símbolos 

Símbolo Explicación
!
  • Lógicamente niega el estado de salida de una tubería. Por ejemplo, si grep YES votes.txt devuelve 0 , entonces ! grep YES votes.txt devuelve 1 , pero de lo contrario es equivalente.
  • También soportado por el [...] builtin, y dentro de expresiones condicionales. Por ejemplo, si [[-e file.txt]] es verdadero, entonces [[! -e archivo.txt]] es falso.
  • También se admite en expresiones aritméticas. Por ejemplo, si $ i es distinto de cero, entonces $ ((! I)) es 0 .
  • Vea también #! abajo.
"..."
  • Cita un argumento (o parte de un argumento) para que no esté dividido por espacios en blanco en múltiples argumentos, pero sin impedir la expansión de parámetros y la sustitución de comandos internamente.
  • Véase también $ "..." a continuación.
#
  • Introduce un comentario (que continúa hasta el final de la línea). Por ejemplo, el comando foo bar baz # bip es equivalente al comando foo bar baz , porque el comentario # bip se elimina.
  • Dentro de una expresión aritmética, un literal entero de la forma b # n se interpreta en la base b . Por ejemplo, 2 # 110110 es binario 110110, es decir, cincuenta y cuatro.
  • Vea también #! abajo.
  • Véase también $ # abajo.
#!
  • (Por lo general, ” shebang ” cuando se lee en voz alta). Se usa al comienzo de un script ejecutable para especificar el intérprete que se debe usar para ejecutarlo. Por ejemplo, si la primera línea de script.pl es #! / Usr / bin / perl , y script.pl tiene permisos ejecutables, entonces ./script.pl es aproximadamente equivalente a / usr / bin / perl ./script.pl .
  • La primera línea de un script Bash generalmente es #! / Bin / bash o #! / Bin / sh . (El primero generalmente se considera preferible.)
PS
  • Introduce varios tipos de expansiones, especialmente la expansión de parámetros (como en var o $ { var } ), la sustitución de comandos (como en $ ( comando ) ) y la expansión aritmética (como en $ (( expresión )) ).
PS
  • Una variante de "..." (ver más arriba) que admite la traducción específica del entorno local. (A menos que esté escribiendo scripts para su uso en varios idiomas, por ejemplo, inglés y francés, no debe preocuparse por esto).
PS
  • El número de parámetros posicionales (argumentos de un script o función). Por ejemplo, si se invoca un script como script.sh abc , entonces $ # será 3 . Los elementos incorporados que modifican los parámetros posicionales, como shift y set , también afectan a $ # .
% El operador de módulo. Devuelve el resto resultante de la división entera. Ej. 5% 2 = 1
Y Ampersand Comúnmente se utiliza para iniciar un comando en el fondo. Ej. Firefox &
' Una frase. Se utiliza para citar texto literalmente.
( Paréntesis abiertos. Se utiliza para denotar el comienzo de una subshell, entre otras cosas.
) Paréntesis de cierre. Se utiliza para denotar el “EOF” de una subshell.
* Asterisco. Denota multiplicación. Ej. 5 * 2 = 10
+ Más.Denota la suma. Ej. 5 + 2 = 7
, Coma. Utilizado para la separación. Ej. Archivo ls {1,2,3}
- Guión. Denota la resta. Ej. 5-2 = 3
. Parada completa.
/ Barra inclinada. Indica división entera (por ejemplo, 5/2 = 2) o parte de una ruta (por ejemplo, / home / usuario)
: Colon.
; Punto y coma. Separa las líneas si no existe una nueva línea / EOL. Ej. Echo hola; mundo eco
< Soporte de ángulo abierto. Utilizado para la redirección de entrada
= Signo de igualdad Se utiliza para asignar variables y comprobar la igualdad.
> Ángulo de cierre del soporte. Se utiliza para la redirección de salida.
? Signo de interrogación.
@ A la señal. Normalmente se utiliza como una variable que contiene todos los argumentos pasados ​​al entorno como $ @
El Abra el corchete. Utilizado como una alternativa visualmente más atractiva para probar. Por ejemplo, si [condición]; entonces etc
\ Barra invertida Más comúnmente utilizado para escapar. Por ejemplo, archivo rm \ con \ a \ manojo \ de \ espacios.txt
] Cierre corchete. Cierra los recintos de prueba.
^ Signo de intercalación.
_ Guion bajo.
`…`
  • Activa la sustitución de mando; equivalente a $ (…) , pero es algo más propenso a errores.
{ Abra el apoyo rizado. Utilizado para expansión de variable específica. Por ejemplo, (donde var = “hola”) echo “$ {var} world” imprimirá “hola mundo”, echo “$ varworld” generará un error, esperando una variable llamada varworld.
| Tubo. Se utiliza para redireccionar la entrada a la salida. Específicamente, toma la salida del comando en el lado izquierdo, ejecuta el programa en el lado derecho y luego pasa el contenido de la salida del primer comando al segundo, como si se estuviera escribiendo desde un teclado. ‘ls -l | grep Desk ‘es equivalente a ejecutar “grep Desk”, y luego escribir manualmente lo que ls -l tendría salida. Cada vez que se presiona la tecla de retorno, se activará grep hasta que se presione ^ D para pasar el EOF.
} Cierre corsé.
~ Tilde. Normalmente se utiliza para referirse al directorio de inicio. Registrado como “mrwhite”, cd ~ (o simplemente cd) iría a / home / mrwhite. Al iniciar sesión como otro usuario, se podría lograr el mismo efecto con ‘cd ~ mrwhite’.

Enlaces externos en ingles

Cómo instalar una app Android en Amazon Fire


De la famosa tableta de Amazon , es decir la  Tablet Amazon Fire se han vendido ( y se siguen vendiendo  ) de forma extraordinaria una cantidad ingente de unidades por todoel mundo  desde que fueran lanzadas , hace un par de  años,  sin duda  debido a su gran relación calidad/precio pues  no olvidemos que por  menos de 70€  podemos tenerla en casa con 8GB (o con 16GB por unos 10€ adicionales)

Esta  tableta con pantalla IPS de 7 pulgadas con mayor contraste y textos más definidos, un procesador Quad-Core de 1,3 GHz y hasta 8 horas de batería, ofrece un gran rendimiento para la reproducción de todo tipo de contenido multimedia  ,obviamente orientado a consumir  desde la nube de Amazon ,  pero desde luego , por al precio en el que están, la Fire 7 es casi imposible no adquirir una para toda la familia.

Uno de los pequeños hándicaps de estas tabletas, es que aun teniendo una versión fork de Android,  no podemos acceder a la Google Play Store, ya que viene con  la propia tienda de  aplicaciones de Amazon (Amazon Play Store ) donde  desgraciadamente no están disponibles todas las aplicaciones que si están en Google Play. 

Amazon Play  no está nada mal, pero insistimos ,  le faltan muchas aplicaciones  y todo ese gran contenido que ofrece la dedicada a Android por parte de Google : Google Play Store,  aunque no todo está perdido, ya que, si tiene una tablet Fire bien  , puede instalar Google Play Store o bien mucho mejor instalar manualmente la app que necesite  sin necesidad de instalar Google Play  y por cierto, no necesitará ni ser ROOT ni usar comandos ADB.

 

 

Los tablets Fire de Amazon están concebidos para resistir el uso diario. De acuerdo con los tests de caída, el Fire 7 es más resistente que el último iPad y soporta el doble de impactos que el iPad mini 4 (y cuesta mucho menos).

El Fire incluye una cámara trasera de 2 MP que permite hacer fotos de alta resolución y vídeos HD de 720p y con una cámara frontal VGA suficiente  para realizar videollamadas con Skype a familia y amigos.

Respecto a la interfaz  de la tableta , conocida como  Fire OS 5 es cómoda y fluida y cuenta a con un buen número de funciones pre-instaladas que pueden ser extendidas mediante la descarga de aplicaciones adicionales a través de Amazon Appstore como comentábamos al principio de este post.

El sistema operativo del Fire es Android, aunque bloqueado por Amazon de modo que aunque no cuenta con Google Play, si  cuenta con  la Appstore de Amazon, que es prácticamente igual, aunque con diferencias en cuanto a su contenido. No obstante, se puede descargar cualquier aplicación por la APK, directamente desde el navegador de la tablet, o bien transfiriéndola desde un pc, el móvil, etc , tal y como vamos  a ver a continuación .

 

 

Instalación APKDownloader

Gracias a la plataforma android  nuestros dispositivos tienen características de inteligencia adicional que es ofrecida gracias  a las millones de aplicaciones disponibles desde Internet ,y eso  a esta alturas todos los usuarios de Android lo sabemos  ( o lo deberíamos sospechar)  siendo  lo mas  rápido  y seguro optar por descargar estas desde el sitio oficial:  Google Play Store , sobre todo en los tiempos actuales donde cada día surgen nuevas apps con objetivos  poco éticos enmascaradas en inocentes funcionalidades (como por ejemplo una inocente app linterna).

Como hemos hablado,  el sistema operativo del Fire es básicamente Android, aunque customizado  por Amazon de modo que han bloqueado  Google Play sustituyendo  este  por  la Appstore de Amazon, que es prácticamente igual, aunque con diferencias en cuanto a su contenido. No obstante, como vamos   ver ,se puede descargar cualquier aplicación por la APK, directamente desde el navegador de la tablet, o bien transfiriéndola desde un pc, el móvil, etc

¿Por qué no podemos descargar apk de Google Play sSore?

Google tiene algunas políticas estrictas que impiden a los usuarios de android que descarguen los  archivos de apk directamente a sus dispositivos para impedir la piratería. Ademas , hay otros asuntos relacionadas como por ejemplo si una aplicación específica que usted quiere deba estar disponible en su país o si  oficialmente es soportada  por  un  cierto dispositivo o no , o a partir de una determinada version .

Ante esta  problemática , existen muchas alternativas de Tiendas de aplicaciones en Internet que  almacenan y  permiten descargar apk directamente , pero insistimos el riesgo puede ser alto , así que lo ideal seria bajar el fichero apk desde Google play store directamente , ( en este caso para luego instalarlo en la Fire)

Afortunadamente  se  pueden saltar restricciones de necesitar la app de Google Play para instalar cualquier app de Google Play en la Fire con la aplicación llamada “Apk Downloader extensión” que permite   gracias a una extensión de Chrome descargar el APK directamente desde Google Play Store .

Esta aplicación, como se puede intuir, realmente hace maravillas pues de alguna manera se las arregla para capturar las apk  desde lo propios servidores de la tienda oficial, lo cual nos da bastante seguridad.

Esta opción  ofrece muchas ventajas pues :

  • Le da libertad para descargar aplicaciones que no están disponibles en su país.
  • Soporta todos los dispositivos.
  • Puede instalar  Apk  bajados directamente desde Google Play Store, sin tener instalado Google Play  en su Fire , donde or cierto también seria posible,  pero a costa de consumir bastantes recursos del dispositivo,

 

Extension ApK dowloader

La extensión de Chrome llamada  Apk Downloader  funciona perfectamente con casi todas las aplicaciones disponibles en la Google Play que sean gratuitas , así que si quiere descargar aplicaciones y almacenar su archivo Apk, puede descargar esta aplicación desde la tienda en primer lugar en su pc   y luego llevarse el archivo al dispositivo donde lo quiera instalar.

Para usar esta extensión   en  su navegador siga estos pasos:

  1. Descargue  la extensión desde aqui 
  2. Añada la extensión  a Google Chrome.
  3. Acepte la instalación de esta extensión.
  4. Compruebe en la esquina superior derecha de la pantalla justo a la izquierda del icono de búsqueda que hay un icono naranja nuevo.

Ahora una vez instalada la extensión en Google Chrome ,sigue estos pasos para obtener el apk directamente desde Google Play Store.

  1. Ir a Play Store y seleccionar cualquier aplicación que desee descargar.Por ejemplo vamos a descargar la famosa app de Zowi que no esta disponible en Amazon Playzowi
  2. Copiar la URL de Google Play de la app que necesite ( Ctrl+C)
  3. Pulse el botón rojo de APK downlader en e la esquina superior derecha de la pantalla justo a la izquierda del icono de búsqueda.
  4. Seleccione ‘Apk Downloader extensión‘ de las opciones sobre acciones.
  5. Copiar la url de la aplicación  con Ctrl+V en la caja de dialogo
  6. Pulsar Generate Donwload Linkzowi2.PNG
  7. Esperar hasta iniciar la descarga.
  8. El Apk se descargarán automáticamente sin la intervención de los servicios de Google Play en una ruta de su pc.
  9. Puede renombrar el fichero apk por otro que sea intuitivo  pues normalmente el nombre del fichero no suele coincidir con el nombre de la aplicación)

 

 

Instalación del APK en el Fire

En  primer lugar  para que pueda instalar un apk  en su Fire debe  activar la casilla de “Orígenes desconocidos” que encontrará dentro de los ajustes de  Fire OS en  “Seguridad”.

Para instalar la apk  el archivo APK en su Fire  simplemente siga los pasos a continuación:

  1. Conectase  a la nube de Amazon ( Amazon drive)
  2. Coloque el archivo APK en la ruta de Amazon .amazondrive
  3. Vaya a su tableta e inicie Amazon Drive
  4. Busque el apk   y cópielo en una ruta local de su tableta (por ejemplo en download)
  5. Ejecuet el apk
  6. Haga clic en ‘instalar’
  7.  Espere a que se instale el APK.
  8. Una vez instalada  ya puede abrir la aplicación

 

Descarga del APK desde otro Navegador

Quizás  si no tiene instalado el navegador Chrome, o quiere hacerlo  desde la misma tableta   le interese  para descargar el  apks desde Google Play  usar algún servicio de descarga que nos pase el apk directamente de Google Play  como por ejemplo el servicio evozzi.com.

Estos son los pasos a seguir:

  1. Ir a Play Store y seleccionar cualquier aplicación que desee descargar.
  2. Copiar la URL ( Ctrl+C)
  3. Ir  a https://apps.evozi.com/apk-downloader/
  4. Pulsr Ctrl+V enla caja para pegar la url desde Google Play
  5. Pulsar Generate Download Link
  6. Solo tenemos que pulsar en el botón verde  y se iniciara la descarga del apk a local
  7. Conectase  a la nube de Amazon ( Amazon drive)
  8. Coloque el archivo APK en la ruta de Amazon .amazondrive
  9. Vaya a su tableta e inicie Amazon Drive
  10. Busque el apk   y cópielo en una ruta local de su tableta (por ejemplo en download)
  11. Ejecute el apk
  12. Haga clic en ‘instalar’
  13.  Espere a que se instale el APK.
  14. Una vez instalada   puede abrir la aplicación

 

Por cierto  ,no olvide que para poder instalar el  apk debe activar la casilla de “Orígenes desconocidos” que encontrará dentro de los ajustes de  Android y “Seguridad”.

 

 

Cómo descargar archivos APK desde Google Play store


Puesto que se trata de la plataforma android  nuestros smartphones  basados en Android tienen características de inteligencia adicional que es ofrecida gracias  a las millones de aplicaciones disponibles desde Internet ,y eso  a esta alturas todos los usuarios de Android lo sabemos  ( o lo deberíamos sospechar)  siendo  lo mas  rápido  y seguro optar por descargar estas desde el sirio oficial:  Google Play Store , sobre todo en los tiempos actuales donde cada día surgen nuevas apps con objetivos  poco éticos enmascaradas en inocentes funcionalidades.

La Google Play Store es pues  una de las claves que hace que un terminal  Android sea genialmente eso pues disponer de un móvil o tablet certificados   y una cuenta de google nos permite el acceso a la tienda y con ellos a  infinidad de opciones.

A veces  hay terminales de  bajo coste que no todos traen la tienda de Google de Serie (los chinos suelen dar problemas aquí, pero no son los únicos : por ejemplo los terminales de Amazon ),   o simplemente no  pueden  acceder por problema en el firmware ,actualizaciones erróneas, fallos de red ,etc  , razón por las que puede nos interesase descargar las app en local desde nuestro pc para luego copiarla en una sd  y luego en el terminal desde un explorador de archivos realizar la instalación manualmente desde el propio apk con el instalador de paquetes

apple applications apps cell phone
Photo by Tracy Le Blanc on Pexels.com

 

¿Por qué no podemos descargar apk de google play store???

Google tiene algunas políticas estrictas que impiden a los usuarios de android que descarguen los  archivos de apk directamente a sus dispositivos para impedir la piratería.Ademas  hay otros asuntos relacionadas como si una aplicación específica que usted quiere está disponible en su país o si  oficialmente es soportados por  un  cierto dispositivo o no o a partir de una determinada version .

Obviamente , ante esta  problemática , existen muchas alternativas de Tiendas de aplicaciones en Internet que  almacena y  permiten descargar apk directamente , pero insistimos el riesgo puede ser viral, así que lo idea seria bajar el fichero apk desde Google play store directamente ¿pero como se pueden saltar restricciones de necesitar la app de Google Play para instalara cualquier app de Google Play en un terminal? Pues es posible y lo vamos  a ver a continuación

¿Cómo anular  restricciones y descargar Apk de Google Play Store?

Descargar archivos apk directamente desde Google play oficialmente no es posible por políticas de google. Sin embargo, hay una alternativa, como cada moneda tiene dos caras. Hay una aplicación llamada “Apk Downloader extensión” que ha hecho posible que sea posibe  descargar el APK desde Google Play Store. Esta aplicación realmente hacer maravillas y de alguna manera se las arregla para tirar desde servidores de la tienda oficial

Creo que esta opción  ofrece muchas ventajas pues .

  • Le da libertad para descargar aplicaciones que no están disponibles en su país.
  • Soporta todos los dispositivos.
  • Puede instalar  Apk desde play store, incluso si no  tiene instalado Google Play  en su dispositivo.

Esta  aplicación puede saltarse todas las restricciones de servicios de Google play y por lo tanto esta aplicación particular puede ser utilizada por ambos tipos de usuarios de android que tienen tienda activada o desactivada.

Extension ApK dowloader

La extensión de Chrome llamada  Apk Downloader  funciona perfectamente con casi todas las aplicaciones disponibles en la Google Play que sean gratuitas , así que si quiere descargar aplicaciones y almacenar su archivo Apk, puede descargar esta aplicación desde la tienda play en primer lugar en su pc   y luego llevarse el archivo al dispositivo donde lo quiera instalar.

Para usar esta extensión   en  su navegador siga estos pasos

  1. Descargue  la extensión desde aqui 
  2. Añada la extensión  a Google chrome
  3. Acepte la instalación de esta extensión
  4. Compruebe en la esquina superior derecha de la pantalla justo a la izquierda del icono de búsqueda que hay un icono naranja nuevo.

Ahora una vez instalada la extensión en Google Chrome ,sigue estos pasos para obtener el apk directamente desde Google Play Store.

  1. Ir a Play Store y seleccionar cualquier aplicación que desee descargar.
  2. Copiar la URL ( Ctrl+C)
  3. Pulse el botón de compartir de la esquina superior derecha de la pantalla justo a la izquierda del icono de búsqueda.extension
  4. Seleccione ‘Apk Downloader extensión‘ de las opciones sobre acciones.
  5. Copiar la url de la aplicación  con Ctrl+V en la caja de dialogo
  6. Pulsar Generate Donwload Linkapkdown.PNG
  7. Esperar hasta iniciar la descarga.
  8. El Apk se descargarán automáticamente sin la intervención de los servicios de Google Play.

Para instalar la apk  el archivo APK en su teléfono Android simplemente siga los pasos a continuación:

  1. Coloque el archivo APK en la tarjeta SD o memoria interna de su teléfono (preferiblemente tarjeta SD externa).
  2. Explore la memoria del teléfono / memoria externa y toque el archivo APK.
  3. Haga clic en ‘instalar’
  4.  Espere a que se instale el APK.
  5.  No ejecute la aplicación todavía.
  6. Una vez instalada  y puede abrir la aplicación

 

Descarga del APK desde otro Navegador

Quizás  si no tiene instalado el navegador Chrome,   la mejor opción para descargar los apks de Google Play sea usar algún servicio de descarga que nos pase el apk directamente de Google Play  como por ejemplo el servicio evozzi.com.

Estos son los pasos a seguir

  1. Ir a Play Store y seleccionar cualquier aplicación que desee descargar.
  2. Copiar la URL ( Ctrl+C)
  3. Ir  a https://apps.evozi.com/apk-downloader/
  4. Pulsr Ctrl+V enla caja para pegar la url desde Google Play
  5. Pulsar Generate Download Linkinstalla.PNG
  6. Solo tenemos que pulsar en el botón verde  y se iniciara la descarga del apk a local
  7. Coloque el archivo APK en la tarjeta SD o memoria interna de su teléfono (preferiblemente tarjeta SD externa).
  8. Explore la memoria del teléfono / memoria externa y toque el archivo APK.
  9. Haga clic en ‘instalar’
  10.  Espere a que se instale el APK.
  11.  No ejecute la aplicación todavía.
  12. Una vez instalada  y puede abrir la aplicación

 

Por cierto  ,para que ambos  funcionen debe activar la casilla de “Orígenes desconocidos” que encontrarás dentro de los ajustes de  Android y “Seguridad”.

 

 

 

A %d blogueros les gusta esto: