Arduino: Escribir varios bytes en la memoria EEPROM

Pensaba hablar sobre las finales de la NBA, pero creo que me voy a esperar a que acaben y voy a volver con el tema del Arduino y seguir con la EEPROM de la que ya hablamos en otro artículo.

Si en el primer artículo veíamos cómo escribir en esta memoria no volátil, en este veremos otro punto ¿Cómo guardamos información mayor de un byte? En ese caso tenemos que distribuirla entre varios ¿recuerdas el tema de los punteros en C? Pues es similar.

En el ejemplo vamos a guardar un entero largo, de 32 bits. Empezaremos por volcarlo a una variable auxiliar que servirá de contenedor del valor original, y declararemos también una variable byte para la operación de escritura. Lo que haremos será ir guardando en cada byte de la EEPROM el byte más significativo de nuestra variable auxiliar y luego aplico un desplazamiento de 8 bits hacia la izquierda a la variable auxiliar para que el siguiente byte pase a ser el más significativo. Todo esto dentro de un bucle for que repita la operación tantas veces como bytes tenga nuestra variable. En el código explicado paso a paso lo verás mejor:

   long Numero = 666777999;   

   //Usamos el contenedor para no perder el dato.
   long Contenedor = Numero;

   //Definimos una variable byte
   //para trocear el dato largo
   byte X;

   //Bucle: recorremos tantas veces como
   //bytes tiene el tipo de dato
   //que queremos almacenar
   for (int i = 0; i < sizeof(Numero); i++){
     //Guardamos la fracción más
     //a la izquierda. Es el byte
     //más significativo
     X = highByte(Contenedor);
     EEPROM.write(i, X);
     //Aplicamos un desplazamiento
     //de un byte (8 bits)
     // hacia la izquierda.
     //De esta forma en cada iteración
     //la siguiente porción pasa a ser
     //el byte más significativo
     Contenedor = Contenedor << 8;
   }

Es importante tener claras las operaciones de desplazamiento de bit en Arduino para trabajar con múltiples bytes. Próximamente hablaré de esos temas (operaciones a nivel de bit y cómo recuperar estos datos escritos).

Arduino básico: escribir y leer datos de la memoria EEPROM

Si bien el grueso de la memoria de un Arduino está representado por la memoria volátil, que se borra una vez se corta la alimentación o resetea, estas placas poseen también una memoria no volátil donde almacenar permanentemente una serie de datos: La memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) . Según el modelo varía entre los 512 bytes y los 4KB.

Para trabajar con esta memoria necesitamos hacer uso de la librería EEPROM, que viene junto al IDE oficial de Arduino. Posee un método para escribir, write(), y otro para leer, read(). Tanto para leer como para escribir se trabaja por direcciones y byte a byte. Esto implica que enl modelo de 512 bytes tendías posiciones de 0 a 511 y en cada una de ellas podrías guardar un valor comprendido entre 0 y 255. El primer ejemplo que vamos a ver es muy simple: vamos a escribir el mismo valor en todas las posiciones de la memoria y luego a leerlo. Una chorrada, pero muy didáctico:

 

//Se incluye la librería EEPROM
#include <EEPROM.h>
//Creamos una variable para el valor de la posición de memoria
//en la que se va a almacenar el dato.
int Direccion = 0;

//Creamos una variable para leer los valores de la memoria EEPROM
byte valor;

void setup()
{
  Serial.begin(9600);
  // La "B" indica que pasamos los datos
  // en binario (en decimal sería un 18)
  byte Informacion = B10010;
  
  //para el ejemplo nos pateamos
  //512 bytes.
   for (int i = 0; i < 512; i++){
     EEPROM.write(i, i);
   }
}

void loop()
{
  while(Direccion < 512){
    valor = EEPROM.read(Direccion);  
    Serial.print("En la dirección ");
    Serial.print(Direccion);
    Serial.print(" almacenamos el valor: ");
    // DEC para mostrar el resultado en decimal
    Serial.print(valor, DEC);
    delay(100);
    Direccion++;
  }
}

Más adelante seguiremos viendo otros ejemplos de programación con el IDE de Arduino.

Aprende Markdown en sencillos pasos

Lo acabo de leer en el blog de Victorhck y no he podido resistirme a compartirlo por aquí: un tutorial de Markdown (podéis hacerlo pulsando el link) similar al que hace poco os presenté por aquí de GitHub.

Markdown

Markdown es un lenguaje de marcado ligero, muy sencillo de leer y utilizar, que convierte el texto marcado a documentos XHTML. Se distribuye bajo licencia BSD y está presente en muchos CMS. Fue creado por John Gruber, contando con la aportación del programa html2text de Aaron Swartz.

Os dejo también, además de la fuente de dónde saqué el tutorial, otro enlace a una entrada de Victorhck sobre cómo usar Markdown en WordPress.

Os recomiendo echarle un ojo, ya que se trata de una herramienta muy útil que, por otra parte, es fácil de aprender.

Pluto.tv: servicio de televisión gratis por Internet

Primera pregunta que te vendrá a la cabeza ¿Qué es Pluto.tv? Se trata de un servicio de televisión por internet gratuito con más de 100 canales. ¿Dónde está la trampa? Muy simple: Pluto.tv se nutre de material que ya está disponible en la red de forma gratuíta: vídeos de youtube o material de acceso libre de la plataforma Hulu, con la que tiene un acuerdo desde este año. ¿Entonces qué nos aporta Pluto? Bueno, nos da material con buena calidad de imagen y ordenado por canales temáticos. Un poco a modo de «me abruma la cantidad de contenido a elegir, vamos a ver qué ponen por aquí«.

Listado de canales de Pluto.tv

Puede accederse a Pluto.tv a través del navegador, aunque existen apps nativas para iOS, Android, MacOS y Windows. En el caso de Linux no hay app, aunque sí está disponible como app para los navegadores Chrome/Chromium. En todo caso, no hay limitación para usar ningún navegador (no como ocurre con Netflix, donde no es posible usarlo con Firefox). Su característica más atractiva es poder ser utilizado en televisores con conexión a la red, estando disponible para AppleTV, AndroidTV, Roky, Amazon’s Fire TV, televisores de Sony o dispositivos Chromecast.

Pluto.tv

La mayor parte del contenido que oferta la plataforma está en inglés, exceptuando uno de los canales infantiles donde vi que había varios capítulos de una serie manga con audio latino. Se agredecería la opción de contar con subtítulos, como una mejora de cara al futuro y que podría darle una mayor penetración en mercados fuera de los EEUU a esta plataforma. En los canales musicales echo en falta un mayor número ya que, dada la cantida de videoclips que hay disponibles en youtube, no sería difícil meter canales temáticos con más estilos. Que hay un canal dedicado a Nicky Minaj pero no existe ninguno de rock clásico, blues, heavy metal o jazz, por Dio!!!! Y ya puestos no estaría de más algún canal de tutoriales y cursos, que youtube está lleno, y alguno de noticias internacionales. Yo, por pedir, que no quede.

En resumen, no es la panacea ni una revolución, pero se trata de una plataforma interesante para consumir contenidos. De momento le daré una oportunidad, y habrá que esperar a ver cómo evoluciona, qué opciones van agregando y cómo evoluciona su oferta.

Os dejo para finalizar un vídeo tutorial de cómo integrar Pluto.tv en Kodi (el media center antes conocido como XBMC):

Instalar decompilador de Java en Ubuntu: JD-GUI

¿Necesitas un software que te permita decompilar una clase Java en tu Ubuntu? Pues hoy os hablo de JD-Project, un proyecto OpenSource que nos permitirá destripar esos ficheros en nuestro equipo. Si queréis pegarle un ojo al código ahí tenéis la página de GitHub.

En la web oficial del proyecto podemos ver que nos ofrecen varios «sabores»: JD-GUI, como aplicación independiente, JD-Eclipse como plugin para el popular entorno de desarrollo y JD-IntelliJ para el IDE IntelliJ. Yo para hacer la prueba me descargué JD-GUI, que luce tal como en las fotos:

JD-GUI Windows
Así luce JD-GUI en Windows
JD-GUI xubutu
Y este es el JD-GUI en un Xubuntu 16-04 LTS

En mi caso descargué el paquete .deb para derivados de Debian y no tuve más que hacer doble click para instalar. Eso sí, la primera llegó en la frente: ejecuto y falla. ¿por qué? Pues básicamente porque no tenía Java instalado en el equipo de la prueba… un despistillo por usar un equipo recién instalado. Instalo Oracle Java 8… y por algún motivo la instalación del mismo se carga el JD-GUI. Así que otra vez a instalar el .deb de JD-GUI. Pero tras todo esto el programa ya ha funcionado como la seda. Así que ya podéis disfrutar de esta cómoda herramienta.

