4 channel dimmer.

adam.repo
Posts: 2
Joined: Sun Aug 23, 2020 1:40 pm

did you get the software for this?
User avatar
ritual
Posts: 80
Joined: Mon Apr 20, 2020 11:47 am

adam.repo wrote: Sun Aug 23, 2020 1:42 pm did you get the software for this?
No, not yet.
they are working on it.
elmaya
Posts: 1482
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

4-channel dimmer with local "toggle" control.

Memory of the last state in case of power loss.

connections:
D1 Gpio 5 = dimmer 1
D2 Gpio 4 = dimmer 2
D5 Gpio14 = dimmer 3
D6 Gpio12 = dimmer 4
D4 Gpio 2 = Status led
D3 Gpio 0 = button
ESP 4 xDimm LED_bb.png
ESP 4 xDimm LED_bb.png (122.57 KiB) Viewed 4339 times

status led:
flashing 1 second = WiFiConfig.
flashing 0.5 seconds = not connected, connecting.
off = connected, OK.

WiFiConfig:
connect to WiFi-AP with name "SuplaDimm" for configuration.

button:
pressed for 10 seconds = WiFiConfig.
click = toggle Dimmer 1
double Click = toggle Dimmer 2
triple Click = toggle Dimmer 3
4 x click = toggle Dimmer 4




Code: Select all

