Tag Archives: Intel Edison

Intel Edison – Análisis de Datos con Lenguaje “R” mediante UBILINUX (nota rápida)

21 Ene , 2017,
Jose Nunez
, , , , , , , , , , , ,
No Comments

IMG_20170120_183547Durante 2016 hicimos varios proyectos interesantes con Intel Edison.

Uno de ellos fue un proyecto de colaboración con nuestros colegas de UNED en la investigación de sonido ambiente mediante tecnologías IoT.

Una de las cosas más interesantes que pudimos experimentar fue esta idea de hacer análisis de grabaciones de sonido mediante la plataforma Intel Edison y el lenguaje de “Machine Learning” llamado “R”

Esperamos detallar más aun el proceso en próximas entregas. Por lo pronto les dejamos con un tutorial de Sparkfun sobre cómo instalar UBULINUX, una versión de LINUX para IoT basada en DEBIAN en el Edison. La ventaja de esto es que se puede usar el sistema de paquetes APT-GET para instalar el lenguaje “R”

https://learn.sparkfun.com/tutorials/loading-debian-ubilinux-on-the-edison

Pese a que los desarrolladores de UBILINUX se lamentan de no tener soporte suficiente para esta herramienta; creo que vale la pena probar y ayudar un poco a generar ese ecosistema.

Comenzando con Intel Edison en UBUNTU

17 Feb , 2016,
javilargo
, , ,
No Comments

Descripción2112-00

Este procedimiento describe a groso modo cómo comenzar a utilizar la placa Intel Edison con tarjeta de expansión ARDUINO, programándola desde una Laptop  que corra UBUNTU LINUX.


Procedimiento

PASO 1 – Descargar el programa aquí
Descomprimir el archivo e instalar el script install_GUI.sh por medio de la terminal de Ubuntu. También instalar Intel Phone Flash Tool Lite, que viene incluido a la hora de instalar el programa (en el directorio del programa)

sudo ./install_GUI.sh

sudoinstalsh


PASO 2 – Conectar la placa Intel Edison mediante una conexion serial (Ej: usb). en este caso se utilizará la conexión que permite el uso de arduino, además de la placa conectada a una fuente de corriente. Se debe considerar: la pc en la mayoria de los casos no brinda suficiente corriente para alimentar la placa por lo que es mejor conectarlo a una fuente de energia estable.
Igualmente las conexiones que se utilizan para conectar al USB de la PC, la placa edison, son las conexiones micro USB, el mini switch en la placa debe seńalar hacia los puertos micro USB. estos puertos en la placa serán representados como a) y b) ya que tienen funciones diferentes. En todo caso se pueden conectar ambos micro usb simultaneamente a la PC.
a) A la hora de conectar cada micro USB se nota la diferencia en que uno, al conectarlo a la pc, aparecera como un dispositivo removible en esta, esta conexion sirve para subir funciones desde el programa de arduinos
b) En la otra conexion micro USB al conectarse a la PC no aparecera como un dispositivo removible, esta conexión es la que sirve para trabajar en la placa desde la terminal de Ubuntu.

  1. Para este paso se necesita screen shell en ubuntu en caso de no tenerlo utilizar el siguiente comando en la terminal
sudo apt-get install screen

Conectar el Edison desde la conexion micro usb b) (ver punto 2)
Para conectar la placa ingresar el siguiente comando (donde ttyUSB0 es el dispositivo)

sudo screen /dev/ttyUSB0 115200

Después de escribir este comando darle Enter, en algunas ocasiones se le debe dar enter 2 veces.
La terminal nos pedirá un login aqui, escribir ¨root¨ (sin comillas)
Se solicitará la contraseńa del sistema. Ingresarla y darle Enter
Debe quedar un mensaje similar a este:

terminal


PASO 3 –  Conectar la placa Intel Edison a internet mediante WI-FI utilizando el comando:

configure_edison --wifi

En caso de que ocurra el error en el que no se encuentra la Placa Edison (configure_edison: not found) se debe utilizar la aplicacion Intel Phone Flash Tool para preparar el dispositivo.     Aceptar y darle enter para continuar. Aparecera una lista con las conexiones WI-FI disponibles, cada una con un numero, el cual debemos ingresar para elegir la conexion a la cual se quiere accesar, ingresar los credenciales de la red. Aparecerá el mensaje ¨done¨ . La placa ya esta conectada a internet y se puede observar que aparece la dirección IP de esta en la terminal, se puede comprobar la conexión mediante el comando ¨ping¨ en la terminal.


PASO 4 – Completar el setup de la aplicación descargada para que se instalen los programas, se instalará el programa arduino e Intel Phone Flash Tool Lite.
En este caso se utilizó, como se dijo anteriormente el lenguaje Arduino como IDE en la aplicación instalada. Esta aplicación se corre como administrador mediante el comando:

