Verbinden zu einem Neuen Wlan, ohne den Code zu verändern

Hallo an alle,
Ich möchte gerne eine Möglichkeit haben meine Wlan Verbindung während dem Laufenden Programm ändern zu können, sodass ich meinen Arduino MKR1000 nicht via PC das neue Wlan “einprogrammieren” muss.
Ich würde gerne dies entweder via Arduino IOT cloud verändern; oder eine Möglichkeit haben das z.b. der Arduino eine art “Hotspot” öffnet wenn er das angegebene Wlan nicht mehr finden kann und ich mich dann via Smartphone verbinden kann um ihn neue Wlan Zugangsdaten zu geben. Ich weiß natürlich nicht inwiefern das möglich ist.

Eine andere Möglichkeit die ich mir ansonsten gedacht habe wäre auch noch wenn ich im vorher verschiedene Wlan-Daten geben kann die er dann durchprobiert wenn er keine Verbindung zu dem angegebenen Wlan erreichen kann. Würde mich freuen wenn mir da jemand weiterhelfen könnte.

Ich weiß zwar nicht ob das benötigt wird, aber dies wäre bisher mein Vorhandener Code und mein “versuch” das ganze zu realisieren. aber leider habe ich keine Lösung finden können, auch nicht in anderen Foren oder den Libraries:

#include "arduino_secrets.h"
/*
  Sketch generated by the Arduino IoT Cloud Thing "Cloud_LED"
 

  Arduino IoT Cloud Properties description

  The following variables are automatically generated and updated when changes are made to the Thing properties

  bool ledSwitch;
    String PASS;
  String SSID;
  int motor;
  bool ledSwitch;
  bool new_Connection;

  Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/

#include "thingProperties.h"
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
  */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  ledSwitch = false;
  new_Connection = 0 ;


  // Set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);

  // Turn off motors - Initial state
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);

}

void loop() {
  ArduinoCloud.update();
  
    if (motor > 255) {
      motor = 0;
    }
    // Serial.println(motor);
    Serial.println(motortest);
    delay(1000);


}

void onLedSwitchChange() {
  digitalWrite(LED_BUILTIN, ledSwitch);
}


void onMotorChange() {
  motortest = motor;
  analogWrite(enA, motortest);

  // Turn on motor A
  if (motortest > 60 ){
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  delay(2000);
  }
  
if (motortest < 61 ) {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
}

}

void onPASSNewChange() {
  // Do something
  Serial.println(PASS_new);
}


void onSSIDNewChange() {
  // Do something
  Serial.println(SSID_new);
}



void onNewConnectionChange() {
  delay(5000);
  Serial.println("value:");
  Serial.println(new_Connection);
  
  if (new_Connection > 5){
    Serial.println("no new connection.");
  }

  if (new_Connection > 3){
    new_Connection = 0;
    Serial.println("make new Connection with the following details:");
    // WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID_new, PASS_new);
    // ArduinoCloud.begin(ArduinoIoTPreferredConnection);
    Serial.println(PASS_new);
    Serial.println(SSID_new);
    WiFi.begin(SSID_new, PASS_new);
    //ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  }

}

und die ThingProperties.h

#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>


const char THING_ID[] = "";

const char SSID[]     = SECRET_SSID;    // Network SSID (name)
const char PASS[]     = SECRET_PASS;    // Network password (use for WPA, or use as key for WEP)

void onPASSNewChange();
void onSSIDNewChange();
void onMotorChange();
void onLedSwitchChange();
void onNewConnectionChange();

// Motor A connections
int enA = 0;
int in1 = 2;
int in2 = 3;


String PASS_new;
String SSID_new;
int motor;
int motortest;
bool ledSwitch;
int new_Connection;

void initProperties(){

  ArduinoCloud.setThingId(THING_ID);
  ArduinoCloud.addProperty(PASS_new, READWRITE, ON_CHANGE, onPASSNewChange);
  ArduinoCloud.addProperty(SSID_new, READWRITE, ON_CHANGE, onSSIDNewChange);
  ArduinoCloud.addProperty(motor, READWRITE, ON_CHANGE, onMotorChange);
  ArduinoCloud.addProperty(ledSwitch, READWRITE, ON_CHANGE, onLedSwitchChange);
  ArduinoCloud.addProperty(new_Connection, READWRITE, ON_CHANGE, onNewConnectionChange);

}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);

Ps: habe versucht alles beim Posten zu beachten, würde mich aber trotzdem auch um Feedback darüber freuen fürs nächste mal falls ich was vergessen habe.

Für den ESP8266 hat Fips da ein Beispiel. Evtl. kannst Du Dir da Ideen holen.

Gruß Tommy