The use of the ESP8266 in the world of IoT

User avatar
By khoih-prog
#86227 https://github.com/khoih-prog/WiFiNINA_Generic

How To Install Using Arduino Library Manager

New in v1.5.0

1. The original Arduino WiFiNINA library only supports very limited boards, such as: the Arduino Nano-33 IoT, MKR WiFi 1010, MKR VIDOR 4000 and UNO WiFi Rev.2. This new library is based on and modified from Arduino WiFiNINA library to provide support for many more boards, such as SAM DUE, SAMD21, SAMD51, Teensy, AVR Mega, STM32, etc.

Features

With this library you can instantiate Servers, Clients and send/receive UDP packets through WiFiNINA. The board can connect either to open or encrypted networks (WEP, WPA). The IP address can be assigned statically or through a DHCP. The library can also manage DNS.

Sample Code

WiFiWebServer example

Code: Select all#include <SPI.h>
#include <WiFiNINA_Generic.h>

///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = "****";        // your network SSID (name)
char pass[] = "********";    // your network password (use for WPA, or use as key for WEP), length must be 8+
int keyIndex = 0;                 // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

WiFiServer server(80);

void setup()
{
  //Initialize serial and wait for port to open:
  Serial.begin(115200);
  while (!Serial);

  // check for the WiFi module:
  if (WiFi.status() == WL_NO_MODULE)
  {
    Serial.println("Communication with WiFi module failed!");
    // don't continue
    while (true);
  }

  String fv = WiFi.firmwareVersion();
  if (fv < WIFI_FIRMWARE_LATEST_VERSION)
  {
    Serial.println("Please upgrade the firmware");
  }

  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED)
  {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    //delay(10000);
  }
  server.begin();
  // you're connected now, so print out the status:
  printWifiStatus();
}

void loop()
{
  // listen for incoming clients
  WiFiClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);

    // 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 board'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");
}
User avatar
By gredpath
#86547 First may I thank you for creating the library, great work!.
We are using it with a Teensy 4 and we cannot get reliable communication to the Teensy 4.
I am aware of the MISO issue with the ESP32.
So with nothing else on the bus I cannot get reliable communication.
I have taken the Bus speed down to 100,000 Hz and it is no different. I am using the standard Mode0 config as per the library.
Has anyone tested the library with a Teensy 4?
User avatar
By khoih-prog
#87016 FYI, The discussion was done in Teensy forum.

WiFiNINA_Generic-Library-for-WiFiNINA-modules-to-support-Teensy-and-more-boards

Update

Just let you know that the new WiFiNINA_Generic v1.5.2 now supports FirmwareUpdater for Teensy, SAMD21, SAMD51, nRF52, etc. boards.

You now can use Arduino IDE W101/WiFiNINA Firmware Updater to update firmware as well as SSL certificates.

Be sure to use and update some pins (NINA_GPIO0, NINA_RESETN, NINA_ACK), a Serial port necessary to program ESP32-based WiFiNINA.

This is the link to the latest FirmwareUpdater

FirmwareUpdater