From e04f6d51884c81b1eaa66c56ac86232d281a2bef Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 13:56:37 -0500 Subject: [PATCH 1/7] Allow UDP socket write --- adafruit_esp32spi/adafruit_esp32spi_socket.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi_socket.py b/adafruit_esp32spi/adafruit_esp32spi_socket.py index 93631c5..f28ee82 100644 --- a/adafruit_esp32spi/adafruit_esp32spi_socket.py +++ b/adafruit_esp32spi/adafruit_esp32spi_socket.py @@ -77,9 +77,12 @@ def connect(self, address, conntype=None): raise RuntimeError("Failed to connect to host", host) self._buffer = b"" - def send(self, data): # pylint: disable=no-self-use + def send(self, data, conntype=None): # pylint: disable=no-self-use """Send some data to the socket""" - _the_interface.socket_write(self._socknum, data) + if conntype: + _the_interface.socket_write(self._socknum, data, conn_mode=conntype) + else: + _the_interface.socket_write(self._socknum, data) gc.collect() def write(self, data): From 7720cc035169982f7ec78aecbac40b9e7e324b8f Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 13:56:57 -0500 Subject: [PATCH 2/7] UDP Client example (NTP) --- 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 ef9255f8b68e1f9cf6780186ccffb3b7ab846265 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 14:09:03 -0500 Subject: [PATCH 3/7] more consistent with connect --- adafruit_esp32spi/adafruit_esp32spi_socket.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi_socket.py b/adafruit_esp32spi/adafruit_esp32spi_socket.py index f28ee82..78b6d63 100644 --- a/adafruit_esp32spi/adafruit_esp32spi_socket.py +++ b/adafruit_esp32spi/adafruit_esp32spi_socket.py @@ -79,10 +79,9 @@ def connect(self, address, conntype=None): def send(self, data, conntype=None): # pylint: disable=no-self-use """Send some data to the socket""" - if conntype: - _the_interface.socket_write(self._socknum, data, conn_mode=conntype) - else: - _the_interface.socket_write(self._socknum, data) + if conntype is None: + conntype = _the_interface.TCP_MODE + _the_interface.socket_write(self._socknum, data, conn_mode=conntype) gc.collect() def write(self, data): From 45f015de09cbd14cd8bd73d01831d6f581feb080 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 14:22:48 -0500 Subject: [PATCH 4/7] pylint and comment --- adafruit_esp32spi/adafruit_esp32spi_socket.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi_socket.py b/adafruit_esp32spi/adafruit_esp32spi_socket.py index 78b6d63..255ddfc 100644 --- a/adafruit_esp32spi/adafruit_esp32spi_socket.py +++ b/adafruit_esp32spi/adafruit_esp32spi_socket.py @@ -78,7 +78,8 @@ def connect(self, address, conntype=None): self._buffer = b"" def send(self, data, conntype=None): # pylint: disable=no-self-use - """Send some data to the socket""" + """Send some data to the socket. 'conntype' is an extra that may + indicate UDP or not, depending on the underlying interface""" if conntype is None: conntype = _the_interface.TCP_MODE _the_interface.socket_write(self._socknum, data, conn_mode=conntype) From 84d47438469185991895c934e0d8125c024e8c80 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 18 Mar 2021 14:44:08 -0500 Subject: [PATCH 5/7] Delete esp32spi_udp_client.py --- examples/esp32spi_udp_client.py | 47 --------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 examples/esp32spi_udp_client.py diff --git a/examples/esp32spi_udp_client.py b/examples/esp32spi_udp_client.py deleted file mode 100644 index ce58e88..0000000 --- a/examples/esp32spi_udp_client.py +++ /dev/null @@ -1,47 +0,0 @@ -# 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 ffd95f3b722b6eb0e4c64e7c32a466a07f4cd2b6 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Fri, 19 Mar 2021 11:09:10 -0500 Subject: [PATCH 6/7] CPython-ify send --- adafruit_esp32spi/adafruit_esp32spi_socket.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi_socket.py b/adafruit_esp32spi/adafruit_esp32spi_socket.py index 255ddfc..a855912 100644 --- a/adafruit_esp32spi/adafruit_esp32spi_socket.py +++ b/adafruit_esp32spi/adafruit_esp32spi_socket.py @@ -27,7 +27,8 @@ def set_interface(iface): _the_interface = iface -SOCK_STREAM = const(1) +SOCK_STREAM = const(0) +SOCK_DGRAM = const(1) AF_INET = const(2) NO_SOCKET_AVAIL = const(255) @@ -56,8 +57,7 @@ def __init__( ): if family != AF_INET: raise RuntimeError("Only AF_INET family supported") - if type != SOCK_STREAM: - raise RuntimeError("Only SOCK_STREAM type supported") + self._type = type self._buffer = b"" self._socknum = socknum if socknum else _the_interface.get_socket() self.settimeout(0) @@ -77,10 +77,12 @@ def connect(self, address, conntype=None): raise RuntimeError("Failed to connect to host", host) self._buffer = b"" - def send(self, data, conntype=None): # pylint: disable=no-self-use + def send(self, data): # pylint: disable=no-self-use """Send some data to the socket. 'conntype' is an extra that may indicate UDP or not, depending on the underlying interface""" - if conntype is None: + if self._type is SOCK_DGRAM: + conntype = _the_interface.UDP_MODE + else: conntype = _the_interface.TCP_MODE _the_interface.socket_write(self._socknum, data, conn_mode=conntype) gc.collect() From f1175aeef125302dddc5d49ebf86237ebb352b89 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Fri, 19 Mar 2021 13:01:49 -0500 Subject: [PATCH 7/7] revert send comment --- adafruit_esp32spi/adafruit_esp32spi_socket.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi_socket.py b/adafruit_esp32spi/adafruit_esp32spi_socket.py index a855912..d3941fe 100644 --- a/adafruit_esp32spi/adafruit_esp32spi_socket.py +++ b/adafruit_esp32spi/adafruit_esp32spi_socket.py @@ -78,8 +78,7 @@ def connect(self, address, conntype=None): self._buffer = b"" def send(self, data): # pylint: disable=no-self-use - """Send some data to the socket. 'conntype' is an extra that may - indicate UDP or not, depending on the underlying interface""" + """Send some data to the socket.""" if self._type is SOCK_DGRAM: conntype = _the_interface.UDP_MODE else: