Up­dates im Blick dank Ar­dui­no

SCREENGUIDE - - Inneres - TEXT: An­dré Lang­ner

Ein klei­nes Hel­fer­lein für Si­cher­heits­up­dates

Die Phy­si­cal-Com­pu­ting-Platt­form Ar­dui­no er­mög­licht es Lai­en und Pro­fis nütz­li­che An­wen­dun­gen zu bau­en. Mit ein we­nig Ba­s­tel­ar­beit und über­schau­ba­rem Co­de kön­nen Sie sich zum Bei­spiel ak­tu­el­le In­for­ma­tio­nen aus dem Netz – et­wa Si­cher­heits­up­dates für ein CMS – ein­fach auf ei­nem klei­nen Dis­play an­zei­gen las­sen.

Als Webent­wick­ler sind Sie meist für meh­re­re Pro­jek­te ver­ant­wort­lich. Ist das Pro­jekt on­li­ne, müs­sen Sie sich ne­ben der Wei­ter­ent­wick­lung auch um kurz­fris­ti­ge si­cher­heits­re­le­van­te Up­dates küm­mern. Hier kann es durch­aus hilf­reich sein, sich recht­zei­tig über wich­ti­ge In­for­ma­tio­nen zu Ih­rem Con­ten­tMa­nage­ment-Sys­tem zu in­for­mie­ren. Die­ser Ar­ti­kel zeigt, wie Sie Ih­ren Ar­beits­platz um ein 0,96 Zoll Oled Dis­play er­gän­zen und mit­hil­fe der Dru­pal Re­lease His­to­ry wich­ti­ge Dru­pal-Co­reUp­dates im Blick ha­ben (Abb. 1). Das grund­le­gen­de Prin­zip lässt sich eben­so auch auf an­de­re CMS bzw. auf be­lie­bi­ge In­for­ma­tio­nen aus dem Netz an­wen­den. Die Dru­pal-In­fra­struk­tur bie­tet ei­ne Viel­zahl von In­for­ma­ti­ons­ka­nä­len zum Ent­wick­lungs­stand der Haupt­kom­po­nen­ten und Zu­satz­mo­du­le. Fo­ren, News­let­ter, RSS-Feeds und ent­spre­chen­de APIs fas­sen pro­jekt­re­le­van­te Eck­da­ten zu­sam­men und ver­wei­sen auf neue Ver­sio­nen oder Si­cher­heits­up­dates. Auch über die in­ter­ne Re­port­sei­te ei­ner Dru­pal-In­stal­la­ti­on wer­den Up­date- und Si­cher­heits­in­for­ma­tio­nen für den Ad­mi­nis­tra­tor über­sicht­lich dar­ge­stellt. Als Web­wor­ker sind Sie je­doch meist für ver­schie­de­ne Pro­jek­te ver­ant­wort­lich – es ist nicht im­mer ein­fach, hier die Über­sicht zu be­hal­ten. In mei­ner Ar­beits­welt un­ter­stützt mich ein Ar­dui­no-Con­trol­ler und lie­fert mir Ver­si­ons­in­for­ma­tio­nen zu den Haupt­kom­po­nen­ten von Dru­pal 7 und Dru­pal 8. Mit­hil­fe ei­ner ei­ge­nen Span­nungs­ver­sor­gung (z.B. ei­nem USB Hub) und ei­ner Netz­werk­ver­bin­dung funk­tio­niert die­ser Auf­bau ei­gen­stän­dig. Ei­ne ser­ver­sei­ti­ge An­wen­dung be­rei­tet die In­for­ma­tio­nen der Dru­pal Re­lease His­to­ry [goo.gl/ZjWJJq] vor und lie­fert ei­nen op­ti­mier­ten String zur Darstel­lung auf dem Oled-Dis­play.

Die Dru­pal-Co­re-In­for­ma­tio­nen wer­den zu­sam­men mit dem Ver­öf­fent­li­chungs­da­tum, der Uhr­zeit, dem Sta­tus und ei­ner An­ga­be

zur nächs­ten API-Ak­tua­li­sie­rung über vier Zei­len auf ei­nem 0,96 Zoll Oled-Dis­play mit 128 × 64 Pi­xeln aus­ge­ge­ben (Abb. 1). An den Term-In­for­ma­tio­nen se­hen Sie auf ei­nen Blick, ob das Dru­pal-Co­re-Up­date feh­ler­be­rei­nigt (Bug Fi­xes) oder auf­grund von Si­cher­heits­lü­cken (Se­cu­ri­ty Up­date) ak­tua­li­siert wur­de.

Ei­ne ers­te Ba­sis­ver­si­on kön­nen Sie über Steck­ver­bin­dun­gen rea­li­sie­ren. Vor­aus­set­zung hier­für ist na­tür­lich, dass die Kom­po­nen­ten be­reits fer­tig auf­ge­baut und mit ver­lö­te­ten Stift­leis­ten an­ge­lie­fert wer­den. Wei­ter­hin soll­ten ers­te Er­fah­run­gen im Um­gang mit elek­tro­ni­schen Bau­tei­len vor­han­den sein. Der Auf­bau und die In­stal­la­ti­on der Soft­ware dau­ern – je nach hand­werk­li­chem Ge­schick – cir­ca ein bis zwei St­un­den. Die hier be­schrie­be­nen Kom­po­nen­ten plus Ge­häu­se kos­ten et­wa 40–60 Eu­ro. Auf­grund des sehr ge­rin­gen Strom­ver­brauchs von cir­ca 150–160mA bei 5V kann die­ser Auf­bau über ei­nen High-Po­we­r­ed-USB-Port (max. Strom­stär­ke von 500mA) mit Span­nung und Strom ver­sorgt wer­den. Um Schä­den am USB-Port zu ver­mei­den, soll­ten Sie vor­ab mit ei­nem USB-Mess­ad­ap­ter die Strom­auf­nah­me Ih­rer Schal­tung er­mit­teln und ge­ge­be­nen­falls ei­ne ex­ter­ne Span­nungs­ver­sor­gung für Ih­ren Ar­dui­no-Con­trol­ler ver­wen­den.

EI­NE MICRO API

Für den prak­ti­schen und schnel­len Ein­stieg kön­nen Sie ei­ne im Zu­ge die­ses Ar­ti­kels be­reits vor­be­rei­te­te Micro-API ver­wen­den und so­mit Ih­ren Ar­beits­platz in kur­zer Zeit mit ei­nem ei­ge­nen Hel­fer­lein aus­stat­ten. Die­se Micro-API lie­fert ak­tu­el­le Ver­si­onStrings für den Dru­pal-Co­re 7 [goo.gl/V1aMzB] und 8 [goo.gl/ ISkJDz] und in ei­ner Test­pha­se für die letz­te sta­bi­le Ver­si­on von Wor­dpress [goo.gl/SEgE7p]. Al­le Ver­si­on-Strings sind fol­gen­der­ma­ßen auf­ge­baut:

Sie kön­nen auch leicht ei­ge­ne in­di­vi­du­el­le Ide­en um­set­zen, da­bei sind Ih­rer Fan­ta­sie (fast) kei­ne Gren­zen ge­setzt. Möch­ten Sie das hier be­schrie­be­ne Ar­dui­no-Pro­gramm für ei­ge­ne Pro­jek­te nut­zen, müs­sen Sie bei der For­ma­tie­rung des Aus­ga­be-Strings nur fol­gen­des Mus­ter ein­hal­ten:

Die Zei­chen „[***]” die­nen als Trenn­zei­chen zwi­schen der HTTPS­ta­tus-Zei­le + HTTP-He­a­der und dem HTTP-Bo­dy der API-Ant­wort. Die­se Trenn­zei­chen wer­den von der Ar­dui­no-An­wen­dung in­ter­pre­tiert und vor der Aus­ga­be ent­fernt. Zei­len­um­brü­che in­ner­halb des Strings wer­den ser­ver­sei­tig über das Steu­er­zei­chen „\n” er­zeugt. Ei­ne voll­stän­di­ge HTTP-Ant­wort mit ei­nem String zur Aus­ga­be auf dem Oled-Dis­play sieht in et­wa so aus:

Die Aus­ga­be die­ses Strings könn­ten Sie mit PHP zum Bei­spiel wie folgt rea­li­sie­ren:

