HowTo - Esp-12F Mini WiFi Modul ESP8266 18650 Nodemcu Batterie 0.96” OLED DEMO Via Arduino GUI

About: MINT-Dozent

Intro: HowTo - Esp-12F Mini WiFi Modul ESP8266 18650 Nodemcu Batterie 0.96” OLED DEMO Via Arduino GUI

Hallo,

hier möchte ich Euch zeigen wie Ihr das mit auf der Hauptplatine verbaute OLED Display benutzen/ansteuern könnt. Um es möglichst einfach zu halten, benutze ich die ARDUINO GUI zum schreiben des CODEs und zum hochladen der Firmware.


Step 1: Einstellen / Einrichten Der ARDUINO GUI

Als erstes muss das ESP8266 Board in der ARDUINO GUI verfügbar gemacht werden.

Dazu gehen wir in die Einstellungen (Datei --> Einstellungen / Bild 1) der GUI und tragen unter

"Zusätzliche Boardverwalter-URLs:" http://arduino.esp8266.com/stable/package_esp8266com_index.json

ein (Bild 2). Damit bekommen wir den benötigten Zugang zu dem passenden Boardtreiber.

Jetzt können wir den Passenden Boardtreiber installieren.

(Werkzeuge --> Board: --> Boardverwaltung / Bild 3)

  • Dort im Suchfeld "esp8266" eintragen
  • Dann "esp8266 by ESP8266 Community" auswählen und die aktuellste Version installieren (Bild 4)
  • Die ARDUINO GUI neu starten
  • Danach das passende Board auswählen (z.B.: WeMos D1 R2 & mini)

Step 2: I2C Schnittstelle Scannen

Um zu sehen an welche PINs das OLED-Display angeschlossen wurde, scannen wir zuerst die I2C-Schnittstelle. So können wir auch sehen ob noch weitere I2C-Parts angeschlossen sind.

Den Sketch (Bild 1) auf den ESP Hochladen, den "Seriellen-Monitor" öffnen und auf die Ausgabe warten. Dort könnt Ihr dann sehen, welches Device wo gefunden wurde. (Bild 2 - DigitalPIN Scan)

Das Ergebnis merken.

In diesem Fall: SDA = D1 : SCL = D2 bei Adresse 0x3c

Step 3: Demo-Sketch Anpassen Und Auf Den ESP Hochladen

Das ist der Code für das OLED-Display DEMO

Im 5. Abschnitt findet Ihr die Stelle an der der Code ggf. modifiziert werden muss.

Also die Konfiguration für die I2C-Schnittstelle.

Aus diesem Code könnt Ihr euch auch viele Infos über die Benutzung eines OLEDs ableiten.

/**
* The MIT License (MIT) * * Copyright (c) 2016 by Daniel Eichhorn * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * *
/ Include the correct display library
// For a connection via I2C using Wire include
#include   // for I2C Wire
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
// Include custom images
#include "images.h"
// Initialize the OLED display using brzo_i2c
// D3 -> SDA
// D5 -> SCL
// SSD1306 display(0x3c, D1, D2); or SSD1306 display(0x3c, 5, 4); or SSD1306 display(0x3c, GPIO5, GPIO4);

**************************************************************************************************

An der folgenden Stelle werden dann die PINs für die I2C Schnittstelle konfiguriert.

// Initialize the OLED display using Wire library
SSD1306  display(0x3c, D1, D2);

***************************************************************************************************

#define DEMO_DURATION 3000
typedef void (*Demo)(void);
int demoMode = 0;
int counter = 1;
void setup() {
  Serial.begin(9600);
  Serial.println("OLED_DEMO");
  Serial.println("Start the DEMO");
  // Initialising the UI will init the display too.
  display.init();
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
}
void drawFontFaceDemo() {
    // Font Demo1
    Serial.println("Font DEMO 1");
    // create more fonts at  http://oleddisplay.squix.ch/

    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_10);
    display.drawString(0, 0, "ProMoScout");
    display.setFont(ArialMT_Plain_16);
    display.drawString(0, 10, "ProMoScout");
    display.setFont(ArialMT_Plain_24);
    display.drawString(0, 26, "ProMoScout");
}
void drawTextFlowDemo() {
  Serial.println("drawTextFlowDemo");
    display.setFont(ArialMT_Plain_10);
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.drawStringMaxWidth(0, 0, 128, 
      "Robots are \n the Future, and the Future, is now. But don't forget the Nature" );
}
void drawTextAlignmentDemo() {
  Serial.println("drawTextAlignmentDemo");
    // Text alignment demo
  display.setFont(ArialMT_Plain_10);  // Schriftart und -größe einstellen
  // The coordinates define the left starting point of the text
  display.setTextAlignment(TEXT_ALIGN_LEFT);  // Text_Ausrichtung einstellen
  display.drawString(0, 10, "Left aligned (0,10)");
  // The coordinates define the center of the text
  display.setTextAlignment(TEXT_ALIGN_CENTER);
  display.drawString(64, 22, "Center aligned (64,22)");
  // The coordinates define the right end of the text
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  display.drawString(128, 33, "Right aligned (128,33)");
}
void drawRectDemo() {
  Serial.println("drawRectDemo");
      // Draw a pixel at given position
    for (int i = 0; i < 10; i++) {
      display.setPixel(i, i);
      display.setPixel(10 - i, i);
    }
    display.drawRect(12, 12, 20, 20);
    // Fill the rectangle
    display.fillRect(14, 14, 17, 17);
    // Draw a line horizontally
    display.drawHorizontalLine(0, 40, 20);
    // Draw a line horizontally
    display.drawVerticalLine(40, 0, 20);
}
void drawCircleDemo() {
  Serial.println("drawCircleDemo");
  for (int i=1; i < 8; i++) {
    display.setColor(WHITE);
    display.drawCircle(32, 32, i*3);
    if (i % 2 == 0) {
      display.setColor(BLACK);
    }
    display.fillCircle(96, 32, 32 - i* 3);
  }
}
void drawProgressBarDemo() {
  Serial.println("drawProgressBarDemo");
  int progress = (counter / 5) % 100;
  // draw the progress bar
  display.drawProgressBar(0, 32, 120, 10, progress);
  // draw the percentage as String
  display.setTextAlignment(TEXT_ALIGN_CENTER);
  display.drawString(64, 15, String(progress) + "%");
}

Der folgende Link im Kommentar kann helfen ein Bild oder Logo so umzuwandeln, das es auf dem Display angezeigt werden kann ...

void drawImageDemo() {
  Serial.println("drawImageDemo");
    // see  http://blog.squix.org/2015/05/esp8266-nodemcu-how...
    // on how to create xbm files
    display.drawXbm(34, 0, Logo_width, Logo_height, Logo_bits);
}
Demo demos[] = {drawFontFaceDemo, drawTextFlowDemo, drawTextAlignmentDemo, drawRectDemo, drawCircleDemo, drawProgressBarDemo, drawImageDemo};
int demoLength = (sizeof(demos) / sizeof(Demo));
long timeSinceLastModeSwitch = 0;
void loop() {
  // clear the display
  display.clear();
  // draw the current demo method
  demos[demoMode]();
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  display.drawString(10, 128, String(millis()));
  // write the buffer to the display
  display.display();
  if (millis() - timeSinceLastModeSwitch > DEMO_DURATION) {
    demoMode = (demoMode + 1)  % demoLength;
    timeSinceLastModeSwitch = millis();
  }
  counter++;
  delay(10);
}

Step 4: Tools, Links Und Herkunft/Literaturhinweis

Ich möchte mich bei allen bedanken die an dem ein oder anderen Code mit gewirkt haben.

Die Grundlagen für diese Anleitung habe ich gefunden unter:

https://www.instructables.com/id/ESP8266-I2C-PORT-...

https://github.com/ThingPulse/esp8266-oled-ssd1306...

Viele Grüße

McUtty

Share

    Recommendations

    • Tiny Home Contest

      Tiny Home Contest
    • Furniture Contest 2018

      Furniture Contest 2018
    • Fix It! Contest

      Fix It! Contest

    Discussions