WeMOS Flere SSID

Fra HTX Arduino
Spring til navigation Spring til søgning
WeMOS WiFi Processor
WeMOS Server Connection - Simpel Server - Flere SSID - ESP8266 - Watchdog - Interrupt
Anvendelse LED-eksempel - AD-eksempel - Mail - POST metode - Web Publicering

Dette eksempel tager udgangspunkt i et eksempel fundet ved esp8266learning.com[1].

Formålet er at vise hvordan man kan lade WeMOS prøve at connecte til forskellige netværk.

Samlet kode

#include <ESP8266WiFi.h>

const int networkAntal = 2;

const char* ssid [] = {
  "AndroidAP",
  "ssid name"
};

const char* password [] = {
  "hybh9024",
  "ssid password"
};

int ledPin = 2;
WiFiServer server(80);

const int startLength = 4;
const String start_response [] = {
  "HTTP/1.1 200 OK",
  "Content-Type: text/html",
  "",
  "<!DOCTYPE HTML>",
};


const int htmlLength = 5;
const String html_response [] = {
  "<html>",
  "Click <a href=\"/LED=ON\">here</a> turn the LED on pin 2 ON<br>",
  "Click <a href=\"/LED=OFF\">here</a> turn the LED on pin 2 OFF<br>",
  "<br><br>",
  "Led pin is now: "
};

void setup() {
  Serial.begin(115200);
  delay(10);
 
 
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  boolean OK = false;
  int networks = 0;
  while (!OK) {
    // Connect to WiFi network
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid[networks]);
   
    WiFi.begin(ssid[networks], password[networks]);

    int antal = 0;
    while (WiFi.status() != WL_CONNECTED && antal < 16) {
      delay(500);
      Serial.print(".");
      antal++;
    }
    if (WiFi.status() == WL_CONNECTED) {
      OK = true;
      Serial.println("");
      Serial.println("WiFi connected");
    }
    networks++;
    if (networks >= networkAntal) {
      networks = 0;
    }
  }
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL : ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
    digitalWrite(ledPin, LOW);  // Inverted output Low to turn LED ON
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1){
    digitalWrite(ledPin, HIGH);    // Inverted output High to turn LED OFF
    value = LOW;
  }
 
  // Return the response
  for (int n = 0; n < startLength; n++) {
    client.println(start_response[n]);
  }
  for (int n = 0; n < htmlLength; n++) {
    client.println(html_response[n]);
  }
 
  if(value == HIGH) {
    client.print("On");  
  } else {
    client.print("Off");
  }
  client.println("</html>");
  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
}

Server Connection

Selve forbindelsen til netværket tager stadig udgangspunkt i teknikken beskrevet i WeMOS Server Connection, hvor der forbindes til Wifi og der sættes en server op.

Der laves en datastruktur med den netværk man ønsker at prøve igennem og med det tilsvarende passwords:

const int networkAntal = 2;

const char* ssid [] = {
  "AndroidAP",
  "ssid name"
};

const char* password [] = {
  "hyzx1234",
  "ssid password"
};

Oprettelse af forbindelse

Der prøves så for hvert netværk i 8 sekunder om der opnås forbindelse, og hvis der ikke gør, så prøves det næste netværk.

Denne kode er placeret i setup():

  boolean OK = false;
  int networks = 0;
  while (!OK) {
    // Connect to WiFi network
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid[networks]);
   
    WiFi.begin(ssid[networks], password[networks]);

    int antal = 0;
    while (WiFi.status() != WL_CONNECTED && antal < 16) {
      delay(500);
      Serial.print(".");
      antal++;
    }
    if (WiFi.status() == WL_CONNECTED) {
      OK = true;
      Serial.println("");
      Serial.println("WiFi connected");
    }
    networks++;
    if (networks >= networkAntal) {
      networks = 0;
    }
  }

Referencer