diciembre 21, 2016

Felices fiestas

Con la llegada de estas fechas no puede uno menos que acordarse de todas esas personas que han estado este año ahí, al pie del cañón, mis mejores deseos para ellos, que se ven reflejados en este precioso christmas:

diciembre 03, 2016

El mundo vuelve a girar

Röyksopp feat. Robyn - Monument (The Inevitable End Version)


Arriba o abajo, dos caras de la misma moneda. Hoy toca tirar de nuevo.


diciembre 01, 2016

ESP8266 Mini D1 con sensor de presión barométrica GY-BMP280-3.3

Para montar nuestra propia estación meteorológica es fundamental tener un sensor de presión, he estado probando el GY-BMP280, un sensor que vale menos de 2€ comprándolo en cualquier página china.


Se trata de una pequeña placa que trae el sensor de Bosch y los pines para conexion I2C y SPI. Por comodidad, y uso de pines he probado el protocolo I2C montado en una placa MiniD1. Una de las cosas poco claras es el tema del pinout, a que pins debe conectarse en la MiniD1 la señal de reloj (SCL) y la de datos (SDA), urgando un poco en la documentación del código hardware/esp8266com/esp8266/ vemos las declaraciones de pines del chip ESP8266 a la placa MiniD1:

#########################################################################
# variants/d1_mini/pins_arduino.h
#########################################################################
#define PIN_WIRE_SDA (4) // D2
#define PIN_WIRE_SCL (5) // D1
static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;
static const uint8_t LED_BUILTIN = 2;
static const uint8_t BUILTIN_LED = 2;
static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = 0;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t RX   = 3;
static const uint8_t TX   = 1;

Por defecto la librería Wire de Arduino se reemplaza con la TwoWire que define begin con los pines SDA y SCL:

#########################################################################
# ~/Arduino/hardware/esp8266com/esp8266/libraries/Wire/Wire.cpp
#########################################################################
static int default_sda_pin = SDA;
static int default_scl_pin = SCL;
// Constructors ////////////////////////////////////////////////////////////////
TwoWire::TwoWire(){}
// Public Methods //////////////////////////////////////////////////////////////
void TwoWire::begin(int sda, int scl){
  default_sda_pin = sda;
  default_scl_pin = scl;
  twi_init(sda, scl);
  flush();
}

Estos por defecto están mapeados a D1 y D2 (4, 5) según la tabla de traducción anterior, en la documentación se explica más o menos:

#########################################################################
~/Arduino/hardware/esp8266com/esp8266$ vi doc/libraries.md
## I2C (Wire library)
Wire library currently supports master mode up to approximately 450KHz.
Before using I2C, pins for SDA and SCL need to be set by calling
`Wire.begin(int sda, int scl)`, i.e. `Wire.begin(0, 2)` on ESP-01,
else they default to pins 4(SDA) and 5(SCL).
#########################################################################

Para testear los dispositivos i2c hay una libreria muy interesante, que scanea las direcciones en las que se pueden encontrar https://github.com/mcauser/i2cdetect . Con un poco de código el BMP280 aparece en la posición 0x76.


#########################################################################
#include
#include
void setup() {
  Wire.begin(0, 2); -> D3,D4
  //Wire.begin();
  Serial.begin(9600);
  Serial.println("i2cdetect example\n");
  Serial.print("Scanning address range 0x03-0x77\n\n");
}
void loop() {
  i2cdetect();  // default range from 0x03 to 0x77
  delay(2000);
}

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
############################################################################

Trás esto debemos hacer un par de cambios al código de prueba de Adafruit_BMP280:
- Antes de nada definimos los pines en los que tenemos el I2C: Wire.begin(D3,D4);
- Indicamos la dirección del I2C:
 Adafruit_BMP280 bme; // I2C
 bme.begin(0x76)

Ya deberíamos poder ver los resultados del sensor por el puerto serie:

Temperature = 21.09 *C
Pressure = 100162.88 Pa
Approx altitude = 97.21 m

Si queremos un ejemplo completo en: http://lazyzero.de/en/elektronik/esp8266/diy_weather/start podemos ver un sensor de humedad, temperatura y este mismo de presión con su código completo.

octubre 30, 2016

Convertir Matroska video to MP4 para televisiones Samsung

Hoy en día las televisiones soportan un amplio rango de formatos y casi todos se pueden emitir desde un servidor de videos sin problemas (Universal Media Server por ejemplo). Aunque de vez en cuando nos encontramos con el típico formato que falla o nuestra tele carece de software para reproducirlo. En estos casos tenemos dos opciones, configurar nuestro servidor para que realice la conversión al vuelo o reconvertirlos nosotros mismos, vamos a explorar esta opción con un software muy común como el VLC:

Abrimos el VLC y elegimos convertir/guardar:

Añadimos el archivo que queremos convertir:

Cliqueamos convertir y editamos el perfil:

Para la encapsulación MP4/MOV:

En principio no hará falta convertir el video, pero si quisieramos un formato bastante compatible es H264.

Para el audio en caso de no poder mantener el original una buena opción es el más básico:

Ya solo queda guardar el nuevo archivo, en caso de que haya conversión de formato de por medio será un poco mas lento: