Wollis Homepage
IoT

Tipps und Tricks
IoT
  Conrad IoT Adventskalender 2015
  CheerLights mit ESP-12E
  ESP-01 Adapter erweitern
  Conrad IoT Adventskalender 2018
Studienarbeiten
Privates
Suche
Startseite > IoT > CheerLights mit ESP-12E

ESP8266 Entwicklerboard mit ESP-12E - Projekt CheerLights

Vorgeschichte

Nachdem ich die Experimente aus dem Conrad IOT Adventskalender 2015 nach gebaut hatte noch ein wenig herum probiert habe, habe ich meinen ESP-01 mit 9 Volt "getoastet". Meinen Irrtum habe ich erst bemerkt, als es schon angeschmorrt roch. Erstaunlicher weise, lief das ESP-01 Board immer noch, aber der Stromverbrauch hatte massiv zugenommen und die beiden Chips auf dem Board wurden sehr heiß und nach kurzer Zeit startete das Board immer wieder neu. Also war mein ESP-01 Board Elektroschrott. Ich habe mir die Boards angeschaut und fand ein Entwicklerboard mit ESP-12E sehr interessant und habe es bei Aliexpress.com für 3,15€ bestellt. Das Board hat eine eingebaute RGB LED sowie einen Lichtsensor. Nach nur zwei Wochen wurde das Board aus China geliefert.

Die ersten Versuche mit dem Board waren etwas ernüchternd. Ich dachte schon, dass das Board defekt sei. Aber es ist mir schließlich gelungen, mit der Android Anwendung IOT.apk das Board zu erreichen und dann über die Android Anwendung die RGB Lampe zu steuern. Nach diesem Erfolg konnte ich das Board aber immer noch nicht über den USB zu TTL Konverter CP-2102 ansprechen. Das Board hat 2 RXD und 2 TXD Pins (serielle Kommunikation). Ich hatte die separaten Pins vorne auf dem Board genommen. Aus lauter Verzweiflung habe ich dann die anderen beiden Pins genommen und sieh da, es funktionierte. Nach kurzer Prüfung ist mir dann aufgefallen, dass an den vorderen Pins die Beschriftung RXD und TXD vertauscht wurden.

Projekt CheerLights

Im Conrad IOT Adventskalender 2015 gab es an einem Tag ein Projekt CheerLights, dass mir von der Idee sehr gut gefallen hat. In dem Projekt wird ein Arduino ESP Board verwendet. Ich will versuchen, dieses Projekt ohne einen Arduino zu entwickeln, die Steuerung soll also über den Mikroprozessor des ESP8266 laufen.

Informationen zu CheerLights

CheerLights ist ein "Internet of Things" Projekt, des es Menschen verteilt über die ganze Welt erlaubt, die Farbe Ihrer Lichter über Twitter zu synchronisieren.

Über das CheerLights API kann die aktuelle Lichtfarbe abgefragt werden. Will man die aktuelle Lichtfarbe aller CheerLights auf der Welt auf Rot ändern, twittert man einfach eine Nachricht mit dem Inhalt #CheerLights I like the color red. Wenige Sekunden später wechselt dann die Farbe der CheerLights.

Entwicklungsumgebung - Arduino IDE für ESP8266

Da ich das Konzept, die Arduino IDE für die Programmierung des ESP8266 zu verwenden schon länger ausprobieren wollte, werde ich diese Entwicklungsumgebung für das Projekt verwenden. Für die Entwicklung habe für meine installierte Arduino IDE 1.6 die ESP8266 funktionalitäten nachinstalliert. Das geschieht einfach, indem im Einstellungsmenü Datei->Voreinstellungen

http://arduino.esp8266.com/package_esp8266com_index.json
als zusätzliche Boardverwalter URL eingetragen wird.
Arduino IDE Voreinstellungen

Erste Versuche

Wie ich schon kurz beschrieben hatte, war ich auf eine vertauschte RXD und TXD Beschriftung hereingefallen. Nachdem ich dieses Problem gelöst hatte, musste ich zuerst einmal weiter ausprobieren wie das Board funktioniert. Nach kurzem Testen habe ich herausgefunden, dass der Jumper, wenn er geschlossen ist, dazu führt, dass das Board im Flash Modus startet. Der Flash Modus ist daran zu erkennen, dass die rote LED an GPIO0 und die RGB LED grün und blau leuchtet. In diesem Modus kann mit der Arduino IDE ein Programm auf das Board geflasht werden. Wird das Board mit offenen Jumper gestartet, leuchtet keine LED (außer die Power LED) und das geflashte Programm wird ausgeführt.

ESP-12E Entwickler Board

Das Programm für die Cheerlights

Das Programm für das ESP Board ist eine Portierung des Cheerlights Programm aus dem Conrad Adventskalender in das mit der ESP Erweiterung für die Arduino ISP ausgelieferte Beispielprogramm ESP8266HTTPClient/BasicHttpClient.

Von dem Programm wird über die Cheerlights API alle 10 Sekunden die aktuelle Farbe geholt und diese wird über die serielle Schnittstelle ausgegeben und die RGB LED des Boards wird entsprechend eingestellt. Für das Programm werden die Bibliotheken RGBLED und RGBColor verwendet.

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <RGBLED.h>
#include <RGBColor.h>

#define USE_SERIAL Serial

#define SSID "###YOUR_SSID###"
#define PASSWORD "###YOUR_WLAN_PASSWORD###"

#define RED 15
#define GREEN 12
#define BLUE 13

RGBLED rgbLED = RGBLED(RED, GREEN, BLUE, 0, 3, 0);

RGBColor red   = RGBColor(100, 0, 0);
RGBColor green = RGBColor(0, 50, 0);
RGBColor blue  = RGBColor(0, 0, 100);
RGBColor cyan   = RGBColor(0, 100, 100);
RGBColor white = RGBColor(100, 100, 100);
RGBColor warmwhite  = RGBColor(99, 96, 90);
RGBColor oldlace  = RGBColor(99, 96, 90);
RGBColor purple = RGBColor(50, 0, 50);
RGBColor magenta = RGBColor(100, 0, 100);
RGBColor yellow = RGBColor(100, 100 , 0);
RGBColor orange = RGBColor(100, 65 , 0);
RGBColor pink = RGBColor(100, 75 , 80);



ESP8266WiFiMulti WiFiMulti;
String oldColor;

String getCheerlightColor()
{
  HTTPClient http;
  String payload;
  String color="";
  USE_SERIAL.print("[HTTP] begin...\n");
  // configure traget server and url
  http.begin("api.thingspeak.com", 80, "/channels/1417/field/1/last.txt");

  USE_SERIAL.print("[HTTP] GET...\n");
  // start connection and send HTTP header
  int httpCode = http.GET();
  if (httpCode) {
    // HTTP header has been send and Server response header has been handled
    USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);

    // file found at server
    if (httpCode == 200) {
      WiFiClient* payloadStream = http.getStreamPtr();
      payloadStream->readStringUntil('\n');
      color = payloadStream->readStringUntil('\r');
      USE_SERIAL.println("Color:"+color);
    }
  } else {
    USE_SERIAL.print("[HTTP] GET... failed, no connection or no HTTP server\n");
  }
  return color;
}

void setup() {

  USE_SERIAL.begin(115200);

  USE_SERIAL.println();
  USE_SERIAL.println();
  USE_SERIAL.println();

  for (uint8_t t = 4; t > 0; t--) {
    USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
    USE_SERIAL.flush();
    delay(1000);
  }

  WiFiMulti.addAP(SSID, PASSWORD);

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {
  }
  String color = getCheerlightColor();
  if (color != oldColor)
  {
    if (color == "red") rgbLED.crossfade(red);
    if (color == "green") rgbLED.crossfade(green);
    if (color == "blue") rgbLED.crossfade(blue);
    if (color == "cyan") rgbLED.crossfade(cyan);
    if (color == "white") rgbLED.crossfade(white);
    if (color == "warmwhite") rgbLED.crossfade(warmwhite);
    if (color == "oldlace") rgbLED.crossfade(oldlace);
    if (color == "purple") rgbLED.crossfade(purple);
    if (color == "magenta") rgbLED.crossfade(magenta);
    if (color == "yellow") rgbLED.crossfade(yellow);
    if (color == "orange") rgbLED.crossfade(orange);
    if (color == "pink") rgbLED.crossfade(pink);
    
    oldColor = color;
  }

  delay(10000);
}
Download: Cheerlights_ESP8266_V1_0.ino
Druckversion
(C)1996-2020 Wolfgang Büning  >> Impressum