#include <LoRa.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <DHT.h>
#include <Wire.h>
// Define DHT22
#define DHTPIN 21
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// BMP280
Adafruit_BMP280 bmp;
// LoRa
#define LORA_CS 5
#define LORA_RST 14
#define LORA_IRQ 26
#define LORA_BAND 433E6
void setup() {
Serial.begin(9600);
// Initialize DHT sensor
dht.begin();
Wire.begin();
// Initialize BMP280 sensor
if (!bmp.begin(0x77)) {
Serial.println("BMP280 initialization failed!");
while (1);
}
// Initialize LoRa
LoRa.setPins(LORA_CS, LORA_RST, LORA_IRQ);
if (!LoRa.begin(LORA_BAND)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("LoRa Transmitter Initialized!");
}
void loop() {
// Read sensor values
float temperature = dht.readTemperature();
float pressure = bmp.readPressure() / 100.0F; // Convert to hPa
int gasLevel = analogRead(34); // MQ2 reading
// Format the data into a JSON-like string
String dataPacket = "{";
dataPacket += "\"temperature\":" + String(temperature, 2) + ",";
dataPacket += "\"pressure\":" + String(pressure, 2) + ",";
dataPacket += "\"gas_level\":" + String(gasLevel);
dataPacket += "}";
// Send the data over LoRa
LoRa.beginPacket();
LoRa.print(dataPacket);
LoRa.endPacket();
// Debugging on Serial Monitor
Serial.println("Data Sent: " + dataPacket);
delay(5000); // Wait for 5 seconds before sending the next packet
}