ESP32-Cam: Subir fotos a Google Drive

En el articulo anterior sobre el ESP32-CAM vimos cuales son los primeros pasos para comenzar a utilizarlo y como obtener imágenes desde el dispositivo con un sencillo script en Python; en esta ocasión veremos como tomar fotos y subirlos a una carpeta de Google Drive de manera de que nos sirva de punto de partida para otras aplicaciones.

El primer paso consiste en utilizar el script de Google para construir un sencillo programa que reciba la imagen y la almacene dentro de una carpeta determinada, para ello debemos ir a Google Drive – Nuevo – Más – Google Apps Scripts

Se va a presentar un editor para que escribamos el código como el siguiente::

Reemplazaremos el contenido total por el siguiente Reem:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function doPost(e) {
  var data = Utilities.base64Decode(e.parameters.data);
  var nombreArchivo = Utilities.formatDate(new Date(), "GMT-3", "yyyyMMdd_HHmmss")+".jpg";
  var blob = Utilities.newBlob(data, e.parameters.mimetype, nombreArchivo );
 
 
  var folder, folders = DriveApp.getFoldersByName("ESP32-CAM");
  if (folders.hasNext()) {
    folder = folders.next();
  } else {
    folder = DriveApp.createFolder("ESP32-CAM");
  }
  var file = folder.createFile(blob);
 
  return ContentService.createTextOutput("Completo.")
}

El programa lo que hace es recibir tres parámetros:
1. La data en si, que consiste en la imagen, codificada en base64
2. El tipo de dato que se envía, en este caso sera image/jpeg
3. También recibe el nombre del archivo, aunque no lo utilizamos porque tomamos la fecha y hora para darle el nombre, de manera que quede organizado.

El paso siguiente es guardar el script y publicarlo como aplicación web, esto ultimo lo hacemos desde Publicar – Implementar como aplicación web; debemos elegir que se ejecute como nuestro usuario y que cualquier persona incluso los anónimos tengan acceso a la aplicación; luego confirmamos las opciones que se nos presenta.

En la ultima opción Google nos mostrar una url donde estará publicada nuestra aplicación; debemos copiar esta url, la utilizaremos en el programa del ESP32-CAM.

La url provista tendra el siguiente formato:

https://script.google.com/macros/s/XXXXXXXXXXXXXX/exec

Donde las XXXXXXXXXXXXXX serán reemplazadas por una secuencia alfanumérica que identifica a la aplicación.

En este punto estamos listos para cargar el programa en el ESP32-CAM, crearemos un nuevo programa con el IDE de Arduino llamado ESP32-CAM_Drive, de manera que nos cree la carpeta donde esta el archivo ESP32-CAM_Drive .ino; en dicha carpeta copiaremos los archivos Base64.cpp y Base64.h.

Dentro del archivo ESP32-CAM_Drive.ino al comienzo debemos reemplazar tres parámetros importantes: el nombre y contraseña de la red WiFiy la url del script que creamos anteriormente.


1
2
3
const char* ssid     = "SSID";   //your network SSID
const char* password = "PASSWORD";   //your network password
String myScript = "/macros/s/XXXXXXXXXXXXXX/exec";    //Replace with your own url

La lineas anteriores debemos reemplazar el código por los propios.

Para cargar el programa puede repasar el articulo anterior o ver video. Luego que se cargue el programa, desconectamos el GND de IO0 y reiniciamos el ESP32, al cabo de unos instantes se conectara a la red inalambrica, obtendra la foto y la subira al Drive, si vemos en el Monitor serie veremos algo similar a esto:

El programa creara una carpeta llamada ESP32-CAM dentro de Google Drive y en la misma guardara las imagenes, si revisamos la carpeta tendremos las fotos que saco el dispositivo:

La foto del Nano Osciloscopio.

Pueden encontrar el repositorio en GitHub.

MQTT a Excel

Un inconveniente que me suelo encontrar al trabajar con sensores remotos es el hecho de monitorear las mediciones y recolectar los datos de forma sencilla. Si bien existen herramientas geniales como ThingSpeak que nos permiten ver los datos en un gráfico; muchas veces trabajamos con equipos que solo implementan un protocolo MQTT y lo necesitamos para operar.

Para ello arme un pequeño programa en Python que permite conectarse a un servidor broker, suscribirse a uno o mas tópicos del servidor e ir registrando en una planilla de cálculo os datos de estos dispositivos remotos.

Además del nombre del servidor, toma el nombre con el que se va a guardar el archivo Excel y la cantidad de registros que deseamos almacenar; si no indicamos este ultimo parámetro la librería solo tomara 10 registros.

Serán los primeros 10 que lleguen, es decir si le indicamos que se suscriba a dos tópicos: TOPIC1 y TOPIC2, y recibimos 9 mensajes de TOPIC1 y solo 1 de TOPIC2 esos serán los 10 registros que se almacenaran en la planilla.

El link al repositorio es el siguiente:
https://github.com/gsampallo/mqtt2excel

Antes de comenzar a utilizarlo será necesario tener instalado Python en la pc además de dos librerías:

1. xlwt Para el manejo de la planilla de cálculo, se instala por medio de pip:

pip install xlwt

2. paho.mqtt brinda la posibilidad de conectarnos a un servidor broker, también lo instalamos por medio de pip:

pip install paho.mqtt

Luego que se haya completado el paso anterior, podemos editar el archivo example.py para adecuarlo a nuestro uso; solo necesitamos modificar en dos puntos:


1
2
3
4
5
6
7
8
9
10
11
12
13
from MQTT2Excel import MQTT2Excel

broker_server = "AQUI INDICAMOS EL SERVIDOR BROKER"

m2e = MQTT2Excel(broker_server,"demo1.xls")

m2e.setRecordsNumber(50) #indicamos que registre 50 lecturas (la suma de todos los mensajes de los topicos)

m2e.addTopics("TOPICO1") #Indicamos el nombre del topico al que queremos suscribirnos
# Si tuvieramos mas simplemente agregamos una linea con el nombre del segundo topico
# m2e.addTopics("TOPICO2")

m2e.start()

De esta forma el programa tomara 50 lecturas y las almacenara en una planilla excel junto con la fecha y hora en que fue recibido el mensaje.

Luego simplemente es cuestion de ejecutar el programa example.py (pueden cambiarle el nombre si lo desean)

Comenzaremos a ver los datos que llegan desde el dispositivo.

Al cabo de un tiempo tendremos completos los 50 registros (salvo que cambiemos la cantidad que requerimos) y el programa se detendrá.

En ese punto ya dispondremos de nuestro archivo excel.

Como se puede apreciar es bastante sencillo de utilizar, quedan algunas cosas por pulir por ejemplo parametrizar si el servidor broker requiere un usuario y clave (aunque solo basta agregar dos lineas); y llegado el caso detectar el tipo de dato que se recibe para formatear la celda, pero no es un problema mayor en mi caso.