DIE SCHALTZENTRALE

Die An­steue­rung des Dis­plays und des Netz­werk­an­schlus­ses über­nimmt ein Ar­dui­no UNO Rev.3 [goo.gl/1oG­ruU]. Ba­sie­rend auf dem At­mel ATMe­ga328P Mi­cro­con­trol­ler stellt die­ses Bo­ard di­gi­ta­le und ana­lo­ge Ein- und Aus­gän­ge zur Ver­fü­gung und lässt sich über die Ar­dui­no-IDE [goo.gl/yPNVju] via USB pro­gram­mie­ren. Der Ar­dui­no-Con­trol­ler un­ter­stützt ne­ben der se­ri­el­len Kom­mu­ni­ka­ti­on via USB [goo.gl/1VDSrE] auch das Protokoll für die I2C-Schnitt­stel­le [goo.gl/xAgrmO], die für die An­steue­rung des Oled-Dis­plays be­nutzt wird, aber auch das SPI-Protokoll als Ba­sis für die Kom­mu­ni­ka­ti­on mit dem Netz­werk­mo­dul [goo.gl/zI5NA0]. Die Pro­gramm­struk­tur wird in ei­nem nicht flüch­ti­gen 32KB-Flas­hSpei­cher ab­ge­legt, wo­bei be­reits 0,5KB für den Boot­loa­der be­an­sprucht wer­den [goo.gl/x92oux]. Für die dy­na­mi­sche Ver­ar­bei­tung von In­for­ma­tio­nen z.B. über Strings und Va­ria­blen bie­tet der Con­trol­ler wei­te­re flüch­ti­ge 2KB SRAM-Spei­cher.

AR­DUI­NO-IDE

Die Ja­va-ba­sier­te Open-Sour­ce-Ent­wick­lungs­um­ge­bung er­mög­licht ei­nen schnel­len Ein­stieg in die Ar­dui­no-Pro­gram­mie­rung und steht für Li­nux, Win­dows und OSX zur Ver­fü­gung. Die IDE bie­tet Syn­tax-High­light­ing und un­ter­stützt mit ei­ner über­schau­ba­ren Samm­lung von Werk­zeu­gen bei der Er­stel­lung von Ar­dui­no-Pro­gram­men (auch Sketch ge­nannt). Mit­hil­fe der Ent­wick­lungs­um­ge­bung lässt sich ein Sketch auf syn­tak­ti­sche Feh­ler über­prü­fen, kom­pi­lie­ren und auf den Ar­dui­no-Con­trol­ler über­tra­gen. Ein Sketch be­inhal­tet in der Re­gel die Funk­tio­nen set­up() und loop() (Abb. 2). Die set­up-Funk­ti­on wird ein­ma­lig beim Start des Pro­gramms auf­ge­ru­fen und zum Bei­spiel für die Initia­li­sie­rung von Kom­po­nen­ten oder Ein- und Aus­gän­gen be­nutzt. An­schlie­ßend wird die Funk­ti­on loop() auf­ge­ru­fen und führt in ei­ner End­los­schlei­fe die dar­in ent­hal­te­nen Pro­gramm­funk­tio­nen aus. Ein in­te­grier­ter se­ri­el­ler Mo­ni­tor er­laubt ei­ne Kom­mu­ni­ka­ti­on mit dem am USB-Port an­ge­schlos­se­nen Ar­dui­no-Con­trol­ler. Zu­stän­de von Va­ria­blen oder Ein- und Aus­gän­gen las­sen sich un­kom­pli­ziert wäh­rend der Pro­gramm­aus­füh­rung mit und oh­ne Zei­len­um­bruch aus­ge­ben.

DAS OLED-DIS­PLAY

