KinCony A4 with ESP32 and Loxone Limitless

Beta Article update 0 today 05/08/2021

This is about A4 Board from KinCony with ESP32 and connected to Loxone miniserver, I planed to create the code for all the board’s functions to use it connected to Loxone miniserver and install it in my green house on my balcony

Photos:

3D print files for Base:

.stl file click here

.step file click here

Currently I am trying to create the code in Arduino IDE and this is the partial code I managed to make it until now:



/*********
  inspiration from https://randomnerdtutorials.com
*********/

// Import required libraries
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include "SPIFFS.h"
//#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
const int oneWireBus = 13;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);

// Replace with your network credentials
const char* ssid = "your wifi name";
const char* password = "your wifi password";
int relay1Val = 0;
int relay2Val = 0;
int relay3Val = 0;
int relay4Val = 0;
//
//String relay1Val;
int relay1 = 2;
int relay2 = 15;
int relay3 = 5;
int relay4 = 4;
// DAC input,s
const int adc1 = 35;
const int adc2 = 34;
const int adc3 = 32;
const int adc4 = 33;
//DAC variable
int adc1_val = 0;
int adc2_val = 0;
int adc3_val = 0;
int adc4_val = 0;
// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

// Replaces placeholder with LED state value
String processor(const String& var) {
  //  Serial.println(var);
  //  if (var == "STATE") {
  //    if (digitalRead(relay1)) {
  //      relay1Val = "ON";
  //    }
  //    else {
  //      relay1Val = "OFF";
  //    }
  //    Serial.print(relay1Val);
  //    return relay1Val;
  //  }
  return String();
}

void setup() {
  // Serial port for debugging purposes
  Serial.begin(115200);

  // Start the DS18B20 sensor
  sensors.begin();

  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  // Initialize SPIFFS
  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP32 Local IP Address
  Serial.println(WiFi.localIP());

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Route to load style.css file
  server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/style.css", "text/css");
  });

  // Relay1 to HIGH
  server.on("/relay1_on", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay1, HIGH);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Relay1 to LOW
  server.on("/relay1_off", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay1, LOW);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Relay2 to HIGH
  server.on("/relay2_on", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay2, HIGH);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Relay2 to LOW
  server.on("/relay2_off", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay2, LOW);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Relay3 to HIGH
  server.on("/relay3_on", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay3, HIGH);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Relay3 to LOW
  server.on("/relay3_off", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay3, LOW);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Relay4 to HIGH
  server.on("/relay4_on", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay4, HIGH);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Relay4 to LOW
  server.on("/relay4_off", HTTP_GET, [](AsyncWebServerRequest * request) {
    digitalWrite(relay4, LOW);
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // Display Relays Value
  server.on("/status", HTTP_GET, [](AsyncWebServerRequest * request) {
    relay1Val = digitalRead(relay1);
    relay2Val = digitalRead(relay2);
    relay3Val = digitalRead(relay3);
    relay4Val = digitalRead(relay4);
    sensors.requestTemperatures();
    float temperatureC = sensors.getTempCByIndex(0);
    float temperatureF = sensors.getTempFByIndex(0);
    String str = "relay1=" + String(relay1Val, DEC) +
                 " relay2=" + String(relay2Val, DEC) +
                 " relay3=" + String(relay3Val, DEC) +
                 " relay4=" + String(relay4Val, DEC) +
                 " temp=" + String(temperatureC, 1);


    request->send(200, "text/plain", str);
  });

  // Display ADC values
  server.on("/adc", HTTP_GET, [](AsyncWebServerRequest * request) {
    adc1_val = analogRead(adc1);
    adc2_val = analogRead(adc2);
    adc3_val = analogRead(adc3);
    adc4_val = analogRead(adc4);
    String str = "ADC1=" + String(adc1_val, DEC) +
                 " ADC2=" + String(adc2_val, DEC) +
                 " ADC3=" + String(adc3_val, DEC) +
                 " ADC4=" + String(adc4_val, DEC);


    request->send(200, "text/plain", str);
  });

  // Display Temp value Value
  server.on("/temp", HTTP_GET, [](AsyncWebServerRequest * request) {
    sensors.requestTemperatures();
    float temperatureC = sensors.getTempCByIndex(0);
    float temperatureF = sensors.getTempFByIndex(0);
    String str = " temp=" + String(temperatureC, 2);


    request->send(200, "text/plain", str);
  });

  // Start server
  server.begin();
}

void loop() {
  adc1_val = analogRead(adc1);
  adc2_val = analogRead(adc2);
  adc3_val = analogRead(adc3);
  adc4_val = analogRead(adc4);
  Serial.println(adc4_val);
  delay(500);
}