sudo arduino

En este caso, se debe conectar al puerto micro USB a) para subir funciones a la placa


Notas *Recordar ejecutar el programa como administrador a la hora de abrirlo, de lo contrario el acceso será denegado

**Fijarse que el puerto seleccionado en la aplicación sea el adecuado, es decir que concuerde con el que se esta utilizando en la conexion serial y utilizar el correcto Addon para cada dispositivo que se este utilizando. En la aplicación donde dice ¨tools¨ revisar: Port que esté seleccionado el que se esta utilizando y Board que se esté utilizando el que concuerde con el dispositivo (En el caso del Edison, ya viene en la aplicación se selecciona Edison)

***Esta es una versión en espańol para comenzar a utilizar la placa Intel Edison. La versión original (en inglés) puede encontrarse en la siguiente dirección: https://software.intel.com/en-us/get-started-edison-linux-step1

Sensor de Humedad DHT11 en un Intel Galileo

9 Mar , 2015,
José Núñez
, , , , , ,
one comments

IMG_20150309_183311~2

Conectar un sensor de humedad y temperatura a un Intel Galileo o Edison no es tan sencillo como uno quisiera; pero luego de preguntar en los foros adecuados, tampoco es difícil.

Aquí les comparto lo que aprendimos en el proceso (hasta hora)

  1. El DHT11 es un sensor sumamente barato y fácil de conseguir. Tiene una excelente precisión y es fácil de utilizar.
  2. Pudimos comprobar las instrucciones de DinoT_Intel en el foro, que funcionan en un Intel Galileo GEN 1
  3. Básicamente uno puede bajar los tres archivos (como lo tenemos en nuestro experimento más reciente en GITHUB) en una misma carpeta donde está el Sketch que y funciona correctamente. Tambien se puede crear una carpeta “DHT” en “~/Arduino_version/libraries/” y poner los dos archivos DHT.h y DHT.cpp ahi (pero necesitarás reiniciar ARDUINO IDE)
  4. Nuestras pruebas funcionaron en un Galileo GEN 1 a la perfección usando ARDUINO IDE versión [arduino-1.5.3-Intel.1.0.4] que se puede descargar aquí.
  5. IMPORTANTE: Utilizar 7ZIP para desempacar el achivo en c: … puede conseguirlo aquí.

Esta vez no logramos echarlo a andar en Intel Edison. Ya les contaremos si llegamos a ese punto.

Un agradecimiento especial a @spider_kenny por su contribución de conocimiento sobre tiempos determinísticos e interfases. Creo que será la base que usaremos para echarlo a andar en un Intel Edison.

Llamadas dinámicas a LINUX desde ARDUINO IDE en un Intel Edison – Aprendizaje de 10 minutos

7 Mar , 2015,
José Núñez
, , , , , , , , ,
3 comments

IMG_20150307_170030

Uno de los súper poderes de las plataformas Edison y Galileo de Intel es la disponibilidad de LINUX y la posibilidad de ejecutar comandos de LINUX desde un “sketch” de ARDUINO.

En esta receta les comparto cómo hacer llamadas dinámicas al sistema de LINUX desde un sketch ARDUINO, concatenando valores en un objeto String y luego convirtiendo dicho objeto a un arreglo de caracteres necesario para la llamada de sistema.

La idea es poder concatenar comandos de sistema, con valores leidos de los sensores, y hacer llamdas a Linux para que haga algo a partir de estos valores.

En resumen:

  1. La llamada de sistema recibe un parámetro que es un arreglo de caracteres (no un String)
  2. La concatenación se puede hacer de manera muy sencilla usando un String
  3. La conversión se realiza creando un arreglo de caracters del tamaño del String mas un caracter terminador.
  4. El sketch abajo es una modificacion del ejemplo BLINK, que además de hacer parpadear un led, tiene un contador que lleva la cuenta de la cantidad de veces que se ejecuta el comando loop().
  5. La función “dynamicCommand(c)” recibe el valor del contador y genera un comando de sistema para realizar un listado del contenido de una carpeta y poner el resultado en un archivo. Este archivo es nombrado con un sufijo que indica la cuenta que lleva el contador.
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int c = 0; //just a counter

// the setup routine runs once when you press reset:
void setup() {                
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT);    
    Serial.begin(9600);
    Serial.println("TEST FOR STRING CONCATENATION"); 
}

// the loop routine runs over and over again forever:
void loop() {
    c++; //un simple contador
  
    Serial.println("Count: ");  
    Serial.println(c);

//  Serial.println("Count: " + c); //This behaves weird...  
    
    if( c < 10){ 
         dynamicCommand(c);
    }
    Serial.println("Blinking...");
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    delay(1000);               // wait for a second
    Serial.println("Loop Complete!"); } 

dynamicCommand(int counter){
     Serial.println("dynamicCommand function..."); 
     String command = "ls > resultFile";
     command += counter;
     command += ".log";
     Serial.println("Concatenated command looks like this:");
     Serial.println(command);

//UPDATE: THIS COULD BE ACHIEVED USING THE buffer propery of the String object
//     Serial.println("Converting to char array...");
//     int commandLength = command.length() + 1;
//     char commandCharArray [commandLength];
     
//     command.toCharArray(commandCharArray, commandLength);
     
//     Serial.println("Command array looks like this:");
//     Serial.println(commandCharArray);
//     Serial.println("Making system call...");
//     system(commandCharArray);


system(command.buffer);

Serial.println("Done!"); }

Humidity and Temperature Sensor DHT11 on Intel Galileo

9 Mar , 2014,
José Núñez
, , , ,
No Comments

IMG_20150309_183311~2

Para la versión en Español Haz Clic Aquí

 

Connecting a Humidity and Temperature Sensor to an Intel Galileo or Edison board is not as simple as one would like; but after looking into the right forums, it is not difficult either, took us 1 day to realize.

So here we share what we learned in the process (so far).

  1. The DHT11 is a very cheap and easy to find sensor. It has great precision and it is easy to utilize.
  2. We were able to prove to ourselves that instructions provided by DinoT_Intel in the forum work in an Intel Galileo GEN 1
  3. Basically we can download the three code files as we did in our most recent experiment in GITHUB) into one single folderwhere the Sketch resides; and it will work fine. You can also create a folder “DHT” in “~/Arduino_version/libraries/” and place the two files DHT.h y DHT.cpp there (but you’ll need to reload the IDE)
  4. Our tests worked in a Galileo GEN1 perfectly using an ARDUINO IDE version [arduino-1.5.3-Intel.1.0.4] that we downloaded here.
  5. IMPORTANT: Use 7ZIP to extract the arduino IDE from the file into c: … you can download 7ZIP here.

This time we were not able to make it work in an Edison; but we’ll tell you when we get to that point.

Special thanks to @spider_kenny for his contribution of knowledge about deterministic time devices and interfaces. I think it will be the foundation we’ll use to make it work in EDISON.

Dynamic calls to LINUX system from an ARDUINO sketch in Intel Edison – 10 minutes learning

7 Mar , 2014,
José Núñez
, , , , , , ,
4 comments

IMG_20150307_170030

Spanish Version Here

One of the many super-powers of Galileo and Edison platforms from Intel is the availablity of LINUX and the possibility of executing LINUX commands from an ARDUINO sketch.

In this recipe I am sharing how to make dynamic calls to LINUX from an ARDUINO sketch, concatenating values in an String object and then converting such object into a char array, needed to make system() calls.

The idea is to be able to concatenate system commands with sensor values and make calls to the LINUX OS to do something based on those values.

In summary:

  1. The system() function receives a char array parameter (not a String)
  2. Concatenation is very easy to do in String objects
  3. Conversion is made by creating a char array of the size of the command string plus one ending character.
  4. The sketch below is a modification of BLINK sample, that has a counter for how many times loop() function is executed.
  5. The function “dynamicCommand(c)” receives the value of the counter (it could be a sensor reading instead) and generates a command to LINUX system to do a folder listing into a file whose name is crafted based on the cunter value.

Enjoy!

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int c = 0; //just a counter

// the setup routine runs once when you press reset:
void setup() {                
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT);    
    Serial.begin(9600);
    Serial.println("TEST FOR STRING CONCATENATION"); 
}

// the loop routine runs over and over again forever:
void loop() {
    c++; //un simple contador
  
    Serial.println("Count: ");  
    Serial.println(c);

//  Serial.println("Count: " + c); //This behaves weird...  
    
    if( c < 10){ 
         dynamicCommand(c);
    }
    Serial.println("Blinking...");
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    delay(1000);               // wait for a second
    Serial.println("Loop Complete!"); } 

void dynamicCommand(int counter){
     Serial.println("dynamicCommand function..."); 
     String command = "ls > resultFile";
     command += counter;
     command += ".log";
     Serial.println("Concatenated command looks like this:");
     Serial.println(command);
     
//UPDATE: THIS COULD BE ACHIEVED USING THE buffer propery of the String object
//     Serial.println("Converting to char array...");
//     int commandLength = command.length() + 1;
//     char commandCharArray [commandLength];
     
//     command.toCharArray(commandCharArray, commandLength);
     
//     Serial.println("Command array looks like this:");
//     Serial.println(commandCharArray);
//     Serial.println("Making system call...");
//     system(commandCharArray);

system(command.buffer);
Serial.println("Done!"); 
}