Skip to content

Commit 7720cc0

Browse files
committed
UDP Client example (NTP)
1 parent e04f6d5 commit 7720cc0

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

examples/esp32spi_udp_client.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# SPDX-FileCopyrightText: 2021 Adafruit Industries
2+
# SPDX-License-Identifier: MIT
3+
4+
import struct
5+
import time
6+
import board
7+
from digitalio import DigitalInOut
8+
from adafruit_esp32spi import adafruit_esp32spi
9+
import adafruit_esp32spi.adafruit_esp32spi_socket as socket
10+
from secrets import secrets
11+
12+
13+
TIMEOUT = 5
14+
# edit host and port to match server
15+
HOST = "pool.ntp.org"
16+
PORT = 123
17+
NTP_TO_UNIX_EPOCH = 2208988800 # 1970-01-01 00:00:00
18+
19+
# PyPortal or similar; edit pins as needed
20+
spi = board.SPI()
21+
esp32_cs = DigitalInOut(board.ESP_CS)
22+
esp32_ready = DigitalInOut(board.ESP_BUSY)
23+
esp32_reset = DigitalInOut(board.ESP_RESET)
24+
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
25+
26+
# connect to wifi AP
27+
esp.connect(secrets)
28+
29+
# test for connectivity to server
30+
print("Server ping:", esp.ping(HOST), "ms")
31+
32+
# create the socket
33+
socket.set_interface(esp)
34+
socketaddr = socket.getaddrinfo(HOST, PORT)[0][4]
35+
s = socket.socket()
36+
s.settimeout(TIMEOUT)
37+
38+
print("Sending")
39+
s.connect(socketaddr, esp.UDP_MODE)
40+
packet = bytearray(48)
41+
packet[0] = 0b00100011 # Not leap second, NTP version 4, Client mode
42+
s.send(packet, conntype=esp.UDP_MODE)
43+
44+
print("Receiving")
45+
packet = s.recv(48)
46+
seconds = struct.unpack_from("!I", packet, offset=len(packet) - 8)[0]
47+
print("Time:", time.localtime(seconds - NTP_TO_UNIX_EPOCH))

0 commit comments

Comments
 (0)