Idear, crear y programar

Blog relacionado a la informática. Principalmente a la plataforma Arduino

Mostrando entradas con la etiqueta arduino. Mostrar todas las entradas
Mostrando entradas con la etiqueta arduino. Mostrar todas las entradas

Arduino Yun + Nmap

¿Que es Nmap?

Nmap es un programa de código abierto que sirve para efectuar rastreo de puertos

Instalar Nmap

Nos conectamos por ssh, y actualizamos los repositorios con el comando opkg update


Instalamos Nmap con el comando opkg install nmap



Ahora escaneamos las conexiones locales. Debes basarte segun tu ip base, en mi caso es la 192.168.1.0

Ingreso el comando nmap -sP 192.168.1.0/24 
Tengan paciencia ya que aveces se demora un poco.


El escaneo nos encontró 4 hosts conectados a la red, con sus ip y mac asociadas.

Ahora realizamos un escaneo a una conexión local localizada en el mapeo anterior.
Con el comando nmap -sT 192.168.1.83


Acá nos muestra los puertos abiertos que posee el dispositivo y los servicios.

Arduino Yun + Aircrack-ng

¿Que es Aircrack-ng?

Es una suite de software de seguridad inalámbrica. Consiste en un analizador de paquetes de redes, un crackeador de redes WEP y WPA/WPA2-PSK y otro conjunto de herramientas de auditoría inalámbrica.

Instalar Aircrack-ng

Ingresamos por ssh a nuestra Arduino Yun.

Luego actualizamos los repositorios con el comando opkg update


Con el comando opkg install aircrack-ng instalamos Aircrack-ng


Iniciamos Aircrack-ng con el comando airmon-ng start wlan0 1


Obtener BSSID y Canal con el comando airodump-ng mon0 con ctrl+c salimos de esta opción.

Obtendrán algo así:

BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
40:70:09:E4:87:90    0       12        0    0   6  54e. WPA2 CCMP   PSK  TG167
F4:6D:04:5D:1B:BC    0       37        0    0   8  54e. WPA2 TKIP   PSK  dd-wr
D8:50:E6:D7:EA:1E    0       43      161   29   8  54e  WPA2 CCMP   PSK  ASUS

Para la captura con el comando airodump-ng -c 8 --bssid D8:50:E6:D7:EA:1E -w capture mon0

Para parar el monitoreo es con el comando airmon-ng stop mon0


Arduino + Node.js + Johnny-Five

Programar Arduino con JavaScript. Utilizando Node.js y Johnny-Five

¿Que es Node.js?

Node.js es un entorno Javascript del lado del servidor, basado en eventos. Node ejecuta javascript utilizando el motor V8, desarrollado por Google para uso de su navegador Chrome. Aprovechando el motor V8 permite a Node proporciona un entorno de ejecución del lado del servidor que compila y ejecuta javascript a velocidades increíbles. El aumento de velocidad es importante debido a que V8 compila Javascript en código de máquina nativo, en lugar de interpretarlo o ejecutarlo como bytecode. Node es de código abierto, y se ejecuta en Mac OS X, Windows y Linux.



Ventajas:
  • El desarrollo es más rápido.
  • La ejecución de tests de unidad se puede hacer más rápido.
  • Las aplicaciones son más rápidas y por tanto la experiencia de usuario es mejor.
  • Menor coste de infraestructura (Linkedin pasó de tener 15 servidores a 4).
  • Está basado en eventos, así que toda la filosofia asíncrona que ya utilizamos con AJAX en el cliente la podemos pasar al servidor.
  • Te permite utilizar el mismo lenguaje (javascript) tanto en el cliente como en el servidor
  • Muy buena gestión de paquetes gracias a NPM (si quieres hacer algo, probablemente exista una librería/paquete que ya lo hace).
  • Nos permite hacer en el servidor todo lo que necesitamos (acceso a ficheros, a bases de datos, conexiones de clientes).

Instalar Node.js

Desde la pagina oficial se puede descargar el instalador, soporta plataformas como  Mac OS X, Windows y Linux. Hasta arquitecturas ARM.

Johnny-Five

Es un framework muy sencillo y práctico que nos ayudará en la tarea. Johnny-Five es compatible con otras plataformas de desarrollo como Raspberry Pi, Beagle Bone e Intel Galileo entre otras. También es el encargado de proporcionarnos controladores para poder trabajar con componentes como LEDs, servos, botones, pantallas, etc.


Instalar Johnny-Five

Procedemos a la instalación. En mi caso tengo Node.js instalado en Windows.
Abrimos la terminal y ejecutamos el comando
npm install johnny-five

Arduino Firmadata

Firmata es un protocolo genérico para la comunicación con microcontroladores desde software instalado en un ordenador. Este protocolo se puede implementar en cualquier arquitectura de microcontroladores, así como en cualquier paquete de software.

El objetivo de firmata es permitir controlar completamente Arduino desde software instalado en un ordenador, sin escribir una sola línea de código de Arduino.

Ventajas:
  • Nuestro programa no está limitado por la memoria RAM y Flash de Arduino
  • El software de control se puede programar en cualquier lenguaje, no solo C++, siempre que tenga soporte para firmata. Por ejemplo: Firmata: Processing, Visual Basic, Perl, C#, PHP, Java, JavaScript, Ruby y por su puesto Python.
Desventajas:
  • Programas más restringidos, es posible que algunas operaciones complejas no sea posible hacerlas. Por ejemplo el uso de interrupciones.
  • Al arduino siempre debe estar conectado al ordenador. Debe tener comunicación para poder ejecutar acciones.

Instalación Firmata

Para instalar Firmata necesitas tener conectado tu la Arduino a la computadora a través de un puerto USB. Asegúrate de tener seleccionado en el IDE de Arduino el modelo adecuado y que haya reconocido el puerto que se utilizará para la comunicación.

Una vez tienes esto listo en el IDE de Arduino selecciona Archivo > Ejemplos > Firmata > StandardFirmata y luego haces clic en el botón Upload para transferir el código al microcontrolador.


Hardware

Conectamos un LED al pin 13 (o usaremos el LED que viene integrado en la placa)

Hello World!

Utilizare notepad++ y escribiremos el siguiente código, el cual lo guardare como led.js

//Incluimos la libreria
var five = require("johnny-five");
//Inicializamos el framework
var board = new five.Board();
//Cuando Arduino haya recibido el codigo
board.on("ready", function() {

  // Instanciamos el pin 13 con la libreria led
  var led = new five.Led(13);

  // Realizamos el tipico "blink"
  // on-off cada 500 ms
  led.blink(500);
});


Ahora ejecutamos el comando node led.js. En mi caso guarde el archivo en el escritorio


Debería funcionar sin problema el parpadeo del led


Esto abre un mundo de nuevas posibilidades a la IoT (Internet Of Things), ya que podremos juntar la programación de hardware con, por ejemplo, una API desde la que encenderemos y apagaremos leds con tan sólo pulsar checkboxes html.
Para mayor documentación visiten https://github.com/rwaldron/johnny-five

Arduino Yun & Sqlite3 & PHP for Process Class

Instalación Sqlite3

Dejare solamente el codigo, ya que en este post explico como realizarlo.
opkg update
opkg install sqlite3-cli


sqlite3 /mnt/sda1/sensor.db


