Apps für Android programmieren leicht gemacht!
raspberry pi mit dem smartphone steuern - teil 2raspberry pi mit dem smartphone steuern - teil 2

2. Raspberry Pi mit dem Smartphone steuern

Bereits in unserem vorigen Artikel haben wir die wirklich wichtigste Funktion unserer App geklärt.
Bisher fehlt es unserer App allerdings an allem Anderen.

Wir wollen in diesem und in allen nachfolgenden Artikeln weitere Elemente zu unserer App hinzufügen.
Klappt alles nach Plan, dann werden wir am Ende der Artikelreihe eine fertige SSH-Fernsteuerung vorliegen haben.
Vorerst sollte ich vielleicht erklären wie ich mir das Ganze gedacht habe.

  • Wir sollten in unserer App Verbingungsdaten zu unserem Raspberry Pi eingeben können.
  • Wir sollten beliebig viele Befehle speichern können.
  • Für jeden gespeicherten Befehl sollte ein Knopf angezeigt werden, der bei Druck den Befehl auf dem Raspberry Pi ausführt.

Unsere Vorgehensweise als erstes die Hauptfunktion zu schreiben ist vielleicht nicht ganz konventionell, aber jetzt können wir uns ganz in Ruhe der App drumherum widmen. Folgende Komponenten müssen Programmiert werden:

  • Anzeige der Liste der gespeicherten Befehle.
  • Einstellungen/Verbindungsdaten ändern.
  • Neue Befehle hinzufügen.
  • Datenbank, um Befehle speichern zu können.

 

Datenbank:

Vielleicht sollten wir mit der Datenbank beginnen.
Wir benötigen sie, um Befehle unterspeichern und wieder anzeigen lassen zu können. Relevant sind lediglich 3 Spalten der Datenbank. Eine ID, einen Titel für den Befehl und den eigentlichen Befehl in Textform.

Als Grundlage dieses Abschnittes nutze ich einen bereits bestehenden Artikel, zur Erstellung einer SQL Datenbank.

//Erstes Konstrukt der Datenbank:
public class DB_Befehle extends SQLiteOpenHelper {

   //Version und Datenbanksname definieren (Sobald hier etwas geändert wird, wird die Datenbank in der App neu erstellt.)
   public static final int DB_VERSION = 1;
   public static final String DB_NAME = "befehle.db";

   //Vorschrift, wie die Tabelle dieser Datenbank auszusehen hat
   private static final String DB_TABELLE = "CREATE TABLE Befehle (Row integer primary key, ID INTEGER, Befehl TEXT, Titel TEXT)";

   //Konstruktor
   public DB_Befehle(Context context) {
      super(context, DB_NAME, null, DB_VERSION);
   }

   //Erstelle die neue Datenbank, beim Start der App
   public void onCreate(SQLiteDatabase db) {
      db.execSQL(DB_TABELLE);
   }

   //Lösche die alte Datenbank und erstelle eine Neue, falls sich die Version ändert
   public void onUpgrade(SQLiteDatabase db, int alteVersion, int neueVersion) {
      db.execSQL("DROP TABLE IF EXISTS Befehle");
      onCreate(db);
   }

   //Hier sinnlos, sonst die Wiederherstellung einer älteren Datenbanksversion
   public void onDowngrade(SQLiteDatabase db, int alteVersion, int neueVersion) {
      onUpgrade(db, alteVersion, neueVersion);
   }

   //Neuen Datenbankeintrag speichern      
   public void addBefehl(int ID, String titel, String befehl){      
          
    //Öffne die Datenbank, als beschreibbar      
    SQLiteDatabase db = this.getWritableDatabase();
         
    //Erstelle einen Eintrag und befülle ihn mit den Daten      
    ContentValues eintrag = new ContentValues();      
    eintrag.put("ID", ID);    
    eintrag.put("Titel", titel);  
    eintrag.put("Befehl", befehl);      
         
    //Füge den Eintrag zur Datenbank hinzu      
    db.insert("Befehle", null, eintrag);      
   }

   //Alle Daten der Datenbank auslesen, indem man eine Liste an Objekten des Typs Befehl erstellt
   public ArrayList<Befehl> getAlle(){
      //Erstelle eine Liste und ein Objekt b, welches wir später in die Liste einfügen
      Befehl b;
      ArrayList<Befehl> array_list = new ArrayList<>();

      //Öffne lesbar die Datenbank
      SQLiteDatabase db = this.getReadableDatabase();

      //Lese alle Datenbankeinträge, sortiert nach der ID absteigend
      Cursor res =  db.rawQuery( "select * from Befehle order by ID asc", null );

      //Gehe zum ersten Datenbankeintrag
      res.moveToFirst();
      while(!res.isAfterLast()){
         //Erstelle a neu, um es zu beschreiben und anschließend eine Kopie von a in die Liste zu kopieren
         b = new Befehl();
           
         //Fütter das Objekt a mit den nötigen Informationen
         b.titel = res.getString(res.getColumnIndex("Titel"));
         b.befehl = res.getString(res.getColumnIndex("Befehl"));
         b.ID = res.getInt(res.getColumnIndex("ID"));

         //Kopiere b in die Liste und gehe einen Datenbankeintrag weiter
         array_list.add(b);
         res.moveToNext();
      }

      //Gib die Liste mit den verschiedenen Kopien von b zurück
      res.close();
      return array_list;
   }

}

Wir haben hiermit jetzt eine komplette Klasse DB_Befehle.java, für die Speicherung der Befehle.
Über die Funktionen „addBefehl“ und „getAlle“ können wir neue Befehle einspeichern oder auslesen.

Die Funktion „getAlle“ gibt uns eine Liste der Klasse „Befehl“ wieder. In dieser Klasse sind alle 3 Spalten der Datenbank, für jeweils eine Zeile, enthalten.
Wir müssen nun noch eine Klasse „Befehl.java“ erstellen, damit diese die Informationen auch speichern kann.

class Befehl{

   public int ID;
   public String titel;
   public String befehl;

}

 

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld