Riccardo_Rizzo:
ok, in this case what you suggest about wait and reconnect after a interval of time could be done, in the following sketch i have modified the connection in the setup (), by adding:
LowPower.attachInterruptWakeup(RTC_ALARM_WAKEUP, NULL, 0);
if (recon > 2 && status != WL_CONNECTED) {
// Serial.println("deepsleep");
digitalWrite(NINA_RESETN, HIGH);
delay(1000);
LowPower.deepSleep(20000);
//delay(1000);
digitalWrite(NINA_RESETN, LOW);
//Serial.println("wakeup");
recon=0;
}
in the example in order to make the wifi1010 in deepsleep mode for 20 seconds, you need to use
**LowPower.attachInterruptWakeup(RTC_ALARM_WAKEUP, NULL, 0);** for wake up the board when the deepsleep time is elapsed, the code example is the following:
/*
This example connects to a encrypted WiFi network (WPA/WPA2).
Then it prints the MAC address of the WiFi module,
the IP address obtained, and other network details.
Then it continuously pings given host specified by IP Address or name.
Circuit:
WiFi shield attached / MKR1000
created 13 July 2010
by dlf (Metodo2 srl)
modified 09 June 2016
by Petar Georgiev
*/
#include <ArduinoLowPower.h> //library needed for lowpower
#include <SPI.h>
#include <WiFiNINA.h>
#include "arduino_secrets.h"
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)
int status = WL_IDLE_STATUS; // the WiFi radio's status
// Specify IP address or hostname
String hostName = "www.google.com";
int pingResult,recon=0;
void setup() {
// Initialize serial and wait for port to open:
LowPower.attachInterruptWakeup(RTC_ALARM_WAKEUP, NULL, 0);
// check for the WiFi module:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
// don't continue
while (true);
}
// attempt to connect to WiFi network:
while ( status != WL_CONNECTED) {
// Serial.print("Attempting to connect to WPA SSID: ");
// Serial.println(ssid);
// Connect to WPA/WPA2 network:
status = WiFi.begin(ssid, pass);
// wait 5 seconds for connection:
delay(5000);
recon++;
if (recon > 2 && status != WL_CONNECTED) {
// Serial.println("deepsleep");
digitalWrite(NINA_RESETN, HIGH);
delay(1000);
LowPower.deepSleep(20000);
//delay(1000);
digitalWrite(NINA_RESETN, LOW);
//Serial.println("wakeup");
recon=0;
}
}
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
String fv = WiFi.firmwareVersion();
if (fv != "1.0.0") {
Serial.println("Please upgrade the firmware");
}
// you're connected now, so print out the data:
Serial.println("You're connected to the network");
printCurrentNet();
printWiFiData();
}
void loop() {
Serial.print("Pinging ");
Serial.print(hostName);
Serial.print(": ");
pingResult = WiFi.ping(hostName);
if (pingResult >= 0) {
Serial.print("SUCCESS! RTT = ");
Serial.print(pingResult);
Serial.println(" ms");
} else {
Serial.print("FAILED! Error code: ");
Serial.println(pingResult);
}
delay(5000);
}
void printWiFiData() {
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP address : ");
Serial.println(ip);
Serial.print("Subnet mask: ");
Serial.println((IPAddress)WiFi.subnetMask());
Serial.print("Gateway IP : ");
Serial.println((IPAddress)WiFi.gatewayIP());
// print your MAC address:
byte mac[6];
WiFi.macAddress(mac);
Serial.print("MAC address: ");
Serial.print(mac[5], HEX);
Serial.print(":");
Serial.print(mac[4], HEX);
Serial.print(":");
Serial.print(mac[3], HEX);
Serial.print(":");
Serial.print(mac[2], HEX);
Serial.print(":");
Serial.print(mac[1], HEX);
Serial.print(":");
Serial.println(mac[0], HEX);
Serial.println();
}
void printCurrentNet() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print the MAC address of the router you're attached to:
byte bssid[6];
WiFi.BSSID(bssid);
Serial.print("BSSID: ");
Serial.print(bssid[5], HEX);
Serial.print(":");
Serial.print(bssid[4], HEX);
Serial.print(":");
Serial.print(bssid[3], HEX);
Serial.print(":");
Serial.print(bssid[2], HEX);
Serial.print(":");
Serial.print(bssid[1], HEX);
Serial.print(":");
Serial.println(bssid[0], HEX);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI): ");
Serial.println(rssi);
// print the encryption type:
byte encryption = WiFi.encryptionType();
Serial.print("Encryption Type: ");
Serial.println(encryption, HEX);
Serial.println();
}
consider that with 5 V in input the lowest current value reachable is 9.7 mA, with the battery pack is 3/4mA more or less, this should allow you to reduce the consumption in connection phase, in the image the red one is the results with deepsleep mode the green represent the classic connection
Hi Ricardo,
First of all thank you very much for your help, I'm triying your code but I found a problem
error: 'NINA_RESETN' was not declared in this scope
digitalWrite(NINA_RESETN, HIGH);
what does it mean? what is NINA_RESETN?
Thank you very much