Beispielprojekt – NanoESP & Pretzelboard

In dem hier vorgestellten Beispielprojekt soll eine einfache Ansteuerung einer bunten RGB-LED realisiert werden. Die Steuerung soll über eine Webseite oder auch über eine Smartphone-App möglich sein. Die Verbindung kann sowohl über einen Router, und damit auch aus der Ferne über das Internet, als auch über den AccesPoint des Moduls hergestellt werden. Es ändert sich jeweils nur die zu adressierende IP.

Sie können das vorgestellte Programm hier herunterladen

Die RGB-Led auf dem Steckboard an den Pins D3, D5 und D6

Der Aufbau der Schaltung auf einem Steckboard

Die Programmierung erfolgt über die Arduino-Oberfläche, die sich jeder kostenlos auf der Seite www.arduino.cc herunterladen kann. Als Board kann einfach das Arduino Nano Board ausgewählt werden (ATmega328p Version). Bevor das Programm hochgeladen wird, müssen die WLAN Daten am Anfang des Programes eingetragen werden.

Nach dem Upload verbindet sich das Board dann automatisch mit dem Router und die LED D3 leuchtet zur Bestätigung. Über den Seriellen Monitor der Arduino-Umgebung wird nun die vom Router an das Modul vergebene IP ausgegeben. Wenn sich der PC im gleichen Netzwerk befindet, kann man einfach über die IP des Moduls auf die im Quelltext hinterlegte Webseite zugreifen.

Die Webseite mit ColorPicker

Die Webseite in einem Browser auf dem PC

Auf der Webseite wird man aufgefordert, eine Farbe zu wählen. Als Eingabeelement kommt hier das HTML5-Element ColorPicker zum Einsatz. Nach dem Auswählen wird die Farbe in der URL verschlüsselt übermittelt und kann einfach vom Board ausgewertet werden.

Gleichzeitig zu der Verbindung zum Router hat das Modul aber auch sein eigenes Netzwerk mit den Namen NanoESP erstellt, mit dem man sich nun z.B. mit einem Smartphone verbinden kann. Das Passwort und der Name des Netzwerks wurden vorher im Arduino-Programm festgelegt. Die Vergabe einer IP an ein neues Gerät funktioniert vollautomatisch. Die IP des Moduls in seinem selbst erstellen Netzwerk lautet 192.168.4.1. Nach dem Verbinden mit einem Smartphones kann man über diese IP die auch für Smartphones optimierte Webseite des Moduls aufrufen und über das ColorPicker-Element die Farbe auswählen.

Das ColorPicker Element im Android 5.0 Browser

Das ColorPicker Element im Android 5.0 Browser

Das Projekt lässt sich gut zu einer bunten Lampe erweitern, die auch aus der Ferne bedient werden kann. Mithilfe einiger weniger zusätzlicher Bauteile kann man so eine Designerlampe für das Wohnzimmer bauen. Die Steuerung kann über die verschiedensten Geräte bedient werden, z.B. auch mit einer Smartphone-App.

Die Lampe im Einsatz

Die Lampe im Einsatz

 App zum Steuern der RGB-LED

Android App zum Steuern der RGB-LED erstellt mit NetIO http://netio.davideickhoff.de

Doch der NanoESP kann noch mehr. Zu den bis jetzt mit dem Board realisierten Projekten gehören unter anderem eine Uhr die sich über das Internet automatisch stellt, eine Universalfernbedienung mit Webinterface, eine Messstation mit Cloud-Anbindung, Ansteuerung über Twitter und vieles mehr. Die Arduino-Oberfläche sorgt dafür, dass alle Programme leicht verständlich und einsteigerfreundlich  bleiben. Somit ist das NanoESP-Board ein Allrounder für das Thema Internet of Things.

Auszug aus dem Arduino-Programm

#define SSID "WLAN NAME"

#define PASSWORD „XXX“

 #define LED_WLAN 13

 

#define RED 3

#define GREEN 5

#define BLUE 6

#define GND 4

 

 #define DEBUG true

 

const char site[] PROGMEM = {

„<HTML><HEAD>\n<link rel=\“icon\“ href=\“data:;base64,iVBORw0KGgo=\“>\n<meta name=\“viewport\“ content=\“width=device-width, initial-scale=2.0, user-scalable=yes\“>\n<title>\nRGB LED\n</title>\n</HEAD>\n\n<BODY bgcolor=\“#FFFF99\“ text=\“#000000\“>\n<FONT size=\“6\“ FACE=\“Verdana\“>\nSelect Color\n</FONT>\n\n<HR>\n<BR>\n<FONT size=\“3\“ FACE=\“Verdana\“>\nChange the Color<BR>\nof the RGB-LED\n<BR>\n<BR>\n<form method=\“GET\“>\n\t<input type=\“color\“ name=\“rgb\“ onchange=\“this.form.submit()\“><BR>\n</form>\n<BR>\n<HR>\n\n</font>\n</HTML>\0″

};

 

#include <SoftwareSerial.h>

SoftwareSerial esp8266(11, 12); // RX, TX

 

void setup() {

  Serial.begin(19200);

  esp8266.begin(19200);

 

  pinMode(RED, OUTPUT);

  pinMode(GREEN, OUTPUT);

  pinMode(BLUE, OUTPUT);

 

  pinMode(GND, OUTPUT);

  digitalWrite(GND, LOW);

 

  if (!espConfig()) serialDebug();

  else digitalWrite(LED_WLAN, HIGH);

 

  if (configTCPServer())  debug(„Server Aktiv“); else debug(„Server Error“);

}

 

void loop() {

  String xBuffer;

  if (esp8266.available()) // check if the esp is sending a message

  {

    if (esp8266.find(„+IPD,“))

    {

      debug(„Incomming Request“);

      int connectionId = esp8266.parseInt();

 

      if (esp8266.findUntil(„?rgb=“, „\n“))

      {

        String hexstring = esp8266.readStringUntil(‚ ‚);

        long number = (long) strtol( &hexstring[3], NULL, 16);

 

        // Split them up into r, g, b values

        int r = number >> 16;

        int g = number >> 8 & 0xFF;

        int b = number & 0xFF;

 

        analogWrite(RED, r);

        analogWrite(GREEN, g);

        analogWrite(BLUE, b);

      }

      if (sendWebsite(connectionId, createWebsite())) debug(„Website send OK“);

   else debug(„Website send Error“);

    }

  }

}

[collapse]

10 Kommentare

  1. Jost

    Am Ende wird ein Projekt mit Uhr, Universalfernbedienung und Messstation, sowie eine App von NetIO beschrieben. Könnten sie mir dazu ein paar Infos zukommen lassen?
    Ich würde gern selbst ein solches Projekt genau in der Form umsetzen (mit einem SamsungTV).
    Gibt es eine Möglichkeit gleichzeitig im Internet zu surfen und Befehle (über NetIO) an den Microcontroller zu senden?

    1. fk (Beitrag Autor)

      Hi,
      ja die beschriebenen Projekte sind Teil des Adventskalenders. Sie werden Tag für Tag veröffentlicht oder können hier: http://iot.fkainka.de/tag-0-alle-projekte-fuer-ungeduldige-spoiler-alert
      heruntergeladen werden.

      Wenn das Bord in Ihrem WLAN angemeldet ist, können Sie surfen und das Board dennoch über die IP erreichen und Kommandos senden. Kein Problem also.

      1. Jost

        Dazu müssen die Codes der einzelnen Programme aber kombiniert werden oder?
        Habe wenig Erfahrung, daher auch der Adventskalender. ;)

        1. fk (Beitrag Autor)

          Das Universalfernbedienungsprogramm gibt es schon, für ein größere Projekte kannst du z.B. auch einen Treat im Forum erstellen (unter User Projekte), dann können dir andere Nutzer bei der Entwicklung helfen oder am Ende von deinem Projekt profitieren.

  2. Victor

    In dem Beispielprojekt wird eine neue SoftwareSerial mit einigen sehr sinnvollen Erweiterungen )z.B. esp8266.findUntil) verwendet. Wo kann man eine Dokumentation zu dieser Version von SoftwareSerial finden? Ich finde auf der Arduino Seite nur die Beschreibung der alten SoftwareSerial.

    Ich habe mit dem Sketch ein wenig rumgespielt, funktioniert problemlos mit PC und Android Tablet

    1. Michael
      1. Victor

        Vielen Dank für den Hinweis.
        Ich habe mir die Doku zu Serial angesehen, da sind die im Projekt verwenden Aufrufe dokumentiert.

  3. Kay

    Hallo fk,

    ok, das gefällt mir sehr. Habe gerade versucht den Franzis Pretzelboard Adventskalender zu kaufen für meinen Sohn und mich, würde eine schöne Zeit werden.

    Den gibt es aber anscheinend nicht, noch nicht, nicht mehr. Wissen Sie evtl. mehr? Wenn es davon eine Liste gibt, kaufe ich auch die Einzelteile und verpacke es halt allein ein.

    Viele Grüße
    Kay

    1. Rainer

      Hallo Kay,

      schau doch mal bei Conrad nach, dort wird er angeboten als
      IoT-Adventskalender 2015.

      Gruß, Rainer

    2. fk (Beitrag Autor)

      Hallo Kay,
      der Kalender ist schon auf dem Markt und sollte eigentlich in einer Conrad-Filiale noch erhältlich sein. Wenn er lokal ausverkauft können Sie vllt versuchen, den Kalender online bei Conrad zu bestellen. Ansonsten gibt es das Board ende November auch im Einzelverkauf. Dann könnten Sie sich das Board und die Bauteile einzeln besorgen.

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.