Oled-Dis­plays gibt es kos­ten­güns­tig in ver­schie­de­nen Aus­stat­tun­gen. Für die­ses Pro­jekt wur­de ein 0,96-Zoll-Dis­play (128 × 64 Pi­xel) mit ei­nem SSD1306-Chip­satz, ei­ner I2C-Schnitt­stel­le und ei­ner Be­triebs­span­nung von 5V (DC) ein­ge­setzt (Abb. 1). Auf dem Ar­dui­no-Con­trol­ler sind die An­schlüs­se für die 5V-Ver­sor­gungs­span­nung, GND (Mas­se) so­wie die Pins für die An­steue­rung über das I2C-Protokoll über ei­ne Buch­sen­leis­te her­aus­ge­führt. Mit­hil­fe von so­ge­nann­ten Bre­ad­board-Ka­beln bzw. Steck­brü­cken lässt sich das Dis­play sehr ein­fach an­schlie­ßen. Bit­te über­prü­fen Sie vor dem An­schluss, ob das Dis­play für ei­ne Ver­sor­gungs­span­nung von 5V aus­ge­legt ist, um ei­ne Be­schä­di­gung des Dis­plays oder des Con­trol­lers zu ver­mei­den. Die Ver­ka­be­lung zwi­schen dem Oled-Dis­play und dem Ar­dui­no-Con­trol­ler ge­stal­tet sich auf­grund der we­ni­gen An­schlüs­se denk­bar ein­fach. Das An­schluss­sche­ma zeigt die Ver­ka­be­lung für die Ver­wen­dung am I2C-Bus (Abb. 3).

OLED – HEL­LO WORLD!

Für die kom­for­ta­ble An­steue­rung des Oled-Dis­plays be­nö­ti­gen Sie jetzt noch ei­ne ent­spre­chen­de Bi­blio­thek. Die­se er­wei­tert die Ar­dui­no-IDE um ver­schie­de­ne Me­tho­den zur Aus­ga­be von Text auf dem Oled-Dis­play. Auf­grund der be­grenz­ten Res­sour­cen des Con­trol­lers wird bei der An­steue­rung des Dis­plays auf die Bi­blio­thek „SSD1306A­scii” von Bill Grei­man zu­rück­ge­grif­fen, die aus­schließ­lich für die res­sour­cen­spa­ren­de Text­aus­ga­be auf SSD1306-ba­sier­ten Oled-Dis­plays aus­ge­legt ist [goo.gl/ Ii5KuM]. Die In­stal­la­ti­on zu­sätz­li­cher Bi­blio­the­ken in­ner­halb der Ar­dui­no-IDE ist un­ter ar­dui­no.cc/en/Gui­de/Li­bra­ries aus­führ­lich be­schrie­ben. Ei­ne feh­ler­freie In­stal­la­ti­on vor­aus­ge­setzt, bringt die Bi­blio­thek „SSD1306A­scii” ei­ne Rei­he von Bei­spie­len mit, die Sie in­ner­halb der IDE un­ter „Da­tei › Bei­spie­le › SD1306ASCII” fin­den (Abb. 4). Für die SSD1306A­scii-Bei­spie­le müs­sen Sie das Dis­play je­doch im ers­ten Schritt am I2C-Bus an­schlie­ßen und als so­ge­nann­tes Sla­ve-De­vice an­mel­den. Hier­für ist die I2C-Adres­se des Ole­dDis­plays not­wen­dig, die oft­mals auf der Rück­sei­te des Dis­plays ver­merkt ist. Mit der an­ge­pass­ten I2C-Adres­se im Sketch soll­te das Bei­spiel „Hel­loWorl­dAVRI2C” nach dem Hoch­la­den auf den Ar­dui­no-Con­trol­ler ein „Hel­lo world!” auf dem Dis­play aus­ge­ben. Tipp: Im Not­fall las­sen sich die Adres­sen an­ge­schlos­se­ner I2CHard­ware über den Ar­dui­no Sketch „i2c_­scan­ner” er­mit­teln [goo. gl/g8D2zk]. Die ge­fun­de­nen I2C-Hard­ware-Adres­sen wer­den über den se­ri­el­len Mo­ni­tor der Ar­dui­no-IDE aus­ge­ge­ben (Abb. 5).

OLED STRINGS SELBSTGEMACHT

Im ers­ten Schritt auf dem Weg zum Ar­dui­no-Pro­gramm bin­den wir al­so die He­a­der-Da­tei­en aus der SSD1306A­scii-Bi­blio­thek in den Kopf un­se­rer neu­en Ar­dui­no-An­wen­dung ein: In­fo: Für die An­steue­rung von I2C-Kom­po­nen­ten wird bei der Ent­wick­lung von Ar­dui­no-Pro­gram­men im All­ge­mei­nen die He­a­der-Da­tei „Wi­re.h” ein­ge­bun­den, je­doch ver­braucht die hier ver­wen­de­te al­ter­na­ti­ve He­a­der-Da­tei „SSD1306A­sciiAvrI2c.h” aus der SSD1306A­scii-Bi­blio­thek deut­lich we­ni­ger Res­sour­cen. Die I2C-Adres­se Ih­res Oled-Dis­plays (z.B. „0x3C”) wird in ei­ner un­ver­än­der­li­chen Kon­stan­te fest­ge­hal­ten und im nächs­ten Schritt für die Initia­li­sie­rung des Dis­plays ver­wen­det. Die ein­ge­bun­de­nen He­a­der-Da­tei­en er­lau­ben die Er­zeu­gung ei­nes SSD1306A­sciiAvrI2c-Ob­jekts mit dem be­zeich­nen­den Na­men „oled”. Ar­dui­no Sketch #de­fi­ne I2C_ADDRESS 0x3C SSD1306A­sciiAvrI2c oled; Der Über­sicht hal­ber ist es sinn­voll, die Initia­li­sie­rung des Dis­plays in ei­ne se­pa­ra­te Funk­ti­on aus­zu­la­gern, die dann beim Start der An­wen­dung auf­ge­ru­fen wird. Die Me­tho­den des Ob­jekts „oled” kön­nen Sie mit­tels Punkt-No­ta­ti­on auf­ru­fen.

Die Funk­ti­on in­itO­led() mel­det das Dis­play am I2C-Bus an, de­fi­niert ei­nen Font für die Darstel­lung und macht sich mit ei­nem „in­it oled ...” auf dem Dis­play be­merk­bar. Die fol­gen­de Pau­se de­lay(1000) (1.000 Mi­kro­se­kun­den) dient nur der Nach­voll­zieh­bar­keit auf dem Dis­play und ist für den Pro­gramm­ab­lauf nicht not­wen­dig. Die Aus­ga­be von in­di­vi­du­el­lem Text wird über ins­ge­samt drei Me­tho­den ge­re­gelt. Wie be­reits in der Initia­li­sie­rung ge­zeigt, ge­ben Sie ei­nen String mit ei­nem Zei­len­um­bruch durch den Auf­ruf oled.println(„String”) auf dem Dis­play aus. Sel­bi­ges gibt es auch oh­ne Zei­len­um­bruch: oled.print(„String”). Mit der Me­tho­de oled.cle­ar() lö­schen Sie die Zei­chen auf dem Dis­play. Die SD1306ASCII-Bi­blio­thek un­ter­stützt zu­dem ein­fa­che Me­tho­den zum Scrol­len von Tex­ten, die hier je­doch nicht zum Ein­satz kom­men. Die Funk­ti­on in­itO­led() fü­gen Sie im Qu­ell­text in­ner­halb der set­up-Funk­ti­on ein. Beim Pro­gramm­start wird sie au­to­ma­tisch auf­ge­ru­fen und das Oled-Dis­play in­itia­li­siert. Tipp: Die Darstel­lung ei­ner Zei­le ist stark vom ge­wähl­ten Font ab­hän­gig. Mit ei­ner „nicht­pro­por­tio­na­len Schrift­art” er­rei­chen Sie ei­ne fes­te Zei­chen­brei­te, wo­mit Sie bes­ser auf die Zei­chen­an­zahl pro Zei­le schlie­ßen kön­nen. Für die­se An­wen­dung wur­de je­doch die pro­por­tio­na­le Schrift „Ver­da­na 12” ge­wählt. So­mit ha­ben Sie je nach String cir­ca Platz für 11–20 Zei­chen pro Zei­le.

SERIELLE KOM­MU­NI­KA­TI­ON

