Idear, crear y programar

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

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

Arduino Yun + Node.js + MQTT

¿Que es MQTT?

MQTT (Message Queue Telemetry Transport) es un protocolo de conectividad enfocado a M2M (machine-to-machine) y al IOT (Internet of Things) ya que se ha diseñado para ser un protocolo de mensajería extremadamente ligero basado en TCP.

Los mensajes se intercambian a través de un servidor de mensajería de MQTT (Broker). El cliente y el servidor de MQTT manejan las complejidades de entregar mensajes de forma fiable para la aplicación móvil y mantener bajo el precio de la gestión de red.

Usare como Broker/Server MQTT el Servidor público http://test.mosquitto.org/

Pre-requisitos

Mosquitto se basa en varios paquetes de terceros para instalar correctamente. Lo siguiente debe ser instalado antes de Mosquitto según su documentación para Windows:
  • Microsoft Visual C++ 2010 Redistributables
    • Link: http://www.microsoft.com/en-us/download/details.aspx?id=5555
    • Instalar vcredist_x86.exe
  • OpenSSL
    • Link: http://slproweb.com/products/Win32OpenSSL.html
    • Instalar "Win32 OpenSSL <version>"
    • Utilice todos los ajustes predeterminados en el instalador
    • Require de los DLLs: libeay32.dll ssleay32.dll
  • pthreads
    • Link: ftp://sourceware.org/pub/pthreads-win32
    • No se requiere instalación para pthreads-w32-<version>-release.zip
    • Require del DLLs: pthreadVC2.dll
  • DLLs

Instalación:

  • Instalación de Mosquitto
    • Enlace http://mosquitto.org/download/ 
    • Instalar Windows binario mosquitto- <versión> -install-win32.exe (versión nativa, Windows Vista o superior) 
    • Copie los siguientes archivos de la instalación de OpenSSL, C: \ OpenSSL-Win32, a la carpeta raíz de Mosquitto, C: \ Archivos de programa (x86) \ mosquitto: 
      • ssleay32.dll libeay32.dll 
    • Copie el siguiente archivo desde el archivo comprimido pthreads a la carpeta raíz Mosquitto, C: \ Archivos de programa (x86) \ mosquitto: 
      • pthreads-w32-<version>-release.zip\Pre-built.2\dll\x86\pthreadVC2.dll
  • Instalar el npm mqtt, con el comando npm install mqtt --save.



  • Instalar la librería pubsubclient para el código de Arduino.

Códigos

  • Código de Node.js 
var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://localhost:1883')
 
client.on('connect', function () {
  client.subscribe('outTopic')
  client.publish('inTopic', 'Hello Arduino')
})
 
client.on('message', function (topic, message,packet) { 
  console.log(`Mensaje ${message.toString()}`)
  client.end()
})

  • Código de Arduino Yun
#include <Bridge.h>
#include <BridgeClient.h>
#include <PubSubClient.h>

IPAddress server(192, 168, 1, 88); //Ip de Servidor donde se levanto Mosquitto

BridgeClient briClient;
PubSubClient client(briClient);

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Mensaje recivido [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
  client.publish("outTopic","Hello Node.js");
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("MQTT conectando...");
    if (client.connect("")) {
      Serial.println("conectado !");
      client.publish("outTopic","Hello Node.js");
      client.subscribe("inTopic");
    } else {
      Serial.print("fallo, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void setup(){
  Serial.begin(57600);
  client.setServer(server, 1883);
  client.setCallback(callback);
  Bridge.begin();
  delay(1500);
}

void loop(){
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

  • Ejecutar Mosquitto 
    • Ir a la carpeta raíz de Mosquitto, como C: \ Archivos de programa (x86)\ mosquitto. Y ejecutar mosquitto.
  • Cargar el Código a la Arduino Yun
  • Ejecutar en codigo de Node.js

















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 Yun Web Panel Language

Como modificar el lenguaje del web panel

Actualizamos el repositorio
opkg update

Visualizamos los distintos paquetes de idiomas que hay
opkg list | grep luci-i18n-base*


En mi caso instalo el paquete en español
opkg install luci-i18n-base-es



Comprobamos la instalación


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 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 Yun + Python CGI

¿Que es CGI?

Cuando el World Wide Web inició su funcionamiento como lo conocemos, empezando a tomar popularidad aproximadamente en 1993, solo se podía apreciar texto, imágenes y enlaces. La introducción de Plugins en los navegadores permitió mayor interactividad entre el usuario y el cliente, aunque estaba limitado por la velocidad y la necesidad de tener que bajar e instalar cada plugin que se necesitara, por lo que estos se desarrollaron mayormente en áreas de vídeo, audio y realidad virtual.

El CGI (Por sus siglas en inglés “Common Gateway Interface”) cambio la forma de manipular información en el web.

En sí, es un método para la transmisión de información hacia un compilador instalado en el servidor. Su función principal es la de añadir una mayor interacción a los documentos web que por medio del HTML se presentan de forma estática.

El CGI es utilizado comúnmente para contadores, bases de datos, motores de búsqueda, formulários, generadores de email automático, foros de discusión, chats, comercio electrónico, rotadores y mapas de imágenes, juegos en línea y otros.

Esta tecnología tiene la ventaja de correr en el servidor cuando el usuario
lo solicita por lo que es dependiente del servidor y no de la computadora del
usuario.

Conexión Remota a la Arduino Yun

Nos conectamos por SSH a la Arduino Yun.

En mi caso, me conectare a través de Putty. Hacemos click en SSH, luego debemos ingresar la ip asignada a la Arduino Yun


Nos pedirá el login e ingresamos como root


Luego ingresamos la contraseña, la cual por defecto puede ser arduino o doghunter


Ingresamos la siguiente linea nano /www/cgi-bin/test.py para que esto funcione debemos tener instalado nano. Si no lo tiene debe ejecutar el siguiente comando para instalarlo opkg install nano


Luego ingresamos el siguiente código


#!/usr/bin/python
print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hola Mundo - Primer CGI </title>'
print '</head>'
print '<body>'
print '<h2>Hola Mundo! Este es mi primer CGI</h2>'
print '</body>'
print '</html>'
  • Ej:

Con la combinación de la tecla control+o guardamos el contenido y con control+x nos salimos del editor.
Luego debemos dar los permisos correspondientes con las siguiente linea chmod 755 /www/cgi-bin/test.py



Ingresamos la siguiente dirección en el navegador para visualizar el CGI.
http://ip-arduino/cgi-bin/test.py