From 1c6d703afc961e1fe351137168c6f04a8bb3707c Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 14:53:25 -0500 Subject: [PATCH 1/4] UDP Client example (NTP) using socket API rather than esp API --- examples/esp32spi_udp_client.py | 47 +++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 examples/esp32spi_udp_client.py diff --git a/examples/esp32spi_udp_client.py b/examples/esp32spi_udp_client.py new file mode 100644 index 0000000..ce58e88 --- /dev/null +++ b/examples/esp32spi_udp_client.py @@ -0,0 +1,47 @@ +# SPDX-FileCopyrightText: 2021 Adafruit Industries +# SPDX-License-Identifier: MIT + +import struct +import time +import board +from digitalio import DigitalInOut +from adafruit_esp32spi import adafruit_esp32spi +import adafruit_esp32spi.adafruit_esp32spi_socket as socket +from secrets import secrets + + +TIMEOUT = 5 +# edit host and port to match server +HOST = "pool.ntp.org" +PORT = 123 +NTP_TO_UNIX_EPOCH = 2208988800 # 1970-01-01 00:00:00 + +# PyPortal or similar; edit pins as needed +spi = board.SPI() +esp32_cs = DigitalInOut(board.ESP_CS) +esp32_ready = DigitalInOut(board.ESP_BUSY) +esp32_reset = DigitalInOut(board.ESP_RESET) +esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset) + +# connect to wifi AP +esp.connect(secrets) + +# test for connectivity to server +print("Server ping:", esp.ping(HOST), "ms") + +# create the socket +socket.set_interface(esp) +socketaddr = socket.getaddrinfo(HOST, PORT)[0][4] +s = socket.socket() +s.settimeout(TIMEOUT) + +print("Sending") +s.connect(socketaddr, esp.UDP_MODE) +packet = bytearray(48) +packet[0] = 0b00100011 # Not leap second, NTP version 4, Client mode +s.send(packet, conntype=esp.UDP_MODE) + +print("Receiving") +packet = s.recv(48) +seconds = struct.unpack_from("!I", packet, offset=len(packet) - 8)[0] +print("Time:", time.localtime(seconds - NTP_TO_UNIX_EPOCH)) From e3d28955324fbab42a68a217001c6c45d4cd5aef Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 15:01:51 -0500 Subject: [PATCH 2/4] pylint --- examples/esp32spi_udp_client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/esp32spi_udp_client.py b/examples/esp32spi_udp_client.py index ce58e88..c018731 100644 --- a/examples/esp32spi_udp_client.py +++ b/examples/esp32spi_udp_client.py @@ -3,11 +3,11 @@ import struct import time +from secrets import secrets import board from digitalio import DigitalInOut from adafruit_esp32spi import adafruit_esp32spi import adafruit_esp32spi.adafruit_esp32spi_socket as socket -from secrets import secrets TIMEOUT = 5 @@ -33,6 +33,7 @@ socket.set_interface(esp) socketaddr = socket.getaddrinfo(HOST, PORT)[0][4] s = socket.socket() + s.settimeout(TIMEOUT) print("Sending") From e908f3ab201322905e1e2031c28ddeaffeecf8e5 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 15:13:52 -0500 Subject: [PATCH 3/4] attempt to fix pylint secrets failure --- examples/esp32spi_udp_client.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/esp32spi_udp_client.py b/examples/esp32spi_udp_client.py index c018731..fbf032a 100644 --- a/examples/esp32spi_udp_client.py +++ b/examples/esp32spi_udp_client.py @@ -3,12 +3,17 @@ import struct import time -from secrets import secrets import board from digitalio import DigitalInOut from adafruit_esp32spi import adafruit_esp32spi import adafruit_esp32spi.adafruit_esp32spi_socket as socket +# Get wifi details and more from a secrets.py file +try: + from secrets import secrets +except ImportError: + print("WiFi secrets are kept in secrets.py, please add them there!") + raise TIMEOUT = 5 # edit host and port to match server From aca519f61f38b26353a8ea8d31df3adc02c7c26a Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 15:38:16 -0500 Subject: [PATCH 4/4] clarify connect kwarg --- examples/esp32spi_udp_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/esp32spi_udp_client.py b/examples/esp32spi_udp_client.py index fbf032a..6d77203 100644 --- a/examples/esp32spi_udp_client.py +++ b/examples/esp32spi_udp_client.py @@ -42,7 +42,7 @@ s.settimeout(TIMEOUT) print("Sending") -s.connect(socketaddr, esp.UDP_MODE) +s.connect(socketaddr, conntype=esp.UDP_MODE) packet = bytearray(48) packet[0] = 0b00100011 # Not leap second, NTP version 4, Client mode s.send(packet, conntype=esp.UDP_MODE)