#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <DHT.h>
#include <SPI.h>
#include <LoRa.h>
// Define BMP280
Adafruit_BMP280 bmp;
// Define DHT22
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Define MQ2
#define MQ2_PIN 34 // Analog pin connected to MQ2
// Define LoRa
#define LORA_SCK 18
#define LORA_MISO 19
#define LORA_MOSI 23
#define LORA_CS 5
#define LORA_RST 14
#define LORA_IRQ 26
void setup() {
Serial.begin(115200);
Wire.begin();
// Initialize BMP280
if (!bmp.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
// Initialize DHT22
dht.begin();
// Initialize LoRa
SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS);
LoRa.setPins(LORA_CS, LORA_RST, LORA_IRQ);
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("LoRa Initialized!");
}
void loop() {
// Read BMP280 data
float pressure = bmp.readPressure() / 100.0F; // Convert to hPa
float temperature_bmp = bmp.readTemperature(); // BMP temperature
// Read DHT22 data
float humidity = dht.readHumidity();
float temperature_dht = dht.readTemperature();
// Read MQ2 data
int mq2Value = analogRead(MQ2_PIN);
// Display readings on Serial Monitor
Serial.println("================================");
Serial.print("Pressure (hPa): ");
Serial.println(pressure);
Serial.print("Temperature (BMP280): ");
Serial.println(temperature_bmp);
Serial.print("Temperature (DHT22): ");
Serial.println(temperature_dht);
Serial.print("Humidity: ");
Serial.println(humidity);
Serial.print("Gas Value (MQ2): ");
Serial.println(mq2Value);
// Transmit data over LoRa
LoRa.beginPacket();
LoRa.print("Pressure: ");
LoRa.print(pressure);
LoRa.print(" hPa, Temp BMP280: ");
LoRa.print(temperature_bmp);
LoRa.print(" C, Temp DHT22: ");
LoRa.print(temperature_dht);
LoRa.print(" C, Humidity: ");
LoRa.print(humidity);
LoRa.print(" %, Gas: ");
LoRa.print(mq2Value);
LoRa.endPacket();
// Wait for a while
delay(2000);
}