Grove Shield zum schnellen Aufbau von Schaltungen und LCD mit RGB Backlight

Die Firma Seed Studio aus China hat bei mir angefragt, ob ich mir nicht mal deren Grove-Produkte anschauen und bewerten will. Also habe ich mir ein paar Teile zuschicken lassen, um die Sache einmal auszutesten. Dadurch habe ich fast nichts für die Komponenten bezahlen müssen. Selbstverständlich ist meine Bewertung trotzdem neutral und wird nicht in Schönfärberei ausarten. Ich verrate hier auch den einen oder anderen Haken, der mir aufgefallen ist.

Was ist Grove?


Grove nennt seeed sein Konzept, mit dem Breadboard und Jumper-Kabel überflüssig werden sollen. Alles wird nur noch mit 4-poligen Kabeln verbunden. Diese steckt man einfach auf der einen Seite in die Buchse des Arduino und mit der anderen in die Buchse des Grove Sensors.

Entweder kauft man sich gleich einen Arduino mit Grove-Buchsen, der heißt in der Uno Variante Seeeduino (hier im chin. Seeed Shop oder bei Amazon Deutschland), der hat schon von Haus aus 2 I2C Buchsen und eine UART (serielle Schnittstelle) auf dem Board.

Oder falls man schon selbst einen Arduino Uno hat, holt man sich den Grove Shield für seinen Uno (hier im chin. Seeed Shop oder bei Amazon Deutschland). Der ist kompatibel mit dem normalen Uno Layout und wird wie jedes andere Shield aufgesteckt. Der Vorteil hier: das Shield hat gleich 16 Buchsen für I2C, Digital, Analog und UART.


Das Ganze gibt es auch als Arduino Nano Version und heißt dann Seeeduino Nano (hier im chin. Seeed Shop ,derzeit nicht bei Amazon Deutschland) als Arduino, allerdings nur mit einer I2C-Buchse - aber für dieses LCD Projekt würde das sogar reichen.

Oder wieder, falls man schon einen eigenen Arduino Nano hat, als Shield für den Arduino Nano (hier im chin. Seeed Shop, derzeit nichtbei Amazon Deutschland). Wobei man hier nicht das Shield auf den Arduino steckt, sondern umgekehrt den Nano in das Shield. Damit erweitert man ihn um 8 Grove-Buchsen, 3x analog, 3x digital, 1x UART, 1x I2C.


Jetzt braucht man nur noch ein paar der Grove Verbindungskabel (hier im chin. Seeed Shop oder bei Amazon Deutschland), um damit eine breite Palette von Grove Sensoren, Displays und Aktuatoren anschließen zu können. Diese kommen alle auf einer kleinen Platine, auf der auch eine 4-polige Grove-Buchse verlötet ist.

Die meiste Auswahl hat man direkt im Shop von Seeed. Zwar ist seeed in China ansässig, aber der Shop ist in gut lesbaren englisch geschrieben. Allerdings gehört die Website nicht zu den schnellsten. Es dauert immer wieder ein paar Sekunden zwischen den Seiten. Hektisches Herumgeklicke ist hier also nicht, sondern es ist eher Geduld gefragt. Preislich ist der chinesische Shop günstiger. Es kommen allerdings noch einmal Versandkosten nach Deutschland oben drauf, das waren bei mir etwa 9 Euro. Das lohnt sich jetzt nicht für ein Einzelteil. Der Versand hat etwa zwei Wochen gedauert, was recht gut ist. Ich habe auch schon 8 Wochen auf ein Teil aus China gewartet. Das war allerdings von einem Billiganbieter und der Versand war da kostenlos. Bis 22 Euro Bestellwert muss man sich übrigens keine Gedanken über den Zoll machen. Dies sind (Stand 2019) Sendungen mit geringem Wert und es werden keine Zollgebühren darauf erhoben.


Wer es schneller möchte, der mag nach seinem Grove Teil auf amazon Deutschland suchen. Hier sind die Artikel ein wenig teurer, werden aber von amazon versandt und sind damit ab 29 € versandkostenfrei. Außerdem sind sie natürlich sehr viel schneller da. Dürfte sich gerade lohnen, wenn es um kleinere Bestellungen geht.

