Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Escribir imagen en ThingSpeak desde Raspberry Pi con Python

Este ejemplo muestra cómo escribir una imagen en un canal de imágenes ThingSpeak® desde una placa Raspberry Pi™ usando Python.

Este ejemplo utiliza una Raspberry Pi para capturar una imagen de una cámara y escribir un archivo localmente. Luego, el archivo de imagen se envía a ThingSpeak cada vez que se toma una nueva imagen. Puede utilizar este ejemplo para una Raspberry Pi conectada a una cámara web o una cámara Pi, según las líneas seleccionadas en el código proporcionado.

Para una cámara Pi, puede utilizar el comando raspistill . Para usar este código con una cámara web, use fswebcam, que puede obtener usando

sudo apt-get install fswebcam

Su Pi debe tener acceso a Internet para ejecutar este ejemplo.

python-image-ex.jpg

Configuración

1) Cree un nuevo canal de imágenes de ThingSpeak como se describe en Crear un canal de imágenes.

2) Cree un nuevo canal de datos ThingSpeak como se describe en Recopilar datos en un nuevo canal.

3) Agregue un widget de visualización de imágenes a la vista de su canal de datos, como se describe en Visualización de imagen.

Código

1) Incluya las siguientes bibliotecas en su código Python.

#!/usr/bin/python

from time import sleep
import os
import requests
import sys

2) Defina las variables para especificar sus canales, credenciales y ubicación del archivo de imagen de Thingspeak.

# Update this section with your ThingSpeak Image Channel ID and Image Channel API Key
thingspeakImageChannelID = 'YOUR_THINGSPEAK_IMAGE_CHANNEL_ID'
thingSpeakImageChannelAPIKey = 'YOUR_THINGSPEAK_IMAGE_CHANNEL_API_KEY'
localFileName = '/home/pi/snapshot.jpg'
thingSpeakURL = 'https://data.thingspeak.com/channels/' + thingspeakImageChannelID + '/images'

3) Guarde una instantánea de la placa de su cámara Raspberry Pi.

def getSnapshotBytes():
   # Use FSWEBCAM to save a screenshot from a webcam. This requires the FSWEBCAM package.
   # Use raspistill to save a screenshot from a Pi Cam.
   # Alternatively, you can use OpenCV to directly get the bytestream from the camera.
   imageByteStream = None
   returnCode = os.system('fswebcam -r 1024x768 -S 1 -q ' + localFileName) # Use this line for webcam.
   # returnCode = os.system(‘raspistill -o ‘ + localFileName) # Use this line for a pi cam.
   if returnCode == 0:
      fh = open(localFileName, 'rb')
      imageByteStream = fh.read()
      fh.close()
   return imageByteStream

4) Ejecute un bucle para capturar una instantánea y escríbala en su canal de imágenes ThingSpeak.

def main():
   # Loop infinitely
   while True:
      # Get image bytes
      imData = getSnapshotBytes()
      # POST image to ThingSpeak if there is a valid image
      if imData is not None:
         x = requests.post(url = thingSpeakURL, data = imData,
             headers = {'Content-Type': 'image/jpeg',
             'thingspeak-image-channel-api-key': thingSpeakImageChannelAPIKey,
             'Content-Length' : str(sys.getsizeof(imData))})
         print(x)
         # Sleep so we do not get locked out of ThingSpeak for posting too fast
         sleep(30)

if __name__=="__main__":
   main()

Escribe la imagen

Ejecute el código mientras monitorea el widget de visualización de imágenes en la vista de su página.

stapler_image_widget.jpg