Projekt baserat pÄ Raspberry Pi
Picam live!
picam kan ses live pÄ http://twitter.com/wantarray.
PiCAM
Jag har valt att inhandla en kameramodul till min Pi och bygga in den i chassit.
Redan frÄn början hade jag en tanke om att det vore hÀftigt att bygga en twitter-uppkopplad ultraportabel kamerarobot. Jag var inte sÀker pÄ om jag skulle komma hela vÀgen, men det har jag gjort.
Komponenter som anvÀnds för detta bygge:
Raspberry Pi 3
Pi camera module v2
Perl
Shell script
Imagemagick
Jag har anvÀnt Perl till sÄ mycket som möjligt. Denna html-sida Àr skriven i markup-sprÄket pod (Plain Old Documentation) och genererad till html med hjÀlp av pod2html.
$ pod2html --no-index --header -css doc/default.css picam_twitter.pl > picam_twitter.pod
DÀrför ber jag dig att inte lÀsa den rÄa html-filen, den ser ut som skrÀp.
CSS-filen har jag skrivit för hand.
Steg för steg-instruktioner för att sÀtta upp picam och hjÀlpscriptet pisnap som tar sjÀlva bilderna:
Börja med att installera cpanminus. Det Àr inget krav, men det Àr sÄ mycket bÀttre Àn cpan. BinÀren cpan(m) anvÀnds för att installera perlmoduler, eller bibliotek. frÄn Comprehensive Perl Archive Network. NÀr vi ÀndÄ hÄller pÄ sÄ kan vi installera Imagemagick som anvÀnds för att justera storleken pÄ tagen bild sÄ att vi inte överskrider twitters max-storlek.
# apt-get install cpanminus imagemagick
NÀr installationen Àr klar skall vi konfiguera sÄ att bibliotek kan installeras av en vanlig anvÀndare, i dennes hemkatalog. Detta Àr inte heller nÄgot krav, men kan vara bra om man inte har tillgÄng till root eller om man inte vill installera saker system-wide.
Ăppna din shellrc med valfri editor:
$ vim ~./zshrc
LÀgg till följande rader (förslagsvis lÀngst ned i filen):
PERL5LIB="$HOME/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="$HOME/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"$HOME/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=$HOME/perl5"; export PERL_MM_OPT;
Spara, och re-sourca filen (eller starta ett nytt skal).
Se till att katalogen dÀr modulerna skall installeras existerar:
$ mkdir -p ~/perl5/lib
Nu kan vi installera de bibliotek som picam beror pÄ. Notera att det dÄ skall göras som din vanliga anvÀndare!
$ cpanm Net::Twitter
NÀr installationen Àr klar sÄ kommer ~/perl5/lib/perl5/Net/Twitter vara populerad.
För att kunna posta pÄ twitter sÄ behövs ett antal API-nycklar. Dessa nycklar fÄr man tillgÄng till genom att ansöka om utvecklarstatus, och det tar bara nÄgon minut. För att vÄrt program sedan skall kunna ta del av dessa nycklar sÄ behöver de (exempelvis) exporteras i din shellrc.
AlltsÄ:
export TWITTER_ACCESS_SECRET='<secret>'
export TWITTER_CONSUMER_SECRET='<secret>'
export TWITTER_ACCESS_TOKEN='<token>'
export TWITTER_CONSUMER_KEY='<key>'
Spara och re-sourca shellrc.
pisnap tar en bild med hjÀlp av raspistill. Eftersom utrymmet pÄ Pi Àr begrÀnsat har jag valt att skicka filen till min server i sambons garderob. Den lokala filen tas sedan bort. HÀr kommer du att behöva editera:
USER='scp1'
HOST='laleh'
SAVE_DIR_REMOTE='_picam'
Alternativt kommentera ut de ssh-specifika raderna.
------------------
Nu Àr mjukvarusidan av konfigurationen (nÀstan) klar. Jag har tagit för givet att du redan har installerat kameramodulen i din Pi, och det enda som dÄ behöver göras Àr att faktiskt tala om för vÄr Pi att vi vill anvÀnda den.
Kör, som root:
# raspi-config
Under Interfacing options, vÀlj Enable Raspberry Pi Camera. Spara och avsluta. Det som nu sker Àr bland annat att raspistill installeras, den binÀr pisnap anvÀnder för att ta sjÀlva bilderna.
Funktionalitet
HjÀlpscript
Jag har skrivit ett antal hjÀlpskript som arbetar tillsammans med picam.
bin/pi_status
pi_status Àr ett shellscript som levererar data för picam att anvÀnda som statusuppdatering pÄ twitter om ingen egen status har specificerats med flaggan -t till picam. I nulÀget Àr det min Pi:s uptime och aktuell timtemperatur i Karlstad som genereras.
pisnap
pi_snap gör flera intressanta saker, i en evig loop. Ett kort tas med kameran med hjÀlp av raspistill. Denna bild skickas till min privata server, och en kopia av det senaste tagna fotot kopieras till filen latest.jpg. Originalfilen tas bort frÄn Pi, sÄ att det alltid enbart kommer att finnas en bildfil lokalt (den senast tagna).
Kopian justeras i storlek för uppladdning pÄ twitter, med hjÀlp av convert frÄn imagemagick.
pisnap har en sleep-interval pÄ 1730 sekunder. Detta för att sjÀlva picam har en sleep-interval pÄ 1800 sekunder - för att vara sÀker pÄ att pisnap hinner med alla uppgifter, Àven under tung belastning, innan picam sÀtter igÄng sin nÀsta loop. Annars finns det en liten risk att det Àr den nÀst senaste tagna bilden som kommer att laddas upp pÄ twitter.
picam
Picam kan ta emot ett antal flaggor.
-t, --tweet tweeta senast tagna bild med önskad status som argument
-d, --daemonize kör picam som en daemon, dvs i bakgrunden
-h, --help visa hjÀlpen och avsluta
-v, --version visa version och avsluta
Picam twittrar live pÄ http://twitter.com/wantarray.
KÀllkoden för picam och samtliga filer i detta projekt Äterfinns pÄ https://github.com/trapd00r/picam
POD ERRORS
Hey! The above document had some coding errors, which are explained below:
- Around line 3:
-
Non-ASCII character seen before =encoding in 'pÄ'. Assuming UTF-8