Where and how do you install WiFiUdp.h ? I copied the WiFiUdp.h file into User>Documents>Arduino>Libraries but when I run my code I am getting a 'WiFiUdp' does not name a type error. I believe that this is usually caused, although not always, because the file cannot be found.
Can anyone tell me how to install this file properly?
Is it just the .h file? Where are you downloading from? If you have the etire WiFi.Udp library folder in zip format, go delete the file you put in the library, and then go to the Arduino application Sketch--->Include Libraray--->Add a Zip Library and add the zip folder. That will "correctly" add the library to Arduino though you can also copy the folder (unzip it first) directly into the Arduino library folder. Either way works, but you shouldn't have only a WiFi.Udp.h file.
Icouldn't find a .zip file for it on Google. I downloaded the .h file from GitHUB. GitHUB just has a source file which I copied and saved as WiFiUdp.h.
Please post your full sketch. If possible, you should always post code directly in the forum thread as text using code tags (</> button on the toolbar). This will make it easy for anyone to look at it, which will increase the likelihood of you getting help. If the sketch is longer than the forum will allow then it's OK to add it as an attachment. After clicking the "Reply" button, you will see an "Attachments and other settings" link.
Please always do an Auto Format (Tools > Auto Format in the Arduino IDE or Ctrl + B in the Arduino Web Editor) on your code before posting it. This will make it easier for you to spot bugs and make it easier for us to read.
//My 60 Pixel Ring Clock Version 2
#include <Wire.h>
#include <Adafruit_NeoPixel.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define getNTPtime
#define PIN 4
#define PIXEL 60
int LED = 0;
int ihour;
int iminute;
int isecond;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL, PIN, NEO_GRB + NEO_KHZ800);
//DateTime Clock; // Holds current clock time
byte hourval, minuteval, secondval;
char ssid[] = "jcoones"; // your network SSID (name)
char pass[] = "VE3JOCb/a!"; // your network password
unsigned int localPort = 2390; // local port to listen for UDP packets
/* Don't hardwire the IP address or we won't get the benefits of the pool.
Lookup the IP address for the host name instead */
//IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server
IPAddress timeServerIP; // time.nist.gov NTP server address
const char* ntpServerName = "0.pool.ntp.org";
const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message
byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
WiFiUDP udp;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
Wire.begin(); // Begin I2C
getNTPtime(hourval, minuteval, secondval); //Get the time from NTP Server
strip.begin();
strip.show(); // Initialize all pixels to 'off'
strip.setBrightness(20);
}
void loop() {
secondval = isecond; // get seconds
minuteval = iminute; // get minutes
hourval = ihour; // get the hour
switch (hourval) { //Synchronize the LEDs for 12 hour clock.
case 1: case 13:
LED = 5;
break;
case 2: case 14:
LED = 10;
break;
case 3: case 15:
LED = 15;
break;
case 4: case 16:
LED = 20;
break;
case 5: case 17:
LED = 25;
break;
case 6: case 18:
LED = 30;
break;
case 7: case 19:
LED = 35;
break;
case 8: case 20:
LED = 40;
break;
case 9: case 21:
LED = 45;
break;
case 10: case 22:
LED = 50;
break;
case 11: case 23:
LED = 55;
break;
case 12: case 0:;
LED = 0;
break;
}
strip.setPixelColor(minuteval, 0x008000); // Turn on LED for minutes.
strip.setPixelColor(secondval, 0x0000ff); // Turn on LED for seconds.
strip.setPixelColor(LED, 0xff0000); // Turn on LED for hours.
strip.show();
strip.setPixelColor(LED, 0x000000); // Turn off LED for minutes.
strip.setPixelColor(minuteval, 0x000000); // Turn off LED for seconds.
strip.setPixelColor(secondval, 0x000000); // Turn off LED for hours.
//=========================================
//Get the time from NTP Server
//=========================================
getNTPtime(hourval, minuteval, secondval); // We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Starting UDP");
udp.begin(localPort);
Serial.print("Local port: ");
Serial.println(udp.localPort());
}
//get a random server from the pool
WiFi.hostByName(ntpServerName, timeServerIP);
sendNTPpacket(timeServerIP); // send an NTP packet to a time server
// wait to see if a reply is available
delay(1000);
int cb = udp.parsePacket();
if (!cb) {
Serial.println("no packet yet");
}
else {
Serial.print("packet received, length=");
Serial.println(cb);
// We've received a packet, read the data from it
udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
//the timestamp starts at byte 40 of the received packet and is four bytes,
// or two words, long. First, esxtract the two words:
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.println(secsSince1900);
// now convert NTP time into everyday time:
Serial.print("Unix time = ");
// Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
const unsigned long seventyYears = 2208988800UL;
// subtract seventy years:
unsigned long epoch = secsSince1900 - seventyYears;
// print Unix time:
Serial.println(epoch);
// print the hour, minute and second:
ihour = (epoch % 86400L) / 3600; //Get the Hour
Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
Serial.print(':');
//if ( ((epoch % 3600) / 60) < 10 ) {
// In the first 10 minutes of each hour, we'll want a leading '0'
//Serial.print('0');
}
iminute = (epoch % 3600) / 60); //Get the minutes
Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
Serial.print(':');
//if ( (epoch % 60) < 10 ) {
// In the first 10 seconds of each minute, we'll want a leading '0'
//Serial.print('0');
//}
isecond = (epoch % 60); //Get the seconds
Serial.println(epoch % 60); // print the second
return hourval, minuteval, secondval;
When you encounter an error you'll see a button on the right side of the orange bar "Copy error messages" (or the icon that looks like two pieces of paper in the Arduino Web Editor). Click that button. Paste the error in a message here using code tags. If the text exceeds the forum's 9000 character limit, save it to a text file and post it as an attachment. If you click the "Reply" button here, you will see an "Attachments and other settings" link.
My_60_LED_Ring_Clock-V2:136:1: error: 'WiFi' does not name a type
WiFi.hostByName(ntpServerName, timeServerIP);
^
That is at line 136 of your sketch, which will be highlighted in pin by the Arduino IDE after the compilation error. Notice that the Auto Format's automatic indentation put this line of code directly at the left margin, with no indentation. This is a very important clue to the problem. It means that the code is not inside of any function, as any code in a function will be indented by at least one level.
If you do an Auto Format and then compare the resulting indentation to your intended program structure, it will quickly point you to where there is a missing or extra brace. Take a look and see if you can spot where the misplaced brace is in your code.
Another useful feature of the Arduino IDE/Arduino Web Editor is that when you place the cursor next to one bracket, it puts a box around the matching bracket. In the Arduino IDE, if the cursor is next to the closing bracket and the opening bracket is off the screen then it will show the opening bracket line in a tool tip after a short delay.
Thank you. Very helpful information. I placed another curly brace into the code and that error is gone but I now have a 'not declared in this scope' error. I will see if I can find the cause of this error and if not,... I'll be back. I believe that this is usually a variable that has not been declared a global and therefore the function cannot see it.