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(); | ||
} | } | ||
- | |||
</ | </ | ||