Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

Scrivere l'immagine su ThingSpeak da Raspberry Pi con Python

Questo esempio mostra come scrivere un'immagine su un canale immagine ThingSpeak ® da una scheda Raspberry Pi™ utilizzando Python.

In questo esempio viene utilizzato un Raspberry Pi per acquisire un'immagine da una fotocamera e scrivere un file localmente. Quindi il file immagine viene inviato a ThingSpeak ogni volta che viene scattata una nuova immagine. È possibile utilizzare questo esempio per un Raspberry Pi collegato a una webcam o a una Pi Camera, a seconda delle righe selezionate nel codice fornito.

Per una fotocamera Pi, puoi usare il comando raspistill . Per utilizzare questo codice con una webcam, utilizzare fswebcam, che è possibile ottenere utilizzando

sudo apt-get install fswebcam

Per eseguire questo esempio, il tuo Pi deve avere accesso a Internet.

python-image-ex.jpg

Impostazione

1) Creare un nuovo canale immagine ThingSpeak come descritto in Creazione di un canale immagine.

2) Creare un nuovo canale dati ThingSpeak come descritto in Raccogli dati in un nuovo canale.

3) Aggiungere un widget di visualizzazione delle immagini alla vista del canale dati, come descritto in Visualizzazione delle immagini.

Codice

1) Includi le seguenti librerie nel tuo codice Python.

#!/usr/bin/python

from time import sleep
import os
import requests
import sys

2) Definisci le variabili per specificare i canali Thingspeak, le credenziali e la posizione del file immagine.

# 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) Salva un'istantanea dalla scheda della fotocamera del tuo 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) Esegui un ciclo per acquisire uno snapshot e scriverlo sul tuo canale immagine 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()

Scrivere l'immagine

Esegui il codice monitorando il widget Visualizzazione immagine nella visualizzazione della pagina.

stapler_image_widget.jpg