sqlite> CREATE TABLE sensor_dato(
id INTEGER PRIMARY KEY,
temperatura VARCHAR(64),
sqlitetimestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
sqlite>.quit

Instalación PHP

Actualizamos el repositorio con el código.
opkg update



Instalamos php5 con el modulo de sqlite
opkg install php5-cli php5-mod-sqlite3



Código PHP

A traves del editor nano, escribimos el codigo en PHP. Les recuerco que con ctrl+o guardar y con ctrl+x salen del editor.
nano /mnt/sda1/sensor.php



Escribimos el siguiente codigo, en donde se conectara a la base de datos creada e insertara un dato ingresado por consola.

#!/usr/bin/php-cli
<?php
$db = new SQLite3('/mnt/sda1/sensor.db');
$query = "INSERT INTO sensor_dato (temperatura) VALUES( ".$argv[1]." )";
$db->exec($query);
$db->close();
?>




Le damos los permisos necesarios al archivo PHP e ingresamos un valor para comprobar si funciona bien, y visualizamos los valores ingresados a la base de datos.
chmod 755 /mnt/sda1/sensor.php

/mnt/sda1/sensor.php 50


sqlite3 /mnt/sda1/sensor.db
sqlite>select * from sensor_dato;
sqlite>.quit



Código Arduino

Creamos un proceso, donde ejecuta el código creado en PHP e ingresa un numero al azar de 0 a 100.

#include <Process.h>
void setup() {
 Bridge.begin();
}
void loop() {
 int temperatura = random(0, 100);
 Process p;              
 p.begin("/mnt/sda1/sensor.php");      
 p.addParameter(String(temperatura)); 
 p.run();
 delay(1000); 
}

Arduino Yun + Sqlite3

¿Que es la Persistencia de Datos?

Es la acción de preservar la información obtenida de alguna fuente de forma permanente (guardado), pero a su vez también se refiere a poder recuperar la información del mismo (leerlo) para que pueda ser nuevamente utilizado.

De forma sencilla, con un ejemplo, es poder almacenar la información obtenida de un sensor de temperatura, luz, o cualquier otro sensor que este conectado a la Arduino para ser utilizado cuando se necesite.

Métodos de Persistencia

Se pueden guardar datos de distintas formas con Arduino, puede ser ocupando la librería eeprom ya que este posee una memoria no volátil. A través de archivos planos (Ej: txt) que se almacenan en una SD conectada. O con bases de datos.

En nuestro ejemplo ocuparemos la persistencia a través de Sqlite que es una base de datos.

¿Por que Sqlite?

  • Tamaño: SQLite tiene una pequeña memoria y una única biblioteca es necesaria para acceder a bases de datos, lo que lo hace ideal para aplicaciones de bases de datos incorporadas.
  • Rendimiento de base de datos: SQLite realiza operaciones de manera eficiente y es más rápido que MySQL y PostgreSQL.
  • Portabilidad: se ejecuta en muchas plataformas y sus bases de datos pueden ser fácilmente portadas sin ninguna configuración o administración.
  • Estabilidad: SQLite es compatible con ACID, reunión de los cuatro criterios de Atomicidad, Consistencia, Aislamiento y Durabilidad.
  • SQL: implementa un gran subconjunto de la ANSI – 92 SQL estándar, incluyendo sub-consultas, generación de usuarios, vistas y triggers.
  • Interfaces: cuenta con diferentes interfaces del API, las cuales permiten trabajar con C++, PHP, Perl, Python, Ruby, Tcl, groovy, etc.
  • Costo: SQLite es de dominio público, y por tanto, es libre de utilizar para cualquier propósito sin costo y se puede redistribuir libremente.

Instalación de Sqlite3

Nos conectamos a la Arduino Yun por ssh (en post anteriores he explicado como realizar la conexión).

Ejecutamos el comando opkg update para actualizar el repositorio.



Luego instalamos Sqlite3 con el comando opkg install sqlite3-cli



Creamos una base llamado sensor, con el siguiente código
sqlite3 /mnt/sda1/sensor.db

Luego creamos una tabla llamada sensor_dato, con el código
CREATE TABLE sensor_dato(
id INTEGER PRIMARY KEY,
temperatura VARCHAR(64),
sqlitetimestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);


Insertamos un dato y lo visualizamos con el siguiente código
INSERT INTO sensor_data (temperature) VALUES (30);
select * from sensor_data;


Y salimos con el código
.quit



Arduino Class

¿Que es una clase?

Una clase es una plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o conceptos, como los sustantivos en el lenguaje. Cada clase es un modelo que define un conjunto devariables -el estado, y métodos apropiados para operar con dichos datos -el comportamiento. Cada objeto creado a partir de la clase se denomina instancia de la clase.

Las clases son un pilar fundamental de la programación orientada a objetos. Permiten abstraer los datos y sus operaciones asociadas al modo de una caja negra. Los lenguajes de programación que soportan clases difieren sutilmente en su soporte para diversas características relacionadas con clases. La mayoría soportan diversas formas de herencia. Muchos lenguajes también soportan características para proporcionar encapsulación, como especificadores de acceso.


¿Clase en Arduino?

En Arduino se pueden crear clases con la tipografía y sintaxis de C++, con la diferencia que los constructores no se invocan automáticamente en Arduino.

Desarrollare un ejemplo simple, en donde creare una clase llama Pin. La cual tendrá dos constructores uno con parámetro o otro sin parámetro, los cuales declararan un pin como salida. Ademas tendrá dos métodos uno llamado on que encenderá el pin, y el método off el cual apagara el pin.

Código de la Clase Pin
//Clase llamada Pin
class Pin{
  private:
    int pin;
  public:
    //Constructor sin parámetro
    Pin();
    //Constructor con parámetro
    Pin(int _pin);
    //Metodo on
    void on();
    //Metodo off
    void off();
};
//Constructor sin parámetro, declara el pin 13 como salida
Pin::Pin(){
  pin=13;
  pinMode(pin, OUTPUT);
}
//Constructor con parámetro, declara un pin como salida
Pin::Pin(int _pin){
  pin=_pin;
  pinMode(pin, OUTPUT);
}
//Metodo en donde enciende el pin
void Pin::on(){
  digitalWrite(pin, HIGH);
}
//Metodo en donde apaga el pin
void Pin::off(){
  digitalWrite(pin, LOW);
}


Código de un objeto de tipo Pin y declarado con el constructor sin parámetro.

//Se crea un objeto llamado "Objeto" de tipo Pin,
//el cual llama al constructor sin parámetro
Pin Objeto;
void setup() {
 
}

void loop() {
  //Se llama al metodo on y se enciende el led
  Objeto.on();
  //Pasan 100 milisegundos
  delay(100);
  //Se llama al metodo off y se apaga el led
  Objeto.off();
  //Pasan 100 milisegundos
  delay(100);

}


Código de un objeto de tipo Pin y declarado con el constructor con parámetro.
//Se crea un objeto llamado "Objeto" de tipo Pin
//El cual llama al constructor con parámetro
Pin Objeto(13);
void setup() {
 
}

void loop() {
  //Se llama al metodo on y se enciende el led
  Objeto.on();
  //Pasan 100 milisegundos
  delay(100);
  //Se llama al metodo off y se apaga el led
  Objeto.off();
  //Pasan 100 milisegundos
  delay(100);

}

Arduino Yun + SSMTP

¿Que es SSMTP?

SSMTP es una herramienta que permite enviar correos (email) por medio de comando desde el terminal.
Por ejemplo, se puede crear un código en Arduino donde te envié un email cuando se active un sensor (puede ser un sensor de movimiento, luz, etc).

Instalación

En mi caso me conecto al Arduino Yun por SSH ocupando Putty.

Lo primero es actualizar los paquetes por medio del comando
opkg update



Instalamos el cliente de SSMTP
opkg install ssmtp


Configuramos el SSMTP con el editor nano
nano /etc/ssmtp/ssmtp.conf



Se configura del siguiente modo:

# The user that gets all the mails (UID < 1000, usually the admin)
root=tucorreo@gmail.com

# The mail server (where the mail is sent to), both port 465 or 587 should be acceptable
# See also http://mail.google.com/support/bin/answer.py?answer=78799
mailhub=smtp.gmail.com:587

# The address where the mail appears to come from for user authentication.
rewriteDomain=gmail.com

# The full hostname
hostname=YUN

# Use SSL/TLS before starting negotiation
UseTLS=Yes
UseSTARTTLS=Yes


# Username/Password
AuthUser=tucorreo@gmail.com
AuthPass=contraseña


# Email 'From header's can override the default domain?
FromLineOverride=yes

*El documento se guarda con las teclas control+o y se sale del editor nano con control+x

Le aplicamos un actualización de seguridad al archivo
chmod 640 /etc/ssmtp/ssmtp.conf

Con el siguiente comando se envía un email con el contenido "hola mundo"
echo "hola mundo" | ssmtp emaildedestino@gmail.com

Arduino Threads

Que son los Threads

La principal estructura de ejecución del código es la estructura secuencial, en la que cada cada línea escrita se ejecuta una después de otra. El código se ejecuta de arriba hacia abajo y cada línea es ejecutada según lo que se haya programado.

En ocasiones uno necesita llevar más de un procesos a la vez. Esto es imposible ya que el procesador no es capaz de realizar estas funciones. Sin embargo existen alternativas, como lo Threads.

Threads en Arduino

Arduino no soporta nativamente multitarea, pero con la ayuda de C++ se puede emular. No es una forma demasiado eficiente de programar. Ya que cada salto de un hilo a otro va a suponer una penalización de tiempo, pues se deben guardar los estados de los registros de la tarea en curso y recuperar los estados de los registros de la siguiente tarea. Esto, en procesadores preparados para multitarea se suele realizar con instrucciones específicas que se realizan en pocos ciclos de reloj.
Además cada hilo va a ocupar memoria RAM (no muy abundante en arduino) adicional para guardar el estado de la tarea.

Instalación librería Threads

Con las nuevas versiones del Ide de Arduino, cada vez es mas fácil este proceso.
Así que se van a Programa->Incluir Librería->Gestionar Librerías y en el filtro de búsqueda ingresan Threads y proceden a instalar la librería ArduinoThread.



En mi caso ya la tengo instalada.

Luego se van a Archivo->Ejemplos->ArduinoThread->SimpleThread. Con esto abren un ejemplo básico de como ocupar Thread en Arduino.
Los ejemplos vienen comentados, así es mas fácil de entender el código y que hace cada linea. 

Para mayor información o documentación de esta librería la pueden encontrar en el siguiente link Arduino Thread

Textiles Electrónicos (e-textiles)

El otro día pensaba cuales son las limitantes de la electrónica e informática (si es que existe alguna). Me vino a la menta la ropa, los textiles.

Comencé a investigar al respecto, aunque ya sabia que había pintura conductora, me sorprendí al enterarme que ya existe hilo de coser conductor. El cual una de las formas en como lo desarrollan es a través de una capa de metal la cual esta puesto sobre el hilo textil y claramente esta capa es conductora.

Pero todo esto no funcionaria sin la ayuda de hardware adecuado,  el cual debe ser diminuto y poseer un consumo bajo de electricidad.

Para solucionar este punto Arduino desarrollo la Arduino Mini y especialmente LilyPad, las cuales poseen todo lo necesario para los productos e-textiles.


Con las suma de esto, existe un mundo de diseño y desarrollo muy creativo. Los cuales pueden ser desde que se prenda una luz cuando cierro mi mochila o que mi polera favorita se sincronice con la música que escucho.

Les dejo el link de un bueno libro que explica detalladamente y con ejemplos de lo escrito.
Open Softwear

Arduino Yun Analog Input Json

¿Que es JSON?

JSON (JavaScript Object Notation) es un formato para el intercambios de datos, básicamente JSON describe los datos con una sintaxis dedicada que se usa para identificar y gestionar los datos. JSON nació como una alternativa a XML, el fácil uso en javascript ha generado un gran numero de seguidores de esta alternativa. Una de las mayores ventajas que tiene el uso de JSON es que puede ser leído porcualquier lenguaje de programación. Por lo tanto, puede ser usado para el intercambio de información entre distintas tecnologías.

Por lo tanto en esta publicación mostraremos como visualizar los valores obtenidos por las entradas analógicas en formato JSON con nuestra Arduino Yun. 


Código:

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h> 
YunServer servidor;

void setup() {
  //inicializa bridge
  Bridge.begin();
  
  //inciar servidor local
  servidor.listenOnLocalhost();
  servidor.begin();
}

void loop() {
  
  YunClient cliente = servidor.accept();

  if (cliente) {
    String comando = cliente.readString();
    comando.trim();
    //url valida que capturara para mostrar los valores
    if (comando == "entradas") {

      //Inicio de data en JSON 
      cliente.println("Status:200");
      cliente.println("content-type:application/json");
      cliente.println();
      cliente.println("{");
      
      /*
      loop a través de los pines analógicos y por cada
      entrada analógica genera una linea JSON con su valor,
      como:
      "A0" : 450
      */
      for(int i = 0; i <= 5; i++) {        
        cliente.print("\"A");
        cliente.print(i);
        cliente.print("\":");        
        if (i == 5) {
          cliente.println(analogRead(i));
        } 
        else {
          cliente.print(analogRead(i));
          cliente.println(",");
        }
      }
      //cierre
      cliente.println("}");     
    }

    cliente.stop();
  }

  delay(50); // Lo realiza cada 50 milisegundos
}

Luego es necesario ingresar la siguiente url para poder visualizar o consumir los datos en formato JSON.
Ej: http://ip-arduino/arduino/entradas