lunes, 27 de febrero de 2017

Flash-ear un ESP-01

Esta entrada va ser un pequeño manual de como cambiar el firmware del famoso ESP-01 que es una de las muchas formas que tiene de presentarse el ESP8266. Este pequeño módulo nos sirve para dar conectividad wifi a nuestros proyectos con Arduino, normalmente acompañará al famoso Arduino Uno.

Esta entrada viene motivada por algunos problemas que me he encontrado a la hora de trabajar con este módulo, en concreto mi experiencia fué que hice algunas pruebas para un curso con un módulo y cuando compré diez unidades más ninguno de lo nuevos funcionaba con los programas que había hecho. Mi primera reacción fué la de pensar que estaban mal, pero ¿diez módulos estropeados? me parecía increíble con lo que comenzé la odisea de ver que es lo que estaba mal. No voy a relatar toda la experiencia pero en mi caso el problema era que los módulos que había comprado traían un firmware diferente al que yo necesitaba, que era, el que hace que el módulo responda a los comandos AT. 

En el camino encontré esta página en la que se pueden encontrar los firmwares para estos módulos. De las que he encontrado es la que a mi parecer tiene los firmwares más actualizados. La página en cuestión es esta de electrodragon. Ahí podréis elegir el que más os convenga a cada uno. 

Bueno, entrando en harina lo que vamos a necesitar para hacer esto es lo siguiente, un conversor de USB a TTL, que si además es capaz de dar una tensión de alimentación de 3,3V mejor que mejor. Esta tensión de 3,3V es necesaria ya que el módulo ESP-01 funciona a esta tensión de alimentación y en caso de el conversor nos tenga la posibilidad de alimentar al módulo a esta tensión tendremos que hacernos nosotros mismos este cambio de tensión mediante un regulador lineal.  En mi caso el que yo utilizo es este:


USB-TTL
Ahora nos queda averiguar cuales son las conexiones que tenemos que hacer para tener todo preparado. Para ello tenemos que saber que son cada una de las patas del ESP-01, para ello os dejo esta imagen:


Conexiones ESP-01

la conexiones que vamos a hacer son las siguientes:

  • Pin Tx con el RX USB.
  • Pin RX con el TX USB.
  • CH_PD lo conectamos a 3,3V.
  • GPIO0 lo conectamos a masa.
  • GND a masa.
  • Y Vcc a 3,3V.
El programa que vamos a utilizar para llevar a cabo el flasheo es ESP8266Flasher. Os dejo una captura de pantalla del mismo:

ESP8266Flasher
Pinchando en Bin podremos elegir el fichero binario para cambiar el firmware de nuestro ESP8266 elegimos el COM correspondiente a nuestro conversor y procedemos a darle a download. Si todo está correcto empezará el proceso. Una vez haya acabado el proceso lo único que tenemos que hacer es reiniciar el modulo, simplemente apagandolo y todo estará listo para que podamos hacer conexiones mediante comandos AT con el ESP8266.

Para que no tengáis que andar buceando por internet buscando el software y el binario necesario os dejo un enlace a una carpeta compartida en la que os pongo el último firmware que yo he utilizado.

Espero que os sea de ayuda, y nos vemos en la siguiente entrada.

Un Saludo.

Josema Fernandez.


martes, 20 de diciembre de 2016

Configuración del módulo NodeMCU

