Hey all I am getting some odd errors when I compile my sketch:
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:34:1: error: expected '}' before 'byte'
byte hh=0;
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:34:1: error: expected ',' or ';' before 'byte'
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino: In function 'void loop()':
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:128:27: error: 'hh' was not declared in this scope
if (mi>=60) { mi-=60; hh++; }
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:129:9: error: 'hh' was not declared in this scope
if (hh>=24) { hh-=24; dddd++; }
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino: In function 'String getUptime()':
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:136:53: error: 'hh' was not declared in this scope
sprintf(timestring,"%dd.%02dh.%02dm.%02ds", dddd, hh, mi, ss);
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino: In lambda function:
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:145:56: error: no matching function for call to 'ESP8266WebServer::send(int, const char [10], const uint8_t [72860], const uint32_t&)'
server.send(200, "text/html", HTML_Bytes, HTML_SIZE);
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:145:56: note: candidates are:
In file included from /run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:4:0:
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:118:8: note: void ESP8266WebServer::send(int, const char*, const String&)
void send(int code, const char* content_type = NULL, const String& content = String(""));
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:118:8: note: candidate expects 3 arguments, 4 provided
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:119:8: note: void ESP8266WebServer::send(int, char*, const String&)
void send(int code, char* content_type, const String& content);
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:119:8: note: candidate expects 3 arguments, 4 provided
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:120:8: note: void ESP8266WebServer::send(int, const String&, const String&)
void send(int code, const String& content_type, const String& content);
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:120:8: note: candidate expects 3 arguments, 4 provided
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino: In function 'void handle_status()':
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:245:3: error: 'esp_err_t' was not declared in this scope
esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, macAddr);
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:245:13: error: expected ';' before 'ret'
esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, macAddr);
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:254:7: error: 'ret' was not declared in this scope
if (ret == ESP_OK) {
^
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:254:14: error: 'ESP_OK' was not declared in this scope
if (ret == ESP_OK) {
^
In file included from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp:13:0,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp:15,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp:10,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp:13,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/JsonVariantConst.hpp:10,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp:9,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson.hpp:29,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson.h:9,
from /run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:14:
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp: In instantiation of 'const T* ArduinoJson::V730PB22::detail::pgm_read(const T* const*) [with T = char]':
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp:85:42: required from here
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp:25:52: error: 'const void*' is not a pointer-to-object type
return reinterpret_cast<const T*>(pgm_read_ptr(p));
^
In file included from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp:16:0,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/utility.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Memory/MemoryPoolList.hpp:9,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp:8,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/JsonVariantConst.hpp:10,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp:9,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson.hpp:29,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson.h:9,
from /run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:14:
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp: In instantiation of 'const bool ArduinoJson::V730PB22::detail::is_convertible<IPAddress, long long int>::value':
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_enum.hpp:17:65: required from 'const bool ArduinoJson::V730PB22::detail::is_enum<IPAddress>::value'
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp:300:37: required from 'bool ArduinoJson::V730PB22::detail::VariantRefBase<TDerived>::doSet(const T&) const [with TConverter = ArduinoJson::V730PB22::Converter<IPAddress, void>; T = IPAddress; TDerived = ArduinoJson::V730PB22::detail::MemberProxy<ArduinoJson::V730PB22::JsonDocument&, ArduinoJson::V730PB22::detail::RamString>]'
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp:82:17: required from 'bool ArduinoJson::V730PB22::detail::VariantRefBase<TDerived>::set(const T&) const [with T = IPAddress; TDerived = ArduinoJson::V730PB22::detail::MemberProxy<ArduinoJson::V730PB22::JsonDocument&, ArduinoJson::V730PB22::detail::RamString>]'
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Object/MemberProxy.hpp:38:5: required from 'ArduinoJson::V730PB22::detail::MemberProxy< <template-parameter-1-1>, <template-parameter-1-2> >& ArduinoJson::V730PB22::detail::MemberProxy< <template-parameter-1-1>, <template-parameter-1-2> >::operator=(const T&) [with T = IPAddress; TUpstream = ArduinoJson::V730PB22::JsonDocument&; AdaptedString = ArduinoJson::V730PB22::detail::RamString]'
/run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:250:23: required from here
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp:33:47: error: conversion from 'const IPAddress' to 'long long int' is ambiguous
static const bool value = sizeof(probe(from_)) == sizeof(int);
^
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp:33:47: note: candidates are:
In file included from /run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/ESP8266WiFi/src/ESP8266WiFi.h:31:0,
from /run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:2:
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:169:9: note: IPAddress::operator ip_addr_t*() <near match>
operator ip_addr_t*() { return &_ip; }
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:169:9: note: no known conversion for implicit 'this' parameter from 'const IPAddress*' to 'IPAddress*'
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:168:9: note: IPAddress::operator const ip_addr_t*() const <near match>
operator const ip_addr_t*() const { return &_ip; }
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:168:9: note: no known conversion for implicit 'this' parameter from 'const ip_addr_t* {aka const ip4_addr*}' to 'long long int'
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:96:9: note: IPAddress::operator bool() const
operator bool () const { return isSet(); } // <-
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:97:9: note: IPAddress::operator bool() <near match>
operator bool () { return isSet(); } // <- both are needed
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:97:9: note: no known conversion for implicit 'this' parameter from 'const IPAddress*' to 'IPAddress*'
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:92:9: note: IPAddress::operator u32_t() const
operator u32_t() const { return isV4()? v4(): (u32_t)0; }
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:93:9: note: IPAddress::operator u32_t() <near match>
operator u32_t() { return isV4()? v4(): (u32_t)0; }
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:93:9: note: no known conversion for implicit 'this' parameter from 'const IPAddress*' to 'IPAddress*'
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:90:9: note: IPAddress::operator uint32_t() const
operator uint32_t() const { return isV4()? v4(): (uint32_t)0; }
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:91:9: note: IPAddress::operator uint32_t() <near match>
operator uint32_t() { return isV4()? v4(): (uint32_t)0; }
^
/run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/IPAddress.h:91:9: note: no known conversion for implicit 'this' parameter from 'const IPAddress*' to 'IPAddress*'
In file included from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp:16:0,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/utility.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Memory/MemoryPoolList.hpp:9,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp:8,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/JsonVariantConst.hpp:10,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp:9,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp:7,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson.hpp:29,
from /var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson.h:9,
from /run/arduino/sketches/new_sketch_1735593095998/new_sketch_1735593095998.ino:14:
/var/run/arduino/directories-user/libraries/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp:27:14: error: initializing argument 1 of 'static int ArduinoJson::V730PB22::detail::is_convertible<From, To>::probe(To) [with From = IPAddress; To = long long int]'
static int probe(To);
^
Multiple libraries were found for "ArduinoJson.h"
Used: /run/arduino/directories-data/internal/ArduinoJson_7.3.0_a945343896527e13
Not used: /run/arduino/directories-data/internal/ThingESP_1.3.0_208e658d67936be5
Not used: /run/arduino/directories-data/internal/IOTKME_3.0.1_7d34512d830e21de
Not used: /run/arduino/directories-data/internal/BaleMessengerBot_Arduino_0.1.0_1c24e4f4119896e7
Not used: /run/arduino/directories-data/internal/Antares_ESP8266_MQTT_0.9.2_1274de5a8b70ade9
Not used: /run/arduino/directories-data/internal/CMMC_MQTT_Connector_1.3.3_dcef02afc5e24717
Not used: /run/arduino/directories-data/internal/ThingsIoT_1.2.0_edc19382eb41a2f2
Not used: /run/arduino/directories-data/internal/CoogleIOT_1.3.1_313ac29f75180276
Not used: /run/arduino/directories-data/internal/AllThingsTalk_LTE-M_SDK_2.0.4_dc42d2d7f4bad257
Not used: /run/arduino/directories-data/internal/Antares_ESP8266_HTTP_1.3.3_e986087bedd31584
Multiple libraries were found for "Adafruit_BusIO_Register.h"
Used: /run/arduino/directories-data/internal/Adafruit_BusIO_1.16.2_6b04f8b31fa0f1a8
Not used: /run/arduino/directories-data/internal/VEGAIoT_BusIO_1.0.0_68606b9abaf94dc3
Multiple libraries were found for "Wire.h"
Used: /run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/Wire
Not used: /run/arduino/directories-data/internal/FlexWire_1.2.1_1fc5f1d1a14af0e7
Multiple libraries were found for "SPI.h"
Used: /run/arduino/directories-data/packages/esp8266/hardware/esp8266/2.5.0/libraries/SPI
Not used: /run/arduino/directories-data/internal/EventEthernet_1.0.0_bd9dd894ef7641f8
Sketch:
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#elif defined(ESP32)
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#endif
#include <WiFiUdp.h>
#include <Adafruit_EMC2101.h>
#include <ArduinoJson.h>
#include "customOTA.h"
/* /---------\
/ \
/ WeMos \
TX |o o| RST
RX |o o| A0
D1 |o o| D0
D2 |o o| D5
D3 |o o| D6
D4 |o o| D7
G |o o| D8
5v |o o| 3v3
| /
| |
--------------
*/
byte hh=0;
byte mi=0;
byte ss=0;
unsigned int dddd=0;
unsigned long lastTick=0;
Adafruit_EMC2101 emc2101;
String buf;
#define APSSID "tellurideRelay"
#define APPSK "Tdkcjitn"
uint8_t macAddr[6];
int relayOn = 1;
int relayOff = 0;
boolean relay1State = false;
boolean relay2State = false;
boolean ledState = false;
const int relay1 = D5; //Relay 2 (right side) [Monitors]
const int relay2 = D6; //Relay 1 (left side) [Wifi Internet]
const int blueLED = 2;
IPAddress ip(192, 168, 77, 77);
IPAddress gateway(192, 168, 77, 1);
IPAddress subnet(255, 255, 255, 0);
DynamicJsonDocument doc(512);
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200);
Serial.println("Setting relays off");
digitalWrite(relay1, relayOff); //First to prevent relays
digitalWrite(relay2, relayOff); //from coming on during boot
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
Serial.println("Setting blue LED off");
pinMode(blueLED, OUTPUT);
digitalWrite(blueLED, relayOn);
createStaticIP();
addOTAUpdate();
server.on("/r1/1", handle_relay1on);
server.on("/r1/0", handle_relay1off);
server.on("/r2/1", handle_relay2on);
server.on("/r2/0", handle_relay2off);
server.on("/status", handle_status);
server.on("/led/1", handle_ledon);
server.on("/led/0", handle_ledoff);
server.on("/both/1", handle_bothon);
server.on("/both/0", handle_bothoff);
server.on("/fan", handle_fanSpeed);
server.onNotFound(handleNotFound);
// Try to initialize!
if (!emc2101.begin()) {
Serial.println("Failed to find EMC2101 chip");
while (1) { delay(10); }
}
switch (emc2101.getDataRate()) {
case EMC2101_RATE_1_16_HZ: Serial.println("1/16_HZ"); break;
case EMC2101_RATE_1_8_HZ: Serial.println("1/8_HZ"); break;
case EMC2101_RATE_1_4_HZ: Serial.println("1/4_HZ"); break;
case EMC2101_RATE_1_2_HZ: Serial.println("1/2_HZ"); break;
case EMC2101_RATE_1_HZ: Serial.println("1 HZ"); break;
case EMC2101_RATE_2_HZ: Serial.println("2 HZ"); break;
case EMC2101_RATE_4_HZ: Serial.println("4 HZ"); break;
case EMC2101_RATE_8_HZ: Serial.println("8 HZ"); break;
case EMC2101_RATE_16_HZ: Serial.println("16 HZ"); break;
case EMC2101_RATE_32_HZ: Serial.println("32 HZ"); break;
}
emc2101.enableTachInput(true);
emc2101.setPWMDivisor(0);
emc2101.setDutyCycle(50);
}
void loop() {
server.handleClient();
if ((micros() - lastTick) >= 1000000UL) {
lastTick += 1000000UL;
ss++;
if (ss>=60) { ss-=60; mi++; }
if (mi>=60) { mi-=60; hh++; }
if (hh>=24) { hh-=24; dddd++; }
}
}
String getUptime() {
char timestring[25];
sprintf(timestring,"%dd.%02dh.%02dm.%02ds", dddd, hh, mi, ss);
return timestring;
}
void addOTAUpdate() {
server.on("/", HTTP_GET, []() {
server.sendHeader(F("Content-Encoding"), F("gzip"));
server.sendHeader("Connection", "close");
server.send(200, "text/html", HTML_Bytes, HTML_SIZE);
});
server.on("/ssidVer", HTTP_GET, []() {
handle_status();
});
server.on(
"/upload", HTTP_POST, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
ESP.restart();
},
[]() {
HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) {
Serial.setDebugOutput(true);
WiFiUDP::stopAll();
Serial.printf("Update: %s\n", upload.filename.c_str());
uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
if (!Update.begin(maxSketchSpace)) { // start with max available size
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { // true to set the size to the current progress
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
} else {
Update.printError(Serial);
}
Serial.setDebugOutput(false);
}
yield();
}
);
}
void createStaticIP() {
Serial.print("Setting AP Mode...");
WiFi.mode(WIFI_AP);
Serial.println("Done!");
Serial.print("Setting soft-AP configuration...");
WiFi.softAPConfig(ip, ip, subnet);
Serial.println("Done!");
Serial.print("Setting AP...");
WiFi.softAP(APSSID, APPSK);
Serial.println("Done!");
Serial.print("Setting up auto reconnect...");
WiFi.setAutoReconnect(true);
Serial.println("Done!");
Serial.print("Setting up persistent...");
WiFi.persistent(true);
Serial.println("Done!");
WiFi.begin();
server.begin();
Serial.print("IP: ");
Serial.println(ip);
Serial.println("All completed!");
}
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI:";
message += server.uri();
message += "\nMethod:";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments:";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++)
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
server.sendHeader("Access-Control-Allow-Origin", "*");
server.send(404, "text/plain", message);
}
void sendOutJsonResponse() {
serializeJson(doc, buf);
server.sendHeader("Access-Control-Allow-Origin", "*");
server.send(200, F("application/json"), buf);
doc.clear();
buf = "";
}
void handle_status() {
char buffer[20];
esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, macAddr);
doc["relay1"] = relay1State;
doc["relay2"] = relay2State;
doc["led"] = ledState;
doc["ip"] = ip;
doc["gateway"] = gateway;
doc["subnet"] = subnet;
if (ret == ESP_OK) {
sprintf(buffer, "%02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
doc["mac"] = buffer;
} else {
doc["mac"] = "0.0.0.0.0.0";
}
doc["ssid"] = APSSID;
doc["file"] = __FILE__;
doc["compile_date"] = __DATE__;
doc["compile_time"] = __TIME__;
doc["chipId"] = ESP.getChipId();
doc["SDK"] = ESP.getSdkVersion();
doc["uptime"] = getUptime();
doc["temp"] = getTemp();
doc["fan"] = getFan();
sendOutJsonResponse();
}
int getTemp() {
return emc2101.getInternalTemperature();
}
int getFan() {
return emc2101.getFanRPM();
}
void handle_fanSpeed() {
String value = server.arg("value"); //this lets you access a query param (http://x.x.x.x/action1?value=1)
emc2101.setDutyCycle(atoi(server.arg(0).c_str())); //server.pathArg(0)
}
void handle_bothon() {
if (!relay1State) {
Serial.println("relay 1 ON");
digitalWrite(relay1, relayOn);
relay1State = true;
doc["relay1"] = relay1State;
} else {
doc["relay1"] = relay1State;
}
if (!relay2State) {
Serial.println("relay 2 ON");
digitalWrite(relay2, relayOn);
relay2State = true;
doc["relay2"] = relay2State;
} else {
doc["relay2"] = relay2State;
}
sendOutJsonResponse();
}
void handle_bothoff() {
if (relay1State) {
Serial.println("relay 1 OFF");
digitalWrite(relay1, relayOff);
relay1State = false;
doc["relay1"] = relay1State;
} else {
doc["relay1"] = relay1State;
}
if (relay2State) {
Serial.println("relay 2 OFF");
digitalWrite(relay2, relayOff);
relay2State = false;
doc["relay2"] = relay2State;
} else {
doc["relay2"] = relay2State;
}
sendOutJsonResponse();
}
void handle_ledon() {
ledState = true;
doc["led"] = ledState;
Serial.println("Led ON");
digitalWrite(blueLED, LOW);
sendOutJsonResponse();
}
void handle_ledoff() {
ledState = false;
doc["led"] = ledState;
Serial.println("Led OFF");
digitalWrite(blueLED, HIGH);
sendOutJsonResponse();
}
void handle_relay1on() {
relay1State = true;
doc["relay1"] = relay1State;
doc["relay2"] = relay2State;
Serial.println("relay 1 ON");
digitalWrite(relay1, relayOn);
sendOutJsonResponse();
}
void handle_relay1off() {
relay1State = false;
doc["relay1"] = relay1State;
doc["relay2"] = relay2State;
Serial.println("relay 1 OFF");
digitalWrite(relay1, relayOff);
sendOutJsonResponse();
}
void handle_relay2on() {
relay2State = true;
doc["relay1"] = relay1State;
doc["relay2"] = relay2State;
Serial.println("relay 2 ON");
digitalWrite(relay2, relayOn);
sendOutJsonResponse();
}
void handle_relay2off() {
relay2State = false;
doc["relay1"] = relay1State;
doc["relay2"] = relay2State;
Serial.println("relay 2 OFF");
digitalWrite(relay2, relayOff);
sendOutJsonResponse();
}
I dont understand why I am getting this error as I have the variable defined?
Can someone spot what I obvious can not see?
My full code can be compiled here.