Copiar y pegar texto en el terminal Xterm

En el emulador de terminal Xterm copiar y pegar no podría ser más sencillo: Seleccionas un texto con el ratón y automáticamente este se copia, y si haces click con el botón central del ratón se pega. No podría ser más sencillo… si tienes un ratón con tres teclas. Pero mira por donde que mi ratón tiene solo dos. Entonces ¿no puedo pegar? Tranquilo, para eso está esta minientrada. Te ofrezco dos soluciones:

  • En algunos equipos puede que te funcione pulsar a la vez las dos teclas del ratón, lo que sería interpretado como un click en el botón central.
  • Pero el consejo de arriba me falló en una de las pruebas que hice, no se si por ser algo concreto de la distribución Lubuntu 15.10 o si porque afectaba para algo que fuera una máquina virtual de Virtual Box. En todo caso, la otra opción es pulsar a la vez las dos teclas: Shift e Insert.

Lynis 2.2.0 ya ha salido. ¿Cómo lo instalo en mi Linux?

Lynis es una conocida herramienta para auditoría de seguridad en sistemas UNIX/Linux. Nos permite gestionar parches de seguridad de nuestro software, buscar malware y detectar vulnerabilidades en nuestro sistema. Una herramienta básica para administradores de sistemas, pentesters y demás gente que deba encargarse de la seguridad.

¿Cómo podemos contar con Lynis en nuestro sistema? Muy simple, en tres pasos:

##Primero creamos un
##directorio para guardar
##Linys
mkdir /usr/local/lynis

#Nos situamos en dicho directorio
cd /usr/local/lynis

##Con la herramienta
##wget descargamos el
##paquete de Lynis comprimido
wget https://cisofy.com/files/lynis-2.2.0.tar.gz

##Ahora ya sólo nos queda
##desempaquetar el Lynis
tar -xvf lynis-2.2.0.tar.gz

##Un último dato: para funcionar
##lynis requiere permisos de administrador
##así que ejecútalo precedido de sudo
#como en el ejemplo
cd lynis
sudo ./lynis

En el ejemplo ejecuto Lynis sin parámetros, de esta forma os mostará la información de todos los que puede recibir para que así podáis darle uso a la herramienta. Probablemente en el futuro haga algún tutorial sobre esta herramienta si os interesa.

Google Chrome: Añadir sitio web como aplicación

Vamos con un tip rápido sobre Chrome ¿cómo añado un sitio web como una aplicación de Chrome?

Lo hice el otro día ya que estaba trasteando con un portátil viejo que va a quedar funcionando mayormente como aparato reproductor de música y tv, ya que para trabajar dispongo de uno más potente. En vista de este uso más lúdico, y tras instalarle Xubuntu 16.04, decidí poner un enlace a Netflix directamente en el escritorio. ¿Cuáles son los pasos a seguir?

  • Abrimos Chrome y entramos en el sitio que queremos convertir en aplicación.
  • Click en el menú de la parte superior derecha, el que es un grupito de rayas.
  • Dentro de ese menú click en Más herramientas.
  • Ahí eliges Añadir al Escritorio.

Listo, ya tienes la web creada como un app de Chrome, tal que así. Ahora con un doble click te abrirá una instancia del navegador que la cargará directamente:

Xubuntu 16.04

Añadir repositorio ppa en Linux

Estos días estoy sin tiempo para escribir, pero vamos con una entrada cortita y práctica para Linux: ¿cómo añado un repositorio ppa a apt? Yo el otro día tuve que hacerlo en un equipo de 32 bits para descargar una versión modificada de Chromium.

Según Genbeta existe una forma de hacerlo sin consola, pero yo voy a centrarme en la forma clásica. La sintaxis sería tal que así:

sudo add-apt-repository ppa:<nombre_ppa>

El ejemplo que da la documentación oficial de Ubuntu sería el siguiente

sudo add-apt-repository ppa:gnome-desktop

 

Eliminar un archivo en Visual Basic .NET

Vamos con un ejemplo de código rápido sobre cómo borrar un archivo usando VB.NET:

Dim ArchivoBorrar As String

ArchivoBorrar = "C:\inetpub\wwwroot\descargas\archivo.doc"

'comprobamos que el archivo existe
If System.IO.File.Exists( ArchivoBorrar ) = True Then
  System.IO.File.Delete( ArchivoBorrar )
End If

Ojito al trabajar con esto que igual os cargáis lo que no debéis.