77 - El IoT, Python, la ESP32 y la maravilla de internet
Acercate al IoT con Python, MicroPython y la ESP32. En este podcast te contaré una aproximación muy interesante al internet de las cosas por 3 euros.
El tema de hoy me tiene especialmente secuestrado. Uno de los aspectos mas interesantes de internet es la posibilidad de colaborar con otras personas. Y muchos, puede ser que incluso tu, te hayas puesto en contacto, para comentarme algo, corregirme o para lo que consideres. Y este aspecto es uno de los que me motiva para llevar adelante este proyecto. Que alguien como tu se ponga en contacto conmigo… es algo sinceramente brutal.
Y todo esto te lo cuento porque a raíz del Podcast 72 sobre el internet de las cosas en tu Rasbperry Pi, a través de Telegram, Javier, se puso en contacto para comentarme sobre dos placas. Las placas a las que se refería Javier son la esp8266
y la esp32
. Son placas realmente económicas, pudiendo encontrar, algunas de ellas por precios que pueden llegar a los 3 euros. Me comentó que estas placas se pueden programar con Arduino, y cuentan con WiFi, GPio, DAC, bluetooth.
Busqué información sobre la esp32
que esa la sucesora de la anterior, y a parte de las interesantes características que me adelantó Javier, además del precio, encontré que se podían trabajar con Python… Inmediatamente pedí un pack de dos en Amazon, que me costó unos 15 euros, por el ansia viva que me consumía. No podía esperar 3 semanas a que me la trajera Alli Express. Quería tenerla ya en mis manos, quería probarla, quería Pythonizarla,
Y solo te digo una cosa, menudo vício llevo ahora mismo…. Tan es así, que estoy preparando un tutorial, para exprimir al máximo esta placa, que ha caído en mis manos gracias a Javier. No tengo muy claro, no tengo muy claro cuando saldrá el capítulo de introducción a esta placa, porque, te recuerdo que tenemos en marcha el de script en Bash y a continuación viene el de docker… ya veremos como lo organizo..
El IoT, python, la ESP32 y la maravilla de internet
Antes de meterme en faena, pedirte tu voto para este proyecto, atareao.es en los Open Awards 2019. Si ya has votado, te doy mi mas sincero agradecimiento. Por otro lado, quería comentarte sobre la iniciativa de Pedro MosqueteroWeb.
12 meses 12 causas
En el capítulo 21 del podcast te hablé sobre mi entorno de desarrollo. En él, te comenté que la aplicación que utilizaba, tanto para desarrollar, como para escribir en este sitio, como para otras muchas cosas es Visual Studio Code. Una herramienta implementada por Microsoft, y que últimamente es el ojito derecho de muchos desarrolladores.
En estos últimos meses, tanto en el trabajo como en en lo relacionado a este proyecto, cada vez utilizo mas Vim. La razón para esto, es que para administrar, tanto un servidor, en el trabajo, o una Raspberry para este proyecto, necesito un editor. Y si bien, estaba muy acostumbrado a Nano
, la cuestión, es que en las máquinas del trabajo por defecto está instalado Vim
y en ocasiones Vi
. Así que una cosa ha llevado a la otra.
IoT con Python por un par de euros
Al final este podcast se va a convertir en el podcast de los tres euros, puesto que ya lo he mencionado en varias ocasiones. Ya sea para crear tu propia red virtual o un servidor. Pero, lo cierto es que la ESP320
la puedes encontrar desde un par de euros hasta el precio que quieras.
De hecho tengo pedida una con cámara, que con el envío incluido sale por 7,41 €. Esta va directa a fotografiar a todo el que entra y salga de casa
¿Que me ha llamado la atención de la ESP32?
Además de todas las posibilidades de conexión vía WiFi, los GPio, etc, está la conversión analógica digital y al revés, y sobre, todo, por encima de todas las cosas, Python.
Eso de tener todo el poder de Python en la ESP32 es una cosa que me ha podido.
MicroPython
Antes de nada indicarte que la placa no lleva integrado Python. Es necesario instalar un firmware, que es super sencillo de instalar, y que dejará la placa funcionando con Micro Python.
Efectivamente no es Python, se trata de Micro Python, una versión mas reducida de Python 3.4, pero que trae algunos módulos y librerías que te facilitarán la integración de sensores y otros elementos. Así, trabajar con sensores de temperatura como el DH11 o el DH22 es inmediato. Lo puedes hacer directamente desde la propia placa en pocos segundos.
Una de las principales diferencias entre Python y MicroPython, es que MicroPython está diseñado para trabajar en casi cualquier dispositivo, y eso lo puedes constatar en el hecho de que tan solo necesita de 16 kB de RAM. Si, lo has oído bien, 16 kB de RAM.
MicroPython se ejecuta directamente en el microprocesador. No existe ningún sistema operativo intermedio, ni macOS, ni Windows, ni Linux. Todas las operaciones, y servicios que habitualmente realiza o suministra el sistema operativo, las realiza de forma directa MicrPython. Así, MicroPython tiene un control directo y completo del hardware. Es decir, MicroPython es el sistema operativo.
Lo que yo siempre he querido…
Dado que los dispositivos en los funciona MicroPython pueden llegar a ser muy, pero que muy limitados, MicroPython, no tienen la librería estándar de Python. Dependiendo del dispositivo, llevará unos módulos y otros.
Ahora bien, todas las versiones de MicroPython viene con los módulos necesarios para interactuar con el hardware, los GPIO, y los periféricos.
Sin lugar a dudas, si te gusta cacharrear, y todavía no te has metido en el mundo de la programación, esta es sin duda tu oportunidad, porque vas a aprender un lenguaje de programación en auge, y además vas a poder sacarle todo el partido a este dispositivo.
Comunicándose con la ESP32
Una vez instalado el firmware en la ESP32, el siguiente paso es empezar a trabajar con ella. Esto lo vas a hacer mediante un puerto USB de tu ordenador y la aplicación picocom. Se trata de un emulador de terminal con el que te puedes conectar a la ESP32 a través del puerto USB. La instalación de esta herramienta es realmente sencilla, porque está disponible desde los repositorios oficiales de Ubuntu. Así que con,
sudo apt install picocom
Una vez instalada en tu ordenador, el siguiente paso es acceder al ESP32. Para ello, ejecuta el siguiente comando,
picocom /dev/ttyUSB0 -b115200
REPL
Una ves dentro, te encuentras con REPL. ¿Y que es REPL? Se trata del intérprete interactivo de MicroPython. Que tiene algunas características tan interesantes como,
- autosangrado
- autocompletado
- la posibilidad de detener un proceso en ejecución
- el modo de
pegar
- modo para reiniciar pero sin reiniciar la conexión
- el uso de la variable especial guión bajo
_
que almacena el resultado de la operación anterior - el modo crudo que permite enviar código en Python.
Enviar y recibir archivos a la ESP32
Para enviar y recibir archivos de la ESP32 puedes utilizar ampy. ampy
es una herramienta implementada por Adafruit y que permite interactuar con MicroPython. Para instalarla tienes que utilizar el gestor de paquetes de Python, y es tan sencillo como ejecutar la siguiente instrucción en un terminal,
pip3 install --user adafruit-ampy
Una vez instalado, puedes listar el contenido que hay en el ESP32 una vez conectado, ejecutando la siguiente instrucción,
ampy --port /dev/ttyUSB0 ls
Para subir un archivo a la ESP32 ejecutarás la instrucción,
ampy -p /dev/ttyUSB0 put <archivo>
Y para bajar un archivo, utilizarás,
ampy -p /dev/ttyUSB0 get <archivo>
Conectando al WiFi
La conexión al WiFi para poder exprimir al máximo esta placa, y sin la cual tampoco tendría sentido es realmente sencillo. Yo como no puede ser de otra forma, lo he complicado un poquillo, para dejarlo como a mi me gusta, pero es probable que a ti te aproveche igualmente.
Para eso he creado el archivo, wlan.py
, con el siguiente contenido
import network
class Wlan():
def __init__(self):
self.ssid = ''
self.password = ''
def connect(self):
wlan = network.WLAN(network.STA_IF)
if wlan.isconnected() is True:
print('Already connected')
else:
wlan.active(True)
wlan.connect(self.ssid, self.password)
while wlan.isconnected() is False:
pass
print('Conneccion successful')
print(wlan.ifconfig()[0])
def disconnect(self):
wlan = network.WLAN(network.STA_IF)
if wlan.isconnected():
wlan.disconnect()
print('Disconnected')
@staticmethod
def ip():
wlan = network.WLAN(network.STA_IF)
print(wlan.ifconfig()[0])
@staticmethod
def isconnected():
wlan = network.WLAN(network.STA_IF)
print(wlan.isconnected())
Aquí tienes que indicar la SSID
de tu red, así como la contraseña. Esto es nada mas inicializar la clase.
Lo siguiente es modificar el archivo boot.py
que se encuentra en la ESP32
. Así, este archivo quedará como puedes ver a continuación,
import webrepl
from wlan import Wlan
webrepl.start()
mwlan = Wlan()
mwlan.connect()
Y ya lo tienes conectado a internet… ahora solo queda añadir lo que consideres… pero esto será motivo para un futuro podcast.