{"id":2676,"date":"2017-12-31T17:39:01","date_gmt":"2017-12-31T16:39:01","guid":{"rendered":"https:\/\/www.puls200.de\/?page_id=2676"},"modified":"2017-12-31T17:39:01","modified_gmt":"2017-12-31T16:39:01","slug":"c-berry28","status":"publish","type":"page","link":"https:\/\/www.puls200.de\/?page_id=2676","title":{"rendered":"C-Berry28"},"content":{"rendered":"<p><strong>Hardware<\/strong><br \/>\nF\u00fcr den Kleinrechner Raspberry Pi gibt es inzwischen eine F\u00fclle von Zusatzmodulen. Ebenso kleine Bildschirme und Touchscreens. Diese sind aber h\u00e4ufig mindestens genauso teuer wie externe Monitore und damit aus meiner Sicht relativ uninteressant. Eine Ausnahme stellt der C-Berry 28 (<a href=\"https:\/\/www.reichelt.de\/Programmer-Entwicklungstools\/RASP-C-BERRY-28\/3\/index.html?ACTION=3&GROUPID=5514&ARTICLE=144719\" rel=\"noopener\" target=\"_blank\">Shopping-Link<\/a>, <a href=\"http:\/\/www.admatec.de\/pdfs\/C-Berry28.pdf\" rel=\"noopener\" target=\"_blank\">Datenblatt<\/a>) dar. Das ist ein TFT LCD Modul mit LED-Backlight mit der sensationellen Gr\u00f6\u00dfe von 2,8 Zoll Bildschirmdiagonale. Die Aufl\u00f6sung betr\u00e4gt 320x240 Pixel, womit klar ist, dass sich damit eher Status-Anzeigen realisieren lassen als sonst irgend etwas anderes. Mit ca. 15\u20ac ist die Anschaffung daf\u00fcr auch sehr g\u00fcnstig. Das Modul wird \"nackt\" geliefert, also nur auf Platine aufgel\u00f6tet und mit eine Stecksockelleiste, die direkt auf den Raspberry passt. Damit ist dann die Montage in 20 Sekunden erledigt.<br \/>\nAls Nachteil muss auch gelten, dass die GPIO Leiste damit f\u00fcr andere Anwendungen blockiert ist. Au\u00dferdem ist das Display relativ tr\u00e4ge und extrem blickwinkelabh\u00e4ngig. Aber dazu sp\u00e4ter mehr.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.puls200.de\/data\/post\/Dez17\/cberry.jpg\" \/><\/p>\n<p><strong>Software<\/strong><br \/>\nWie wird das Ganze nun angesteuert? Dazu gibt es die Controller-Library BCM2835, die zun\u00e4chst installiert sein muss. Danach wird es leider etwas komplizierter. Auf den oben verlinkten Seiten gibt es ein kleines Software-Paket, in dem ein paar Beispielprogramme (C) verf\u00fcgbar sind. Damit kann man im wesentlichen ein Bitmap an das Display schicken, au\u00dferdem existieren einige Zeichenfunktionen. Es gibt auch ein Beispiel, wie der X-Window Framebuffer auf das kleine Format kopiert wird, wobei sich mir dabei der praktische Nutzen nicht erschlie\u00dft.<br \/>\nIch habe zun\u00e4chst eine Spa\u00dfanwendung umgesetzt: Ein Script l\u00e4dt einen zuf\u00e4lligen Begriff aus dem W\u00f6rterbuch des English-Dictionaries und verwendet diesen als Argument f\u00fcr eine Google-Bildersuche. Dazu hatte ich zun\u00e4chst einfach wget verwendet, bis ich \u00fcber das ziemlich praktische Script <a href=\"https:\/\/github.com\/teracow\/googliser\" rel=\"noopener\" target=\"_blank\">googliser<\/a> gestolpert bin. Dort sind bereits alle notwendigen Funktionen implementiert. Wenn die Bilder heruntergeladen sind verwende ich das Shell-Tool \"convert\" des Bildbearbeitungstools \"ImageMagick\", um die Bilder nachzubearbeiten. Da der Pi bei mir hochkant an der Wand h\u00e4ngt werden sie um 90\u00b0 gedreht, auf 240x320 skaliert und der Suchbegriff wird in die rechte obere Ecke gerendert. Die Bilder werden alle in einen Ausgabe-Ordner abgelegt. <\/p>\n<p>Dort werden sie von einem von mir auf Basis der Beispiel-Anwendung erstellten Diashow-Programms ausgelesen und in zeitlicher Abfolge auf das Display geschickt. Das sorgt f\u00fcr unerwartete Eindr\u00fccke und hin und wieder eine Menge Heiterkeit.<\/p>\n<p>Das von mir verwendete sehr simple Bash-Script:<br \/>\n<code>#! \/bin\/bash<br \/>\nOUTDIR=\"\/home\/pi\/StatusBerry\/img\/\"<br \/>\nDLDIR=\"\/home\/pi\/StatusBerry\/download\/\"<br \/>\nquery=$(shuf -n1 \/usr\/share\/dict\/words)<br \/>\nrm -f $OUTDIR\/*<br \/>\nrm -f $DLDIR\/*<br \/>\n.\/googliser.sh -p $query -a tall -u 80000 -n 20 --no-gallery --output $DLDIR<br \/>\nfor FILENAME in $DLDIR*; do<br \/>\n    # BASEFILENAME=\"${FILENAME%.*}\"<br \/>\n    BASEFILENAME=$(basename \"$FILENAME\" | cut -d. -f1)<br \/>\n    # image resize, rotate, draw text und so weiter :)<br \/>\n    # CBerry ist etwas empfindlich was die BMP Parameter angeht! (exakte Gr\u00f6\u00dfe, BMP3, 24bit)<br \/>\n    # echo $BASEFILENAME<br \/>\n    convert $FILENAME -resize 240x320! -gravity NorthEast -pointsize 18 -draw \"text 0,4 '$query'\" -rotate 90 -depth 24 -compress None -type truecolor -units PixelsPerInch -density 72 \"BMP3:$OUTDIR$BASEFILENAME.bmp\"<br \/>\ndone<\/code><\/p>\n<p><strong>Weiterhin<\/strong><br \/>\nIm Grunde k\u00f6nnte jede Software-Lib herangezogen werden, mit der man in ein Bitmap rendern kann. Dies macht die Entwicklung dann doch wieder etwas flexibler. Damit ist am Ende nur noch ein \"Blitter\" notwendig, der das Bild an das Display schickt. Daf\u00fcr kann man direkt das Beispielprogramm aus dem Software-Download verwenden. Um dem ganzen doch noch etwas mehr Sinn abzugewinnen, kann man nat\u00fcrlich auch vern\u00fcnftige Bilder anzeigen. Zum Beispiel aktuelle Wetter- \/ Radarkarten des deutschen Wetterdienstes. Die aktuelle Lage f\u00fcr Baden-W\u00fcrttemberg ist z.B. <a href=\"https:\/\/www.dwd.de\/DWD\/wetter\/aktuell\/deutschland\/bilder\/wx_baw_akt.jpg\" rel=\"noopener\" target=\"_blank\">hier<\/a> abgebildet. Diese Bilder werden regelm\u00e4\u00dfig aktualisiert, so dass man ein Script per CRON-Job zyklische Downloads einer Liste machen lassen kann. Das k\u00f6nnte etwas so aussehen:<br \/>\n<code>IMGDIR=\"\/home\/pi\/StatusBerry\/download\/\"<br \/>\nOUTDIR=\"\/home\/pi\/StatusBerry\/img\/\"<br \/>\nIMGURLLIST=\"\/home\/pi\/StatusBerry\/imgFileUrlList.txt\"<\/p>\n<p>if [ ! -d \"$IMGDIR\" ]<br \/>\nthen<br \/>\n    echo \"Directory $IMGDIR not found..\"<br \/>\n    exit 1<br \/>\nfi<\/p>\n<p>if [ ! -f \"$IMGURLLIST\" ]<br \/>\nthen<br \/>\n    echo \"Text file $IMGURLLIST with image url's not found..\"<br \/>\n    exit 1<br \/>\nfi<\/p>\n<p>cat \"$IMGURLLIST\" | while read ANURL<br \/>\ndo<br \/>\n    # download image<br \/>\n    wget -N -U Mozilla --directory-prefix=$IMGDIR \"$ANURL\"<br \/>\n    FILENAME=$(basename $ANURL)<br \/>\n    BASEFILENAME=\"${FILENAME%.*}\"<br \/>\n    # image resize and stuff<br \/>\n    convert $IMGDIR$FILENAME -resize 240x320! -rotate 90 -depth 24 -compress None -type truecolor -units PixelsPerInch -density 72 \"BMP3:$OUTDIR$BASEFILENAME.bmp\"<\/p>\n<p>done<\/code><\/p>\n<p>Ein tats\u00e4chlich sinnvoller Einsatz f\u00fcr das Modul ist m.E. in erster Linie dann gegeben, wenn der Raspberry ohne Monitor (und remote-logon M\u00f6glichkeit) z.B. zur Hardwaresteuerung eingesetzt wird und direkte Zustandsmeldungen notwendig sind. Man k\u00f6nnte sich z.B. eine Schlie\u00dfanlage vorstellen. Allerdings m\u00fcsste dann die Peripherie anders angebunden sein. Oder doch direkt am Display: Einige Pins werden zwar durchgeschleift, man muss die weiterf\u00fchrenden Anschl\u00fcsse dann aber direkt anl\u00f6ten. Wer soweit kommt schafft das aber auch noch. Als Fazit: Diese Hardware ist (noch) nicht 100% Endkunden-gerecht, das m\u00f6chte sie aber m\u00f6glicherweise auch gar nicht sein. F\u00fcr mich jedenfalls eine interessante Baustelle. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hardware F\u00fcr den Kleinrechner Raspberry Pi gibt es inzwischen eine F\u00fclle von Zusatzmodulen. Ebenso kleine Bildschirme und Touchscreens. Diese sind aber h\u00e4ufig mindestens genauso teuer wie externe Monitore und damit aus meiner Sicht relativ uninteressant. Eine Ausnahme stellt der C-Berry &hellip; <a href=\"https:\/\/www.puls200.de\/?page_id=2676\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":849,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"showcase.php","meta":{"ngg_post_thumbnail":0},"_links":{"self":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/pages\/2676"}],"collection":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.puls200.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2676"}],"version-history":[{"count":7,"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/pages\/2676\/revisions"}],"predecessor-version":[{"id":2684,"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/pages\/2676\/revisions\/2684"}],"up":[{"embeddable":true,"href":"https:\/\/www.puls200.de\/index.php?rest_route=\/wp\/v2\/pages\/849"}],"wp:attachment":[{"href":"https:\/\/www.puls200.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}