#include <SPI.h>
#include <LoRa.h>
#include <DS18B20.h>
//MQTT
const char* topic = "homeassistant/sensor/lumi_serre2/config";
const char* device_class = "ILLUMINANCE";
const char* name = "";
const char* unique_id = "";
const char* device_name = "Boitier1";
const char* device_identifiers = "boitier_1";
const char* state_topic = "";
const char* unit_of_measurement = "lx";
String configPayload = String(topic) + "|" +
String(device_class) + "|" +
String(name) + "|" +
String(unique_id) + "|" +
String(device_name) + "|" +
String(device_identifiers) + "|" +
String(state_topic) + "|" +
String(unit_of_measurement);
const char* topic2 = "homeassistant/sensor/humi_serre2/config";
const char* device_class2 = "HUMIDITY";
const char* name2 = "";
const char* unique_id2 = "";
const char* state_topic2 = "";
const char* unit_of_measurement2 = "%";
String configPayload2 = String(topic2) + "|" +
String(device_class2) + "|" +
String(name2) + "|" +
String(unique_id2) + "|" +
String(device_name) + "|" +
String(device_identifiers) + "|" +
String(state_topic2) + "|" +
String(unit_of_measurement2);
const char* topic3 = "homeassistant/sensor/temp_serre2/config";
const char* device_class3 = "TEMPERATURE";
const char* name3 = "";
const char* unique_id3 = "";
const char* state_topic3 = "";
const char* unit_of_measurement3 = "°C";
String configPayload3 = String(topic3) + "|" +
String(device_class3) + "|" +
String(name3) + "|" +
String(unique_id3) + "|" +
String(device_name) + "|" +
String(device_identifiers) + "|" +
String(state_topic3) + "|" +
String(unit_of_measurement3);
//define the pins used by the lora module
#define ss 5
#define rst 14
#define dio0 2
//set counter
int totallumi = 0;
int totalhumi = 0;
int totaltemp = 0;
int counter = 0;
int valuelumi = 0;
int valuehumi = 0;
int valuetemp = 0;
int numReadings = 10;
//define the pins for sensors
int sensorPin = 26;
int sensorPin2 = 36;
DS18B20 ds(22);
//set pin address for DS18B20
uint8_t address_temp[] = {237, 0, 0, 0, 135, 237, 99, 40};
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("LoRa Receiver");
//setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);
//replace the LoRa.begin(---E-) argument with your location's frequency
//433E6 for Asia, 868E6 for Europe, 915E6 for North America
while (!LoRa.begin(433E6)) {
Serial.println(".");
delay(500);
}
// Change sync word (0xF3) to match the receiver
// The sync word assures you don't get LoRa messages from other LoRa transceivers
// ranges from 0-0xFF
LoRa.setSyncWord(0x5E);
Serial.println("LoRa Initializing OK!");
analogReadResolution(12);
analogSetPinAttenuation(sensorPin, ADC_11db);
analogSetPinAttenuation(sensorPin2, ADC_11db);
// Capteur de température initialisation
ds.select(address_temp);
}
void loop() {
LoRa.beginPacket();
LoRa.print(String(configPayload));
LoRa.endPacket();
Serial.print("[↑] ");
Serial.println(configPayload);
delay(1000);
LoRa.beginPacket();
LoRa.print(String(configPayload2));
LoRa.endPacket();
Serial.print("[↑] ");
Serial.println(configPayload2);
delay(1000);
LoRa.beginPacket();
LoRa.print(String(configPayload3));
LoRa.endPacket();
Serial.print("[↑] ");
Serial.println(configPayload3);
for (int i = 0; i < 1800; i++) {
String topiclumi = String(state_topic) + "|";
String topichumi = String(state_topic2) + "|";
String topictemp = String(state_topic3) + "|";
for (int i = 0; i < 10; i++) {
totallumi = 0; // réinitialiser le total
totalhumi = 0; // réinitialiser le total
totaltemp= 0;
for (int i = 0; i < numReadings; i++) {
valuelumi = analogRead(sensorPin);
valuehumi = analogRead(sensorPin2);
valuetemp = ds.getTempC();
totallumi += valuelumi;
totalhumi += valuehumi;
totaltemp += valuetemp;
Serial.print("Capteur luminosite : ");
Serial.println(valuelumi);
Serial.print("Capteur Humidite : ");
Serial.println(valuehumi);
Serial.print("Capteur Température : ");
Serial.println(valuetemp);
delay(1000);
}
int averageValue = totallumi / numReadings;
int calibration_Luninosite = map(averageValue, 4095, 0, 0, 2000);
calibration_Luninosite = constrain(calibration_Luninosite, 0, 2000);
String message = topiclumi + String(calibration_Luninosite);
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.print("[↑] ");
Serial.println(message);
int averageValue2 = totalhumi / numReadings;
int calibration_Humidite = map(averageValue2, 2460, 930, 0, 100);
calibration_Humidite = constrain(calibration_Humidite, 0, 100);
message = topichumi + String(calibration_Humidite);
delay(1000);
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.print("[↑] ");
Serial.println(message);
int averageValue3 = totaltemp / numReadings;
message = topictemp + String(averageValue3);
delay(1000);
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.print("[↑] ");
Serial.println(message);
}
}
}