How To Install Using Arduino Library Manager
This library is a Light Weight Credentials / WiFi Manager for WiFiNINA modules/shields, specially designed to support AVR Mega, Teensy, SAM DUE, SAMD, STM32, etc. boards running WiFiNINA modules/shields, with smaller memory (64+K bytes)
You can also specify static AP and STA IP. Use much less memory compared to full-fledge WiFiManager. Credentials are saved in EEPROM, FlashStorage or DueFlashStorage.
You can use this library when your boards have more than 32K bytes of memory, for example Mega 1280/2560, SAM DUE, BluePill/BlackPill F103C8 (64+K Bytes).
The web configuration portal, served from the WiFiNINA modules/shields is operating as an access point (AP) with configurable static IP address or use default IP Address of 192.168.4.1
Sample Code
/* Comment this out to disable prints and save space */
#define DEBUG_WIFI_WEBSERVER_PORT Serial
#define WIFININA_DEBUG_OUTPUT Serial
#define WIFININA_DEBUG true
#if ( defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) \
|| defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_SAMD_MKRFox1200) || defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) \
|| defined(ARDUINO_SAMD_MKRGSM1400) || defined(ARDUINO_SAMD_MKRNB1500) || defined(ARDUINO_SAMD_MKRVIDOR4000) || defined(__SAMD21G18A__) \
|| defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) || defined(__SAMD21E18A__) /*|| defined(__SAMD51__) || defined(__SAMD51J20A__) || defined(__SAMD51J19A__) \
|| defined(__SAMD51G19A__)*/ )
#if defined(WIFININA_USE_SAMD)
#undef WIFININA_USE_SAMD
#endif
#define WIFININA_USE_SAMD true
#else
#error This code is intended to run only on the SAMD boards ! Please check your Tools->Board setting.
#endif
#if defined(WIFININA_USE_SAMD)
#if defined(ARDUINO_SAMD_ZERO)
#define BOARD_TYPE "SAMD Zero"
#elif defined(ARDUINO_SAMD_MKR1000)
#define BOARD_TYPE "SAMD MKR1000"
#elif defined(ARDUINO_SAMD_MKRWIFI1010)
#define BOARD_TYPE "SAMD MKRWIFI1010"
#elif defined(ARDUINO_SAMD_NANO_33_IOT)
#define BOARD_TYPE "SAMD NANO_33_IOT"
#elif defined(ARDUINO_SAMD_MKRFox1200)
#define BOARD_TYPE "SAMD MKRFox1200"
#elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) )
#define BOARD_TYPE "SAMD MKRWAN13X0"
#elif defined(ARDUINO_SAMD_MKRGSM1400)
#define BOARD_TYPE "SAMD MKRGSM1400"
#elif defined(ARDUINO_SAMD_MKRNB1500)
#define BOARD_TYPE "SAMD MKRNB1500"
#elif defined(ARDUINO_SAMD_MKRVIDOR4000)
#define BOARD_TYPE "SAMD MKRVIDOR4000"
#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS)
#define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS"
#elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS)
#define BOARD_TYPE "SAMD ADAFRUIT_ITSYBITSY_M4_EXPRESS"
#elif ( defined(__SAMD21G18A__) || (__SAM3X8E__) || (__CPU_ARC__) || defined(__SAMD21E18A__) || defined(__SAMD51__) || defined(__SAMD51J20A__) || defined(__SAMD51J19A__) \
|| defined(__SAMD51G19A__) )
#define BOARD_TYPE "SAMD Board"
#else
#define BOARD_TYPE "SAMD Unknown"
#endif
#endif
// Start location in EEPROM to store config data. Default 0
// Config data Size currently is 128 bytes)
#define EEPROM_START 0
#include <WiFiManager_NINA_Lite_SAMD.h>
#define MAX_BLYNK_SERVER_LEN 34
#define MAX_BLYNK_TOKEN_LEN 34
char Blynk_Server1 [MAX_BLYNK_SERVER_LEN] = "";
char Blynk_Token1 [MAX_BLYNK_TOKEN_LEN] = "";
char Blynk_Server2 [MAX_BLYNK_SERVER_LEN] = "";
char Blynk_Token2 [MAX_BLYNK_TOKEN_LEN] = "";
#define MAX_BLYNK_PORT_LEN 6
char Blynk_Port [MAX_BLYNK_PORT_LEN] = "";
#define MAX_MQTT_SERVER_LEN 34
char MQTT_Server [MAX_MQTT_SERVER_LEN] = "";
MenuItem myMenuItems [] =
{
{ "sv1", "Blynk Server1", Blynk_Server1, MAX_BLYNK_SERVER_LEN },
{ "tk1", "Token1", Blynk_Token1, MAX_BLYNK_TOKEN_LEN },
{ "sv2", "Blynk Server2", Blynk_Server2, MAX_BLYNK_SERVER_LEN },
{ "tk2", "Token2", Blynk_Token2, MAX_BLYNK_TOKEN_LEN },
{ "pt", "Port", Blynk_Port, MAX_BLYNK_PORT_LEN },
{ "mq", "MQTT Server", MQTT_Server, MAX_MQTT_SERVER_LEN },
};
uint16_t NUM_MENU_ITEMS = sizeof(myMenuItems) / sizeof(MenuItem); //MenuItemSize;
void heartBeatPrint(void)
{
static int num = 1;
if (WiFi.status() == WL_CONNECTED)
Serial.print("H"); // H means connected to WiFi
else
Serial.print("F"); // F means not connected to WiFi
if (num == 80)
{
Serial.println();
num = 1;
}
else if (num++ % 10 == 0)
{
Serial.print(" ");
}
}
void check_status()
{
static unsigned long checkstatus_timeout = 0;
//KH
#define HEARTBEAT_INTERVAL 600000L
// Print hearbeat every HEARTBEAT_INTERVAL (600) seconds.
if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0))
{
heartBeatPrint();
checkstatus_timeout = millis() + HEARTBEAT_INTERVAL;
}
}
WiFiManager_NINA_Lite* WiFiManager_NINA;
void setup()
{
// Debug console
Serial.begin(115200);
while (!Serial);
Serial.println("\nStart SAMD_WiFiNINA on " + String(BOARD_TYPE));
WiFiManager_NINA = new WiFiManager_NINA_Lite();
// Optional to change default AP IP(192.168.4.1) and channel(10)
//WiFiManager_NINA->setConfigPortalIP(IPAddress(192, 168, 120, 1));
//WiFiManager_NINA->setConfigPortalChannel(1);
WiFiManager_NINA->begin();
}
void displayCredentials(void)
{
Serial.println("Your stored Credentials :");
for (int i = 0; i < NUM_MENU_ITEMS; i++)
{
Serial.println(String(myMenuItems[i].displayName) + " = " + myMenuItems[i].pdata);
}
}
void loop()
{
WiFiManager_NINA->run();
static bool displayedCredentials = false;
if (!displayedCredentials)
{
for (int i = 0; i < NUM_MENU_ITEMS; i++)
{
if (!strlen(myMenuItems[i].pdata))
{
break;
}
if ( i == (NUM_MENU_ITEMS - 1) )
{
displayedCredentials = true;
displayCredentials();
}
}
}
check_status();
}
This is the terminal output when running SAMD_WiFiNINA example on Nano-33 IoT
- Open Config Portal
Start SAMD_WiFiNINA on SAMD NANO_33_IOT
*NN: CrCCsum=6217,CrRCsum=825255525
*NN: CCSum=1983,RCSum=1752461166
*NN: InitEEPROM,sz=1080,Datasz=264
*NN: pdata=blank,len=34
*NN: pdata=blank,len=34
*NN: pdata=blank,len=34
*NN: pdata=blank,len=34
*NN: pdata=blank,len=6
*NN: pdata=blank,len=34
*NN: CrCCSum=3120
*NN: b:OpenPortal
*NN: SSID=WIFININA_E50AB22C,PW=MyWIFININA_E50AB22C
*NN: IP=192.168.4.1,CH=1
Your stored Credentials :
Blynk Server1 = blank
Token1 = blank
Blynk Server2 = blank
Token2 = blank
Port = blank
MQTT Server = blank
FFF
- Got valid Credential from Config Portal, then connected to WiFi
Start SAMD_WiFiNINA on SAMD NANO_33_IOT
*NN: CrCCSum=7558,CrRCSum=7558
*NN: CCSum=2104,RCSum=2104
*NN: Hdr=WIFININA,SSID=HueNet1,PW=****
*NN: i=0,id=sv1,data=blynk1.duckdns.org
*NN: i=1,id=tk1,data=your-token1
*NN: i=2,id=sv2,data=blynk2.duckdns.org
*NN: i=3,id=tk2,data=your-token2
*NN: i=4,id=pt,data=8080
*NN: i=5,id=mq,data=mqtt.duckdns.org
*NN: con2WF:start
*NN: con2WF:spentMsec=0
*NN: Con2:HueNet1
*NN: IP=192.168.2.139
*NN: WOK
*NN: con2WF:OK
*NN: IP=192.168.2.139
*NN: b:WOK
Your stored Credentials :
Blynk Server1 = blynk1.duckdns.org
Token1 = your-token1
Blynk Server2 = blynk2.duckdns.org
Token2 = your-token2
Port = 8080
MQTT Server = mqtt.duckdns.org
HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH
HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH HHHHHHHHHH
And the Config Portal screens:
1.Main Screen:
- Input Credentials:
- After pressing Save button