summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2021-02-25 16:59:15 -0800
committerScott Shawcroft <scott@tannewt.org>2021-02-25 16:59:15 -0800
commit3f08cb47b846fff41ef9a45d49758f0cef61e723 (patch)
tree66d5093b24d127a1fb60cc70f5087b39e87fbff5 /tests
parent52bc935fa7aa9e5c94f75fec8b2fa746c83f0be7 (diff)
parentb69cb0144ca0d54011be540213d1e25e673a63de (diff)
Merge remote-tracking branch 'adafruit/main' into busio-uart-rp
Diffstat (limited to 'tests')
-rw-r--r--tests/circuitpython-manual/audiobusio/i2s_sample_loop.py36
-rw-r--r--tests/circuitpython-manual/audiobusio/pdmin_rms.py44
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-16000-16bit-mono-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-16000-16bit-mono-signed.wav)bin130448 -> 130448 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-16000-16bit-stereo-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-16000-16bit-stereo-signed.wav)bin260852 -> 260852 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-16000-24bit-mono-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-16000-24bit-mono-signed.wav)bin195650 -> 195650 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-16000-24bit-stereo-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-16000-24bit-stereo-signed.wav)bin391256 -> 391256 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-16000-8bit-mono-unsigned.wav (renamed from tests/manual/audiocore/jeplayer-splash-16000-8bit-mono-unsigned.wav)bin65246 -> 65246 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-16000-8bit-stereo-unsigned.wav (renamed from tests/manual/audiocore/jeplayer-splash-16000-8bit-stereo-unsigned.wav)bin130448 -> 130448 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-44100-16bit-mono-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-44100-16bit-mono-signed.wav)bin359468 -> 359468 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-44100-16bit-stereo-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-44100-16bit-stereo-signed.wav)bin718892 -> 718892 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-44100-24bit-mono-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-44100-24bit-mono-signed.wav)bin539180 -> 539180 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-44100-24bit-stereo-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-44100-24bit-stereo-signed.wav)bin1078316 -> 1078316 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-44100-8bit-mono-unsigned.wav (renamed from tests/manual/audiocore/jeplayer-splash-44100-8bit-mono-unsigned.wav)bin179756 -> 179756 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-44100-8bit-stereo-unsigned.wav (renamed from tests/manual/audiocore/jeplayer-splash-44100-8bit-stereo-unsigned.wav)bin359468 -> 359468 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-44100-stereo.mp3 (renamed from tests/manual/audiocore/jeplayer-splash-44100-stereo.mp3)bin65200 -> 65200 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-8000-16bit-mono-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-8000-16bit-mono-signed.wav)bin65246 -> 65246 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-8000-16bit-stereo-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-8000-16bit-stereo-signed.wav)bin130448 -> 130448 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-8000-24bit-mono-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-8000-24bit-mono-signed.wav)bin97848 -> 97848 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-8000-24bit-stereo-signed.wav (renamed from tests/manual/audiocore/jeplayer-splash-8000-24bit-stereo-signed.wav)bin195650 -> 195650 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-8000-8bit-mono-unsigned.wav (renamed from tests/manual/audiocore/jeplayer-splash-8000-8bit-mono-unsigned.wav)bin32646 -> 32646 bytes
-rw-r--r--tests/circuitpython-manual/audiocore/jeplayer-splash-8000-8bit-stereo-unsigned.wav (renamed from tests/manual/audiocore/jeplayer-splash-8000-8bit-stereo-unsigned.wav)bin65246 -> 65246 bytes
-rw-r--r--tests/circuitpython-manual/audiopwmio/single_buffer_loop.py (renamed from tests/manual/audiopwmio/single_buffer_loop.py)0
-rw-r--r--tests/circuitpython-manual/audiopwmio/wavefile_pause_resume.py (renamed from tests/manual/audiopwmio/wavefile_pause_resume.py)0
-rw-r--r--tests/circuitpython-manual/audiopwmio/wavefile_playback.py (renamed from tests/manual/audiopwmio/wavefile_playback.py)0
-rw-r--r--tests/circuitpython-manual/busio/uart_echo.py (renamed from tests/manual/busio/uart_echo.py)0
-rw-r--r--tests/circuitpython-manual/socketpool/client/cpy-client.py26
-rw-r--r--tests/circuitpython-manual/socketpool/client/host-server.py27
-rw-r--r--tests/circuitpython-manual/socketpool/client/readme.md46
-rw-r--r--tests/circuitpython-manual/socketpool/datagram/ntp.py28
-rw-r--r--tests/circuitpython-manual/socketpool/datagram/readme.md19
-rw-r--r--tests/circuitpython-manual/socketpool/server/cpy-server.py31
-rw-r--r--tests/circuitpython-manual/socketpool/server/host-client.py17
-rw-r--r--tests/circuitpython-manual/socketpool/server/readme.md43
33 files changed, 317 insertions, 0 deletions
diff --git a/tests/circuitpython-manual/audiobusio/i2s_sample_loop.py b/tests/circuitpython-manual/audiobusio/i2s_sample_loop.py
new file mode 100644
index 000000000..c0ee5de31
--- /dev/null
+++ b/tests/circuitpython-manual/audiobusio/i2s_sample_loop.py
@@ -0,0 +1,36 @@
+import audiocore
+import audiobusio
+import board
+import digitalio
+import array
+import time
+import math
+import rp2pio
+import adafruit_pioasm
+
+time.sleep(10)
+
+trigger = digitalio.DigitalInOut(board.D4)
+trigger.switch_to_output(True)
+
+# Generate one period of sine wav.
+length = 8000 // 440
+
+# signed 16 bit
+s16 = array.array("h", [0] * length)
+for i in range(length):
+ s16[i] = int(math.sin(math.pi * 2 * i / length) * (2 ** 15))
+ print(s16[i])
+
+sample = audiocore.RawSample(s16, sample_rate=8000)
+
+dac = audiobusio.I2SOut(bit_clock=board.D10,
+ word_select=board.D11, data=board.D12)
+
+trigger.value = False
+dac.play(sample, loop=True)
+time.sleep(1)
+dac.stop()
+trigger.value = True
+
+print("done")
diff --git a/tests/circuitpython-manual/audiobusio/pdmin_rms.py b/tests/circuitpython-manual/audiobusio/pdmin_rms.py
new file mode 100644
index 000000000..8d1595752
--- /dev/null
+++ b/tests/circuitpython-manual/audiobusio/pdmin_rms.py
@@ -0,0 +1,44 @@
+import audiobusio
+import board
+import digitalio
+import array
+import time
+import math
+
+trigger = digitalio.DigitalInOut(board.D4)
+trigger.switch_to_output(True)
+
+def mean(values):
+ return sum(values) / len(values)
+
+
+def normalized_rms(values):
+ minbuf = int(mean(values))
+ samples_sum = sum(
+ float(sample - minbuf) * (sample - minbuf)
+ for sample in values
+ )
+
+ return math.sqrt(samples_sum / len(values))
+
+# signed 16 bit
+s16 = array.array("H", [0] * 10000)
+
+pdm = audiobusio.PDMIn(clock_pin=board.D11, data_pin=board.D12, sample_rate=24000, bit_depth=16)
+
+print("starting read")
+trigger.value = False
+count = pdm.record(s16, len(s16))
+trigger.value = True
+print("read done")
+print("recorded {} samples".format(count))
+for v in s16[:count]:
+ print(v)
+
+
+magnitude = normalized_rms(s16)
+print("magnitude", magnitude)
+
+print("count", count)
+
+print("done")
diff --git a/tests/manual/audiocore/jeplayer-splash-16000-16bit-mono-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-16bit-mono-signed.wav
index cd3da395b..cd3da395b 100644
--- a/tests/manual/audiocore/jeplayer-splash-16000-16bit-mono-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-16bit-mono-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-16000-16bit-stereo-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-16bit-stereo-signed.wav
index c1036475b..c1036475b 100644
--- a/tests/manual/audiocore/jeplayer-splash-16000-16bit-stereo-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-16bit-stereo-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-16000-24bit-mono-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-24bit-mono-signed.wav
index 6aa6afc7a..6aa6afc7a 100644
--- a/tests/manual/audiocore/jeplayer-splash-16000-24bit-mono-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-24bit-mono-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-16000-24bit-stereo-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-24bit-stereo-signed.wav
index c175aaf61..c175aaf61 100644
--- a/tests/manual/audiocore/jeplayer-splash-16000-24bit-stereo-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-24bit-stereo-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-16000-8bit-mono-unsigned.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-8bit-mono-unsigned.wav
index ccf63b9c1..ccf63b9c1 100644
--- a/tests/manual/audiocore/jeplayer-splash-16000-8bit-mono-unsigned.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-8bit-mono-unsigned.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-16000-8bit-stereo-unsigned.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-8bit-stereo-unsigned.wav
index 63aaa5b29..63aaa5b29 100644
--- a/tests/manual/audiocore/jeplayer-splash-16000-8bit-stereo-unsigned.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-16000-8bit-stereo-unsigned.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-44100-16bit-mono-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-16bit-mono-signed.wav
index 147b14b16..147b14b16 100644
--- a/tests/manual/audiocore/jeplayer-splash-44100-16bit-mono-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-16bit-mono-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-44100-16bit-stereo-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-16bit-stereo-signed.wav
index adfe84fb0..adfe84fb0 100644
--- a/tests/manual/audiocore/jeplayer-splash-44100-16bit-stereo-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-16bit-stereo-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-44100-24bit-mono-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-24bit-mono-signed.wav
index 2c5337045..2c5337045 100644
--- a/tests/manual/audiocore/jeplayer-splash-44100-24bit-mono-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-24bit-mono-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-44100-24bit-stereo-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-24bit-stereo-signed.wav
index a290c6c37..a290c6c37 100644
--- a/tests/manual/audiocore/jeplayer-splash-44100-24bit-stereo-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-24bit-stereo-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-44100-8bit-mono-unsigned.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-8bit-mono-unsigned.wav
index cd1c79280..cd1c79280 100644
--- a/tests/manual/audiocore/jeplayer-splash-44100-8bit-mono-unsigned.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-8bit-mono-unsigned.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-44100-8bit-stereo-unsigned.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-8bit-stereo-unsigned.wav
index 12c48e258..12c48e258 100644
--- a/tests/manual/audiocore/jeplayer-splash-44100-8bit-stereo-unsigned.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-8bit-stereo-unsigned.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-44100-stereo.mp3 b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-stereo.mp3
index fd820e69a..fd820e69a 100644
--- a/tests/manual/audiocore/jeplayer-splash-44100-stereo.mp3
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-44100-stereo.mp3
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-8000-16bit-mono-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-16bit-mono-signed.wav
index a730c2b84..a730c2b84 100644
--- a/tests/manual/audiocore/jeplayer-splash-8000-16bit-mono-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-16bit-mono-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-8000-16bit-stereo-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-16bit-stereo-signed.wav
index 5038ae8ae..5038ae8ae 100644
--- a/tests/manual/audiocore/jeplayer-splash-8000-16bit-stereo-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-16bit-stereo-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-8000-24bit-mono-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-24bit-mono-signed.wav
index ac25cddb3..ac25cddb3 100644
--- a/tests/manual/audiocore/jeplayer-splash-8000-24bit-mono-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-24bit-mono-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-8000-24bit-stereo-signed.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-24bit-stereo-signed.wav
index 6fec67431..6fec67431 100644
--- a/tests/manual/audiocore/jeplayer-splash-8000-24bit-stereo-signed.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-24bit-stereo-signed.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-8000-8bit-mono-unsigned.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-8bit-mono-unsigned.wav
index d5e49b24b..d5e49b24b 100644
--- a/tests/manual/audiocore/jeplayer-splash-8000-8bit-mono-unsigned.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-8bit-mono-unsigned.wav
Binary files differ
diff --git a/tests/manual/audiocore/jeplayer-splash-8000-8bit-stereo-unsigned.wav b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-8bit-stereo-unsigned.wav
index 3df7945aa..3df7945aa 100644
--- a/tests/manual/audiocore/jeplayer-splash-8000-8bit-stereo-unsigned.wav
+++ b/tests/circuitpython-manual/audiocore/jeplayer-splash-8000-8bit-stereo-unsigned.wav
Binary files differ
diff --git a/tests/manual/audiopwmio/single_buffer_loop.py b/tests/circuitpython-manual/audiopwmio/single_buffer_loop.py
index dfac475b5..dfac475b5 100644
--- a/tests/manual/audiopwmio/single_buffer_loop.py
+++ b/tests/circuitpython-manual/audiopwmio/single_buffer_loop.py
diff --git a/tests/manual/audiopwmio/wavefile_pause_resume.py b/tests/circuitpython-manual/audiopwmio/wavefile_pause_resume.py
index 27912d321..27912d321 100644
--- a/tests/manual/audiopwmio/wavefile_pause_resume.py
+++ b/tests/circuitpython-manual/audiopwmio/wavefile_pause_resume.py
diff --git a/tests/manual/audiopwmio/wavefile_playback.py b/tests/circuitpython-manual/audiopwmio/wavefile_playback.py
index 0adbf2b19..0adbf2b19 100644
--- a/tests/manual/audiopwmio/wavefile_playback.py
+++ b/tests/circuitpython-manual/audiopwmio/wavefile_playback.py
diff --git a/tests/manual/busio/uart_echo.py b/tests/circuitpython-manual/busio/uart_echo.py
index f55d4db9e..f55d4db9e 100644
--- a/tests/manual/busio/uart_echo.py
+++ b/tests/circuitpython-manual/busio/uart_echo.py
diff --git a/tests/circuitpython-manual/socketpool/client/cpy-client.py b/tests/circuitpython-manual/socketpool/client/cpy-client.py
new file mode 100644
index 000000000..dcc742c9f
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/client/cpy-client.py
@@ -0,0 +1,26 @@
+import wifi
+import socketpool
+import ssl
+import time
+
+TIMEOUT = None
+HOST = '192.168.10.179'
+PORT = 5000
+
+# Connect to wifi
+print("Connecting to wifi")
+wifi.radio.connect("mySSID", "myPASS")
+pool = socketpool.SocketPool(wifi.radio)
+
+print("Creating Socket")
+with pool.socket(pool.AF_INET, pool.SOCK_STREAM) as s:
+ s.settimeout(TIMEOUT)
+
+ print("Connecting")
+ s.connect((HOST, PORT))
+ print("Sending")
+ sent = s.send(b'Hello, world')
+ print("Receiving")
+ buff = bytearray(128)
+ numbytes = s.recv_into(buff)
+print(repr(buff))
diff --git a/tests/circuitpython-manual/socketpool/client/host-server.py b/tests/circuitpython-manual/socketpool/client/host-server.py
new file mode 100644
index 000000000..fd7ceb7f1
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/client/host-server.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python3
+import socket
+
+TIMEOUT = 10
+HOST = "192.168.10.179"
+PORT = 5000
+
+print("Create Socket")
+with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
+ s.settimeout(TIMEOUT)
+ s.bind((HOST, PORT))
+ s.listen()
+ print("Accepting connections")
+ while True:
+ try:
+ conn, addr = s.accept()
+ break
+ except BlockingIOError:
+ pass
+
+ with conn:
+ s.settimeout(TIMEOUT)
+ print('Connected by', addr)
+ data = conn.recv(128)
+ print("got: " + str(data))
+ conn.sendall(data)
+ print("sent: " + str(data))
diff --git a/tests/circuitpython-manual/socketpool/client/readme.md b/tests/circuitpython-manual/socketpool/client/readme.md
new file mode 100644
index 000000000..45cdf23c8
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/client/readme.md
@@ -0,0 +1,46 @@
+# Circuitpython as Client
+
+This example demonstrates the use of Socket as a client, accessing a server on a host development machine. This Circuitpython sketch uses the Connect, Send, and Recv_Into methods.
+
+## Prerequisites
+
+Circuitpython V6.2.0 minimum. Neither the host or client sketch has installed module prerequisites.
+
+## Setup
+
+Find a viable IP address for the host machine first and insert it in both sketches as HOST. On mac, this can be done by going to System Preferences/Network and checking the IP address used to connect to the local wireless network. Make sure that both devices are using the same WIFI!
+
+Each sketch can have Timeout values changed. The host sketch usually needs a value above 0, or the recv() will fail. Currently, Circuitpython's Connect function is always blocking, so changing the client timeout will not cause much change in behavior.
+
+Start the Server on the host PC first, within this folder:
+
+```
+python host-server.py
+```
+
+Then, reload the client sketch in Circuitpython.
+
+## Expected Behavior
+
+The example should connect to a server running on the host machine. The client will send a "Hello world" string to the server, which will return it.
+
+Expected client output:
+
+```
+Connecting to wifi
+Creating Socket
+Connecting
+Sending
+Receiving
+bytearray(b'Hello, world')
+```
+
+Expected Server output (IP/port values will vary):
+
+```
+Create Socket
+Accepting connections
+Connected by ('192.168.10.128', 64509)
+got: b'Hello, world'
+sent: b'Hello, world'
+```
diff --git a/tests/circuitpython-manual/socketpool/datagram/ntp.py b/tests/circuitpython-manual/socketpool/datagram/ntp.py
new file mode 100644
index 000000000..31d922858
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/datagram/ntp.py
@@ -0,0 +1,28 @@
+import wifi
+import socketpool
+import struct
+import time
+
+# connect to wifi
+print("Connecting to Wifi")
+wifi.radio.connect("mySSID", "myPASS")
+pool = socketpool.SocketPool(wifi.radio)
+
+# make socket
+print("Creating socket")
+sock = pool.socket(pool.AF_INET,pool.SOCK_DGRAM)
+
+# Fill packet
+packet = bytearray(48)
+packet[0] = 0b00100011 # Not leap second, NTP version 4, Client mode
+NTP_TO_UNIX_EPOCH = 2208988800 # 1970-01-01 00:00:00
+
+print("Sending packet")
+sock.sendto(packet, ("pool.ntp.org", 123))
+
+size, address = sock.recvfrom_into(packet)
+print("Received packet")
+
+seconds = struct.unpack_from("!I", packet, offset=len(packet) - 8)[0]
+print("Address:", address)
+print("Time:", time.localtime(seconds - NTP_TO_UNIX_EPOCH))
diff --git a/tests/circuitpython-manual/socketpool/datagram/readme.md b/tests/circuitpython-manual/socketpool/datagram/readme.md
new file mode 100644
index 000000000..f63f0abcc
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/datagram/readme.md
@@ -0,0 +1,19 @@
+# Circuitpython Datagrams
+
+This example demonstrates using UDP (datagrams) with the Socket module, accessing the time from an NTP server using `sendto` and `recvfrom_into`.
+
+## Prerequisites
+
+Circuitpython V6.2.0 minimum.
+
+## Expected behavior
+
+The Circuitpython device will attempt to connect to wifi, and send a request for the time to `pool.ntp.org`. It will then convert the seconds returned into a unix time struct.
+
+Expected output:
+```
+Sending packet
+Received packet
+Address: ('82.197.188.130', 31488)
+Time: struct_time(tm_year=2021, tm_mon=2, tm_mday=11, tm_hour=22, tm_min=22, tm_sec=40, tm_wday=3, tm_yday=42, tm_isdst=-1)
+```
diff --git a/tests/circuitpython-manual/socketpool/server/cpy-server.py b/tests/circuitpython-manual/socketpool/server/cpy-server.py
new file mode 100644
index 000000000..d865156bc
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/server/cpy-server.py
@@ -0,0 +1,31 @@
+import wifi
+import socketpool
+
+TIMEOUT = None
+
+print("Connecting to Wifi")
+wifi.radio.connect("mySSID", "myPASS")
+
+pool = socketpool.SocketPool(wifi.radio)
+
+print("Finding IP address")
+print(wifi.radio.ipv4_address)
+HOST = str(wifi.radio.ipv4_address)
+PORT = 80 # Port to listen on
+
+print("Creating socket")
+sock = pool.socket(pool.AF_INET,pool.SOCK_STREAM)
+
+sock.bind((HOST, PORT))
+sock.listen(1)
+print("Accepting connections")
+conn, addr = sock.accept()
+with conn:
+ print('Connected by', addr)
+ buff = bytearray(128)
+ print("Receiving")
+ numbytes = conn.recvfrom_into(buff)
+ print(buff[:numbytes[0]])
+ if numbytes:
+ print("Sending")
+ conn.send(buff[:numbytes[0]])
diff --git a/tests/circuitpython-manual/socketpool/server/host-client.py b/tests/circuitpython-manual/socketpool/server/host-client.py
new file mode 100644
index 000000000..b482755d8
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/server/host-client.py
@@ -0,0 +1,17 @@
+import socket
+
+HOST = '192.168.10.128' # The server's hostname or IP address
+PORT = 80 # The port used by the server
+
+with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
+ s.settimeout(None)
+
+ print("Connecting")
+ s.connect((HOST, PORT))
+
+ print("Sending")
+ s.send(b'Hello, world')
+
+ print("Receiving")
+ data = s.recv(1024)
+ print('Received', repr(data))
diff --git a/tests/circuitpython-manual/socketpool/server/readme.md b/tests/circuitpython-manual/socketpool/server/readme.md
new file mode 100644
index 000000000..26118b8f1
--- /dev/null
+++ b/tests/circuitpython-manual/socketpool/server/readme.md
@@ -0,0 +1,43 @@
+# Circuitpython as Client
+
+This example demonstrates the use of Socket as a server, accessed by a client program on a host development machine. This Circuitpython sketch uses the Bind, Listen, Accept, and recvfrom_into calls.
+
+## Prerequisites
+
+Circuitpython V6.2.0 minimum. Neither the host or client sketch has installed module prerequisites.
+
+## Setup
+
+Make sure that both devices are using the same WIFI! The Circuitpython Server will automatically pick an IP and print it over the CDC monitor. Copy this value into the host client sketch. Start the Server on Circuitpython first, then run the client sketch in this folder:
+
+```
+python host-client.py
+```
+
+Each sketch can have Timeout values changed.
+
+## Expected behavior
+
+The host machine will connect to the server running on the Circuitpython device, and send a "Hello, world" string which is then returned.
+
+Expected client output:
+
+```
+Connecting
+Sending
+Receiving
+Received b'Hello, world'
+```
+
+Expected server output:
+```
+Connecting to Wifi
+Finding IP address
+192.168.10.128
+Creating socket
+Accepting connections
+Connected by ('192.168.10.179', 33274)
+Receiving
+bytearray(b'Hello, world')
+Sending
+```