ESP32 con Google Cloud

Objetivo

El objetivo del tutorial es mostrar como se mandan a Google Cloud los datos de temperatura y humedad usando un sensor DHT11 y una tarjeta ESP32 NodeMCU

Referencias

Getting started with the IoT Core Embedded C SDK
Google Cloud IoT Core ESP32: Send data to Google IoT Platform using MQTT

Recomiendo usar la mismas versiones de la siguiente librerias
Tools -> Board Manager del Arduino IDE estoy la version 1.0.4 de esp32 (https://github.com/espressif/arduino-esp32)

Manage Libraries
DHT sensor library de Adafruit 1.4.2 (https://github.com/adafruit/DHT-sensor-library)
Google Cloud IoT Core JWT 1.1.11
MQTT by Joel Gaehwiler 2.5.0 (https://github.com/256dpi/arduino-mqtt)

Para leer la temperatura conectamos el DHT11 al puerto 16 este es el codigo que voy a usar:

#include "DHT.h"
#define DHT11PIN 16

DHT dht(DHT11PIN, DHT11);

void setup() {
  Serial.begin(115200);
  dht.begin();

}

void loop() {
  delay(6000);
  float humedad = dht.readHumidity();
  float temperatura = dht.readTemperature();

  Serial.println(String(temperatura) + ", " + String(humedad));
}

Crear el proyecto en Google Cloud

Una vez creado el proyecto en Google Cloud el cual voy a llamar «sensor-iot» voy a crear las claves

openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem
openssl ec -in ec_private.pem -pubout -out ec_public.pem 

Desde la consola seteo el nuevo proyecto como principal y creo el tópico y la correspondiente suscripción

gcloud config set project sensor-iot
gcloud pubsub topics create sensores
gcloud pubsub subscriptions create data --topic=sensores

Creo el registro y el dispositivo en IoT Core

gcloud iot registries create sensores-iot --region=us-central1 --event-notification-config=topic=sensores
gcloud iot devices create nodemcu --region=us-central1 --registry=sensores-iot --public-key path=ec_public.pem,type=es256

Para crear la función cloud que va a leer del tópico primero bajo el repositorio de github

https://github.com/arandi-ar/sensorhyt

Luego tengo habilitar Cloud Build API, y correr la linea a continuación

gcloud functions deploy escribir_data --runtime=python39 --source=functions/ --entry-point=sensor_pubsub --trigger-topic=sensores

Por ultimo en la linea de comando vamos a crear un archivo donde vamos a guardar los datos del dispositivo

touch data.txt
gsutil mb gs://sensor-hyt
gsutil mv data.txt gs://sensor-hyt/

Programando el dispositivo

Parado en el directorio raiz ejecutamos el siguiente comando

openssl ec -in ec_private.pem -noout -text

Cambiamos el archivo config.demo.h por config.h y reemplazamos por nuestra informacion

Subimos el codigo a la tarjeta y listo