Mit einem leisen Klick rasten die Kabel ein und man hat eine Komponente an seinen Arduino angeschlossen. Zum Lösen muss man an der Oberseite drücken. Damit zieht man einen kleinen Hebel zurück, der sich vorbei an der Buchse festgeklemmt hatte.

Das hat den Vorteil, dass man eine feste Verbindung hat, die sich nicht so schnell lösen sollte. Auch wenn es ruckelt, wackelt und vibriert, wie etwa im Auto oder am Fahrrad, wird die Verbindung halten. Im Prinzip kann man sich so das Löten sparen, wie ich es ja häufig gemacht habe, wenn ich eine Schaltung ausgetestet hatte und dann in einem Gehäuse verbaut habe. Den eigentlich nur lose ins Breadboard eingesteckten Jumper kann man nicht trauen - allzuschnell ist mal was rausgerutscht.


Alle Grove Produkte kamen übrigens gut verpackt bei mir und einer Qualität, wie ich sie nur selten von meinen China-Sellern gewohnt bin. Da bekam ich schon mal so schief aufgelötete Header, dass ich diese neu löten und gerade rücken musste. Oder Lötspritzer auf der Platine, die einen Kurzschluss verursacht. In der Regel waren aber Lötmittelreste angesagt.
Bei den Seeed Produkten war die Qualität überall einwandfrei, ja vorbildlich. Alles gerade eingelötet. Keine schiefen Header. Nicht zu viel oder zu wenig Lötzinn benutzt. Die Platinen nicht scharfkantig abgebrochen. Nicht mal Flussmittelreste auf der Rückseite - die Platinen scheinen extra noch einmal gereinigt worden zu sein. Der Silkscreen sehr gut lesbar. Die Shields passen ohne großes Hin und Her gleich auf den Arduino. Die SMD Komponenten alle gerade aufgelötet. Da hätte auch Made in Germany drauf stehen können - es hätte es geglaubt.

Allerdings sind die Sensoren, wenn man sie als Grove Produkt kauft, auch ein klein wenig teurer. Na klar, da muss noch eine Grove-Buchse drauf und die Qualität ist sehr gut. Trotzdem ist der Pfennigfuchser in mir auch mit weniger zufrieden - Hauptsache, es funktioniert. Und wenn ich den Lötkolben selbst schwingen muss - who cares? Macht doch auch irgendwie Spaß.

Für diejenigen, die nicht allzusehr auf den Preis schauen müssen, Qualität wollen und den Lötkolben lieber meiden, ist das Grove System eine super Lösung. Einfach die Komponenten als Grove kaufen, zusammenstecken, fertig. Kein Löten, kein Breadboard-Gefummel. Höchstens ein bisschen Klebeknete, um die Einzelkomponenten in Position zu halten. Ich könnte mir Grove auch gut für Schulen vorstellen. Da möchte man wohl nur ungern Lötkolben aufstellen. Und das Verbinden der Komponenten ist kinderleicht. Durch die Kabel können die Schaltungen dann nach dem Unterricht wieder auseinandergenommen werden, um von der nächsten Schulklasse wieder zusammengesteckt zu werden.

Wichtig ist hier allerdings, dass ich auch alle Platinchen, die ich brauche, ob Sensor, Motor oder Display auch mit Grove-Buchse bekomme. Und da ist der orginal Shop in China gut bestückt mit zur Zeit 134 Sensoren, 32 LEDs, 20 Eingabekomponenten, 21 Funkkomponenten, 18 Displays, 29 Aktuatoren (Lautsprecher, Motoren etc.), 26 Breakout-Teile wie Shields, 40 Zubehörteile wie Kabel und 45 Kits. Allerdings kommen hier noch einmal nicht unerhebliche Versandkosten hinzu und es dauert halt etwa zwei Wochen, bis das Gewünschte da ist.
Auf amazon scheint es nicht alle Grove Komponenten mit Versand aus Deutschland zu geben. Aber vielleicht wird man dann bei Conrad, Völkner, Reichelt oder Eckstein fündig. Sie bieten alle Versand aus Deutschland und haben viele Grove-Teile auf Lager.

