Arduino Yun – Texte aus einer sqlite3 Datenbank laden.

Das hat sicher schon jeder erlebt der mit dem Arduino zu tun hat. Gerade bei größeren Projekten ist es unerlässlich auch mal Debugmeldungen im Seriellen Monitor oder auf einem LCD Display auszugeben um zu sehen was genau gerade passiert oder an welcher Stelle es hapert. Doch dann geschehen unvorhergesehene Dinge. Einmal lässt sich das Sketch nicht auf den Arduino brennen, dann wird scheinbar die loop() Funktion nicht mehr ausgeführt. Klingt ganz nach Speicherproblemen. Der Arduino verfügt von Haus aus über sehr wenig SDRAM und Flashspeicher, da muss man schon genau aufpassen wie man Variablen deklariert oder wie viele Strings man in seinem Sketch verwendet.

Temboo SQLite3

In einem meiner letzten Projekte mit dem Arduino Yun hatte ich ebenfalls dieses Probleme. Ich wollte einen aussagekräftigen Text mit Sensorwerten per eMail versenden. Leider konnte ich in meinem Fall nicht einmal 30 Zeichen versenden denn der Speicher war erschöpft. Auch das speichern der Strings im EEPROM brachte nicht das erwünschte Resultat da es einfach zu viele waren.

Da hatte ich die Idee, alle meine Texte aus einer sqlite3 Datenbank zu laden, die ich in meinem Projekt als Debugmeldungen ausgeben wollte. Ich legte also per SSH eine SQLite3 Datenbanktabelle mit zwei Spalten an. In der ersten Zeile sollte eine Nummer stehen über die ich den zugehörigen Text auslesen wollte. In Spalte 2 steht der Text den ich im Programm ausgeben will. Also z.B. 1,Foto an Dropbox senden. Nun brauchte ich eine Möglichkeit den Arduino auch die gewünschte Statumeldung ausgeben zu lassen.

Im Arduino Sketch schreibt man normalerweise folgendes um einen Text im Seriellen Monitor auszugeben.

Statt die Meldung also direkt im Arduino-Sketch zu speichern und so wertvollen Speicherplatz zu verschwenden werde ich nun eine Funktion schreiben, der ich lediglich die ID des Datenbankeintrages übergebe, dessen Text ich auslesen möchte.

Die Funktion wird anschließend wie folgt aufgerufen.

Hier übergebe ich der Funktion getStringFromSQLite die ID 1 und bekomme als Rückgabewert den zugehörigen Text aus der Datenbank als String, der anschließend mit Serial.print() ausgegeben wird.

 

 

SQLite Datenbank anlegen

Es gibt einige gute Tools für Windows, Linux oder Mac Betriebssysteme, mit denen man sqlite Datenbanken anlegen und verwalten kann. Ich werde hier aber zeigen wie man das Ganze über das Terminal macht.

Öffnen Sie also ein Terminal und stellen Sie per SSH eine Verbindung zum Arduino her. Ihr Arduino muss sich dafür natürlich im selben Netzwerk wie der Rechner befinden, mit dem Sie auf diesen  zugreifen wollen.

Gehen Sie Ihr Passwort ein und wechseln Sie in das Verzeichnis, in dem Sie die Datenbankdatei anlegen wollen. Ich habe zuvor ein Verzeichnis mit dem Namen settingsFiles angelegt, in dem ich all meine Yun Datenbanken und Settings Files ablege.

Legen Sie eine Datenbank an.

Erstellen Sie nun eine Tabelle in dieser Datenbank.

Wenn Sie wissen dass Sie keine Texte länger als z.B. 100 Zeichen benötigen, können Sie anstatt „wert TEXT“ auch „wert VARCHAR(100)“ schreiben.

Übrigens können Sie mit folgendem Befehl die Namen aller in der angegebenen Datenbank vorhandenen Tabellen auslesen.

Ein paar Zeilen in die Datenbank einfügen

Alle Werte aus der Datenbank auslesen

Einen bestimmten Wert anhand der ID (bezeichner) auslesen.

Hier wird der Text „Es werden Fotos aufgenommen und auf SD gespeichert“ ausgegeben.

Einen bestimmten Eintrag ändern Sie mit folgendem Befehl.

 

 

Arduino Sketch

In Zeile 12 sehen Sie, wie die Funktion aufgerufen wird.
Hier wird der Text (wert) aus der Datenbanktabelle „settings“ angezeigt, bei dem der (Bezeichner) den Wert „1“ hat.

 

 

Python Script

bewegungsmelder.py

Dieses Script wird immer dann ausgeführt, wenn im Arduino die Funktion getStringFromSQLite aufgerufen wird. Dabei wird dem Python Script eine Ganzzahl übergeben. Es wird eine Datenbankabfrage ausgeführt bei der der Wert in Spalte „wert“ zurückgegeben wird. Also praktisch in der Art. Zeige mir den Text in Spalte „wert“ aus der Datenbanktabelle „settings“ bei der der Bezeichner den Wert „123“ hat.

 

So das war es auch schon. Ich hoffe Ihnen hat dieser Beitrag gefallen.
Über Fragen und Tipps in den Kommentaren würde ich mich freuen,

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

Kommentare geschlossen.