Tutorial Raspberry Pi - GPIO y MQTT (Parte 1)

Tutorial Raspberry Pi - GPIO y MQTT (Parte 1)

En el  tutorial Raspberry Pi – GPIO [parte 1]: control de un LED, de Mario, nos enseñaba cómo controlar un LED conectado a la Raspberry Pi. En este tutorial me he propuesto dar un paso más y para ello vamos a controlar dicho LED desde otro terminal haciendo uso del protocolo MQTT.  Si no sabes qué es MQTT puedes verlo en mi anterior entrada: ¿Qúe es MQTT?

En este caso voy a usar mi PC como broker. Yo tengo instalado Ubuntu y vamos a usar la aplicación Mosquitto como broker y cliente. Para instalarlo solo es necesario ejecutar:

$ sudo apt-get update $ sudo apt-get install mosquitto $ sudo apt-get install mosquitto-clients

Con esto ya lo tenemos instalado. Para instalarlo en cualquier otro sistema operativo podemos consultar cómo hacerlo en la web de Mosquitto.

Para instalarlo en la Raspberry Pi, solo nos hace falta el cliente. Por lo tanto ejecutamos lo siguiente:

$ sudo apt-get update $ sudo apt-get install mosquitto-clients

Con esto ya tenemos todo lo necesario para hacer funcionar la comunicación. Antes de controlar ningún LED, vamos a comprobar la conexión. Ambos dispositivos los tendremos conectados a la misma red. De esta forma si en la Raspberry, por ejemplo, nos subscribimos a una conexión con topic "GPIO" y como host ponemos la dirección IP de nuestro ordenador donde hemos instalado el Broker, tenemos que ejecutar:

$ mosquitto_sub -d -h 192.168.112.129 -t "GPIO"

Donde:

  • -d: indica depuración (debug). Esto hace que podamos ver más detallados los mensajes que recibe.
  • -h: indica el broker (host). En el caso de que el servidor estuviera en otra máquina solo sería necesario cambiar localhost por su dirección IP.
  • -t: indica el topic.

Una vez ejecutado podemos ver que la consola queda bloqueada a la espera de mensajes con ese topic. Ahora podemos enviar mensajes desde el ordenador a la Raspberry de la siguiente forma:

$ mosquitto_pub -h 192.168.112.129 -t "GPIO" -m "Mi primer mensaje usando MQTT"

Con esto podemos comprobar que la comunicación entre ambos es correcta y vemos que aparecen más mensajes. Esto se debe a que hemos puesto la suscripción en modo depuración y aparecen todos los mensajes que se envía con el broker para mantener activa la conexión:

MQTTTutorial

Ahora llegó el momento de controlar un LED, para ello estamos en el punto del tutorial de Mario en el que puedes controlar el LED usando los comandos:

$ echo 1 > /sys/class/gpio/gpio17/value $ echo 0 > /sys/class/gpio/gpio17/valueA continuación nos suscribimos desde la Raspberry de nuevo al mismo topic pero quitando la opción de depuración: $ mosquitto_sub -h 192.168.112.129 -t "GPIO" Ahora si enviamos desde el Ordenador '1' o '0' nos aparecerán en el terminal de la Raspberry Pi, y aquí esta la clave lo que queremos es escribir estos '1' o '0' en el fichero "/sys/class/gpio/gpio17/value" para ello hacemos lo siguiente: $ mosquitto_sub -h 192.168.112.129 -t "GPIO" > /sys/class/gpio/gpio17/valueEl operador '>' lo que hace es redireccionar lo que devolvería el comando por pantalla a otro fichero, en nuestro caso el fichero "value". Y ahora publicamos los '1' o '0' desde otra máquina y ya podemos apagar y encender el LED: $ mosquitto_pub -h 192.168.112.129 -t "GPIO" -m "1" $ mosquitto_pub -h 192.168.112.129 -t "GPIO" -m "0"En mi siguiente tutorial quitaremos la limitación de que ambos dispositivos estén en la misma red, usando para ello un broker online, y también aprenderemos cómo mandar periódicamente datos desde la Raspberry Pi. Espero que os haya gustado y os sea útil. Cualquier duda escribirla en los comentarios y responderé lo antes posible.