This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
en:iot-open:espressif_arduino [2023/10/09 11:15] – ktokarz | en:iot-open:espressif_arduino [2023/11/21 21:57] (current) – ktokarz | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | === === | + | ====== |
- | <box # | + | |
- | <box # | + | |
- | === ESP Network Layers | + | |
- | <box # | + | |
- | <box # | + | |
- | Programming networking services with Espressif SoCs requires the connection established on the networking layer between parties, | + | Programming networking services with Espressif SoCs requires the connection established on the networking layer between parties, |
- | ESP8266 or ESP32 SoC can act as an Access Point (AP): a device to connect to like connecting a notebook to the Internet router, and as a client: ESP then behaves like any wifi enabled device, i.e. tablet or mobile phone, connecting to the Internet infrastructure. Interestingly, | + | Below are two code examples |
- | Below is a sample | + | |
The third example shows how to send and receive a UDP packet while in client mode. It is the full solution to connect ESP8266 to the NTP (Network Time Protocol) server to obtain the current date and time from the Internet.\\ | The third example shows how to send and receive a UDP packet while in client mode. It is the full solution to connect ESP8266 to the NTP (Network Time Protocol) server to obtain the current date and time from the Internet.\\ | ||
- | Examples on further pages show, how to make a handy WiFi scanner showing available networks nearby. | + | Examples on further pages show how to make a handy WiFi scanner showing available networks nearby. |
== ESP8266 AP (Access Point) Mode == | == ESP8266 AP (Access Point) Mode == | ||
- | This sketch based on a standard example demonstrates how to program ESP8266 in AP mode: | + | Based on a standard example, this program |
<code c> | <code c> | ||
Line 33: | Line 28: | ||
void setup() { | void setup() { | ||
delay(1500); | delay(1500); | ||
- | /* You can remove the password parameter if you want the AP to be open. */ | + | /* You can remove the password parameter |
+ | if you want the AP to be open. */ | ||
WiFi.softAP(ssid, | WiFi.softAP(ssid, | ||
Line 46: | Line 42: | ||
} | } | ||
</ | </ | ||
+ | |||
== ESP8266 Client Mode == | == ESP8266 Client Mode == | ||
- | This sketch (standard example) demonstrates how to program ESP8266 in client mode: | + | This standard example demonstrates how to program ESP8266 in client mode. It tries to connect to the WiFi network with a specified name (SSID) and password. |
<code c> | <code c> | ||
Line 57: | Line 54: | ||
void setup() { | void setup() { | ||
delay(1000); | delay(1000); | ||
+ | | ||
+ | // Initialise serial port to monitor program behaviour | ||
+ | Serial.begin(115200); | ||
// We start by connecting to a WiFi network | // We start by connecting to a WiFi network | ||
Line 80: | Line 80: | ||
return; | return; | ||
} | } | ||
+ | // This will print the IP address assigned by the DHCP server | ||
+ | Serial.println(WiFi.localIP()); | ||
// This will send the request to the server | // This will send the request to the server | ||
client.println(" | client.println(" | ||
+ | // Trying to send the GET request possibly responses (with error) | ||
+ | // client.println(" | ||
//read back one line from server | //read back one line from server | ||
Line 97: | Line 101: | ||
== ESP8266 and UDP == | == ESP8266 and UDP == | ||
- | This sketch (based on a standard example) demonstrates how to program ESP8266 as NTP client using UDP packets (send and receive): | + | This sketch (based on a standard example) demonstrates how to program ESP8266 as an NTP client using UDP packets (send and receive): |
<code c> | <code c> | ||
Line 107: | Line 111: | ||
char pass[] = " | char pass[] = " | ||
- | unsigned int localPort = 2390; // local port to listen for UDP packets | + | unsigned int localPort = 2390; |
// NTP servers | // NTP servers | ||
Line 125: | Line 129: | ||
// A UDP instance to let us send and receive packets over UDP | // A UDP instance to let us send and receive packets over UDP | ||
WiFiUDP udp; | WiFiUDP udp; | ||
+ | |||
+ | // Prototype of the function defined at the end of this file | ||
+ | // (required in Visual Studio Code) | ||
+ | void sendNTPpacket(IPAddress& | ||
void setup() | void setup() | ||
Line 172: | Line 180: | ||
Serial.println(ntpServerIP); | Serial.println(ntpServerIP); | ||
- | | + | // send an NTP packet to a time server |
+ | sendNTPpacket(ntpServerIP); | ||
+ | | ||
// wait to see if a reply is available | // wait to see if a reply is available | ||
delay(1000); | delay(1000); | ||
Line 190: | Line 200: | ||
Serial.println(cb); | Serial.println(cb); | ||
// We've received a packet, read the data from it | // We've received a packet, read the data from it | ||
- | udp.read(packetBuffer, | + | |
+ | | ||
- | //the timestamp starts at byte 40 of the received packet and is four bytes, | + | // the timestamp starts at byte 40 |
- | // or two words, long. First, | + | // of the received packet and is four bytes, |
+ | // or two words, long. First, | ||
unsigned long highWord = word(packetBuffer[40], | unsigned long highWord = word(packetBuffer[40], | ||
Line 205: | Line 217: | ||
// now convert NTP time into everyday time: | // now convert NTP time into everyday time: | ||
Serial.print(" | Serial.print(" | ||
- | // Unix time starts on Jan 1 1970. In seconds, that's 2208988800: | + | // Unix time starts on Jan 1 1970. |
+ | // In seconds, that's 2208988800: | ||
const unsigned long seventyYears = 2208988800UL; | const unsigned long seventyYears = 2208988800UL; | ||
// subtract seventy years: | // subtract seventy years: | ||
Line 261: | Line 274: | ||
udp.endPacket(); | udp.endPacket(); | ||
} | } | ||
- | |||
</ | </ | ||