El objetivo de este artículo es explicar de la manera más sencilla posible el contenido de los ficheros de configuración y de ejecución necesarios en Arduino IDE para el correcto funcionamiento de dispositivos como puede ser un LED o un sensor de temperatura. Para ello se ha hecho uso del módulo NodeMCU, el cual es una plataforma de código abierto del IoT y que incluye un firmware que trabaja en el ESP8266 mediante Wifi.
Antes de todo, hay que mencionar que para este proyecto se ha hecho uso de una Raspberry PI con la que se mantendrá comunicada la placa NodeMCU, pero en este artículo no se va a explicar cómo se debe configurar la Raspberry PI. Esto se debe a que hay muchos artículos y documentos muy útiles para ello y por lo tanto se ha decidido utilizar este artículo solamente para explicar la configuración del módulo NodeMCU. El siguiente enlace os llevará a unos video-tutoriales realizados por Tknika, en los que se explica perfectamente cómo configurar la Raspberry PI:
Por otro lado, en el artículo “MQTT y configuración de Homie-ESP8266” se explicó todo lo necesario para poder utilizar la librería del microcontrolador ESP8266 en Arduino IDE, la cual será imprescindible para la configuración del módulo mencionado. Por lo tanto, una vez estén instaladas las librerías que le correspondan, se dispondrá a la creación del archivo de configuración, que estará compuesto por varias funciones.
Antes de empezar a crear las funciones, deben incluirse las librerías ArduinoJson.h y FS.h, ya que serán necesarias para los parámetros que hay que configurar. El archivo de configuración tendrá tres funciones principales: saveConfig, setup y loop. El primero de los tres devolverá un dato de tipo booleano, y los otros dos no devolverán ningún dato, por lo que se dice que son de tipo void.
En cuanto a la función de saveConfig (se le puede llamar de cualquier otra manera), se podría dividir en tres partes. La primera sería la de reservar espacio en la memoria y para ello se utiliza el comando StaticJsonBuffer seguido del número de bytes que se quiera usar entre < >.
En la segunda parte se construyen los objetos que se guardarán en la memoria reservada, utilizando para ello el comando JsonObject. Hay que configurar varios objetos y cada uno de ellos se crea utilizando el comando mencionado seguido de ‘&’ y la palabra a la que haga referencia. Lo primero que se suele configurar es el mismo dispositivo, utilizando para ello la palabra json e introduciendo el nombre y el ID del dispositivo que se vaya a usar. El nombre que se le otorgue al dispositivo será el que haga referencia al segundo nivel del topic. En este caso se ha decidido llamarlo “NodeMCU” y es muy importante acordarse de que esta característica solo se configurará una vez, es decir, que a pesar de usar varios elementos, como un LED y un sensor de temperatura, el dispositivo NodeMCU se configurará una única vez. En la siguiente imagen se puede observar todo lo explicado hasta el momento.
Archivo de configuración: memoria
A continuación hay que configurar la red Wifi a la que se va a conectar, y para ello se deben insertar el nombre y la contraseña de la misma, tal y como se ve en la  imagen.
Archivo de configuración: Wifi
Una vez configurado el Wifi, hay que configurar la red MQTT con la que se vaya a trabajar. El dato más importante en este apartado es la dirección IP de la red. Lo demás puede configurarse tal y como aparece en la imagen.
Archivo de configuración: MQTT
En la última línea se puede leer “base_topic”, el cual tal y como dice su nombre, hace referencia a la base o al primer nivel del topic que se va a utilizar. Normalmente se suele utilizar la palabra devices para la base del topic, pero se le puede asignar cualquier otro nombre.
Lo siguiente es la configuración del OTA, el cual se utiliza para cargar el firmware en la placa NodeMCU mediante la conexión Wifi previamente configurada.
Archivo de configuración: OTA
En la imagen se muestra como debe ser configurado el apartado del OTA. Además, también se puede apreciar una última línea a partir de la cual se envía todo lo configurado al Serial. Ese sería el tercer apartado de la función saveConfig, el de enviar la información configurada.
Por último, faltaría incluir una condición, para que la función devuelva un dato de tipo booleano tal y como se ha mencionado antes. Para ello es necesario crear una variable de tipo archivo (file) para abrir el archivo de configuración que ofrece la librería ArduinoJson.
Archivo de configuración: Abrir archivo de configuración de Json
Tal y como se ve en la imagen, si el archivo no se abre, la función devolverá un false, y si se abre, devolverá un true.
Por otro lado, está la función setup, la cual es del tipo void ya que no tiene que devolver ningún tipo de dato. Esta función se encargará de montar el sistema de archivos (file systems) en el módulo y de llamar a la función anterior (saveConfig) para que esta se ejecute, como se ve en la imagen.
Archivo de configuración: Función setup
Por último, la función loop no realizará ninguna acción en el archivo de configuración, ya que tan solo se trata de un archivo para cargar los parámetros necesarios en el módulo NodeMCU para crear la conexión.
Una vez terminado el archivo de configuración, hay que crear el archivo de ejecución, el cual será el que permitirá el intercambio de datos con el módulo NodeMCU. Este archivo, al igual que el de configuración, estará compuesto por varias funciones, y esas funciones estarán compuestas en parte por comandos del convenio Homie, el cual fue creado por Marvin Roger. Se trata de un convenio de MQTT para el IoT, y en el siguiente enlace encontraréis más información sobre ello:
Antes de configurar las diferentes funciones debe incluirse la librería de Homie para poder utilizar las funciones que proporciona. Además, hay que configurar el elemento que se vaya a utilizar, como por ejemplo un LED, y para ello se utiliza el comando “HomieNode” de Homie, indicando el nombre con el que se va a identificar el nodo, tal y como se aprecia en la siguiente imagen.
Archivo de ejecución: Definir nodo
En el caso de configurar un LED, se podría utilizar por ejemplo el nombre “ledNode”, el ID podría ser “led”, el cual hará referencia al tercer nivel del topic, y sería del tipo “switch” ya que tendrá dos estados posibles; encendido o apagado.
Hay que tener en cuenta que hay que crear un nodo diferente por cada elemento que se quiera configurar.
La primera función que se va a crear, es la del handler, la cual se encargará de manejar los cambios que sufran las propiedades de los nodos. Por lo tanto, hay que crear una función handler por cada nodo que se vaya a utilizar. Para crear esta función, se indicará que tipo de dato se quiere obtener seguido del nombre que se le dará a la función handler, tal y como se ve en la imagen.
Archivo de ejecución: Función Handler
En este caso, se quiere obtener un dato de tipo booleano y es por ello que se utiliza la expresión bool. De esa manera la función queda definida, y solo quedará escribir los comandos que sean necesarios para que el sistema funcione como se requiera. Para ello se utilizará el espacio entre las dos llaves. En ese espacio será donde se tengan que definir las propiedades de los nodos, y para ello se utiliza el comando “Homie.setNodeProperty”.
Archivo de ejecución: Propiedades de los nodos
En la imagen se muestra el formato que debe seguir el comando mencionado. El nombre del nodo será el que se ha definido anteriormente mediante “HomieNode”; el nombre de la propiedad puede ser cualquiera, teniendo en cuenta que la expresión elegida hará referencia al cuarto nivel del topic; la variable solo será necesaria si se quiere enviar algún dato, como por ejemplo en el caso de medir la temperatura; y el estado hace referencia al estado en el que se encontrará el nodo del que se esté haciendo uso; true o false.
Además de las propiedades de los nodos, en ese espacio también habrá que definir las condiciones que se tendrán que cumplir para que los dispositivos respondan de una manera o de otra. Pero eso dependerá de cada dispositivo, ya que cada uno tiene sus propias funciones y por lo tanto cada uno necesita un código diferente.
Por otro lado, se creará la función setup, que al igual que en el archivo de configuración, será de tipo void, ya que no debe devolver ningún dato. En este apartado se hará la suscripción al topic creado mediante el comando “nombreNodo.subscribe” y entre paréntesis el nombre de la función handler que se haya utilizado. Este comando se utilizará cuando la comunicación que se quiera establecer con el dispositivo sea asíncrona, es decir cuando se le vaya a cambiar manualmente el valor a una propiedad de un nodo. Eso ocurre en el caso de un LED, el nodo no tiene que hacer nada, se le mandará un mensaje al topic para que cambie su estado y así poder encenderlo o apagarlo.
En cambio, si el nodo es por ejemplo un sensor de temperatura, es decir un dispositivo que envía periódicamente datos de temperatura, se trata de una comunicación síncrona. En este caso, es el mismo módulo el que se encargará de enviar los datos, sin que el usuario tenga que intervenir, y por lo tanto no se puede utilizar el método de suscripción. En estos casos se utiliza el comando “Homie.setLoopFunction”, que se trata de un  mecanismo para que el usuario gestione su propio loop, y entre paréntesis se introduce el nombre de la función handler.
No hay que olvidarse del comando “Homie.registerNode” que se encargará de registrar el nodo creado anteriormente para su correcto funcionamiento. Además, hace falta un último comando que se encargará de inicializar los dispositivos y de establecer los valores iniciales de las variables: “Homie.setup”.
Por último, la función loop será la encargada de ejecutar el programa y lo hará de manera cíclica mientras no se le indique lo contrario. De esa manera el programa será capaz de cambiar sus valores y de responder correctamente. Para ello se utiliza el comando “Homie.loop”.
(Para cualquier duda sobre los comandos de Homie, podéis volver al enlace de Marvin Roger).
Una vez que los dos archivos estén configurados, únicamente hará falta subirlos al módulo NodeMCU para que el sistema responda correctamente. Por lo tanto, se podrá por ejemplo cambiar el estado del LED desde MQTTLens, ya que se ha creado un topic para ello, y también se podrá visualizar la temperatura medida por el sensor en cada instante.
Por último, sería de gran ayuda crear los ítems correspondientes a los elementos utilizados e incorporarlos en el sitemap desde openHAB para tener otro medio por el que controlarlos o visualizarlos.
Alazne Martínez Aguinaga

