Meerdere bestanden arduino esp8266 schets delen van een verwijzing naar de server

Overgedragen van stackoverloop op advies van @Gee_Bee:

Ik kan een bibliotheek voor Arduino krijgen om zowel te werken als te werken    Een schets in meerdere bestanden splitsen en Klassen binnen klassen   - Initialisatielijsten . Ik kan zelfs externe verwijzingen naar variabelen krijgen om te werken, maar verwijs naar de instantie van ESP8266WebServer in   verschillende bestanden zijn mij nog steeds te boven.

Naarmate mijn schetsen groter worden, ziet de code er vreselijk uit aangezien één bestand en het aantal globale variabelen te hoog is.

Voor het webconfiguratiegedeelte van mijn schets probeert het apparaat online te gaan en als het mislukt, zoekt het apparaat naar beschikbare Wi-Fi-netwerken, gaat het naar de Access Point-modus, start een server, verzendt de lijst met SSID's en luistert naar een reactie van een SSID/wachtwoord paar. De server is alleen voor de configuratie.

In het ideale geval zou ik willen dat het opgeruimde main.ino bestand er uit ziet

    #include "config.h"
    void setup(){
        Serial.begin(115200);
        Serial.println();
        Serial.println("--------------------------");
      Serial.println("ESP8266 multifile");
      Serial.println("--------------------------");
      getOnline();
    }
    void loop(){
        if(IN_CONFIG_MODE){
           server.handleClient();
        }
    }

met een config.h iets als ..

    #ifndef config_h
    #define config_h
        #include 
        #include 
        ESP8266WebServer server;
        void getOnline();
    #endif

en dan een config.cpp waar het alle hierboven beschreven dingen doet maar toch het main.ino programma toegang geeft tot de server instantie zodat het kan luisteren in de hoofdlus.

#include "config.h"
#include 
#include 
#include 

char *espssid = "espAPsb";
char *ssid = "street_no_vale2";
char *pwd = "jjjjjjjjx";
char ssids[300];

extern server(80);

void handleRoot(){
    server.send(200, "text/html", "

root of espAPsb AP server

");
    //send json of available ssids
}

void scan(){
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  int n = WiFi.scanNetworks();
  Serial.println("scan done");  
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
     //Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");   
}

void setupAP(){
    WiFi.softAP(espssid);
    server.on("/", handleRoot);
    server.begin();
  Serial.println();
  Serial.print("connected as AP ");
  Serial.println(espssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.softAPIP());  
}

void getOnline(){
    WiFi.begin(ssid, pwd);
  int tries =0;
  int success=1;
  while (WiFi.status() != WL_CONNECTED ) {
    delay(500);
    Serial.print(".");
    tries++;
    if (tries==15){
      success=0;
      Serial.println("WiFi not connected");
      scan();
      setupAP();
      break;
    }
  }
  if (success){
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());    
  } 
}
1

Geen antwoorden

0