Publicar datos a ThingSpeak con MicroPython

En el articulo anterior vimos como leer datos desde un canal publico en ThingSpeak; en esta ocasión nos interesa enviar datos hacia un canal propio.

Desde el punto de vista del hardware, utilizaremos algo muy sencillo: un nodemcu con un sensor analógico de humedad y una pantalla oled.

Como conectar la pantalla oled se cubrió en un video del canal y el sensor de humedad simplemente va conectado al puerto analógico del NodeMCU.

Por supuesto que no calibramos los datos del sensor, solo nos interesa obtener un valor para probar publicar datos.

Luego que hayamos creado el canal en ThingSpeak (basta con registrarnos en el sitio y luego hacer clic en el botón «New Channel» y elegir los campos); ingresamos en el canal y vamos al menu API Keys:

Sobre el borde derecho tendremos un bloque llamado API Request, donde existen varios tipos un request para actualizar el canal (el que utilizaremos), uno para obtener datos del canal, obtener datos de un campo en particular y el estado del canal.

Copiamos la url indicada, sera del siguiente tipo:

https://api.thingspeak.com/update?api_key=4H0IHE2TESPWITGB&field1=0

Crearemos el siguiente programa en MicroPython, que sera el que utilizaremos para actualizar los datos:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from machine import Pin,I2C,ADC
import ssd1306

import json
import network
import urequests
import time
import wlan

wlan.do_connect()

i2c = I2C(-1, Pin(5), Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

adc = ADC(0)

url = "https://api.thingspeak.com/update?api_key=4H0IHE2TESPWITGB&field1=%s"

while True:
    moisure = adc.read()

    oled.fill(0)
    oled.text(str(moisure),0,0)
    oled.show()

    data = url % moisure
    update = urequests.get(data)
    time.sleep(10)

Una vez que hayamos subido el programa al dispositivo y se ejecute, publicara datos cada 10 segundos en ThingSpeak, luego de un breve periodo de tiempo podremos ver un grafico como este:

Leyendo datos de Thingspeak con MicroPython

Thingspeak es una de las plataformas más sencillas de utilizar cuando se incursiona en el mundo IoT, por un lado tenemos la potencia de Matlab que ayuda mucho si deseamos realizar algún análisis posterior a recabar los datos y por el otro su simpleza para utilizarla: solo basta registrarnos obtener un key e invocar a la librería adecuada.

En esta oportunidad nos interesa leer datos de Thingspeak desde MicroPython, tomaremos datos de un canal publico:

https://thingspeak.com/channels/548625/

Ofrece temperatura y humedad, datos sencillos, pero que nos sirven para testear el funcionamiento.

Thingspeak tiene la funcionalidad que ofrece la información de los canales públicos por medio de un JSON, desde donde podremos leer los datos, para acceder a los datos utilizaremos la url: https://api.thingspeak.com/channels/548625/feeds.json

(Simplemente luego del nro. del canal agregamos feeds.json)

Si la abrimos en el navegador, tendremos todos los datos publicados desde las ultimas horas, debemos tener en cuenta de ajustar la fecha y hora a la zona horaria correspondiente.

Si empleamos la web http://jsonviewer.stack.hu/ podremos ver el json en un formato que resulta mas fácil de interpretar, solo debemos presionar el botón «Load JSON Data» y copiar la url, debemos reemplazar https por http, puesto que jsonviewer no soporte https; luego tendremos un vista como la siguiente:

Como solo nos interesa la ultima medición emplearemos el argumento result para que nos devuelva solo un resultado:
https://api.thingspeak.com/channels/548625/feeds.json?results=1

Para leer los datos realizamos:


1
2
3
4
5
6
7
8
9
10
11
12
13
import json
import network
import urequests
import wlan

wlan.do_connect()

consulta = urequests.get("https://thingspeak.com/channels/548625/feeds.json?results=2")
data = consulta.json()

temp = data["feeds"][0]["field1"]

print("Temperatura: ",temp)