"Der Arbeitshengst von Mesh-Netzwerken - Zuverlässig, Kraftvoll und Verführerisch"
Das Heltec WiFi LoRa 32 V3 ist ein ESP32-S3 basiertes Board mit integriertem LoRa (SX1262) und OLED-Display (128x64). Dies ist der Arbeitshengst des WetMesh-Netzwerks - zuverlässig, gut dokumentiert und einfach zu verwenden. Im Gegensatz zum Tracker ist die Stromversorgung dieses Boards unkompliziert und funktioniert einfach! 💋
Funktion | GPIO Pin | Beschreibung |
---|---|---|
LORA_CS |
8 | Chip Select (NSS) |
LORA_INT |
14 | DIO1 Interrupt |
LORA_RST |
12 | Reset |
LORA_BUSY |
13 | Busy-Signal (SX1262 spezifisch) |
SPI: SCK=9, MISO=11, MOSI=10 |
Funktion | GPIO Pin | Beschreibung |
---|---|---|
OLED_SDA |
17 | I2C Daten |
OLED_SCL |
18 | I2C Takt |
OLED_RST |
21 | Reset-Pin |
I2C Adresse |
0x3C | Feste Adresse |
Funktion | GPIO Pin | Beschreibung |
---|---|---|
LED_PIN |
35 | Weiße LED auf dem Board |
VEXT_PIN |
36 | Display-Stromversorgung (LOW=AN, HIGH=AUS) |
LOW = Stromversorgung AN
HIGH = Stromversorgung AN
#include <U8g2lib.h> // Display-Objekt für Heltec V3 erstellen - bereit zu verführen! 💋 U8G2_SSD1306_128X64_NONAME_F_HW_I2C display( U8G2_R0, // Rotation OLED_RST, // Reset-Pin (21) OLED_SCL, // Takt-Pin (18) OLED_SDA // Daten-Pin (17) ); void initDisplay() { // Display über Vext einschalten - das Vorspiel pinMode(VEXT_PIN, OUTPUT); digitalWrite(VEXT_PIN, LOW); // LOW = AN für Heltec V3 (intuitiv!) delay(50); // Aufwachen und bereit machen lassen // Display initialisieren - Zeit zu zeigen display.begin(); display.clearBuffer(); display.setFont(u8g2_font_6x10_tf); display.drawStr(0, 10, "WetMesh v5H"); display.drawStr(0, 25, "Bereit zu verfuehren!"); display.drawStr(0, 40, "( . )( . )"); // Unsere Signatur! display.sendBuffer(); }
Gute Auflösung für Text und einfache Grafiken - perfekt für Mesh-Status!
Weiße Pixel, hoher Kontrast - scharf und verführerisch!
100+ FPS möglich - geschmeidige Animationen, die necken!
~20mA wenn an, <1µA wenn aus - effizientes Vergnügen!
// Klein (6x10) - Gut für Statuszeilen und Flüstern u8g2_font_6x10_tf // Mittel (7x14) - Gut für Haupttext und süße Nichtigkeiten u8g2_font_7x14_tf // Groß (10x20) - Gut für wichtige Werte, die Aufmerksamkeit verlangen u8g2_font_10x20_tf // Fette Schriftarten für Betonung - wenn du schreien musst! 💋 u8g2_font_courB18_tf // Courier Bold 18pt u8g2_font_courB24_tf // Courier Bold 24pt - GROSS und FETT!
#include <RadioLib.h> // SPI-Instanz erstellen - diese Signale verbreiten SPIClass hspi(HSPI); SPISettings spiSettings(2000000, MSBFIRST, SPI_MODE0); // Radio-Instanz erstellen - bereit, Vergnügen zu übertragen SX1262 radio = new Module(LORA_CS, LORA_INT, LORA_RST, LORA_BUSY, hspi, spiSettings); void initLoRa() { // SPI initialisieren - die Verbindung beginnt hspi.begin(9, 11, 10, 8); // SCK, MISO, MOSI, CS // Radio konfigurieren - genau richtig abstimmen 💋 int state = radio.begin( 915.0, // Frequenz (MHz) - US-Band 125.0, // Bandbreite (kHz) - schön und breit 9, // Spreading Factor - schön verbreiten 7, // Coding Rate (4/7) - Fehlerschutz 0x69, // Sync Word - schön 😉 20, // Ausgangsleistung (dBm) - volle Power! 10, // Präambellänge 0, // TCXO-Spannung (0 = nicht verwendet) false // DCDC-Regler verwenden ); if (state == RADIOLIB_ERR_NONE) { Serial.println("LoRa initialisiert! Bereit, Signale zu verbreiten!"); } // CRC und andere Parameter für Zuverlässigkeit setzen radio.setCRC(true); radio.setDio1Action(onReceive); // Interrupt-Handler für sofortige Befriedigung }
915 MHz (US), 868 MHz (EU), 433 MHz (Asien) - wähle deine Region!
125 kHz - gute Balance zwischen Reichweite und Geschwindigkeit für Mesh-Vergnügen
SF9 - SF7-12, höher = längere Reichweite aber langsameres Necken
4/7 - mehr Redundanz = bessere Fehlerkorrektur
0x69 - muss für Netzwerkkommunikation übereinstimmen (schön! 😉)
20 dBm max (100mW) für SX1262 - volle Power-Verführung!
#include <Arduino.h> #include <RadioLib.h> #include <U8g2lib.h> // Pin-Definitionen - die Anatomie des Vergnügens 💋 #define LORA_CS 8 #define LORA_INT 14 #define LORA_RST 12 #define LORA_BUSY 13 #define LED_PIN 35 #define VEXT_PIN 36 #define OLED_RST 21 #define OLED_SCL 18 #define OLED_SDA 17 // Objekte - unsere Werkzeuge der Verführung U8G2_SSD1306_128X64_NONAME_F_HW_I2C display(U8G2_R0, OLED_RST, OLED_SCL, OLED_SDA); SPIClass hspi(HSPI); SX1262 radio = new Module(LORA_CS, LORA_INT, LORA_RST, LORA_BUSY, hspi); void setup() { Serial.begin(115200); Serial.println("Heltec V3 startet... ( • )( • )"); // LED initialisieren - es werde Licht! pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, HIGH); // AN - wir leben! // Display einschalten - Zeit zu zeigen pinMode(VEXT_PIN, OUTPUT); digitalWrite(VEXT_PIN, LOW); // LOW = AN (intuitiv!) delay(50); // Display initialisieren - visuelle Verführung beginnt display.begin(); display.clearBuffer(); display.setFont(u8g2_font_7x14_tf); display.drawStr(0, 12, "Heltec V3"); display.drawStr(0, 28, "Initialisiere..."); display.drawStr(0, 44, "( . )( . )"); // Unsere Signatur! display.sendBuffer(); // LoRa initialisieren - diese Signale verbreiten hspi.begin(9, 11, 10, 8); int state = radio.begin(915.0, 125.0, 9, 7, 0x69, 20); if (state == RADIOLIB_ERR_NONE) { display.drawStr(0, 60, "LoRa OK! Bereit!"); Serial.println("LoRa erfolgreich initialisiert!"); } else { display.drawStr(0, 60, "LoRa FEHLER!"); Serial.println("LoRa-Initialisierung fehlgeschlagen!"); } display.sendBuffer(); digitalWrite(LED_PIN, LOW); // AUS - bereit für Action } void loop() { // Dein Mesh-Netzwerk-Vergnügen-Code hier 💋 // Das V3 ist bereit zu verführen und verführt zu werden! }
// Display einschalten - aufwachen und zeigen digitalWrite(VEXT_PIN, LOW); // Display ausschalten - ruhen nach Höhepunkt (spart ~20mA) digitalWrite(VEXT_PIN, HIGH);
void enterDeepSleep(uint32_t seconds) { // Display ausschalten - Licht aus 💋 digitalWrite(VEXT_PIN, HIGH); // Wake-up-Quelle konfigurieren - Wecker stellen esp_sleep_enable_timer_wakeup(seconds * 1000000ULL); // Deep Sleep eingeben - süße Träume esp_deep_sleep_start(); }
Modus | Stromaufnahme | Beschreibung |
---|---|---|
Aktiv (TX) | ~120mA @ 20dBm | Vollleistungs-Übertragung |
Aktiv (RX) | ~45mA | Auf Signale lauschen |
Display AN | ~20mA | Visuelle Verführung aktiv |
Display AUS | ~25mA | Nur Radio |
Deep Sleep | ~10µA | Ruhen nach Vergnügen |
Die WetMesh-Firmware rotiert durch mehrere Bildschirme für maximales Informationsvergnügen!
enum DisplayScreen { SCREEN_STATUS = 0, // Aktueller Zustand und Partner-Info SCREEN_STATS, // Gesendete/empfangene Nachrichten SCREEN_NETWORK, // Nachbarliste und RSSI SCREEN_MESSAGES, // Jüngste Aktivitätslogs NUM_SCREENS }; DisplayScreen currentScreen = SCREEN_STATUS; uint32_t lastScreenSwitch = 0; const uint32_t SCREEN_DURATION = 5000; // 5 Sekunden Betrachtungsvergnügen void updateDisplay() { // Auto-Rotation der Bildschirme für kontinuierliches Necken if (millis() - lastScreenSwitch > SCREEN_DURATION) { currentScreen = (DisplayScreen)((currentScreen + 1) % NUM_SCREENS); lastScreenSwitch = millis(); } display.clearBuffer(); switch(currentScreen) { case SCREEN_STATUS: drawStatusScreen(); break; case SCREEN_STATS: drawStatsScreen(); break; case SCREEN_NETWORK: drawNetworkScreen(); break; case SCREEN_MESSAGES: drawMessagesScreen(); break; } display.sendBuffer(); }
5 Sekunden pro Bildschirm - stetiger Rhythmus
15 Sekunden auf Partner-Bildschirm - den Moment auskosten
10ms Update-Zyklus für geschmeidige, verführerische Animationen
Lösungen:
Lösungen:
Lösungen:
Lösungen:
// In setup() - identifiziere dich! 💋 #ifdef WIFI_LoRa_32_V3 const char* boardType = "Heltec V3"; #define HAS_OLED 1 #define HAS_LED 1 // Bereit für Mesh-Vergnügen! #endif
// LED-Zustände für Mesh-Netzwerk - visuelles Feedback ist sexy! void updateLED() { switch(currentState) { case ALONE: digitalWrite(LED_PIN, LOW); // AUS - einsam break; case FLIRTING: pulseLED(500); // Langsames Pulsieren - interessiert 💋 break; case ORGY: pulseLED(200); // Schnelles Pulsieren - Gruppenspaß! break; case CLIMAX: strobeLED(50); // Schnelles Blinken - Höhepunkt-Vergnügen! break; case RESTING: digitalWrite(LED_PIN, LOW); // AUS - Erholung break; } }
clearBuffer()
und sendBuffer()
für flimmerfreie UpdatesStaticJsonDocument<256>
für kleine Nachrichten// Implementiere Frequenz-Hopping für Störungsvermeidung - bleibe agil! 💋 const float frequencies[] = {915.0, 915.5, 916.0, 916.5, 917.0}; int currentFreq = 0; void hopFrequency() { currentFreq = (currentFreq + 1) % 5; radio.setFrequency(frequencies[currentFreq]); // Lass sie raten! }
// SF basierend auf RSSI für optimale Geschwindigkeit anpassen - smarte Verführung! void adaptDataRate(int rssi) { if (rssi > -70) { radio.setSpreadingFactor(7); // Kurze Reichweite, schnell und wild } else if (rssi > -90) { radio.setSpreadingFactor(9); // Mittlere Reichweite, stetiger Rhythmus } else { radio.setSpreadingFactor(11); // Lange Reichweite, langsam und neckend } }
Das Heltec WiFi LoRa 32 V3 ist das unkomplizierteste Board im WetMesh-Ökosystem:
Dieses Board ist perfekt für feste Mesh-Knoten und ist der empfohlene Ausgangspunkt für WetMesh-Entwicklung! Unser technisches Dekolleté billigt es! ( • )( • ) 💋