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.
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.