/*
Copyright (C) AC SOFTWARE SP. Z O.O.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
     
#include <SuplaDevice.h>
#include <supla/control/dimmer_base.h>
#include <WiFiManager.h>
#include <EEPROM.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h> 
#include <WiFiClientSecure.h>
#include <Ticker.h>
#include <Button3.h>
#include <ESP8266TrueRandom.h>
#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifi("", "");

extern "C"
{
#include "user_interface.h"
}

//#define D0 16  //no internal pullup resistor
//#define D1  5
//#define D2  4
//#define D3  0  //must not be pulled low during power on/reset, toggles value during boot
//#define D4  2  //must not be pulled low during power on/reset, toggles value during boot
//#define D5 14
//#define D6 12
//#define D7 13
//#define D8 15  //must not be pulled high during power on/reset

#define CONFIG_PIN            0  // WiFiconfig 
#define BRIGHTNESS1_PIN       5
#define BRIGHTNESS2_PIN       4
#define BRIGHTNESS3_PIN       14
#define BRIGHTNESS4_PIN       12
#define ledpin                2

int web_port =81;
int s;
char GUID[SUPLA_GUID_SIZE];
char AUTHKEY[SUPLA_AUTHKEY_SIZE];
byte uuidNumber[16];
char Supla_server[81]=("Set server address");
char Email[81]=("set email address");                        
char Supla_name[81]=("set device name"); 
char Supla_status[51]=("No server address"); 
const int max_cr = 81;
int C_W_state = HIGH; 
int last_C_W_state = HIGH;
unsigned long time_last_C_W_change = 0; 
long C_W_delay = 10000;                      // config delay 10 seconds        
bool shouldSaveConfig = false;
bool initialConfig = false;
bool starting = true;
bool tikOn = true;
unsigned long mem_milis;
bool mem_update = false;
const int EEPROM_MIN_ADDR = 20;
const int EEPROM_MAX_ADDR = 299;
static const char logo[] PROGMEM = "<style>html{ background-color: #01DF3A;}</style><div class='s'><svg version='1.1' id='l' x='0' y='0' viewBox='0 0 200 200' xml:space='preserve'><path d='M59.3,2.5c18.1,0.6,31.8,8,40.2,23.5c3.1,5.7,4.3,11.9,4.1,18.3c-0.1,3.6-0.7,7.1-1.9,10.6c-0.2,0.7-0.1,1.1,0.6,1.5c12.8,7.7,25.5,15.4,38.3,23c2.9,1.7,5.8,3.4,8.7,5.3c1,0.6,1.6,0.6,2.5-0.1c4.5-3.6,9.8-5.3,15.7-5.4c12.5-0.1,22.9,7.9,25.2,19c1.9,9.2-2.9,19.2-11.8,23.9c-8.4,4.5-16.9,4.5-25.5,0.2c-0.7-0.3-1-0.2-1.5,0.3c-4.8,4.9-9.7,9.8-14.5,14.6c-5.3,5.3-10.6,10.7-15.9,16c-1.8,1.8-3.6,3.7-5.4,5.4c-0.7,0.6-0.6,1,0,1.6c3.6,3.4,5.8,7.5,6.2,12.2c0.7,7.7-2.2,14-8.8,18.5c-12.3,8.6-30.3,3.5-35-10.4c-2.8-8.4,0.6-17.7,8.6-22.8c0.9-0.6,1.1-1,0.8-2c-2-6.2-4.4-12.4-6.6-18.6c-6.3-17.6-12.7-35.1-19-52.7c-0.2-0.7-0.5-1-1.4-0.9c-12.5,0.7-23.6-2.6-33-10.4c-8-6.6-12.9-15-14.2-25c-1.5-11.5,1.7-21.9,9.6-30.7C32.5,8.9,42.2,4.2,53.7,2.7c0.7-0.1,1.5-0.2,2.2-0.2C57,2.4,58.2,2.5,59.3,2.5z M76.5,81c0,0.1,0.1,0.3,0.1,0.6c1.6,6.3,3.2,12.6,4.7,18.9c4.5,17.7,8.9,35.5,13.3,53.2c0.2,0.9,0.6,1.1,1.6,0.9c5.4-1.2,10.7-0.8,15.7,1.6c0.8,0.4,1.2,0.3,1.7-0.4c11.2-12.9,22.5-25.7,33.4-38.7c0.5-0.6,0.4-1,0-1.6c-5.6-7.9-6.1-16.1-1.3-24.5c0.5-0.8,0.3-1.1-0.5-1.6c-9.1-4.7-18.1-9.3-27.2-14c-6.8-3.5-13.5-7-20.3-10.5c-0.7-0.4-1.1-0.3-1.6,0.4c-1.3,1.8-2.7,3.5-4.3,5.1c-4.2,4.2-9.1,7.4-14.7,9.7C76.9,80.3,76.4,80.3,76.5,81z M89,42.6c0.1-2.5-0.4-5.4-1.5-8.1C83,23.1,74.2,16.9,61.7,15.8c-10-0.9-18.6,2.4-25.3,9.7c-8.4,9-9.3,22.4-2.2,32.4c6.8,9.6,19.1,14.2,31.4,11.9C79.2,67.1,89,55.9,89,42.6z M102.1,188.6c0.6,0.1,1.5-0.1,2.4-0.2c9.5-1.4,15.3-10.9,11.6-19.2c-2.6-5.9-9.4-9.6-16.8-8.6c-8.3,1.2-14.1,8.9-12.4,16.6C88.2,183.9,94.4,188.6,102.1,188.6z M167.7,88.5c-1,0-2.1,0.1-3.1,0.3c-9,1.7-14.2,10.6-10.8,18.6c2.9,6.8,11.4,10.3,19,7.8c7.1-2.3,11.1-9.1,9.6-15.9C180.9,93,174.8,88.5,167.7,88.5z'/></svg>";
 
ESP8266WebServer httpServer(81);
ESP8266HTTPUpdateServer httpUpdater;
Ticker ticker; 
Button3 buttonA = Button3(CONFIG_PIN);

uint8_t hw_brightnessA;
uint8_t hw_brightnessB;
uint8_t hw_brightnessC;
uint8_t hw_brightnessD;

Supla::Control::RGBWBase *miDimA = nullptr;
Supla::Control::RGBWBase *miDimB = nullptr;
Supla::Control::RGBWBase *miDimC = nullptr;
Supla::Control::RGBWBase *miDimD = nullptr;

class Dimm : public Supla::Control::DimmerBase {
 public:
  Dimm(int brightnessPin)
      : brightnessPin(brightnessPin) {
  }

  void setRGBWValueOnDevice(uint8_t red,
                            uint8_t green,
                            uint8_t blue,
                            uint8_t colorBrightness,
                            uint8_t brightness) {
                         
    analogWrite(brightnessPin, (brightness * 255) / 100);
    if (brightnessPin == BRIGHTNESS1_PIN) hw_brightnessA = brightness;
    if (brightnessPin == BRIGHTNESS2_PIN) hw_brightnessB = brightness;
    if (brightnessPin == BRIGHTNESS3_PIN) hw_brightnessC = brightness;
    if (brightnessPin == BRIGHTNESS4_PIN) hw_brightnessD = brightness;
    mem_update = true;
    mem_milis = (millis()+3000); 
  }

 protected:
  int redPin;
  int greenPin;
  int bluePin;
  int brightnessPin;
  int colorBrightnessPin;
};

void saveConfigCallback () {          
  Serial.println("Should save config");
  shouldSaveConfig = true;
}
void tick()
{
  int state = digitalRead(ledpin);  
  digitalWrite(ledpin, !state);     
}
bool ondemandwifiCallback(bool resetConf) {

   Serial.print("Heap: ");Serial.println(ESP.getFreeHeap());
   analogWrite(BRIGHTNESS1_PIN, 0); 
   analogWrite(BRIGHTNESS2_PIN, 0); 
   analogWrite(BRIGHTNESS3_PIN, 0); 
   analogWrite(BRIGHTNESS4_PIN, 0);
  
  ticker.attach(1.0, tick);
             
  WiFiManager wifiManager;

    if (resetConf){  
    wifiManager.resetSettings();
    delay(5000);
    ESP.reset();
    delay(1000);
   }
  
   WiFiManagerParameter custom_Supla_server("server", "supla server", Supla_server, 81,"required");
   WiFiManagerParameter custom_Email("email", "Email", Email, 81,"required");
   WiFiManagerParameter custom_Supla_name("name", "Supla Device Name", Supla_name, 51,"required");
   WiFiManagerParameter custom_html_id21("<div><h4> - Supla State -   ");
   WiFiManagerParameter custom_html_id22( Supla_status);
   WiFiManagerParameter custom_html_id23( "</h4></div>");

   wifiManager.setBreakAfterConfig(true);
   wifiManager.setSaveConfigCallback(saveConfigCallback);
  
   wifiManager.addParameter(&custom_Supla_server);
   wifiManager.addParameter(&custom_Email);
   wifiManager.addParameter(&custom_Supla_name);
   wifiManager.addParameter(&custom_html_id21);
   wifiManager.addParameter(&custom_html_id22);
   wifiManager.addParameter(&custom_html_id23);

   wifiManager.setCustomHeadElement(logo);
   wifiManager.setMinimumSignalQuality(8);
   //wifiManager.setShowStaticFields(true); // force show static ip fields
   //wifiManager.setShowDnsFields(true);    // force show dns field always
   wifiManager.setConfigPortalTimeout(180);

   if (!wifiManager.startConfigPortal("SuplaDimm")) { Serial.println("Not connected to WiFi but continuing anyway.");} else { Serial.println("connected...yeey :)");}                
    strcpy(Supla_server, custom_Supla_server.getValue());
    strcpy(Email, custom_Email.getValue());
    strcpy(Supla_name, custom_Supla_name.getValue());
    if(strcmp(Supla_server, "get_new_guid_and_authkey") == 0){
      Serial.println("new guid & authkey.");
      EEPROM.write(300, 0);
      EEPROM.commit();
      delay(100);
      ESP.reset(); 
    }
  if (shouldSaveConfig) {
    if (eeprom_write_string(20, Supla_server))Serial.println("stored server");
    if (eeprom_write_string(105, Email))Serial.println("stored Email");
    if (eeprom_write_string(200, Supla_name))Serial.println("stored name");
    shouldSaveConfig = false;
    initialConfig = false; 
    WiFi.mode(WIFI_STA);   
    delay(5000);
    ESP.restart();     
  }      
  ticker.detach();
  WiFi.softAPdisconnect(true);
  initialConfig = false;
  digitalWrite(ledpin, HIGH);
}

boolean eeprom_is_addr_ok(int addr) {
  return ((addr >= EEPROM_MIN_ADDR) && (addr <= EEPROM_MAX_ADDR));
}

boolean eeprom_write_bytes(int startAddr, const byte* array, int numBytes) {

  int i;
  if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes)) {
    return false;
  }
  for (i = 0; i < numBytes; i++) {
    EEPROM.write(startAddr + i, array[i]);
  }
 EEPROM.commit();
   return true;
}

boolean eeprom_write_string(int addr, const char* string) {
  int numBytes; 
  numBytes = strlen(string) + 1;
  return eeprom_write_bytes(addr, (const byte*)string, numBytes);
}

boolean eeprom_read_string(int addr, char* buffer, int bufSize) {
    byte ch; 
    int bytesRead; 
  if (!eeprom_is_addr_ok(addr)) {return false;}  
  if (bufSize == 0) { return false;}    
  if (bufSize == 1) {buffer[0] = 0;return true;} 
      
  bytesRead = 0; 
  ch = EEPROM.read(addr + bytesRead); 
  buffer[bytesRead] = ch; 
  bytesRead++; 
  
  while ( (ch != 0x00) && (bytesRead < bufSize) && ((addr + bytesRead) <= EEPROM_MAX_ADDR) ) {
    ch = EEPROM.read(addr + bytesRead);
    buffer[bytesRead] = ch; 
    bytesRead++; 
  }
  
  if ((ch != 0x00) && (bytesRead >= 1)) {
    buffer[bytesRead - 1] = 0;
  }
  return true;
}

void guid_authkey(void) {
  if (EEPROM.read(300) != 60){
    int eep_gui = 301;

    ESP8266TrueRandom.uuid(uuidNumber);

    String uuidString = "";
    for (int i = 0; i < 16; i++) {
      int topDigit = uuidNumber[i] >> 4;
      int bottomDigit = uuidNumber[i] & 0x0f;
      uuidString += "0123456789abcdef"[topDigit];
      uuidString += "0123456789abcdef"[bottomDigit];
    }
    int length_uuid = uuidString.length();
    for (int i = 0; i < length_uuid; ++i) {
      EEPROM.put(eep_gui + i, uuidString[i]);
    }

    int eep_aut = 341;

    ESP8266TrueRandom.uuid(uuidNumber);

    String uuidString2 = "";
    for (int i = 0; i < 16; i++) {
      int topDigit = uuidNumber[i] >> 4;
      int bottomDigit = uuidNumber[i] & 0x0f;
      uuidString2 += "0123456789abcdef"[topDigit];
      uuidString2 += "0123456789abcdef"[bottomDigit];
    }
    int length_uuid2 = uuidString2.length();
    for (int i = 0; i < length_uuid2; ++i) {
      EEPROM.put(eep_aut + i, uuidString2[i]);
    }
    EEPROM.write(300, 60);
    EEPROM.commit();
    eeprom_write_string(20, Supla_server);
    eeprom_write_string(105, Email);
    eeprom_write_string(200, Supla_name);
  }
  read_guid();
  read_authkey();
  Serial.print("GUID : ");Serial.println(read_guid()); 
  Serial.print("AUTHKEY : ");Serial.println(read_authkey()); 
}

String read_guid(void) {
  String read_eeprom = "";
  int i, ii = 0;
  int eep_star = 301;
  int end_guid = eep_star + SUPLA_GUID_SIZE;
  String temp_read = "0x";
  for (i = eep_star; i < end_guid + 16;  i = i + 1) {
    temp_read += char(EEPROM.read(i));
    read_eeprom += char(EEPROM.read(i));
    if ( (i % 2) == 0) {
      char *_guid = strcpy((char*)malloc(temp_read.length() + 1), temp_read.c_str());
      GUID[ii] = strtoul( _guid, NULL, 16);
      temp_read = "0x";
      ii++;
    }
  }
  return read_eeprom;
}
String read_authkey(void) {
  String read_eeprom = "";
  int i, ii = 0;
  int eep_star = 341;
  int end_authkey = eep_star + SUPLA_AUTHKEY_SIZE;
  String temp_read = "0x";
  for (i = eep_star; i < end_authkey + 16;  i = i + 1) {
    temp_read += char(EEPROM.read(i));
    read_eeprom += char(EEPROM.read(i));
    if ( (i % 2) == 0) {
      char *_authkey = strcpy((char*)malloc(temp_read.length() + 1), temp_read.c_str());
      AUTHKEY[ii] = strtoul( _authkey, NULL, 16);
      temp_read = "0x";
      ii++;
    }
  }
  return read_eeprom;
}
void status_func(int status, const char *msg) { 
  if (s != status){
     s=status; 
     Serial.print("status: "); 
     Serial.println(s); 
         if (status != 10){
      strcpy(Supla_status, msg);
   }  
  }                                        
}
void setup() {
  
  wifi_set_sleep_type(NONE_SLEEP_T);
  
  Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY, 1);
  delay(200);
  Serial.println(" ");
  Serial.println(" ");
  EEPROM.begin(1024);
  pinMode(CONFIG_PIN, INPUT_PULLUP); 
  pinMode(ledpin, OUTPUT);
  ticker.attach(0.5, tick);
  analogWriteRange(255); 
  analogWriteFreq(100);
  
  guid_authkey();
  
  if (WiFi.SSID()==""){ initialConfig = true;}
  if (EEPROM.read(300) != 60){initialConfig = true;} 

    eeprom_read_string(20, Supla_server, max_cr);Serial.print("Supla server: "); Serial.println(Supla_server); 
    eeprom_read_string(105, Email, max_cr);Serial.print("Email: "); Serial.println(Email); 
    eeprom_read_string(200, Supla_name, max_cr);Serial.print("Supla name: "); Serial.println(Supla_name); 


  wifi_station_set_hostname(Supla_name);
    WiFi.mode(WIFI_STA);

  buttonA.setClickHandler(click);
  buttonA.setDoubleClickHandler(doubleClick);
  buttonA.setTripleClickHandler(tripleClick);
  buttonA.setQuatleClickHandler(quatleClick);  
   
  read_dimm_mem(); 

  miDimA = new Dimm(BRIGHTNESS1_PIN);
  miDimB = new Dimm(BRIGHTNESS2_PIN);
  miDimC = new Dimm(BRIGHTNESS3_PIN);
  miDimD = new Dimm(BRIGHTNESS4_PIN);

  wifi.enableSSL(false);
  SuplaDevice.setName(Supla_name);
  SuplaDevice.setStatusFuncImpl(&status_func);

  miDimA->setRGBWValueOnDevice(0, 0, 0, 0, hw_brightnessA);
  miDimA->setRGBW(0, 0, 0, 0, hw_brightnessA);
  miDimB->setRGBWValueOnDevice(0, 0, 0, 0, hw_brightnessB);
  miDimB->setRGBW(0, 0, 0, 0, hw_brightnessB);
  miDimC->setRGBWValueOnDevice(0, 0, 0, 0, hw_brightnessC);
  miDimC->setRGBW(0, 0, 0, 0, hw_brightnessC);
  miDimD->setRGBWValueOnDevice(0, 0, 0, 0, hw_brightnessD);
  miDimD->setRGBW(0, 0, 0, 0, hw_brightnessD);
  miDimA->setStep(5);
  miDimB->setStep(5);
  miDimC->setStep(5);
  miDimD->setStep(5);
                   

  SuplaDevice.begin(GUID,Supla_server,Email,AUTHKEY);
     
}

void loop() {

  if (initialConfig == true){initialConfig = false; ondemandwifiCallback(false);}

  int C_W_read = digitalRead(CONFIG_PIN);  
   if (C_W_read != last_C_W_state) {            
     time_last_C_W_change = millis();
   }
   if ((millis() - time_last_C_W_change) > C_W_delay) {     
     if (C_W_read != C_W_state) {     
       Serial.println("Triger sate changed");
       C_W_state = C_W_read;       
       if (C_W_state == LOW) {
        ondemandwifiCallback(false);
       }
     }
    }
   last_C_W_state = C_W_read;

  if (millis() > mem_milis){
      if (mem_update) save_dimm_mem();
      mem_milis = (millis()+3000); 
    }

  if (WiFi.status() == WL_CONNECTED){
    if (starting){
       httpUpdater.setup(&httpServer, "/update", "admin", "pass");
       httpServer.begin();      
       starting = false;         
     }
     httpServer.handleClient();
   }

  SuplaDevice.iterate();
  delay(22);
  buttonA.loop(); 
   
  if ((s == 17)&&(tikOn)){
      ticker.detach();
      digitalWrite(ledpin, HIGH);
      tikOn = false;    
  }else if ((s != 17) && (tikOn == false)){
      ticker.attach(0.5, tick);
      tikOn = true;    
  }

}
void save_dimm_mem(){
  
  bool save = false;
  if (hw_brightnessA != EEPROM.read(10)){ EEPROM.write(10,hw_brightnessA);save = true;}
  if (hw_brightnessB != EEPROM.read(11)){ EEPROM.write(11,hw_brightnessB);save = true;}
  if (hw_brightnessC != EEPROM.read(12)){ EEPROM.write(12,hw_brightnessC);save = true;} 
  if (hw_brightnessD != EEPROM.read(13)){ EEPROM.write(13,hw_brightnessD);save = true;} 
  if (save == true){ 
    EEPROM.commit();
    Serial.print("SAVE Dimm to Mem: ");Serial.print(hw_brightnessA);Serial.print(",");Serial.print(hw_brightnessB);Serial.print(",");Serial.print(hw_brightnessC);Serial.print(",");Serial.println(hw_brightnessD);   
    mem_update = false;
  }  
}

void read_dimm_mem(){
  
  hw_brightnessA = EEPROM.read(10);hw_brightnessB = EEPROM.read(11);hw_brightnessC = EEPROM.read(12);hw_brightnessD = EEPROM.read(13);
  Serial.println("Epp Read ");Serial.println(hw_brightnessA);Serial.println(hw_brightnessB);Serial.println(hw_brightnessC);Serial.println(hw_brightnessD);

}
void click(Button3& btn) {
   miDimA->trigger(0, Supla::TOGGLE_W);
   Serial.println("Click TOGGLE_W 1");
}
void doubleClick(Button3& btn) {
   miDimB->trigger(1, Supla::TOGGLE_W);
   Serial.println("doubleClick TOGGLE_W 2");
}
void tripleClick(Button3& btn) {
   miDimC->trigger(2, Supla::TOGGLE_W);
   Serial.println("tripleClick TOGGLE_W 3");
}
void quatleClick(Button3& btn) {
   miDimD->trigger(3, Supla::TOGGLE_W);
   Serial.println("quadClick TOGGLE_W 4");
}
Dimm_X_4_DOUT_16Mbit.rar
Compiled Firmware
(554.5 KiB) Downloaded 208 times
User avatar
ritual
Posts: 80
Joined: Mon Apr 20, 2020 11:47 am

my wemos doesn't connect to my router it flashes for 0.5s and doesn't go any forward from that. i tried flashing it twice.
elmaya
Posts: 1482
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

do you have any special character or blank space in the password?
check in serial terminal what is happening.
User avatar
ritual
Posts: 80
Joined: Mon Apr 20, 2020 11:47 am

i do have a special character in my wifi password and multiple spaces in my ssid.
i tried connecting it to another router and it connected and registered succcesfully.
thank you so much for this, i really appreciate it.
margeb
Posts: 3
Joined: Wed Feb 02, 2022 4:36 pm

Hi all, this is my first post here and quite a beginning of my journey with Supla. I'm trying to build similar device, only I need just 2 channels, but this looks like exactly what I was looking for. I am very glad that there is supportive community and passionates willing to share ther code - thank you guys! :)

I tried to use code from Elmaya embedded in one of posts in this thread, pasting it directly in Arduino IDE, but cannot made it compiling, because of WiFiManager.h and Button3.h headers missing. I need to add here that I was able to compile and customize couple of examples bundled with SuplaDevice library, and run it on NodeMCU. presume Button3 is some custom uimplementation of Button control, and there is a reason for that.

Is there a chance to share the code for Button3, or to provide any guidelines on building this software directly from IDE?
Thank you in advance for any advice :)
elmaya
Posts: 1482
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

margeb
Posts: 3
Joined: Wed Feb 02, 2022 4:36 pm

Gracias elmaya, will try that out.

My sinful curiosity brings out more questions: Is there any specific reason you are using EEPROM.h rather than Storage class from SuplaDevice library?
elmaya
Posts: 1482
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

2 years ago there was no "Storage class from SuplaDevice library". ;)
today you could change some things but you still have to save GUID, AUTHKEY, EMAIL, ETC... somehow.
Post Reply

Return to “Ideas and concepts”