Änderungen

LoRaWAN

4.004 Byte entfernt, 22:59, 30. Jan. 2018
/* Heltec Wifi LoRa 32 - ESP32 mit OLED und LoRa */
=== Ai-Thinker Ra-01 oder Ra-02 ===
Der Unterschied zwischen Ra-01 und Ra-02 ist lediglich der, dass der Ra-01 die Antenne an einem der Pads herausgeführt hat (und meist eine Federantenne dabei liegt), während beim Ra-02 eine Buchse für einen Antennenstecker dran ist (IPEX).
 
=== 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 [https://github.com/espressif/arduino-esp32 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 [http://www.heltec.cn/download/WIFI_LoRa_32_Diagram.pdf 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)
 
 
In Verbindung mit dem ESP32 gibt es hierzu mehrere '''Bibliotheken''' um es zu nutzen:
* '''[https://github.com/squix78/esp8266-oled-ssd1306 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 <pre>SSD1306 display(0x3c, 4, 15);</pre> instanzieren und in setup() das Reset-Signal erzeugen: <pre>pinMode(16,OUTPUT); digitalWrite(16, LOW); delay(50); digitalWrite(16, HIGH);</pre>
 
* '''[https://github.com/olikraus/u8g2 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: <pre>U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);</pre>
** U8g2: Erweiterte Version, enthält Fonts in vielen Größen, auch besonders kleine Fonts.
*** Der folgende Konstruktor funktioniert bei mir: <pre>U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);</pre>
 
* '''[https://github.com/adafruit/Adafruit_SSD1306 Adafruit SSD1306]''' hat viele Funktionen und wird zusammen mit [https://github.com/adafruit/Adafruit-GFX-Library 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 <pre>#define OLED_RESET 16</pre> die Display-Reset-Leitung angepasst und die Zeile mit dem display.begin(...) wie folgt erweitert: <pre>Wire.begin(4,15); display.begin(SSD1306_SWITCHCAPVCC, 0x3c);</pre>.
 
* '''[https://github.com/acrobotic/Ai_Ardulib_SSD1306 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:
<pre> 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);
</pre>
 
==== 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)
 
<pre>
// Pin mapping for lmic
const lmic_pinmap lmic_pins = {
.nss = 18,
.rxtx = LMIC_UNUSED_PIN,
.rst = 14,
.dio = {26, 33, 32},
};
</pre>
 
Hier weiterlesen: https://hackaday.io/project/27791/logs
== LoRa Bibliotheken ==
1.995
Bearbeitungen