Ich persönlich finde das Grove Konzept gar nicht mal schlecht. Nur habe ich schon einen ganzen Sack voll von Modulen auf eigenen kleinen Platinchen. Schön wäre hier, wenn ich statt der Header einfach eine Grove-Buchse einlöten könnte und meine Module damit dem Grove-Universum einverleiben könnte. Doch hier ist der Haken: der Pin-Abstand der Grove-Buchsen, die man bei seeed zu kaufen bekommt ist 2.0 mm, der Pin-Abstand auf all meinen Modulen, auf meinen Lochrasterplatinen, einfach überall ist 2.54 mm (1/10 Zoll). Ich krieg die Buchsen also nicht in die Headerlöcher gelötet.

Es gibt allerdings ein - ich nenne es mal - Adapterkabel, auf der einen Seite Grove-Stecker, auf der anderen Seite 4 female Jumper-Kabel (gibt es auch in male). Damit könnte ich die (bei mir eh schon eingelöteten) Header wieder verbinden. Obwohl hier die Verbindung wieder nicht so stabil ist, weil eben kein Grove-Stecker mit "Widerhaken".

Eine Grove-Buchse, unten mit 2.54 mm Rastermaß und oben normal mit 2 mm Stecker wäre toll, aber die wird es wohl leider nicht so schnell geben, weil nicht so einfach herzustellen. Und wer weiß? Vielleicht hat seeed ja absichtlich das ungewöhnkiche 2mm-Rastermaß gewählt, um die Kunden an die eigenen Sensoren zu binden?

Arduino Libraries für Grove-Produkte


Nun will ich aber auch mal eine Grove-Komponente an das Grove-Shield anschließen. Ich habe dazu das Grove LCD RGB Backlight (hier im chin. Seeed Shop oder bei Amazon) ausgewählt. Das ist ein über I2C angesteuertes 1602-LCD mit einem besonderen Feature: Die Hintergrundbeleuchtung ist nicht einfarbig, sondern kann über eine RGB-LED eine beliebige Farbe annehmen. Das finde ich direkt sinnvoll, um mit rot vor etwas zu warnen oder mit grün zu signalieren, dass alles okay ist. So weiß man über den Status Bescheid, auch wenn man zu weit weg ist, das Display lesen zu können, die Farbe sagt einem schon das Wichtigste. Und außerdem ist es natürlich ein tolles Spielzeug.

Natürlich hat das Modul eine Grove-Buchse (I2C). Die Qualität des Moduls ist wieder sehr gut. Normalerweise kenne ich die über I2C angesprochenen 16x2 Displays mit einer angeflanschten Treiberplatine auf dem Rücken und einem Poti zum Einstellen des Kontrastes. Das Grove-Modul hingegen flach und aufgeräumt. Sieht gleich viel professioneller aus. Die die RGB-LED ist in das LCD integriert, also kein Pfusch mit extra LED. Alles sehr durchdacht und gut umgesetzt. Selbst an genügend Bohrlöcher ringsrum zur Befestigung hat man gedacht.


Jetzt schießt mir natürlich gleich die Frage durch die Kopf? Und wie spreche ich jetzt die RGB-LED an? Welche Library benutze ich? Die I2C-LCD-Lib, die ich schon habe, oder wie? Meine Frage wird schnell beantwortet, als ich im Shop beim Produkt auf Documents klicke und dort unter "Software Library" ein .zip herunterlade, das ich entpacke und dann in mein Arduino-libraries-Verzeichnis kopiere. Schon erscheinen in meiner Arduino Entwicklungsumgebung unter Datei / Beispiele / Grove LCD RGB Backlight 12 Beispiele. Ich wähle das Hello World aus, lade es auf den Arduino und klappt. Total easy, so soll es sein, so macht das Spaß. Später sehe ich dann noch, dass ich im Bibliotheksverwalter nur nach "Grove LCD" hätte suchen müssen. Die Library kennt die Arduino IDE schon und ich hätte sie nur noch installieren müssen.

Die Befehle, mit dem das LCD angesprochen wird, sind einprägsam und selbsterklärend: rgb_lcd lcd; definiert ein Display; lcd.begin(16, 2); initialisiert ein 16x2 Display, mit lcd.setCursor(x, y) setze ich den Cursor; mit lcd.print (msg); gebe ich einen Text aus und mit lcd.setRGB (r, g, b) setze ich die Farbe der Hintergrundbeleuchtung. Den Rest der Möglichkeit finde ich in den anderen Beispielen.

Die Display-Helligkeit wird übrigens auch über Software-Befehle gesteuert und der Kontrast ist von Haus aus schon optimal eingestellt, so dass kein Poti hierfür nötig ist.

Noch mehr Infos zu dem LCD finde ich im Seeed-Wiki. Hier findet man schnell die gesuchte Komponente und weitere Informationen dazu, z. B. das unser LCD je eine I2C Adresse für das LCD (0x3e) und für die RGB-LED (0x62) benutzt, Anwendungsbeispiele mit Bildern und von anderen Benutzer umgesetze Ideen. Außerdem findet sich hier eine Schritt für Schritt Anleitung, angefangen von welchen Komponenten man braucht (mit Links auf den shop) bis zur Auswahl eines Beispiel-Sketches.

Am Schluss sind noch weiterführende Ressourcen aufgelistet wie die PDFs der Datasheet der verbauten Hardware und ein Link auf die Github-Seite zum Display. Wer es ganz genau wissen will, kann hier z. B. noch den C++-Source-Code durchgehen, der die Library darstellt und - wenn er kann - um eigene Befehle erweitern, das Projekt ist Open Source.

Bevor es jetzt an den Source-Code geht, hier ein Video, in dem ich das bis hierher Geschriebene noch einmal erläutere und zeige:



Source-Code

//////////////////////////////////////////////////////// // (C) 2019 by Oliver Kuhlemann // // Bei Verwendung freue ich mich über Namensnennung, // // Quellenangabe und Verlinkung // // Quelle: http://cool-web.de/arduino/ // //////////////////////////////////////////////////////// #include <Wire.h> // Lib für den I2C-Bus #include "rgb_lcd.h" // Lib für das Grove LCD RGB Backlight rgb_lcd lcd; void setup() { lcd.begin(16, 2); // 16x2 LCD initialisieren } void printRGB(int r, int g, int b) { char msg[17]; lcd.setCursor(0, 1); //zählt ab 0 sprintf(msg, "R%03d G%03d B%03d", r, g, b); lcd.print (msg); } void testBL(int r, int g, int b, char *text) { lcd.clear(); lcd.setRGB (r, g, b); // RGB lcd.print (text); printRGB(r, g, b); delay (2000); } void loop() { int r; int g; int b; int d=5; testBL(255,0,0,"rot"); testBL(0,255,0,"gruen"); testBL(0,0,255,"blau"); testBL(255,255,255,"weiss"); testBL(255,255,0,"gelb"); testBL(255,0,255,"magenta"); testBL(0,255,255,"cyan"); while (1) { lcd.clear(); r=255; g=0; b=0; // rot lcd.setRGB (r,g,b); lcd.print ("Rainbow colors"); // von rot nach gelb r=255; g=0; b=0; for (g=0; g <= 255; g++) { delay (d); lcd.setRGB (r,g,b); } // von gelb nach grün r=255; g=255; b=0; for (r=255; r >= 0; r--) { delay (d); lcd.setRGB (r,g,b); } // von grün nach cyan r=0; g=255; b=0; for (b=0; b <= 255; b++) { delay (d); lcd.setRGB (r,g,b); } // von cyan nach blau r=0; g=255; b=255; for (g=255; g >= 0; g--) { delay (10); lcd.setRGB (r,g,b); } // von blau nach magenta r=0; g=0; b=255; for (r=0; r <= 255; r++) { delay (d); lcd.setRGB (r,g,b); } // von magenta nach rot r=255; g=0; b=255; for (b=255; b >= 0; b--) { delay (d); lcd.setRGB (r,g,b); } } } Die wichtigste Befehle habe ich ja bereits kurz erläutert. Viel mehr wird in dem Beispielprogramm oben auch nicht benutzt.

Es soll besonders das neuartige Feature der farbigen Hintergrundbeleuchtung austesten und anzeigen: zuerst werden ein paar Standardfarben angezeigt und danach wird geschmeidig durch alle Hintergrundfarben gewechselt. Das sieht schon sehr nett aus.

Hier nun eine Demonstration einiger Beispielprogramme und des Programmes oben. Außerdem gehe ich noch einmal auf die Grove Komponenten ein und zeige sie in Aktion: