El circuito (realizado con Fritzing):
Si te interesa, sigue leyendo…
Archivos de la categoría: Hardware
Puertos de Arduino
Arduino UNO es una placa impresa con un microcontrolador ATmega3281.
Los pines digitales 0-13 son de entrada y salida (digitalRead(HIGH/LOW); digitalWrite(pin, HIGH/LOW)).
Los puertos PWM (Pulse-Width Modulation) permiten simular una salida analógica (analogWrite(pin, valor)) escribiendo valores entre [0-255].
El puerto 13 incluye una resistencia de 220 Ω y está conectado al único actuador programable de la placa, el LED ‘L’.
Los puertos 0 y 1 se usan para comunicaciones RX (recepción) y TX (transmisión) -actividad indicada por los correspondientes LEDs- por lo que no se recomienda su uso para nada más. Cuando se usan los puertos 0 y 1 para comunicaciones se recomienda desconectar el USB -que se usa para lo mismo- para evitar problemas.
Los puertos con particularidades son: 0 y 1 (Rx,Tx); 2 y 3 (interrupciones); 3, 5, 6, 9, 10 y 11 (PWM); 10, 11, 12 y 13** (SPI); A4 y A5 / SDA* y SCL* (TWI); AREF (Voltaje de referencia); Reset; IOREF (V. referencia IC); No conectado*.
(*) Puertos aparecidos en UNO R3, y que no están etiquetados en la placa.
(**) Incluye una resistencia de 220 Ω.
Los pines analógicos 0-5 son de entrada (analogRead()) y leen valores entre [0-1023].
El voltaje de entrada es de 5V (USB) o 7V-12V (pin Vin y conector jack). El GND de arriba es digital (DGND). Generalmente se usan un GND analógico (AGND) para la BreadBoard.
Comenzando con Arduino
Tras mucho tiempo queriendo hacerlo, por fin me he iniciado en el mundo de Arduino.
Arduino es una placa de Hardware libre que te permite iniciarte en el mundo de los microcontroladores para hacer todo tipo de proyectos, entre ellos (mi primer “gran” objetivo) un robot. La placa se programa en una versión reducida de C, con un IDE propio (libre).
El IDE viene con un montón de ejemplos que permiten aprender a programar la placa.
Recomiendo el Arduino Starter Kit.
Hay quien opina que no es una buena opción básicamente porque puedes obtener lo mismo en e-bay a mitad de precio.
Sin embargo esto solo es cierto si:
1. Sabes lo que tienes que comprar (tienes experiencia en electrónica)
2. Tienes tiempo suficiente para pasar en e-bay buscando cada componente y esperando a que llegue
El paquete tiene una presentación estupenda, un montón de componentes variados y un magnífico libro.
Obviamente el libro se puede bajar de la red, pero me parece que vale la pena tenerlo en formato árboles muertos ya que es una gran guía para dar los primeros pasos y me resulta cómodo tenerlo encima de la mesa y poder ver los diagramas con mis hijos.
En todo caso es un libro muy recomendable para los que como yo no tengáis una gran experiencia con la electrónica.
Cuando se va aprendiendo a manejar el arduino entonces ya uno sabe qué es lo que quiere exactamente comprar y entonces e-bay es una gran opción.
Por otra parte, recomiendo el uso de Fritzing para diseñar “el mundo real”. Los dibujos que incluyo están realizados con esta herramienta.
Para instalar en GNU/Linux hacemos:
aptitude install arduino aptitude install fritzing libqt4-sql-sqlite1
Hay muchísima documentación al respecto así que me limitaré a poner los ejemplos más básicos que he ido realizando.
El equivalente al “Hola Mundo” se llama “Blink” y es un programa que hace parpadear un LED (procedente de los ejemplos del IDE):
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // Cambiar a 12 para utilizar el led del BB // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { 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 }
Y el diseño para el mundo real sería este (realizado con Fritzing):
Otra versión:
Añadir framebuffer con Grub 2
Me sucedió con un equipo con tarjeta gráfica integrada de Intel, que al arrancar el entorno gráfico se perdía el acceso a las tty [1-6] y además se colgaba el apagado / reinicio. Sin embargo si arrancaba sin entorno gráfico no había problema.
El problema era que las X usaban directamente la tarjeta, sin usar framebuffer.
$ grep EE /var/log/Xorg.0.log
... (EE) open /dev/fb0: No such file or directory ...
1. Comprobar los modos disponibles:
# hwinfo --framebuffer
... Hardware Class: framebuffer Model: "" Vendor: "" Device: "" SubVendor: "Intel(R) HSW Mobile/Desktop Graphics Chipset Accelerated VGA BIOS" SubDevice: Revision: "" Memory Size: 31 MB + 960 kB Memory Range: 0xe0000000-0xe1feffff (rw) Mode 0x0307: 1280x1024 (+1280), 8 bits Mode 0x031a: 1280x1024 (+2560), 16 bits Mode 0x031b: 1280x1024 (+5120), 24 bits Mode 0x0305: 1024x768 (+1024), 8 bits Mode 0x0317: 1024x768 (+2048), 16 bits Mode 0x0318: 1024x768 (+4096), 24 bits Mode 0x0312: 640x480 (+2560), 24 bits Mode 0x0314: 800x600 (+1600), 16 bits Mode 0x0315: 800x600 (+3200), 24 bits Mode 0x0301: 640x480 (+640), 8 bits Mode 0x0303: 800x600 (+832), 8 bits Mode 0x0311: 640x480 (+1280), 16 bits Mode 0x037d: 1680x1050 (+1728), 8 bits Mode 0x037e: 1680x1050 (+3392), 16 bits Mode 0x037f: 1680x1050 (+6720), 24 bits Config Status: cfg=new, avail=yes, need=no, active=unknown
2. Configurar framebuffer en Grub2
vi /etc/default/grub
#GRUB_GFXMODE=640x480 GRUB_GFXMODE=800x600 GRUB_GFXPAYLOAD_LINUX=800x600 # Podriamos usar, por ejemplo #GRUB_GFXMODE=1280x1024 #GRUB_GFXPAYLOAD_LINUX=1280x1024x16
3. Activar la nueva configuración en Grub
# update-grub
4. Reiniciar
Firma digital con Debian GNU/Linux y Sinadura
Uno de los usos interesantes del DNIe es firmar un archivo PDF. Esta firma tiene plena validez legal. Es decir, hasta hace poco había que hacer un documento, imprimirlo y después firmarlo a mano. Ahora podemos hacer un documento, guardarlo como PDF (por ejemplo con OpenOffice Writer) y después firmarlo con nuestro DNIe.
Hay que insistir en que tiene plena validez legal. Sirve para hacer contratos, compra ventas, reclamaciones…
Sinadura permite firmar digitalmente tanto archivos PDF como otro tipo de archivos.
Vamos a instalar Sinadura 3.3.3 en Debian GNU/Linux Wheezy (Debian 7).
Primero descargamos Sinadura, en este caso he descargado la versión 3.3.3 para GNU/Linux de 64 bits:
$ wget http://www.sinadura.net/documents/18043/196213/sinaduraDesktop-3.3.3-unix64-installer.jar
Su instalación es muy sencilla, basta con hacer:
$ java -jar sinaduraDesktop-3.3.3-unix64-installer.jar
y seguir el típico asistente de “siguiente”, “siguiente”, “siguiente”…
…pero no funciona todavía. Hay que modificar un detalle de opensc:
# vi /etc/opensc/opensc.conf
Buscar y descomentar (quitar el ‘#’) la siguiente línea:
# plug_and_play = false; plug_and_play = false;
Para configurar Sinadura vamos a “Archivo -> Preferencias -> Firma -> Certificados“, y elegir “Tarjeta Inteligente“.
También recomiendo ir a “Archivo -> Preferencias -> Firma -> PDF” y seleccionar otra imagen ya que la que viene por omisión (el logo de Sinadura) apenas permite leer el texto insertado. De paso cambiamos la razón, la ubicación y la certificación por defecto (No permitir cambios).
Yo me he creado una imagen muy clarita del DNIe en grises y la he copiado en /sinadura/resources/images.
Utilizamos el botón “Añadir documentos” para seleccionar el documento pdf a firmar, en mi caso “prueba.pdf” y pulsamos “Firmar“.
El programa carga el certificado (la primera vez tarda un poco, si se cuelga probablemente sea por un problema de sesiones: sacar e introducir el DNI) y después nos pide el PIN del DNIe.
Después elegimos el certificado a utilizar, en este caso el certificado de firma:
Nos solicita una confirmación:
Y ya está. Podemos verificar cualquier documento firmado también desde Sinadura. Primero lo seleccionamos y después utilizamos el botón “Validar”
DNIe en GNU/Linux
Estos artículos muestran como instalar el DNIe (documento nacional de identidad electrónico español) en GNU/Linux.
DNIe en Debian GNU/Linux Stretch
DNIe en Debian GNU/Linux Wheezy
DNIe en Debian GNU/Linux Squeeze
DNIe en GNU/Linux -Obsoleto-
Artículo original de la serie, realizado en 2010.
También muestran como instalar otras tarjetas criptográficas y diferentes usos
Instalar una impresora
Instalar una impresora hoy día en Debian y Gnome es una de las cosas más sencillas. Si la conexión es USB simplemente hay que conectarla y el sistema la detecta e instala en un menos de un minuto. Sin preguntas, sin problemas… nada, la instala.
Si se desea una mejor compatibilidad con impresoras HP, ésta compañía facilita el uso de sus impresoras en GNU/Linux mediante el proyecto HP Linux Imaging and Printing (HPLIP) y los drivers HPIJS.
Para ello:
- Instalamos los paquetes con
aptitude install hplip hpijs foomatic-db-hpijs
- Conectar la impresora y ¡Ya está! La instala sola sin molestarte con siguiente, siguiente ni nada ¡Así debería ser siempre! :-)
- Si por un casual no basta con pinchar la impresora podemos utilizar el comando hp-setup (Intro, intro, intro…)
Otra forma muy sencilla de instalar una impresora es utilizando el sistema CUPS (http://localhost:631). CUPS detecta las impresoras y ayuda a seleccionar el controlador (drivers) necesario.
Si el sistema detecta la impresora pero no encontramos el modelo en la lista, hay que localizar el fichero ppd correspondiente en internet (Google es tu amigo).
Sonido del micrófono
En algunos casos, aunque el sonido del micrófono se oye por los altavoces, no se registra sonido a la hora de grabar sonido o de utilizar programas de conversación.
Además de revisar todos los controles de sonido, podemos usar aumix, que nos muestra controles de grabación.
DNIe en Debian GNU/Linux Squeeze 64 bits
Este artículo muestra cómo instalar el DNIe en Debian GNU/Linux Squeeze aunque es extensible a otras distribuciones y versiones.
Para instalar el DNIe en sistemas más antiguos.
Una vez instalado un lector de DNI-e, también nos sirve para utilizar tarjetas criptográficas CardOs M4 como las que utiliza por ejemplo la Comunidad Valenciana a través de la ACCV.
El DNI electónico o DNIe se puede hacer funcionar en GNU/Linux, tanto para identificarse en webs como para firmar documentos todo con plena validez legal. Su instalación es, ahora, muy sencilla.


No hay que olvidar que el DNIe tiene sus limitaciones y pegas de seguridad. (Para los “paranoicos” se recomienda utilizar el DNIe únicamente desde sistemas de solo lectura como un CD con Knoppix).
Tampoco hay que olvidar que una firma “normal” es mucho más facil de falsificar que una firma electrónica, pese a que ninguna sea totalmente segura.
Las siguientes instrucciones se han probado en Debian Squeeze 64 bits con un lector C3PO LTC31 (de venta en las oficinas de correos por 19,90 €), con un “miniLector Bit4id” del plan avanza2 (es un Advanced Card Systems ACR38-U pero con una caja blanca) y con un lector Omnikey 3021.



INSTALACIÓN DEL LECTOR
Básicamente vamos a instalar el paquete de la web del dnielectronico.
$ wget http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/Debian_Squeeze_opensc-dnie_1.4.8-2_amd64.deb
Para hacerlos funcionar necesitaremos algunos paquetes:
# aptitude install libopensc2 opensc pinentry-gtk2
Nos indica que hemos de registrar el módulo PKCS#11 en iceweasel/firefox utilizando el enlace que nos crea en el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“.
Cuando lanzamos este enlace, indicamos que confiamos en la nueva Autoridad Certificadora (CA) para las tres posibilidades.
Podemos comprobar si el sistema reconoce correctamente el lector con el comando “pcsc_scan” y probando a introducir y sacar el DNIe (u otras tarjetas similares):
# aptitude install pcscd pcsc-tools $ pcsc_scan PC/SC device scanner [...] Reader 0: ACS ACR 38U-CCID 00 00 Card state: Card inserted, [...] Possibly identified card (using /usr/share/pcsc/smartcard_list.txt): XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX DNI electronico (Spanish electronic ID card) http://www.dnielectronico.es Reader 0: ACS ACR 38U-CCID 00 00 Card state: Card removed,
Otras pruebas que podemos hacer son (estas con una tarjeta CardOs M4):
$ opensc-tool -l Readers known about: Nr. Driver Name 0 pcsc C3PO LTC31 (00426664) 00 00 $ opensc-tool -a Using reader with a card: C3PO LTC31 (00426664) 00 00 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx $ opensc-tool -n Using reader with a card: C3PO LTC31 (00426664) 00 00 CardOS M4
Para que funcione bien iceweasel/firefox y detecte el módulo sin problemas es necesario reiniciar el navegador.
USO Y DISFRUTE
Lo primero que hay que saber es que en el DNIe tenemos a nuestra disposición dos certificados, uno para identificarnos (certificado de autenticación) y otro para firmar (certificado de firma), lo que son los dos principales usos del DNIe.
También es importante saber que cada aplicación que utiliza el DNIe establece una “sesión” con el lector de tarjetas y que no puede haber dos sesiones abiertas a la vez. Es decir no podemos usar el DNIe en dos aplicaciones a la vez. Sin embargo muchas aplicaciones no indican adecuadamente esta circunstancia y simplemente parece que no funcionan.
Así por ejemplo si iniciamos sesión en iceweasel/firefox para acceder a una web, no podemos firmar un archivo pdf con sinadura hasta cerrar sesión. Y al revés, tras firmar un fichero con sinadura no nos deja validarnos con iceweasel.
Ante la duda basta con extraer y volver a introducir el DNIe en el lector para asegurarse que está disponible el acceso.
Un último recordatorio, si se introduce el PIN del DNIe erróneamente tres veces seguidas, éste se bloquea. Así que al hacer pruebas con los programas y sus configuraciones hay que tener cuidado. A mí se me bloqueó haciendo pruebas con Sinadura (para desbloquearlo hay que pasar 5 minutos por una comisaria), así que después cada vez que hacía una prueba con un programa si no funcionaba perfectamente iniciaba sesión en iceweasel/firefox.
Identificarse en sitios web con iceweasel/firefox
El DNIe se puede utilizar al navegar para identificarse en un sitio web. Así por ejemplo si nos identificamos en la web de la seguridad social podremos descargarnos al instante nuestra vida laboral.
Primero debemos asegurarnos que hemos registrado en iceweasel/firefox el módulo de DNIe PKCS#11 (usando el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“).
En caso contrario podemos registrarlo a mano desde “Editar -> Preferencias -> Avanzado -> Cifrado -> Dispositivos de seguridad“. Seleccionamos “Cargar”, indicamos un nombre, por ejemplo “DNIe – OpenSC PKCS#11″, y la ruta del módulo “/usr/lib/opensc-pkcs11.so”.
Si la instalación ha sido correcta y tenemos el lector conectado con un DNIe introducido, nos habilitará la opción “Iniciar sesión” (¡bien!). Si iniciamos sesión nos pedirá el PIN, pero antes es mejor reiniciar el navegador para que nos pida instalar el certificado de la DGP (Dirección General de la Policia).
Comprobaciones
Podemos probar nuestro DNIe en el navegador en la página de verificación del portal oficial (el enlace para la verificación está al final de esa página).
Si todo ha ido bien el navegador nos pide nuestro PIN para iniciar sesión (si no lo hemos introducido antes):
Cuando conectamos con una web en la que debemos identificarnos nos pregunta cuál de los dos certificados (el de firma o el de autenticación) queremos utilizar. Para identificarnos usamos el de autenticación.
Si el navegador nos indica:
El otro extremo de la conexión SSL no puede verificar su certificado.
(Código de error: ssl_error_bad_cert_alert)
Es porque no hemos iniciado sesión correctamente (hemos fallado el PIN 3 veces, no lo hemos puesto, no está bien instalado el lector…).
Lo recomendado es “Iniciar sesión” en el navegador solo cuando se necesita y “Terminar sesión” lo antes posible. Si visitamos una página que requiere certificado sin haber iniciado sesión, el navegador nos solicitará el PIN automáticamente, pero para cerrar sesión hay que ir “a mano” a la opción “Dispositivos de seguridad” del menú.
Firmar archivos PDF con Sinadura
Otro uso interesante del DNIe es firmar un archivo PDF. Esta firma tiene plena validez legal. Es decir, hasta ahora había que hacer un documento, imprimirlo y después firmarlo a mano. Ahora podemos hacer un documento, guardarlo como PDF (por ejemplo con OpenOffice Writer) y después firmarlo con nuestro DNIe.
Hay que insistir en que tiene plena validez legal. Sirve para hacer contratos, compra ventas, reclamaciones…
Primero descargamos Sinadura, en mi caso he descargado la versión 3.1.2 para GNU/Linux de 64 bits.
Su instalación es muy sencilla, basta con hacer:
$ java -jar sinaduraDesktop-3.1.2-unix64-installer.jar
y seguir el típico asistente de “siguiente”, “siguiente”, “siguiente”…
Lanzamos el programa desde “Aplicaciones->Otras->Sinadura”.
Para configurarlo vamos a “Aplicaciones -> Preferencias -> Firma -> Certificados“, y elegir “Tarjeta Inteligente“.
También recomiendo ir a “Sinadura -> Preferencias -> Firma -> PDF” y seleccionar otra imagen ya que la que viene por omisión (el logo de Sinadura) apenas permite leer el texto insertado. Yo me he creado una imagen muy clarita del DNIe en grises.
Utilizamos el botón “Añadir documentos” para seleccionar el documento pdf a firmar, en mi caso “prueba.pdf” y pulsamos “Firmar“.
El programa carga el certificado (la primera vez tarda un poco, si se cuelga probablemente sea por el problema de las sesiones que comentabamos al principio) y después nos pide el PIN del DNIe.
Después elegimos el certificado a utilizar, en este caso el certificado de firma:
Nos solicita una confirmación:
Y ya está. Podemos verificar cualquier documento firmado también desde Sinadura. Primero lo seleccionamos y después utilizamos el botón “Validar”
Más posibilidades
Una de las posibilidades que la gente busca es firmar y/o cifrar correos electrónicos con el DNIe.
Hay que decir que técnicamente se puede pero que su validez legal es cuanto menos dudosa, y como lo que se busca con el DNIe es tener validez legal no es muy práctico. Siempre se puede enviar un correo-e “normal” con un pdf firmado como adjunto, por ejemplo un contrato.
Esto es porque técnicamente para firmar y/o cifrar basta con tener un par de claves pública/privada, pero el estándar internacional PKI requiere, para firmar un correo-e, que el certificado de la clave indique una dirección de correo-e, que será la única que se “certificará”. Sin embargo en el DNIe no se indica ninguna dirección de correo-e, por lo que no se puede utilizar las firmas del DNIe para este fin.
Lo más recomendado es firmar y cifrar con claves GPG, u obtener firmas de la FNMT, que sí están preparadas para este propósito.
En todo caso hay buenas y sencillas guías en internet sobre cómo conseguir, técnicamente, firmar correos-e con el DNIe (GMail+DNIe; Thunderbird+DNIe).
Para consultar otras posibilidades tenemos el oráculo, la página de Servicios Disponibles o la web Kriptopolis.
Instalación de firmware en Debian
[Este apartado es un resumen de una entrada de Raphael Hertzog. Si el artículo todavía está disponible recomiendo ir al original.]
Una duda habitual al instalar un GNU/Linux es el tipo de procesador del que se dispone. En un PC con linux (por ejemplo arrancando con un Live-CD) podemos hacer:
$ grep “^flags” /proc/cpuinfo | grep -q ” lm ” && echo “amd64″ || echo “i386″
Puede ocurrir que al instalar Debian un equipo, una parte del hardware no funcione correctamente por falta del correspondiente firmware (o el uso de uno que no es totalmente adecuado). Una opción es obtener de Raphael Hertzog un disco de Debian con firmware.
Otra opción es realizar una instalación básica de Debian y posteriormente verificar el firmware necesario e instalarlo.
Si es necesario, pueden bajarse paquetes desde otro equipo desde la web de Debian.
Después se instala con # dpkg -i paquete
Si el equipo necesita algún firmware, durante la instalación, al actualizar el kernel o al hacer un update-initramfs aparecerán mensajes diciendo:
“may require additional firmware” o “Failed to load firmware” o “Possible missing firmware“.
Podemos buscar más mensajes mediante:
# dmesg | grep firmware
# grep firmware /var/log/installer/*
Por ejemplo podemos encontrar:
[ 24.110644] b43 ssb0:0: firmware: agent aborted loading b43/ucode5.fw (not found?) [ 24.116317] b43 ssb0:0: firmware: agent aborted loading b43-open/ucode5.fw (not found?) [ 24.116511] b43-phy0 ERROR: You must go to http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware and download the correct firmware for this driver version. Please carefully read all instructions on this website.
O:
e100: eth0: e100_request_firmware: Failed to load firmware "e100/d101m_ucode.bin": -2
El firmware que requiere el módulo e100 es:
$ modinfo -F firmware /lib/modules/2.6.32-5-amd64/kernel/drivers/net/e100.ko
e100/d102e_ucode.bin e100/d101s_ucode.bin e100/d101m_ucode.bin
Lo mejor es regenerar la imagen de inicio:
# update-initramfs
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64 W: Possible missing firmware /lib/firmware/e100/d102e_ucode.bin for module e100 W: Possible missing firmware /lib/firmware/e100/d101s_ucode.bin for module e100 W: Possible missing firmware /lib/firmware/e100/d101m_ucode.bin for module e100
Una vez visto el firmware que nos falta averiguamos dónde obtenerlo y lo instalamos:
$ apt-cache search d101m_ucode.bin
firmware-linux-nonfree - Binary firmware for various drivers in the Linux kernel
# aptitude install firmware-linux-nonfree
Para ver todos los paquetes de firmware disponibles:
$ aptitude search firmware
El firmware se instala en:
- /lib/firmware/$(uname -r)
- /lib/firmware
- /usr/local/lib/firmware
- /usr/lib/hotplug/firmware