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:06] – created 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 ESP requires | + | Programming networking services with Espressif SoCs requires |
| - | ESP SoC can act as Access Point (AP): a device you connect to, like you connect 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 for ESP8266 of how to implement |
| - | Below there is sample | + | The third example shows how to send and receive a UDP packet while in client mode. It is the full solution to connect |
| - | The third example shows how to send and receive a UDP packet while in client mode. It is the full solution to connect | + | Examples on further pages show how to make a handy WiFi scanner showing available networks nearby. |
| - | Last examples | + | |
| == ESP8266 AP (Access Point) Mode == | == ESP8266 AP (Access Point) Mode == | ||
| - | This sketch based on 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 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(); | ||
| } | } | ||
| - | |||
| </ | </ | ||