Par­al­lel zur Aus­ga­be über das Dis­play kön­nen Sie die USB-Ver­bin­dung zum Rech­ner auch fürs De­bug­ging be­nut­zen. Für die Initia­li­sie­rung müs­sen Sie nur die serielle Über­tra­gungs­ge­schwin­dig­keit beim Pro­gramm­start de­fi­nie­ren [goo.gl/50ptSF]. Die­sen Teil la­gern Sie eben­falls in ei­ne ei­ge­ne Funk­ti­on aus: Der Wert „9600” gibt die Über­tra­gungs­ge­schwin­dig­keit in Baud an. Der hier ein­ge­tra­ge­ne Wert muss auch bei den Ein­stel­lun­gen in der Fuß­zei­le des se­ri­el­len Mo­ni­tors be­rück­sich­tigt wer­den (Abb. 5). Den Auf­ruf der Funk­ti­on in­itSe­ri­al() fü­gen Sie dann eben­falls un­ter die Initia­li­sie­rungs­funk­ti­on des Dis­plays in­ner­halb der set­up-Funk­ti­on ein. Über ein Se­ri­al.print() bzw. Se­ri­al. println() kön­nen Sie nun den se­ri­el­len Mo­ni­tor für die Aus­ga­be von zu­sätz­li­chen In­for­ma­tio­nen be­nut­zen [goo.gl/CjYZv7].

AB INS NETZ

Für die Netz­werk­ver­bin­dun­gen wird ein ENC28J60-Mo­dul mit ei­ner Be­triebs­span­nung von 3,3 V ver­wen­det, das über das SPIPro­to­koll an­ge­steu­ert wird. Auf dem Ar­dui­no-Con­trol­ler sind die Pins für die not­wen­di­gen Steck­ver­bin­dun­gen eben­falls über ei­ne Buch­sen­leis­te her­aus­ge­führt. Bit­te über­prü­fen Sie vor dem An­schluss, ob Ihr Netz­werk-Mo­dul für ei­ne Ver­sor­gungs­span­nung von 3,3 V aus­ge­legt ist, um ei­ne Be­schä­di­gung der Kom­po­nen­ten zu ver­mei­den (Abb. 6). Das An­schluss­sche­ma zeigt die Ver­ka­be­lung zwi­schen ei­nem kom­pa­ti­blen ENC28J60-Netz­werk-Mo­dul und dem Ar­dui­no UNO Rev. 3 Con­trol­ler (Abb. 7). Für die An­steue­rung der Net­werk­schnitt­stel­le be­nut­zen wir die Bi­blio­thek Et­herCard von Gui­do So­cher und Pas­cal Stang [goo.gl/0ynOq0]. Ei­ne aus­führ­li­che Do­ku­men­ta­ti­on fin­den Sie un­ter jeel­abs.org/pub/docs/ et­hercard. Ei­ne kur­ze In­stal­la­ti­ons­an­lei­tung kön­nen Sie im zu­ge­hö­ri­gen README auf der GitHu­bPro­jekt­sei­te ein­se­hen [goo.gl/tK­spIR]. Auch die­se Bi­blio­thek bringt

meh­re­re Co­de-Bei­spie­le mit, die nach der In­stal­la­ti­on über die Ar­dui­no-IDE un­ter „Da­tei › Bei­spie­le › et­hercard” zu fin­den sind (Abb. 4). Die Ein­bin­dung der Bi­blio­thek ist schnell er­le­digt. Er­gän­zen Sie nun Ih­ren Ar­dui­no Sketch um die not­wen­di­ge He­a­derDa­tei aus der Et­herCar­dBi­b­lio­thek: Et­herCard un­ter­stützt die Ver­ga­be von sta­ti­schen IP-Adres­sen so­wie ei­ne Adress­zu­wei­sung via DHCP. Egal für wel­che Va­ri­an­te Sie sich ent­schei­den, um ei­ne ein­deu­ti­ge MAC-Adres­se in­ner­halb Ih­res Netz­wer­kes kom­men Sie nicht her­um. Die­se Adres­se wird bei ei­ni­gen Mo­du­len mit­ge­lie­fert und ist auf der Rück­sei­te des Mo­duls ver­merkt. Ist das nicht der Fall, müs­sen Sie ei­ne MACAdres­se ver­ge­ben. Ach­ten Sie dar­auf, dass die­se MAC-Adres­se nur ein­mal in Ih­rem Netz­werk ver­ge­ben ist: Im Fol­gen­den wird die Zu­wei­sung via DHCP ge­zeigt. Ei­ne Be­schrei­bung für ei­ne Kon­fi­gu­ra­ti­on mit sta­ti­schen IP-Adres­sen fin­den Sie un­ter goo.gl/hkqaCx. Für die Kom­mu­ni­ka­ti­on via TCP/ IP und zur Steue­rung der Ab­fra­gein­ter­val­le be­nö­ti­gen Sie au­ßer­dem noch ei­ni­ge Va­ria­blen. Ei­ne URL für die ab­zu­fra­gen­de API bzw. Res­sour­ce darf na­tür­lich auch nicht feh­len: Die Initia­li­sie­rung der Netz­werk­schnitt­stel­le wird eben­falls in ei­ne se­pa­ra­te Funk­ti­on aus­ge­la­gert, die dann beim Start der An­wen­dung via set­up-Funk­ti­on auf­ge­ru­fen wird:

RE­QUEST UND RE­S­PON­SE

Nun sind die Vor­aus­set­zun­gen für ei­ne In­ter­net­ver­bin­dung ge­schaf­fen. Über die set­up-Funk­ti­on wer­den al­le ge­wünsch­ten Kom­po­nen­ten In­itia­li­siert. Nach der Aus­füh­rung der set­up-Funk­ti­on wech­selt das Pro­gramm in die loop-Funk­ti­on, um die Ar­beit auf­zu­neh­men. In­ner­halb des Lo­ops wird al­le 60 Se­kun­den ein Re­quest auf die API ab­ge­setzt. So­mit er­schei­nen die Dru­pal-Co­re-In­for­ma­tio­nen zur Ver­si­on 7 und 8 ab­wech­selnd im 60-Se­kun­den-Takt auf dem Oled-Dis­play. Bei ei­ner Zeit­über­schrei­tung (ei­nem so­ge­nann­ten time­out) wird auf dem Dis­play ei­ne ent­spre­chen­de Feh­ler­mel­dung aus­ge­ge­ben (TIME­OUT). Die loop-Funk­ti­on ba­siert auf ei­ner Idee von Ro­ger Clark [goo.gl/mex­jak] und ar­bei­tet mit­hil­fe ei­ner Switch-An­wei­sung und un­ter­schied­li­chen Zu­stän­den:

Der Zu­stand „0” über­prüft den Ti­mer für die API-Ab­fra­ge­wie­der­ho­lun­gen, tauscht al­le 60 Se­kun­den den API-End­punkt und wech­selt an­schlie­ßend in den Zu­stand „1”. Hier wird die ei­gent­li­che API-An­fra­ge ab­ge­setzt, der Ti­mer zur Be­stim­mung ei­ner Zeit­über­schrei­tung (2 Se­kun­den) ge­setzt und in den Zu­stand „2” ge­wech­selt. Der Zu­stand „2” ist aus­schließ­lich für die Über­wa­chung der Zeit­über­schrei­tung zu­stän­dig und de­fi­niert ge­ge­be­nen­falls ei­nen String für ei­ne Feh­ler­mel­dung. Hier­bei han­delt es sich um ei­ne be­helfs­mä­ßi­ge Um­set­zung zur An­zei­ge von „Kom­mu­ni­ka­ti­ons­pro­ble­men”, da die Me­tho­de brow­seUrl() aus der Bi­blio­thek Et­herCard kei­ne Mög­lich­keit zur Be­rück­sich­ti­gung ei­ner Zeit­über­schrei­tung mit­bringt. Durch die­sen Zwi­schen­schritt las­sen sich un­be­ant­wor­te­te API-An­fra­gen bzw. nicht er­reich­ba­re APIEnd­punk­te über ei­ne Feh­ler­mel­dung auf dem Oled-Dis­play oder über die serielle Schnitt­stel­le dar­stel­len. Wird nach der Zeit­über­schrei­tung und vor der nächs­ten API-An­fra­ge ei­ne „ver­spä­te­te” API-Ant­wort emp­fan­gen, wird der ent­spre­chen­de Ver­si­on-String den­noch an­ge­zeigt. Bei ei­ner dau­er­haf­ten Be­ein­träch­ti­gung – zum Bei­spiel durch ei­ne Un­ter­bre­chung der Netz­werk­ver­bin­dung – bleibt die­se Feh­ler­mel­dung auf dem Dis­play ste­hen. Durch das Ein­tref­fen der API-Ant­wort wird ei­ne Call­back-Funk­ti­on auf­ge­ru­fen. Dort wird nach dem Merk­mal ge­sucht, das den HTTPBo­dy vom HTTP-He­a­der trennt ([***]). Ist die­ser Teil ge­fun­den, wer­den die ers­ten fünf Zei­chen ent­fernt, der String in ei­ner Va­ria­blen ge­spei­chert und dann in den letz­ten Zu­stand „3” ge­wech­selt. Hier wird der String für das Oled-Dis­play aus­ge­ge­ben, nach­dem es vor­ab mit der Me­tho­de oled.cle­ar() ge­löscht wur­de. Vor dem Wech­sel in den An­fangs­zu­stand „0” wird der Ti­mer für den nächs­ten Durch­lauf ge­setzt, so­dass ei­ne er­neu­te API-Ab­fra­ge mit ei­ner Ver­zö­ge­rung von 60 Se­kun­den be­gin­nen kann.

DER TEU­FEL STECKT IM DE­TAIL

Bei der Um­set­zung des Pro­jekts kam es im­mer wie­der zu Pro­ble­men bei der Ver­ar­bei­tung des Ant­wort-Strings. Un­ter Zu­hil­fe­nah­me von Wi­reshark kön­nen Sie se­hen, dass die API ei­ne An­fra­ge über zwei Seg­men­te aus­lie­fert, wo­bei das Ein­tref­fen des ers­ten Seg­ments den Emp­fang wei­te­rer Seg­men­te durch ein In­ter­rupt un­ter­bricht. Erst durch die Me­tho­de per­sis­tTcpCon­nec­tion(true) in der Funk­ti­on in­itEt­her­net() kön­nen zu­sam­men­ge­hö­ri­ge Da­ten­pa­ke­te nach­ein­an­der über die Call­back-Funk­ti­on be­rück­sich­tigt wer­den [goo.gl/tLHD0A]. Mit Wi­reshark las­sen sich die­se Seg­men­te aus der API-Ant­wort über die Op­ti­on „Fol­gen › TCP Stream” dar­stel­len. Wei­ter­füh­ren­de Links, Qu­ell­tex­te und Be­zugs­quel­len fin­den Sie un­ter me­di­en­ver­bin­der.de/port­fo­lio/ver­si­ondis­play.

Abb. 1: Ein Hel­fer­lein – 0,96-Zoll-OLED-I2C-Dis­play mit 128 × 64 Pi­xeln

Abb. 2: Ein Ar­dui­no Sketch mit set­up()- und loop()-Funk­ti­on

Abb. 4: Ar­dui­no-Bei­spie­le aus „ei­ge­nen” Bi­blio­the­ken

Abb. 3: SSD1306-I2C-Ole­dAn­schluss­sche­ma / Ar­dui­no Uno Rev.3

Abb. 5: Aus­ga­be Se­ri­el­ler Mo­ni­tor „i2c_­scan­ner”

Abb. 7: ENC28J60-Mo­du­lAn­schluss­sche­ma / Ar­dui­no Uno Rev.3

Abb. 6: ENC28J60-Mo­dul mit Span­nungs­wahl­schal­ter für 3,3V und 5V

An­dré Lang­ner ist stu­dier­ter In­for­ma­ti­ker und ar­bei­tet seit 16 Jah­ren im Be­reich der Me­di­en­in­for­ma­tik. Als ge­lern­ter Ener­gie­elek­tro­ni­ker ist die Kom­bi­na­ti­on von Elek­tro­tech­nik und In­for­ma­tik sei­ne gro­ße Lei­den­schaft. In der Webent­wick­lung setzt er seit meh­re­ren Jah­ren auf Dru­pal. Au­ßer­dem in­ter­es­siert er sich be­son­ders für IT-Si­cher­heit und Da­ten­schutz.

Newspapers in German

Newspapers from Germany

© PressReader. All rights reserved.