Arduino: error #include

Estaba trasteando con un display LCD, requiriendo la galería LiquidCrystal_I2C. Al comprobar el código topaba con el siguiente error:

fatal error: ../Wire/Wire.h: No such file or directory

#include <../Wire/Wire.h>

Wire es una de las galerías que ya vienen por defecto incluidas, así que no tiene mucho sentido que no la encuentre. El problema reside en dónde busca LiquidCristal_I2C a esa galería. Nos dirigimos a nuestra carpeta de librerías desde el explorador de archivo “\Arduino\libraries\LiquidCrystal_I2C” y editamos el archivo I2CIO.cpp con un procesador de textos.

Buscamos la siguiente línea:

#include <../Wire/Wire.h>

Y la modificamos del siguiente modo:

#include <Wire.h>

Solo queda guardar los cambios y el error desaparece.

 

 

Arduino: sensor DHT11 para leer temperatura y humedad

dh11_1Iniciándome en el mundo Arduino, recojo una sencilla aplicación: lectura de temperatura y humedad a través de un sensor DHT11 y el monitor serie del entorno de programación.

El DHT11 es un sensor que podemos encontrar con 3 o 4 pines. En la versión de 4 pines, el tercero no tiene utilidad. He encontrado variaciones en el orden de estos pines, por lo que si no te funciona un primer vistazo sería a revisar si están bien conectados. El que estoy usando es similar al de la imagen que acompaña este post: la S nos indica la conexión para la señal / datos, el VCC será la toma de corriente de 5v y el restante el GND.

He creado imagen Protoboard para el ejemplo recogido, siendo la resistencia utilizada de 330 ohms.

untitled-sketch-2_bb

Para el uso del sensor DHT11 es necesario cargar librerías específicas en el entorno de programación. Para ello vamos al menú Programa – Incluir librerías – Gestionar librerías. En la caja de búsqueda escribimos: DHT sensor library. Instalamos la librería con ese nombre, y se indica que está creada por Adafruit. He tenido problemas instalando manualmente la librería a partir de archivos ZIP recomendados en la red.

Para comprobar el funcionamiento cargamos un archivo de ejemplo: Archivo – Ejemplos – DHT Sensor library – DHTtester. Este será el código:

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include “DHT.h”

#define DHTPIN 2     // what digital pin we’re connected to

// Uncomment whatever type you’re using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println(“DHTxx test!”);

dht.begin();
}

void loop() {
// Wait a few seconds between measurements.
delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(“Failed to read from DHT sensor!”);
return;
}

// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);

Serial.print(“Humidity: “);
Serial.print(h);
Serial.print(” %\t”);
Serial.print(“Temperature: “);
Serial.print(t);
Serial.print(” *C “);
Serial.print(f);
Serial.print(” *F\t”);
Serial.print(“Heat index: “);
Serial.print(hic);
Serial.print(” *C “);
Serial.print(hif);
Serial.println(” *F”);
}

Podemos verificar y cargar posteriormente el código a la placa Arduino. Al abrir el monitor serie (la lupa, en la esquina superior derecha) nos mostrará las lecturas correspondientes:

arduino-reporte-dht11

Ramme: cliente de Instagram para Linux

ramme-crimsonlinux.png

Ramme es un cliente de código abierto que podéis descargar desde GitHub. Pretende ser visualmente simple, quedando en la bandeja del sistema como icono que permite desplegar o recoger la ventana del programa.

Otra de sus características es el funcionamiento a partir de atajos de teclado. Con Ctrl+D podemos cambiar de un tema claro a otro oscuro, o refrescar con Ctrl+R. Una vez descargado el archivo de GitHub tan solo hay que descomprimirlo y ejecutar el archivo Ramme.

Error en RetroPie: Unsupported OS

retropiewebsitelogo

RetroPie es una de las maneras más fáciles de convertir una Raspberry Pi en una máquina emuladora para videojuegos. Se instala sobre Raspbian, por lo que no es una distribución propiamente; solo un simple programa que puede ser instalador sobre Debian y derivadas.

Distribuciones derivadas de Debian hay muchas, pero el instalador de RetroPie no tiene en cuenta esta variedad y podemos encontrarnos con el mensaje “Unsupported OS” que no nos permite avanzar.

Para corregir este error, debemos añadir a uno de los scripts del instalador el nombre de nuestra distribución, que además viene indicado en el propio mensaje de error. En mi caso, y para este ejemplo, estoy usando la distribución MX.

La solución es tan sencilla como navegar hasta la carpeta scriptmodules incluida en la descarga de RetroPie, y modificar con un editor de texto el script system.sh. Usamos el buscador del editor de texto para localizar lo siguiente: Raspbian|Debian). Y utilizando la misma sintaxis, añadimos a continuación el nombre de nuestra distribución. En este ejemplo, en los dos resultados de búsqueda que se obtienen las líneas quedan de la siguiente manera:

Raspbian|Debian|MX)

theHarvester: recolectando correos (y algo más)

***************************************************
*                                                 *
*    /\  /\__ _ _ ____   _____  ___| |_ ___ _ __  *
*   / /_/ / _` | '__\ \ / / _ \/ __| __/ _ \ '__| *
*  / __  / (_| | |   \ V /  __/\__ \ ||  __/ |    *
*  \/ /_/ \__,_|_|    \_/ \___||___/\__\___|_|    *
*                                                 *
***************************************************

theHarvester es un programa escrito en Python para recolectar cuentas de correo, subdominios, virtual hosts… y algunas cosas más que pueden utilizarse para un uso dañino. La herramienta es popular al estar incluida en la distribución destinada a la seguridad Kali Linux. A mi me ha resultado útil para completar e identificar un pequeño listado de contactos que he perdido, todos de una misma organización: compartían el dominio en sus direcciones de correo (@organización.com). Y ese va a ser el uso que aquí se expone.

Si no estamos utilizando una distribución que incluya el programa, lo descargamos desde GitHub (botón verde “Clone or Download”), y posteriormente descomprimimos el archivo. Modificaremos los permisos del programa desde un terminal:

sudo chmod 755 theHarvester.py

La sintaxis para ejecutar el programa es la siguiente:

python theHarvester.py -d ORGANIZACIÓN.COM -l 500 -b SERVICIO -f /RUTA/ARCHIVO-DE-SALIDA.HTM

La opción -d es para indicar el dominio a buscar. En el ejemplo he puesto “organización.com”.

La opción -l limita el número de resultados con los que el programa trabaja a la vez. Propongo 500, aunque algunos de los servicios tienen su propio límite.

La opción -b indica el servicio con el que realizar la búsqueda: google, googleCSE (es el “Custom Search” del buscador), bing, bingapi, pgp, linkedin, google-profiles, jigsaw, twitter, googleplus. Con la opción -b all buscamos en todos ellos, aunque me ha dado algún problema y he tenido que probar uno por uno.

Por último, la opción -f permite indicar la ruta y el nombre de archivo, con extensión htm, que genera un documento web con los resultados.

· Solucionar el error Request library not found, please install it before proceeding

Si obtenemos este error al ejecutar el programa, debemos instalar la librería Request. Descargamos este script desde este enlace, y lo ejecutamos con los siguientes comandos:

sudo python get-pip-py

sudo pip install requests

Fuente: Instalación PIP

Rotar pantalla con Raspberry Pi

En algunos escenarios es más útil contar con un monitor en vertical: dashboard, lectura / edición o incluso para matar marcianos en máquinas recreativas. Habitualmente utilizo xrandr desde la línea de comandos para rotar la imagen, pero en Raspbian esta opción no me daba resultados.

portrait_lcd_polarization

La solución es sencilla. Editamos el archivo config.txt ubicado en la carpeta /boot. Para ello, podemos utilizar nano desde la terminal:

sudo nano /boot/config.txt

Al final del archivo añadimos la siguiente línea:

display.rotate=1

El valor numérico puede ser 1, 2 o 3, según queramos rotar la pantalla 90º, 180º o 260º, respectivamente. Solo queda guardar el archivo y reiniciar.