You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Feb 4, 2023. It is now read-only.
NOTE: "insert code" does not work in this editor, I used it but to no avail...
Describe the bug
When using NOT using delay() I get the "ServerDrv::availData: SpiDrv not available" error
Steps to Reproduce
NOT use delay() after an NTP Udp request...
Expected behavior
no error?
Actual behavior
"ServerDrv::availData: SpiDrv not available" error
Debug and AT-command log (if applicable)
Serial monitor output:
11:52:13.132 -> 10:52:13 15.10.2021
11:52:14.127 -> 10:52:14 15.10.2021
11:52:15.121 -> 10:52:15 15.10.2021
11:52:16.116 -> 10:52:16 15.10.2021
11:52:17.144 -> 10:52:17 15.10.2021
11:52:18.138 -> 10:52:18 15.10.2021
11:52:19.133 -> 10:52:19 15.10.2021
11:52:20.127 -> 10:52:20 15.10.2021
11:52:21.121 -> 10:52:21 15.10.2021
11:52:22.149 -> 10:52:22 15.10.2021
11:52:23.143 -> ServerDrv::availData: SpiDrv not available
11:52:23.143 -> Transmit NTP Request
11:52:23.143 -> us.pool.ntp.org: 165.227.219.198
11:52:23.143 -> ServerDrv::availData: SpiDrv not available
11:52:23.143 -> ServerDrv::availData: SpiDrv not available
11:52:23.143 -> ServerDrv::availData: SpiDrv not available
11:52:23.143 -> ServerDrv::availData: SpiDrv not available
.
.<cut a lot of lines>
.
11:52:23.275 -> ServerDrv::availData: SpiDrv not available
11:52:23.275 -> ServerDrv::availData: SpiDrv not available
11:52:23.275 -> ServerDrv::availData: SpiDrv not available
11:52:23.275 -> Receive NTP Response
11:52:23.275 -> 10:52:23 15.10.2021 <<< 15 seconds no NTP sync!
11:52:24.270 -> 10:52:24 15.10.2021
11:52:25.264 -> 10:52:25 15.10.2021
11:52:26.259 -> 10:52:26 15.10.2021
11:52:27.287 -> 10:52:27 15.10.2021
11:52:28.281 -> 10:52:28 15.10.2021
11:52:29.276 -> 10:52:29 15.10.2021
11:52:30.271 -> 10:52:30 15.10.2021
11:52:31.265 -> 10:52:31 15.10.2021
11:52:32.260 -> 10:52:32 15.10.2021
11:52:33.288 -> 10:52:33 15.10.2021
11:52:34.282 -> 10:52:34 15.10.2021
11:52:35.277 -> 10:52:35 15.10.2021
11:52:36.271 -> 10:52:36 15.10.2021
11:52:37.266 -> 10:52:37 15.10.2021
11:52:38.261 -> ServerDrv::availData: SpiDrv not available
11:52:38.261 -> Transmit NTP Request
11:52:38.261 -> us.pool.ntp.org: 165.227.219.198
11:52:38.261 -> ServerDrv::availData: SpiDrv not available
11:52:38.261 -> ServerDrv::availData: SpiDrv not available
etc.etc.
Screenshots
If applicable, add screenshots to help explain your problem.
Information
Please ensure to specify the following:
Arduino IDE version 1.8.16
Arduino nano 33 IoT SAMD21 board
Example
sketch to reproduce:
//
// sketch from examples of library "*Time* by *Michael Margolis*"
// LATEST version
// adapted to use with WifiNINA library LATEST VERSION
#include <TimeLib.h>
#include <SPI.h>
#include <WiFiNINA_Generic.h>
#include <WiFiUdp_Generic.h>
const char ssid[] = "**********"; // your network SSID (name)
const char pass[] = "**********"; // your network password
// NTP Servers:
static const char ntpServerName[] = "us.pool.ntp.org";
//static const char ntpServerName[] = "time.nist.gov";
//static const char ntpServerName[] = "time-a.timefreq.bldrdoc.gov";
//static const char ntpServerName[] = "time-b.timefreq.bldrdoc.gov";
//static const char ntpServerName[] = "time-c.timefreq.bldrdoc.gov";
const int timeZone = 1; // Central European Time
//const int timeZone = -5; // Eastern Standard Time (USA)
//const int timeZone = -4; // Eastern Daylight Time (USA)
//const int timeZone = -8; // Pacific Standard Time (USA)
//const int timeZone = -7; // Pacific Daylight Time (USA)
WiFiUDP Udp;
unsigned int localPort = 8888; // local port to listen for UDP packets
time_t getNtpTime();
void digitalClockDisplay();
void printDigits(int digits);
void sendNTPpacket(IPAddress &address);
void setup()
{
Serial.begin(115200);
while (!Serial) ; // Needed for Leonardo only
delay(250);
Serial.println("TimeNTP Example");
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("IP number assigned by DHCP is ");
Serial.println(WiFi.localIP());
Serial.println("Starting UDP");
Udp.begin(localPort);
//Serial.print("Local port: ");
//Serial.println(Udp.localPort());
Serial.println("waiting for sync");
setSyncProvider(getNtpTime);
setSyncInterval(15);
}
time_t prevDisplay = 0; // when the digital clock was displayed
void loop()
{
if (timeStatus() != timeNotSet) {
if (now() != prevDisplay) { //update the display only if time has changed
prevDisplay = now();
digitalClockDisplay();
}
}
}
void digitalClockDisplay()
{
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(".");
Serial.print(month());
Serial.print(".");
Serial.print(year());
Serial.println();
}
void printDigits(int digits)
{
// utility for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}
/*-------- NTP code ----------*/
const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets
time_t getNtpTime()
{
IPAddress ntpServerIP; // NTP server's ip address
while (Udp.parsePacket() > 0) ; // discard any previously received packets
Serial.println("Transmit NTP Request");
// get a random server from the pool
WiFi.hostByName(ntpServerName, ntpServerIP);
Serial.print(ntpServerName);
Serial.print(": ");
Serial.println(ntpServerIP);
sendNTPpacket(ntpServerIP);
uint32_t beginWait = millis();
while (millis() - beginWait < 1500) {
int size = Udp.parsePacket();
if (size >= NTP_PACKET_SIZE) {
Serial.println("Receive NTP Response");
Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer
unsigned long secsSince1900;
// convert four bytes starting at location 40 to a long integer
secsSince1900 = (unsigned long)packetBuffer[40] << 24;
secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
secsSince1900 |= (unsigned long)packetBuffer[43];
return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
}
}
Serial.println("No NTP Response :-(");
return 0; // return 0 if unable to get the time
}
// send an NTP request to the time server at the given address
void sendNTPpacket(IPAddress &address)
{
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(address, 123); //NTP requests are to port 123
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}
The text was updated successfully, but these errors were encountered:
NOTE: "insert code" does not work in this editor, I used it but to no avail...
Describe the bug
When using NOT using delay() I get the "ServerDrv::availData: SpiDrv not available" error
Steps to Reproduce
NOT use delay() after an NTP Udp request...
Expected behavior
no error?
Actual behavior
"ServerDrv::availData: SpiDrv not available" error
Debug and AT-command log (if applicable)
Serial monitor output:
Screenshots
If applicable, add screenshots to help explain your problem.
Information
Please ensure to specify the following:
Arduino IDE version 1.8.16
Arduino nano 33 IoT SAMD21 board
Example
sketch to reproduce:
The text was updated successfully, but these errors were encountered: