/************************************************************************************************* PROGRAMMINFO ************************************************************************************************** Funktion: LoRa Heltec BME280 Sender A177 ************************************************************************************************** Version: 11.07.2022 ************************************************************************************************** Board: Heltec WiFI LoRa 32 ************************************************************************************************** Libraries: https://github.com/espressif/arduino-esp32/tree/master/libraries C:\Users\User\Documents\Arduino D:\gittemp\Arduino II\A156_Wetterdaten_V3 ************************************************************************************************** C++ Arduino IDE V1.8.19 ************************************************************************************************** Einstellungen: https://dl.espressif.com/dl/package_esp32_index.json http://dan.drown.org/stm32duino/package_STM32duino_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json **************************************************************************************************/ //Libraries LoRa #include #include //Libraries OLED Display #include #include #include //Libraries BME280 #include #include //define die Pins, die vom LoRa-Transceiver-Modul verwendet werden #define SCK 5 #define MISO 19 #define MOSI 27 #define SS 18 #define RST 14 #define DIO0 26 //433E6 Asia //866E6 Europe //915E6 North America #define BAND 866E6 //OLED Pins #define OLED_SDA 4 #define OLED_SCL 15 #define OLED_RST 16 #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels //BME280 Pins #define SDA 21 #define SCL 22 TwoWire I2Cone = TwoWire(1); Adafruit_BME280 bme; //Packet Zaehler int readingID = 0; int counter = 0; String LoRaMessage = ""; float temperature = 0; float humidity = 0; float pressure = 0; Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST); //Initialsiere OLED display void startOLED(){ //Reset OLED Display pinMode(OLED_RST, OUTPUT); digitalWrite(OLED_RST, LOW); delay(20); digitalWrite(OLED_RST, HIGH); //Initialisiere OLED Wire.begin(OLED_SDA, OLED_SCL); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { // Address 0x3C for 128x32 Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0,0); display.print("LORA SENDER"); } //Initialisiere LoRa Modul void startLoRA(){ //SPI LoRa Pins SPI.begin(SCK, MISO, MOSI, SS); //Setup LoRa Sender Modul LoRa.setPins(SS, RST, DIO0); while (!LoRa.begin(BAND) && counter < 10) { Serial.print("."); counter++; delay(500); } if (counter == 10) { // Erhöhe die Lese-ID bei jedem neuen Messwert readingID++; Serial.println("Das Starten von LoRa ist fehlgeschlagen!"); } Serial.println("LoRa-Initialisierung OK!"); display.setCursor(0,10); display.clearDisplay(); display.print("LoRa-Initialisierung OK!"); display.display(); delay(2000); } void startBME(){ I2Cone.begin(SDA, SCL, 100000); bool status1 = bme.begin(0x76, &I2Cone); if (!status1) { Serial.println("Konnte keinen gültigen BME280_1 Sensor finden, Verkabelung überprüfen!"); while (1); } } void getReadings(){ temperature = bme.readTemperature(); humidity = bme.readHumidity(); pressure = bme.readPressure() / 100.0F; } void sendReadings() { LoRaMessage = String(readingID) + "/" + String(temperature) + "&" + String(humidity) + "#" + String(pressure); //Send LoRa packet to receiver LoRa.beginPacket(); LoRa.print(LoRaMessage); LoRa.endPacket(); display.clearDisplay(); display.setCursor(0,0); display.setTextSize(1); display.print("LoRa-Paket gesendet!"); display.setCursor(0,20); display.print("Temperatur:"); display.setCursor(72,20); display.print(temperature); display.setCursor(0,30); display.print("Luftfeuchte:"); display.setCursor(72,30); display.print(humidity); display.setCursor(0,40); display.print("Luftdruck:"); display.setCursor(72,40); display.print(pressure); display.setCursor(0,50); display.print("Lese-ID:"); display.setCursor(72,50); display.print(readingID); display.display(); Serial.print("Paket senden: "); Serial.println(readingID); readingID++; } void setup() { //initialize Serial Monitor Serial.begin(115200); startOLED(); startBME(); startLoRA(); } void loop() { getReadings(); sendReadings(); delay(10000); }