Hirdetés

Új hozzászólás Aktív témák

  • olli

    tag

    válasz Aryes #20135 üzenetére


    ```cpp
    #define boiler 23 // villanyra kapcsol,rel1
    #define gaz_kazan 17 // gázra kapcsol,rel2
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #define ONE_WIRE_BUS 13
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);
    DeviceAddress D0 = { 0x28, 0x31, 0xBF, 0x29, 0x07, 0x00, 0x00, 0x7D }; // "T1"
    DeviceAddress D1 = { 0x28, 0x4F, 0x8E, 0x2A, 0x07, 0x00, 0x00, 0x37 }; // "T2"
    #include <Wire.h>
    const char* ssid = "";
    const char* password = "";
    const char* ntpServer = "hu.pool.ntp.org";
    const long gmtOffset_sec = 0;
    const int daylightOffset_sec = 3600;
    #define RTC_ADDRESS 0x68
    #include <RtcDS3231.h>
    RtcDS3231<TwoWire> Rtc(Wire);
    // Convert normal decimal numbers to binary coded decimal
    byte decToBcd(byte val){
    return( (val/10*16) + (val%10) );
    }

    // Convert binary coded decimal to normal decimal numbers
    byte bcdToDec(byte val){
    return( (val/16*10) + (val%16) );
    }
    #include <Arduino.h>
    #include "Wire.h"
    #include "oled.h"
    #include <WiFi.h>
    #include "time.h"
    #include <LoRa.h>

    #define SCK 5 // GPIO5 -- SX1278's SCK
    #define MISO 19 // GPIO19 -- SX1278's MISO
    #define MOSI 27 // GPIO27 -- SX1278's MOSI
    #define SS 18 // GPIO18 -- SX1278's CS
    #define RST 14 // GPIO14 -- SX1278's RESET
    #define DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request)
    #define BAND 433E6

    unsigned int counter = 0;
    String rssi = "RSSI --";
    String packSize = "--";
    String packet ;
    struct tm timeinfo;
    static char msg[20]; // character buffer
    OLED display = OLED(4, 15, 16, 0x3C, 128, 32, true); // SSD1306
    void szelep_vez ()
    //T1+T2 >75 II T1>50= a boilerben van melegvíz
    //rel2/pin17 villanyra kapcsol
    //T1+T2<75 II T1<50= gáz melegíti a vizet
    //rel1/pin23 gázra kapcsol
    {
    sensors.requestTemperatures();
    float T1 = sensors.getTempC(D0);
    float T2 = sensors.getTempC(D1);
    if((T1+T2) > 75 || T1>49)
    {
    display.begin();
    display.clear();
    display.draw_string(4, 8, "BOILER", OLED::DOUBLE_SIZE);
    display.display();
    digitalWrite(boiler, HIGH);
    digitalWrite(gaz_kazan, LOW);
    delay(5000);
    }
    else
    {
    display.begin();
    display.clear();
    display.draw_string(4, 8, "GAZ_KAZAN", OLED::DOUBLE_SIZE);
    display.display();
    digitalWrite(gaz_kazan, HIGH);
    digitalWrite(boiler, LOW);
    delay(5000);
    }
    }
    void setup(){
    pinMode(boiler, OUTPUT); //villanyra kapcsol
    digitalWrite(boiler, LOW);
    pinMode(gaz_kazan, OUTPUT); //gázra kapcsol
    digitalWrite(gaz_kazan, LOW);
    pinMode(16,OUTPUT);
    pinMode(25,OUTPUT);
    digitalWrite(16, LOW); // set GPIO16 low to reset OLED
    delay(50);
    digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high
    Serial.begin(115200);
    while (!Serial);

    SPI.begin(SCK,MISO,MOSI,SS);
    LoRa.setPins(SS,RST,DI0);
    if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
    }
    Serial.println("init ok");

    Wire.begin();
    Serial.setDebugOutput(true);
    //setTime(&timeinfo); // Valamikor be kell állítani az órát...
    Serial.print("Connecting to ");
    Serial.print(ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected.");
    // Init and get the time

    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    printLocalTime();

    Serial.println();
    Serial.print("Connected! IP address: ");
    Serial.println(WiFi.localIP());
    //disconnect WiFi as it's no longer needed
    WiFi.disconnect(true);
    WiFi.mode(WIFI_OFF);
    display.begin();
    display.clear();
    display.draw_string(4, 8, "RTC clock", OLED::DOUBLE_SIZE);
    display.display();

    //------- Initialize the Temperature measurement library--------------
    sensors.begin();
    sensors.setResolution(D0, 10); //T1
    sensors.setResolution(D1, 10); //T2
    // set the initial time here:
    //DS3231 seconds, minutes, hours, day, date, month, year
    //setDS3231time(00,34,12,2,6,3,23);
    }

    void loop(){
    sensors.requestTemperatures();
    float T1 = sensors.getTempC(D0);
    float T2 = sensors.getTempC(D1);
    Serial.print("Sending packet: ");
    Serial.println(counter);
    // send packet
    LoRa.beginPacket();
    LoRa.print("hello ");
    LoRa.print( T1);
    LoRa.print( T2 );
    LoRa.print(counter);
    LoRa.endPacket();

    counter++;
    digitalWrite(25, HIGH); // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(25, LOW); // turn the LED off by making the voltage LOW
    delay(1000);
    getLocalTime(&timeinfo); // display time/date
    Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
    RtcTemperature temp = Rtc.GetTemperature();
    temp.Print(Serial);
    // you may also get the temperature as a float and print it
    // Serial.print(temp.AsFloatDegC());
    Serial.println(" C ");
    display.clear();
    strftime (msg, 15, "%Y-%b-%d %a ", &timeinfo);
    display.draw_string(16, 1, msg); // Display date
    strftime (msg, 10, "%T ", &timeinfo); // Display time
    display.draw_string(8, 12, msg, OLED::DOUBLE_SIZE);
    display.display(); // Refresh screen
    delay(3000);
    display.clear();
    display.setCursor(8,0);
    display.println("T1= ");
    display.setCursor(30,0);
    display.println(T1);
    display.setCursor(60, 0);
    display.println(" C");
    display.setCursor(8,12);
    display.println("T2= ");
    display.setCursor(30,12);
    display.println(T2);
    display.setCursor(60, 12);
    display.println(" C");
    display.display();
    Serial.print(sensors.getTempC(D0));
    Serial.println(" C");
    Serial.print(sensors.getTempC(D1));
    Serial.println(" C ");
    //printLocalTime(); // display the real-time clock data on the Serial Monitor,
    delay(1000); // every second
    szelep_vez();
    }

    //--- Set RTC time/date ------------------------------------
    void setLocalTime(struct tm* time) {
    struct tm timeinfo;
    Wire.beginTransmission(RTC_ADDRESS);
    Wire.write(0); // set register pointer to 00h
    Wire.write(decToBcd(time->tm_sec)); // set seconds
    Wire.write(decToBcd(time->tm_min)); // set minutes
    Wire.write(decToBcd(time->tm_hour)); // set hours
    Wire.write(time->tm_wday + 1); // set day of week (1=Sun, 7=Sat)
    Wire.write(decToBcd(time->tm_mday)); // set date (1 to 31)
    Wire.write(decToBcd(time->tm_mon) + 1); // set month
    Wire.write(decToBcd(time->tm_year - 100)); // year from 2000 (0 to 99)
    Wire.endTransmission();
    }
    //--- Read time/date from RTC ------------------------------
    void getTime(struct tm* time) {
    Wire.beginTransmission(RTC_ADDRESS);
    Wire.write(0); // a kiolvasás kezdőcímének beállítása
    Wire.endTransmission(false);
    Wire.requestFrom(RTC_ADDRESS, 7); // Hét bájt kiolvasása (time/date)
    time->tm_sec = bcdToDec(Wire.read() & 0x7f); // Másodpercek (0-59)
    time->tm_min = bcdToDec(Wire.read()); // Percek (0 - 59)
    time->tm_hour = bcdToDec(Wire.read() & 0x3f); // Órák (24h kijelzéshez)
    time->tm_wday = bcdToDec(Wire.read() - 1); // Hét napja (0 - 6)
    time->tm_mday = bcdToDec(Wire.read()); // hónap napja (1 - 31)
    time->tm_mon = bcdToDec(Wire.read() - 1); // hónap sorszáma (0 - 11)
    time->tm_year = bcdToDec(Wire.read()) + 100; // 1900-tól eltelt évek
    }
    void printLocalTime(){
    struct tm timeinfo;
    if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
    }
    Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
    Serial.print("Day of week: ");
    Serial.println(&timeinfo, "%A");
    Serial.print("Month: ");
    Serial.println(&timeinfo, "%B");
    Serial.print("Day of Month: ");
    Serial.println(&timeinfo, "%d");
    Serial.print("Year: ");
    Serial.println(&timeinfo, "%Y");
    Serial.print("Hour: ");
    Serial.println(&timeinfo, "%H");
    Serial.print("Hour (12 hour format): ");
    Serial.println(&timeinfo, "%I");
    Serial.print("Minute: ");
    Serial.println(&timeinfo, "%M");
    Serial.print("Second: ");
    Serial.println(&timeinfo, "%S");

    Serial.println("Time variables");
    char timeHour[3];
    strftime(timeHour,3, "%H", &timeinfo);
    Serial.println(timeHour);
    char timeWeekDay[10];
    strftime(timeWeekDay,10, "%A", &timeinfo);
    Serial.println(timeWeekDay);
    Serial.println();
    }
    /*void setup_sntp() {
    const char* ntpServer = "hu.pool.ntp.org"; // regionális NTP hálózat
    const char* time_zone = "CET-1CEST,M3.5.0,M10.5.0/3"; // Europe/Budapest időzóna
    configTzTime(time_zone, ntpServer); // Időzóna megadása
    Serial.println("Connecting to sntp server");
    while (!getLocalTime(&timeinfo)) {Serial.print(".");} // Pontosidő lekérése
    setTime(&timeinfo); // A DS3231 RTC beállítása
    Serial.println(" NTP connected");
    Serial.println(&timeinfo, "NTP time: %A, %B %d %Y %H:%M:%S");
    }*/
    ```

Új hozzászólás Aktív témák