miércoles, 23 de noviembre de 2016

MQTT y configuración de Homie-ESP8266

En las siguientes líneas se va a explicar lo que es una red MQTT, en qué se basa la norma homie y cómo debe instalarse todo lo necesario para la configuración de ESP8266 mediante Arduino IDE.
MQTT es el protocolo IP más usado en el Internet de las Cosas (IoT). MQTT dispone de un servidor (bróker) y una serie de clientes que se conectarán al bróker para poder intercambiar mensajes. Cuando se habla del bróker, se quiere referir al servidor central al que se conectan los clientes, y que a su vez es el encargado de redirigir los mensajes al cliente adecuado.
MQTT usa el método Publish/Subscribe para el intercambio de mensajes. Un cliente no envía un dato directamente a otro cliente, sino que lo publica en la red MQTT y los clientes interesados en recibir ese mensaje, es decir, los clientes que estén suscritos a ese mensaje, serán notificados automáticamente por el bróker. Por lo tanto, el hecho de enviar un mensaje a la red MQTT es lo que se denomina publicar (publish) un mensaje. Y en cambio, decirle al bróker que se está interesado en un mensaje se denomina suscribirse (subscribe) a un mensaje.
Las estructuras que se utilizan para publicar son los topics y por lo tanto es a los que se tiene que suscribir para poder obtener la información que este contenga.
Para poder entender mejor el funcionamiento de MQTT se hace uso de la aplicación MQTTLens que se encarga de la conexión con el bróker para facilitar la suscripción y la publicación en un topic.
Por otro lado, hay que mencionar que homie es una “norma” para intentar establecer un criterio en los topics que se vayan a usar al crear los sensores que se utilicen en MQTT. Homie está basado en estados, lo que significa que por ejemplo, al utilizar un sensor, no se le ordena que se encienda, sino que se le dice que ponga su estado de on en modo true. Es un método que se complementa perfectamente con MQTT.
A pesar de que homie es una representación teórica, también se ha creado una librería para el microcontrolador ESP8266 que implementa todo lo definido en la norma homie-ESP8266 y que es la que se va a explicar a continuación ya que es necesaria para la utilización de Arduino IDE.
Para poder utilizar homie-ESP8266 es necesario disponer de una placa ESP8266. Por supuesto no hay que olvidarse de obtener el software Arduino IDE, el cual debe ser como mínimo la versión 2.3.0.
Placa ESP8266
Software Arduino IDE
A continuación se explicarán los pasos que deben seguirse para la correcta instalación de homie para ESP8266:
Lo primero de todo es descargarse la librería de homie para Arduino IDE desde ‘github’. Es muy importante que sea la versión 1.5, y no la última actualización ya que si es así, no será posible cargar los programas necesarios en el ESP8266.
Por ello, antes de instalar esta librería es recomendable ir a la carpeta en la que están guardadas las librerías de Arduino IDE, la cual se crea al instalar Arduino IDE en el ordenador, para comprobar que no existe ninguna librería de homie que sea de una versión mayor a la 1.5. De lo contrario, debe ser eliminada.
Una vez hecha la comprobación y descargada la librería, debe ser cargada en Arduino IDE desde la pestaña programa/incluir librería/añadir librería .zip.
Además de esa librería, homie-ESP8266 depende de otras cuatro librerías que también hay que cargar: ArduinoJson, Bounce2, ESPAsyncTCP y AsyncMqttClient. Algunas de ellas pueden encontrarse disponibles en Arduino IDE en el apartado programa/incluir librería/gestionar librerías, y por lo tanto solo habrá que buscarlas e instalarlas. Las que no se encuentren en Arduino IDE deben descargarse y cargarse tal y como se ha hecho con la librería de homie. Al descargar alguno de estos zips puede que al guardarse aparezca el término “-master” en el nombre, y debe eliminarse ya que sino Arduino IDE no reconocerá la librería y no podrá cargarla.
Descarga de las librerías de Arduino IDE: eliminar “-master”
Una vez se hayan cargado todas las librerías necesarias, Arduino IDE estará preparado para ejecutar los programas necesarios para poder controlar el ESP8266 desde MQTTLens. Esta última es una aplicación de google chrome y se puede descargar desde el navegador.
En cuanto a los programas necesarios, por un lado se necesitará un programa de configuración que contenga los datos del Wifi y del topic de MQTTLens que se quiera crear. Eso será lo primero que debe subirse al ESP8266 para asegurar la conexión entre el dispositivo y el ordenador. Por otro lado, hay que crear un programa para poder controlarlo y a continuación subirlo. Ambos programas se crearán en Arduino IDE y se subirán desde el mismo.
Para crear el topic de MQTTLens hay que tener varias cosas en cuenta. La primera es que los topics son estructuras que se ordenan de manera jerárquica al igual que las carpetas de Linux. Eso quiere decir que están organizados por niveles y cada uno hace referencia a una categoría diferente.
El primer nivel en cualquier dispositivo estará compuesto por la palabra devices. El segundo nivel hace referencia al nombre que se le haya otorgado al dispositivo homie. El tercer nivel corresponde a los nodos que se hayan definido para el dispositivo seleccionado. Por último, el cuarto nivel es para las propiedades de los nodos mencionados.
En ese último nivel, en el que contiene las propiedades, es donde se publicarán los datos deseados y donde se tendrá que suscribir para poder obtener la información. Pero también hay que tener en cuenta que si se trata de propiedades que son de escritura, como en el caso de un relé, hay que añadirle un quinto nivel con la palabra set, que será a donde se mande el nuevo valor, por ejemplo un true para que se encienda. De esa manera el topic queda definido para poder suscribirse y publicar lo que se requiera mediante MQTTLens.
El siguiente sería un ejemplo de cómo debe estar organizado un topic para controlar por ejemplo el encendido y el apagado de un LED:
En el caso de llamar al dispositivo led_test y el nodo que se vaya a utilizar sea led, siendo su propiedad o estado on, la estructura quedaría: devices/led_test/led/on/set. El último set, tal y como se ha explicado anteriormente, hace referencia al nuevo valor que se le quiera dar. Ese es el directorio al que habría que suscribirse mediante MQTTLens, y en el apartado de publicar se escribiría true o false en función de la acción que se quiera realizar.
Aplicación MQTTLens
Por último, cabe mencionar que sería recomendable aparte de controlar el LED mediante ESP8266, crear un ítem en openHAB y controlarlo desde un sitemap ya que a lo mejor resulta más visual. Y además de esa manera se dispondría de dos formas de controlar el LED.
Alazne Martínez Aguinaga

martes, 15 de marzo de 2016

eOntzia

Mikel Díez, Jonathan Arizala y Medhi Amara, en colaboración con 5 estudiantes más de otros centros de enseñanza, hemos creado este proyecto pensado para mejorar la gestión de los residuos, y en consecuencia, la sostenibilidad y el medio ambiente. Ongi etorri eOntzia!!


Logo de eOntzia

Éste es vídeo explicativo del proyecto. 




lunes, 22 de febrero de 2016

FURGOTIKA



Somos el grupo 1 de la clase de segundo de mantenimiento electrónico de La Salle Berrozpe y en las siguientes líneas vamos a dar una pequeña explicación sobre nuestro proyecto.
Nuestro  proyecto consistirá en hacer una centralita para vehículos camperizados, sobretodo furgonetas camperizadas, ya que ha habido un considerable aumento de estas furgonetas a nivel de Europa.
Los camper son vehículos derivados de furgonetas para uso campista (de ahí la denominación).

jueves, 28 de enero de 2016

Hovercraft

El hovercraft, más conocido como aerodeslizador, es un proyecto propuesto en clase después de haber hecho un Brainstorming, es decir, una lluvia de ideas. Para dicha lluvia de ideas necesitábamos pensar y buscar ideas para así, poder exponer todas las que nos hayan llamado la atención en clase.


En nuestro caso pensamos directamente un proyecto que nos gustase a todos los del grupo para poder exponerlo en clase. Primero nos llamó mucho la atención un robot a escala de wall-e, este robot tiene una programación la cual le permite hablar, entender preguntas y contestar a ellas, moverse, e incluso investigar los espacios por su propia cuenta. Para poder hacerlo teníamos que comprar el juguete y simplemente hacer una placa, integrarla y programar, por lo que decidimos que no era algo que nos motivarse realmente a hacerlo, ya que tendríamos que estar la mayor parte del proyecto programando, por lo que dejamos de lado esta idea y seguimos buscando nuevos proyectos.


Encontramos un par de videos de coches RC, radiocontrol, que es lo más común que se suele hacer como proyectos, coches con control a distancia. Seguimos mirando en el mismo canal de la persona que tenía los coches y barcos RC y encontramos un vídeo de un aerodeslizador. Dicho vídeo nos llamó muchísimo la atención, por lo que seguimos investigando sólo sobre este proyecto.




lunes, 25 de enero de 2016

E-Ontzia


  La evolución del ser humano ha ido de la mano de la evolución tecnológica. Las personas nos hemos ayudado de máquinas y de la tecnología contemporánea para facilitar las tareas, producir más, y en general, para vivir mejor. A día de hoy, en pleno siglo XXI, la revolución tecnológica que la sociedad ha experimentado en estas dos últimas décadas ha sido la mayor de la historia si se compara al resto de épocas. Internet, entre otras ha sido el pilar fundamental. La red, todos estamos conectados a ella, tanto personas como máquinas, Internet ha sido la clave de esta revolución y son muchas las aplicaciones que podemos obtener de la nube.

  Como decimos, muchas de estas tecnologías se han aplicado a sectores como sanidad, industria, educación, infraestructuras, ocio, etc. revolucionándolas de tal forma que los límites que antes se creían infranqueables, ahora han quedado atrás. Por ejemplo, a la hora de construir una autopista, los topógrafos estudiaban el terreno, la vía aérea ha sido muy empleada para cuadricular terrenos, y normalmente se ha empleado el uso de helicópteros, con su consiguiente gasto. Ahora, un simple dron dotado de una cámara puede hacer ese trabajo, y de una forma más eficiente. La tecnología ayuda a la eficiencia, de esta forma somos más competitivos y como resultado, la progresión del avance en cualquier campo es mayor.