Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 4 of 4

Thread: How to connect > 1 client to a serverusing an Adafruit WINC1500?

  1. #1

    How to connect > 1 client to a serverusing an Adafruit WINC1500?

    All,

    i have a WINC1500 wifi module connected to my Teensy 3.2 and using the libraries at https://github.com/arduino-libraries/WiFi101

    After adding the line in setup(), WiFi.setPins(8, 7, 4, 2); code runs and I can connect my Android phone to this web server and point my phones Chrome browser to 196.168.1.1 and the web page generated by the server displays correctly.

    However I'm trying to connect a second phone to the web server, and the phone fails to make the connection.

    the comment at the code "clients" indicates more than one can connect
    WiFiClient client = server.available(); // listen for incoming clients

    Anyone get this to work?

    Code:
    /*
      WiFi Web Server LED Blink
    
      A simple web server that lets you blink an LED via the web.
      This sketch will create a new access point (with no password).
      It will then launch a new server and print out the IP address
      to the Serial monitor. From there, you can open that address in a web browser
      to turn on and off the LED on pin 13.
    
      If the IP address of your shield is yourAddress:
        http://yourAddress/H turns the LED on
        http://yourAddress/L turns it off
    
      created 25 Nov 2012
      by Tom Igoe
      adapted to WiFi AP by Adafruit
    */
    
    #include <SPI.h>
    #include <WiFi101.h>
    #include "arduino_secrets.h"
    ///////please enter your sensitive data in the Secret tab/arduino_secrets.h
    char ssid[] = "TEST";        // your network SSID (name)
    char pass[] = "0123456789";    // your network password (use for WPA, or use as key for WEP)
    int keyIndex = 0;                // your network key Index number (needed only for WEP)
    
    int led =  LED_BUILTIN;
    int status = WL_IDLE_STATUS;
    WiFiServer server(80);
    
    void setup() {
      //Initialize serial and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    
      Serial.println("Access Point Web Server");
    
      // this line had to be added to enable pin connections
      //void setPins(int8_t cs, int8_t irq, int8_t rst, int8_t en = -1);
      WiFi.setPins(8, 7, 4, 2);
    
      // module works just fine
    
      pinMode(led, OUTPUT);      // set the LED pin mode
    
      // check for the presence of the shield:
      if (WiFi.status() == WL_NO_SHIELD) {
        Serial.println("WiFi shield not present");
        // don't continue
        while (true);
      }
    
      // by default the local IP address of will be 192.168.1.1
      // you can override it with the following:
      // WiFi.config(IPAddress(10, 0, 0, 1));
    
      // print the network name (SSID);
      Serial.print("Creating access point named: ");
      Serial.println(ssid);
    
      // Create open network. Change this line if you want to create an WEP network:
      status = WiFi.beginAP(ssid, keyIndex, pass);
      if (status != WL_AP_LISTENING) {
        Serial.println("Creating access point failed");
        // don't continue
        while (true);
      }
    
      // wait 10 seconds for connection:
      delay(10000);
    
      // start the web server on port 80
      server.begin();
    
      // you're connected now, so print out the status
      printWiFiStatus();
    }
    
    
    void loop() {
      // compare the previous status to the current status
      if (status != WiFi.status()) {
        // it has changed update the variable
        status = WiFi.status();
    
        if (status == WL_AP_CONNECTED) {
          byte remoteMac[6];
    
          // a device has connected to the AP
          Serial.print("Device connected to AP, MAC address: ");
          WiFi.APClientMacAddress(remoteMac);
          printMacAddress(remoteMac);
        } else {
          // a device has disconnected from the AP, and we are back in listening mode
          Serial.println("Device disconnected from AP");
        }
      }
    
      WiFiClient client = server.available();   // listen for incoming clients
    
      if (client) {                             // if you get a client,
        Serial.println("new client");           // print a message out the serial port
        Serial.println(WiFi.localIP());
        String currentLine = "";                // make a String to hold incoming data from the client
        while (client.connected()) {            // loop while the client's connected
          if (client.available()) {             // if there's bytes to read from the client,
            char c = client.read();             // read a byte, then
            Serial.write(c);                    // print it out the serial monitor
            if (c == '\n') {                    // if the byte is a newline character
    
              // if the current line is blank, you got two newline characters in a row.
              // that's the end of the client HTTP request, so send a response:
              if (currentLine.length() == 0) {
                // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
                // and a content-type so the client knows what's coming, then a blank line:
                client.println("HTTP/1.1 200 OK");
                client.println("Content-type:text/html");
                client.println();
    
                // the content of the HTTP response follows the header:
                client.print("Click <a href=\"/H\">here</a> turn the LED on<br>");
                client.print("Click <a href=\"/L\">here</a> turn the LED off<br>");
    
                // The HTTP response ends with another blank line:
                client.println();
                // break out of the while loop:
                break;
              }
              else {      // if you got a newline, then clear currentLine:
                currentLine = "";
              }
            }
            else if (c != '\r') {    // if you got anything else but a carriage return character,
              currentLine += c;      // add it to the end of the currentLine
            }
    
            // Check to see if the client request was "GET /H" or "GET /L":
            if (currentLine.endsWith("GET /H")) {
              digitalWrite(led, HIGH);               // GET /H turns the LED on
            }
            if (currentLine.endsWith("GET /L")) {
              digitalWrite(led, LOW);                // GET /L turns the LED off
            }
          }
        }
        // close the connection:
        client.stop();
        Serial.println("client disconnected");
      }
    }
    
    void printWiFiStatus() {
      // print the SSID of the network you're attached to:
      Serial.print("SSID: ");
      Serial.println(WiFi.SSID());
    
      // print your WiFi shield's IP address:
      IPAddress ip = WiFi.localIP();
      Serial.print("IP Address: ");
      Serial.println(ip);
    
      // print the received signal strength:
      long rssi = WiFi.RSSI();
      Serial.print("signal strength (RSSI):");
      Serial.print(rssi);
      Serial.println(" dBm");
      // print where to go in a browser:
      Serial.print("To see this page in action, open a browser to http://");
      Serial.println(ip);
    
    }
    
    void printMacAddress(byte mac[]) {
      for (int i = 5; i >= 0; i--) {
        if (mac[i] < 16) {
          Serial.print("0");
        }
        Serial.print(mac[i], HEX);
        if (i > 0) {
          Serial.print(":");
        }
      }
      Serial.println();
    }

  2. #2
    Senior Member brtaylor's Avatar
    Join Date
    Mar 2016
    Location
    Portland, OR
    Posts
    642
    Hi Kris, did you ever manage to get this to work? Thanks much!

  3. #3
    Unfortunately no. According to the documentation I found, the hardware only supports 1 connection. I was able to get an ESP-01 connected to a Teensy working, but the ESP kept crashing on a web page load. With this configuration, I could not find any good libraries to act as a server AND feed XML data to update page contents.

    I had to do the unspeakable and deploy an ESP-32. I found a library that can send html and xml. My requirements were to create a web page and update contents (I use XML and java script). Because this server is still pretty limited and can only serve 4 clients, i've abandoned attempts to let multiple clients connect and just server data to a single client--in my case a large smart TV so people can gather around and see live data.

  4. #4
    Senior Member brtaylor's Avatar
    Join Date
    Mar 2016
    Location
    Portland, OR
    Posts
    642
    Thanks, that's really good feedback and gives me some options to consider.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •