lunes, 10 de diciembre de 2018

Cambiando firmware a Orvibo B25

Hace unos meses me compré un enchufe Orvibo "S20", pero me llegó un Orvibo B25, que no era integrable directamente con HomeAssistant, así que se quedó en un cajón hasta que he tenido tiempo de abrirlo y ponerme a trastear.

Lo primero que se ve nada más abrirlo es que tiene un chip muy similar a un ESP8266... (OW8266-02Q)


Imagen del OW8266-02Q

Buscando algo de documentación y probando parece que tiene el mismo pinout que el WT8266-S1



Así que buscamos el datasheet de este último y nos ponemos a soldar cables para intentarlo hacerlo entrar en modo flash (https://www.seeedstudio.com/document/word/WT8266-S1%20DataSheet%20V1.0.pdf)

Los pines que hay que localizar son:

- 5V (para poder hacer las pruebas sin tener que enchufar a la corriente posteriormente)
- GND
- RX
- TX
- GPIO0 (Para entrar en modo download)
- GPIO2 (Para entrar en modo download)
- GPIO15 (Para entrar en modo download)


Esquemita para tener encima de la mesa

Empezamos soldando los 3 primeros (5V, TX y RX) que están localizados en la placa (están indicados por detrás). El GND lo soldé en el regulador de tensión AMS1117 que hay en la parte inferior porque haciendo pruebas de continuidad no tenía muy claro que alguno de los otros lo fuera.





Pasamos a los GPIO necesarios para entrar en modo "download". Esto hay que hacerlo directamente sobre el chip ESP:




A los pines GPIO0, GPIO2 y GPIO15.

Después conectamos los pines de la placa al FTDI de la siguiente manera:



Enchufe FTDI
5V 5V
GND GND
RX TX
TX RX
GPIO0 GND
GPIO2 3.3V
GPIO15 GND


Conectamos el FTDI a nuestro PC y buscamos el puerto usando dmesg. En mi caso es /dev/ttyUSB0, así que procedemos a intentar sacar el firmware original para tenerlo de backup.



Una vez sacado el firmware anterior, procedemos a buscar uno que funcione. En esta ocasión probé con varios "espurna" de la familia Itead pero en ningún caso funcionaba puesto que el pinout no coindicía (el del switch, relé y led).

La siguiente opción era buscar el pinout, para ello hice un programa de arduino para probar entradas y otro para probar salidas.

El software para testear entradas era simple, le decías un pin por el terminal serie, lo accionabas y te decía si cambiaba de estado o no. Así descubrí que el swtich se correspondía al GPIO14.

Para los de salida, algo similar. El software te pedía el pin y cuando lo introduces empieza a alternar entre "HIGH" y "LOW". Así fue posible encontrar el relé (tictac), y los leds azul y rojo.

Tabla resumen de un par de horas de trabajo
Así que continuamos creando un nuevo dispositivo en espurna con los datos del B25, quedando tal que así:


Finalmente se compila y se carga en el dispositivo con:

sudo esptool.py --port /dev/ttyUSB0 write_flash --flash_size 1MB --flash_mode dout 0x00000 espurna-1.13.3-orvibo-b25.bin

Desconectamos todo de la protoboard, probamos que todo funciona correctamente y se crea la red WiFi para configurar espurna. ¡Conseguido! Ahora procedemos a desoldar todos los cables que habíamos puesto previamente para poder cerrar jeje.

El pullrequests en el repo de espurna ya está hecho y aceptado (https://github.com/xoseperez/espurna/pull/1402), pero los binarios compilados todavía no incluyen el del Orvibo B25, así que lo dejo por aquí por si alguien quiere probar antes de que se publique la siguiente release.


Si tenéis alguna duda podéis preguntar en los comentarios.

jueves, 6 de diciembre de 2018

Deschinando un ESP-01/01S Relay v4.0

El otro día con tanta oferta durante el BlackFriday pedí cosas que ni recordaba, así que ayer llegó esto:



Como no podía ser de otra forma, pasé a "deschinarlo" para tener la toda la funcionalidad del ESP8266 controlada con el HomeAssistant.

Lo primero fue conectar el ESP-01 al programador serie de la siguiente forma:



Teniendo en cuenta que el pinout es el siguiente mirando la placa desde arriba:
(Imágenes sacadas de https://www.instructables.com/id/ESP0101S-RELAY-MODULE-TUTORIAL/)

Tras esto, conectamos el programador serie a nuestro PC y usando esptool extraemos el firmware original (¡Nunca se sabe para qué puede servir!):

sudo esptool.py --port /dev/ttyUSB0 read_flash 0x00000 0x100000 esp01_backup.bin


Esperamos a que termine y buscamos un firmware que ponerle a nuestro cacharrito. Hemos ido a lo fácil y espurna ya tiene uno compilado que funciona bien, así que descargamos el firmware desde https://github.com/xoseperez/espurna/releases/ , concretamente este (o la versión que haya en el momento que estés leyendo esto):

espurna-1.13.3-generic-esp01s-relay-40.bin

Ahora procedemos a flashearlo de nuevo con esptool.py, así que DESENCHUFAMOS Y VOLVEMOS A ENCHUFAR el programador serie a nuestro PC y ejecutamos el siguiente comando:

sudo esptool.py --port /dev/ttyUSB0 write_flash --flash_size 1MB --flash_mode dout 0x00000 espurna-1.13.3-generic-esp01s-relay-40.bin
Con esto comenzará a flashearse nuestro ESP01.


Una vez terminado el proceso, desenchufamos el ESP01 del programador, lo enchufamos en la placa con su relé y lo alimentamos a 5V:


Una vez conectada la fuente de alimentación, pulsamos el botón reset y ya debería activarse la WiFi del espurna para configurar todo. Está pendiente un minitutorial de esto, pero podéis ver las instrucciones oficiales que están bastante claras: https://github.com/xoseperez/espurna/wiki/Configuration#first-boot

Finalmente, activamos la integración con HomeAssistant y MQTT:



Configuramos los detalles en HomeAssistant, dentro del bloque switch:


Reiniciamos HomeAssistant y listo!


Si tenéis cualquier duda preguntad en los comentarios. Un saludo!