Hackeando la Xiaomi YI Camera con NodeMCU

12309879_10207036861855764_3587964930137024055_o

 

Hola a todos, es un placer de nuevo teneros por acá, esta vez como dice el titulo de la publicación vamos a “hackear” la Xiaomi YI camera. vamos a ver un ejemplo claro de como utilizar un botón para tomar fotografías utilizando el NodeMCU

Empecemos.

 

Xiaomi Yi camera.

Es una cámara deportiva rectangular que viene en dos colores blanca /como la que yo tengo) y Celeste con verde, esta tiene un parecido a un juguete, muy bueno la verdad. Gracias a su tamaño tan pequeño puede ser llevada a cualquier lado sin que represente mucho peso, tampoco ocupa mucho espacio, parece un llavero.

Especificaciones

Sensor Sensor CMOS Exmor R de 16 megapíxeles (1/2,3 pulgadas). Formato 16:9
Lente Lente gran angular ZEISS Tessar de 155 grados. Apertura máxima f/2,8
Peso 72 gramos
Memoria Memory Stick Micro Mark 2, Micro SD (SDXC clase 10 para XAVC S)
Conectividad WiFi, Bluetooth 4.0
Batería 1010 mAh (extraíble)
Precio 64 dólares es el precio oficial. En algunas tiendas online asiáticas, como Geekvida la encontrarás a 90 euros. En Amazon también la tienen a un precio de 108 euros

Pueden ver el análisis completo de la cámara en en xataka

 

Protocolo de comunicación.

La yi camera funciona con comandos en formato Json, lo único que tenemos que hacer es conectarnos por TCP a el puerto 7878 una vez conectados a la red que nos provee la misma yi camera, así mismo nos dirigimos a la ip 192.168.42.1 que es la ip de la cámara.

La verdad podemos utilizar cualquier lenguaje de comunicación para enviar y recibir datos, yo opte por el NodeMCU, porque es el microcontrolador en el que estoy actualmente enfocado.

Logica

Explicare que es lo que debemos hacer y al final pondre el codigo completo 😀

lo primero es poner el NodeMCU en modo STATION, nos conectamos al wifi de la camara, creamos una conexion de cliente en el puerto 7878 a la ip 192.168.42.1, lo primero que debemos hacer una vez establecida la conexion es mandar la primer orden para que nos genere un token y poderempezar a mandar comandos.

{“msg_id”:257,”token”:0}

nos regresa

{ “rval”: 0, “msg_id”: 257, “param”: 1 }

donde el parametro es el token que necesitamos para poder enviar ordenes. en este caso como es la primera conexion siempre nos va a dar 1 cada vez que mandemos el mensaje de pedido de token o permiso nos generara un nuevo token.

ahora que ya tenemos nuestro token pasaremos a mandar la orden para tomar fotografias.

{“msg_id”:769,”token”:1}

responde

{ “msg_id”: 7, “type”: “start_photo_capture” ,”param”:”precise quality;off”}
{ “msg_id”: 7, “type”: “photo_taken” ,”param”:”/tmp/fuse_d/DCIM/100MEDIA/YDXJ0047.jpg”}

al final nos da la ruta donde se guarda la foto.

Circuito

El circuito es muy sencillo, una resistenia a negativo y el boton a positivo el nodo lo ponemos en el pin 1 del node mcu de esta manera

pulsador_5

código

conteo = 0
gpio.mode(1,gpio.INPUT)
gpio.mode(0,gpio.OUTPUT)
gpio.write(0,gpio.HIGH)
wifi.setmode(wifi.STATION)
wifi.sta.config("yicamera","11111111")
permiso = '{"msg_id":257,"token":0}'
print(permiso)
tomarFoto = '{"msg_id":769,"token":1}'
cliente = net.createConnection(net.TCP,0)
cliente:on("receive", function(a,v) 
print("receive ")
print("esto es v ")
print(v) 
conteo =2
end )
tmr.alarm(0,2000,1,function()
if(conteo == 0) then
if(wifi.sta.getip() ~= nil) then 
print(wifi.sta.getip())
conteo =1
end-- ip not equal nil
end--conteo == 0
if(conteo == 1)then
print("enviando permiso")
cliente:connect(7878,"192.168.42.1")
cliente:send(permiso)
end--conteo ==1
end)
tmr.alarm(1,10,1,function()
if(conteo == 2) then
if(gpio.read(1) == 0) then
gpio.write(0,gpio.LOW)
print("enviando orden de captura")
cliente:send(tomarFoto)
tmr.delay(500000)
else
gpio.write(0,gpio.HIGH)
end--gpio read
end--conteo == 2
end)

El siguiente paso es poner un sensor en vez de el botón pero eso lo dejo a su creatividad.
😀 nos vemos otro día fue un placer recuerden cualquier duda o comentario sera siempre bienvenido 😀

 

Los dejo con un timelapse que tome con la camara mientras experimentaba con NFC 😀

 

 

codigo en github

Comandos 

ejemplos con python

adios 😀

Anuncios

5 Comments

Add yours →

  1. Hola! genial tu aporte sigue así con tus proyectos!.
    Estoy trabajando en mi trabajo de grado con un modulo eps8266 y necesito generar una foto cuando el modulo detecte un pulso. Por lo que quería preguntarte si me puedes ayudar en lo que es subirle el firmware nodemcu a este modulo y como programarlo para este fin.

    Saludos.

    Me gusta

  2. Hola, tengo una camara de otra marca pero del estilo, controlable por wifi por una app, como hiciste para sacar los comandos? sniffeaste la red o algo asi?
    Esta muy buena la idea!
    Muchas gracias!

    Le gusta a 1 persona

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: