Heltec Wifi LoRa 32

Aus Hackerspace Ffm
Version vom 31. Januar 2018, 00:03 Uhr von Tut (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

ESP32 mit SSD1306 OLED und LoRa und Antenne.jpg

Heltec Wifi LoRa 32 - ESP32 mit OLED und LoRa

Arduino

Um dieses sehr interessante Modul via Arduino nutzen zu können, reichte bei mir die Standard-ESP32-Arduino Bibliothek, die man wie dort beschrieben installiert. Aus der recht großen Liste der Arduino Boards konnte ich gleich "Heltec_WIFI_LoRa_32" wählen und damit das Modul programmieren. Es gibt auch ein Dokument mit dem Heltec ESP32 Pinout.

Weisse LED

Sollte an Pin 25 sein.

Display

Verbaut ist ein OLED Display vom Typ SSD1306, es ist ein 128x64 Monochrom Display. Es ist NICHT an den Standard-I2C-Leitungen angeschlossen und braucht ein Reset-Signal. Bei manchen Bibliotheken sind daher kleine Modifikationen nötig, um das Display zu benutzen.

Anschlussbelegung

  • Pin 4 = SDA (ist nicht der Standard-I2C-Port vom ESP32)
  • Pin 15 = SCL (ist nicht der Standard-I2C-Port vom ESP32)
  • Pin 16 = RST (muss bei Start kurz auf Low, dann auf High gesetzt werden)

Bibliotheken zur Steuerung des Displays

In Verbindung mit dem ESP32 gibt es hierzu mehrere Bibliotheken um es zu nutzen:

  • squix78 ssd1306.h ist besonders auf den ESP8266 und ESP32 beliebt und bietet einen recht umfangreichen Funktionsumfang, erst recht sobald noch OLEDDisplayUi.h eingefügt wird. Dies gibt ein einfaches User-Interface, was darauf ausgelegt ist, Inhalte über mehrere Displayseiten anzuzeigen und diese nett hin- und her zu scrollen.
    • Klasse mit
      SSD1306  display(0x3c, 4, 15);
      instanzieren und in setup() das Reset-Signal erzeugen:
      pinMode(16,OUTPUT); digitalWrite(16, LOW); delay(50); digitalWrite(16, HIGH);
  • U8x8 und U8g2 - Nur für Monochrome Displays, optimiert auf geringen Ressourcenverbrauch
    • U8x8: Minimalistische Version ohne Display-Puffer im uC, nur Textausgabe mit einem 8x8 Monospace Font
      • Der folgende Konstruktor funktioniert bei mir:
        U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);
    • U8g2: Erweiterte Version, enthält Fonts in vielen Größen, auch besonders kleine Fonts.
      • Der folgende Konstruktor funktioniert bei mir:
        U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);
  • Adafruit SSD1306 hat viele Funktionen und wird zusammen mit Adafruit_GFX auch für farbige Displays benutzt.
    • Wichtig: Ich musste die Library auf der Platte patchen - konkret musste ich in Adafruit_SSD1306.cpp die Zeile auskommentieren, wo nochmal Wire.begin(); (Zeile 206) aufgerufen wurde. Um dann das Beispielprogram 'ssd1306_128x64_i2c' nutzen zu können, hab ich noch mit
      #define OLED_RESET 16
      die Display-Reset-Leitung angepasst und die Zeile mit dem display.begin(...) wie folgt erweitert:
      Wire.begin(4,15); display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
      .
  • Ai_Ardulib_SSD1306 Grundtextfunktionen (Monospace Font only), braucht kein Display-Update-Befehl.
    • Hier muss in den Beispielen die Zeile wo sonst nur Wire.begin(); steht um folgendes erweitert werden:
  pinMode(16,OUTPUT); 
  digitalWrite(16, LOW); // set GPIO16 low to reset OLED 
  delay(50); 
  digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 to high 
  Wire.begin(4,15);

LoRa Radio

Anschlussbelegung

  • SX1276 (pin) – ESP32 (pin)
  • SCK - GPIO5
  • MISO - GPIO19
  • MOSI - GPIO27
  • CS - GPIO18
  • RESET - GPIO14
  • DIO0 (8) – GPIO26 (15)
  • DIO1 (9) – GPIO33 (13)
  • DIO2 (10) – GPIO32 (12)
// Pin mapping for lmic
const lmic_pinmap lmic_pins = {
    .nss = 18,
    .rxtx = LMIC_UNUSED_PIN,
    .rst = 14,
    .dio = {26, 33, 32},
};

Hier weiterlesen: https://hackaday.io/project/27791/logs