#include <esp_now.h>
#include <esp_wifi.h>
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_AHTX0.h>
#include <Adafruit_BMP280.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <HardwareSerial.h>
// === 1. Definicije PINOV ===
#define LDR_PIN 6
#define ONE_WIRE_BUS 7
#define SOIL_MOISTURE_PIN 8
#define YS01_RX_PIN 17
#define YS01_TX_PIN 18
// === 2. ESP-NOW Nastavitve (OBVEZNO VSTAVITE PRAVI NASLOV) ===
// Poiščite MAC naslov vašega GLAVNEGA ESP-ja in ga vpišite spodaj.
uint8_t masterMAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // ZAMENJAJTE!
// === 3. Inicializacija senzorjev ===
Adafruit_AHTX0 aht;
Adafruit_BMP280 bmp;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature soilTempSensor(&oneWire);
HardwareSerial YS01(2); // UART2
// Spremenljivke za meritve
float airTemp = 0, airHum = 0, pressure = 0;
int lightPercent = 0;
float soilTemp = 0;
int soilMoisturePercent = 0;
String airQualityString = "N/A"; // Tukaj bomo shranili surov podatek iz YS01
unsigned long lastSendTime = 0;
#define SEND_INTERVAL 10000 // Pošiljaj na 10 sekund
// === 4. Funkcije za branje senzorjev ===
void readAHTandBMP() {
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp);
airTemp = temp.temperature;
airHum = humidity.relative_humidity;
pressure = bmp.readPressure() / 100.0F;
}
void readLDR() {
int ldrValue = analogRead(LDR_PIN);
lightPercent = map(ldrValue, 0, 4095, 0, 100);
lightPercent = constrain(lightPercent, 0, 100);
}
void readSoilSensors() {
soilTempSensor.requestTemperatures();
soilTemp = soilTempSensor.getTempCByIndex(0);
if (soilTemp == -127.00) soilTemp = 0.00;
int soilRaw = analogRead(SOIL_MOISTURE_PIN);
soilMoisturePercent = map(soilRaw, 4095, 1500, 0, 100);
soilMoisturePercent = constrain(soilMoisturePercent, 0, 100);
}
void readYS01() {
if (YS01.available()) {
String data = YS01.readStringUntil('\n'); // Predpostavka: podatki so v eni vrstici
if (data.length() > 0) {
airQualityString = data;
Serial.print("Surov podatek YS01: ");
Serial.println(airQualityString);
}
}
}
// === 5. Funkcija za pošiljanje podatkov preko ESP-NOW ===
void sendDataToMaster() {
String dataToSend = String(airTemp) + "," + String(airHum) + "," + String(pressure) + "," +
String(lightPercent) + "," + String(soilTemp) + "," + String(soilMoisturePercent) + "," +
airQualityString;
esp_now_send(masterMAC, (uint8_t*)dataToSend.c_str(), dataToSend.length());
Serial.println("Podatki poslani: " + dataToSend);
}
// === 6. Setup ===
void setup() {
Serial.begin(115200);
// Inicializiraj I2C (za AHT in BMP)
Wire.begin(4, 5); // Pazi: SDA=GPIO4, SCL=GPIO5
if (!aht.begin()) Serial.println("Napaka AHT!");
if (!bmp.begin(0x76)) Serial.println("Napaka BMP!");
soilTempSensor.begin();
YS01.begin(9600, SERIAL_8N1, YS01_RX_PIN, YS01_TX_PIN);
WiFi.mode(WIFI_STA);
esp_now_init();
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, masterMAC, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
esp_now_add_peer(&peerInfo);
}
void loop() {
readAHTandBMP();
readLDR();
readSoilSensors();
readYS01();
if (millis() - lastSendTime > SEND_INTERVAL) {
sendDataToMaster();
lastSendTime = millis();
}
delay(500);
}GRETJE
HLAJENJE