Realizzazione di una webcam da esterni con Raspberry Pi

Realizzazione di una webcam da esterni con Raspberry Pi

Qualche mese fa ho realizzato con il Raspberry Pi delle semplici webcam che inviano su server FTP delle immagini (scattate con il camera module), aggiungendo anche delle scritte e loghi in overlay.

A differenza della webcam che ho montato nella mia stazione meteo, questa non richiede software particolari.

La configurazione software è veramente semplice: un’ installazione standard di Raspbian su SD, con un script che si prende in carico tutto il lavoro (ovvero: scattare la foto, aggiungere le informazioni sopra, inviarla su FTP e scrivere dei log)

Lo script (che trovate in fondo) può essere salvato nella cartella home ed eseguito ad intervalli regolari tramite Cron, per esempio ogni 5 minuti con un’impostazione come questa:

*/5 * * * * /home/pi/TakeAndUpload.sh

Che ricordo va inserita digitando “crontab -e” nel terminale.
Gli unici requisiti per il suo funzionamento dello script sono i seguenti:

mkdir /home/pi/images
sudo apt-get install ftp imagemagick

La configurazione è presente in cima all script (nella sezione CONFIGURATION) ed è abbastanza autoesplicativa.

Per l’utilizzo in questione il Raspberry è stato inserito in una scatola stagna di alluminio (di quelle utilizzate per videosorveglianza) che è anche riscaldata tramite una resistenza posta internamente di fronte al vetro.
Questo accorgimento oltre a risolvere il problema della neve e ghiaccio, evita anche l’appannamento del vetro stesso.

La webcam è stata montata in una posizione molto a limite dal punto di vista ambientale, nei pressi del rifugio “La Capanna” sul Monte Falco nell’Appenino Tosco-Romagnolo,  a 1488 m ! Ed è in funzione senza alcun problema da quasi un anno a questo indirizzo: http://www.webcamcampigna.it/

 

#!/bin/bash

# This script takes a picture with Raspberry Camera, adds text/logo overlays and sends it to FTP server.
# It creates also a logfile in the same folder and sends a status.txt file to server.

# REQUIREMENTS:
# sudo apt-get install ftp imagemagick
# mkdir /home/pi/images

# V0.2
# (C) Alessandro Grechi - http://grechi.it

# Configure the vars in the following section

###############################################
##############  START CONFIGURATION  ###############
###############################################

#IMAGE SETTINGS
ARGS="-vf -hf -w 1024 -h 720 -q 50 -n -ex auto"
TEXT_TOPLEFT=" Raspbery Pi Camera Script"
TEXT_TOPRIGHT="Date: ${dateTaken}  "
TEXT_BOTTOMLEFT="http://grechi.it"
TEXT_BOTTOMRIGHT="(c) Alessandro Grechi  "
LOGO_TOPRIGHT="/home/pi/images/logo.png"

#FTP SETTINGS
HOST="ftp.website.it"
USER="user"
PASS="password"
DIR="webcam"

#DATE AND LOG
dateTaken=$(date "+%d/%m/%Y - %H:%M")
now=$(date "+%H%M")
today=$(date "+%d%m%Y")
logfile="/home/pi/images/webcam_$today.log"

###############################################
##############  END CONFIGURATION  #################
###############################################

cd /home/pi/images
echo "###################################" >> $logfile
echo "starting script $dateTaken" >> $logfile
echo "Taking a Picture" >> $logfile

/opt/vc/bin/raspistill $ARGS -o /home/pi/images/image.jpg >> $logfile

echo "Convert and add overlays" >> $logfile

/usr/bin/convert /home/pi/images/image.jpg \
		  -gravity NorthWest -background Blue -splice 0x18 -pointsize 15 -fill yellow -annotate 0 '${TEXT_TOPLEFT}' \
          -gravity NorthEast -fill yellow -annotate +0+0 '${TEXT_TOPRIGHT}' \
          -gravity SouthWest -background Blue -splice 0x18 -pointsize 12 -fill yellow -annotate 0 '${TEXT_BOTTOMLEFT}' \
          -gravity SouthEast -fill yellow -annotate +0+0 '${TEXT_BOTTOMRIGHT}' \
		  -gravity NorthEast $LOGO_TOPRIGHT -geometry +5+19 -composite \
		 /home/pi/images/image_$now.jpg >> $logfile 2>&1

cputemp=$(/opt/vc/bin/vcgencmd measure_temp)
myip=$(curl --connect-timeout 30 http://ifconfig.me/ip)
uptime=$(uptime)
echo "LastUpdate: $dateTaken | CPU $cputemp | IP: $myip | uptime: $uptime" > /home/pi/images/status.txt

echo "Upload image_$now.jpg to FTP" >> $logfile

# Start the FTP client

ftp -inv $HOST << EOF >> $logfile
user $USER $PASS
cd $DIR
put image_$now.jpg
put status.txt
bye
EOF
echo "Remove image_$now.jpg" >> $logfile
rm -f /home/pi/images/image_$now.jpg
echo "Ok"

Qui ho postato anche uno script PHP (Smart Sort Gallery) per visualizzate le foto inviate su una pagina web.

A proposito Alessandro

Ingegnere delle Telecomunicazioni con propensione al web2.0 ed il pallino della tecnologia; toscano & casentinese, vivo a Firenze

  • Marco Battisti

    Io ho preso il Raspberry Pi per usarlo come “semplice” media center, ma rimango sempre stupito da quanto sia versatile… 😀 Ottimo lavoro! 😉

    P.S. Mi aspetto un XMasPiTree 2.0 quest’anno… 😉

    • Ahahah certo, arriverà sicuramente! 😀

  • Il pennellino dove é fissata la camera Board é di polistirolo? L’hai fissato con il silicone alla scatola stagna?

    • E’ un pannellino di plastica (quella ondulata, con i buchi dentro. Non so come si chiami). E si, è silicone… ma va bene anche la colla a caldo secondo me.

  • Ivan

    ciao alessandro, bello script, ho pero un problema, all’invio del file mi da un errore:

    pi@raspberrypi ~/images $ sudo ./TakeAndUpload.sh
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 15 0 15 0 0 0 0 –:–:– 0:00:17 –:–:– 3
    ./TakeAndUpload.sh: line 68: ftp: command not found
    Ok
    pi@raspberrypi ~/images $

    che programma ftp manca da installare, ho provato sia con ncftp, che con vsftpd.
    Grazie Ivan

    • Ciao Ivan, come ho scritto anche sopra le dipendenze sono ftp e imagemagick. Dovresti trovarli entrambi nei repository.

      sudo apt-get install ftp imagemagick

  • Gianni Salvi

    Ciao Alessandro, è possibile avere lo script PHP che hai usato per la galleria (http://www.arezzometeo.com/campigna/park/img/) ?
    Grazie

  • Luciano

    Ciao Alessandro, complimenti per la realizzazione. Sto incominciando ora a conoscere le capacità del raspberry e quindi antcipo che sono a digiuno sul suo funzionamento. Non mi è chiaro dove metti le foto che scatti, rimangono nella scheda interna ? se si quante ne può contenere ? grazie

  • Adsl Matteimartelli

    (Non vedo commento già inviato riprovo mi scuso se è una ripetizione) –
    Tutto perfetto meno una cosa: non mi funziona crontab ho fatto tutto come descritto e ho guardato in internet, ho provato con variabili di ambiente tipo: SHELL=/bin/bash ma nulla qualche idea? grazie

  • Prova ad usare un file di log per capire che succede:

    */5 * * * * /home/pi/TakeAndUpload.sh >> /home/pi/log.txt

    • Adsl Matteimartelli

      Perfetto! era un **###** di permesso del file che impediva a cron di girare.
      ti chiedo un altro sforzo, e chiedo venia. ho un problema con la trascrizione dell’image su server, il file log dice questo:
      ________
      local: /home/pi/images/image_1757.jpg remote: /home/pi/images/image_1757.jpg
      200 PORT command successful
      553 Can’t open that file: No such file or directory
      local: /home/pi/images/status.txt remote: /home/pi/images/status.txt
      200 PORT command successful
      553 Can’t open that file: No such file or directory
      221 Goodbye. You uploaded 0 and downloaded 0 kbytes.
      Remove image_1757.jpg
      ________
      – No such file o directory?! – ho provato anche a creare le directory /home/pi/image sul server ma francamente non capisco quell’informazione della riga 1 e 4 (local:…) che dice :
      “remote: /home/pi/images/…..”
      il programma gira perfettamente fino a quel punto: connessione, cambio directory, tutto ok etc., ma li da quell’errore strano, almeno per me
      grazie.

  • Ho fatto una piccola modifica al path, riprova in questo modo:
    http://pastebin.com/fiFtsMgy

    (cambiate righe 28, 60, 61)

    • Adsl Matteimartelli

      ok funziona, carica l’immagine sul sito, perfetto!!! grazie grazie

      • Ottimo! 🙂
        Allora aggiorno anche il codice nell’articolo… ciao! 😉

        • Adsl Matteimartelli

          la custodia per la camera dove l’hai trovata, io ho visto solo prezzi da 100 € in su, su aliexprex 4 € ma poi 67,00 € di spedizione 🙁

          • Io l’ho trovata in un negozio che vende attrezzature per videosorveglianza… non l’ho pagata molto.

  • Nicolas Welf

    ho un raspberry p2 ma non riesco a far funzionare lo script…