Files
t-deckard/deck/net.py
T

81 lines
2.5 KiB
Python
Raw Normal View History

2025-12-20 18:28:43 +02:00
# deck.net: T-Deck network helper library for CircuitPython
2025-12-20 12:48:06 +02:00
# Depends on some Adafruit Bundle libs
# Normal flow (provided Wi-Fi creds are in settings.toml):
#
2025-12-20 18:28:43 +02:00
# from deck import net
# status, stext, myip = net.wifi_connect_wait()
2025-12-20 12:48:06 +02:00
# if status:
2025-12-20 18:28:43 +02:00
# requests = net.init_requests()
# # or socket = net.init_socket() if raw sockets are necessary
# while net.my_ip():
2025-12-20 12:48:06 +02:00
# ...
#
# Created by Luxferre in 2025, released into public domain
2025-12-23 13:04:47 +02:00
import os, time # standard modules
import wifi # CircuitPython builtins
# Adafruit Bundle libs
import adafruit_connection_manager
import adafruit_requests, adafruit_ntp
2025-12-20 12:48:06 +02:00
def wifi_connect(ssid=None, password=None):
'''
Connect to a Wi-Fi SSID
Use settings.toml for default credentials
'''
ssid = ssid or os.getenv('CIRCUITPY_WIFI_SSID')
password = password or os.getenv('CIRCUITPY_WIFI_PASSWORD')
try:
wifi.radio.connect(ssid=ssid, password=password)
except ConnectionError as e:
return (False, e)
return (True, 'Connected')
def my_ip():
'Get the local IP address'
return wifi.radio.ipv4_address
def wifi_connect_wait(ssid=None, password=None, tmout=15, retries=3):
'''
Connect to a Wi-Fi SSID and wait for successful connection
Usually, you'll want to use this function to connect
'''
r = 0
2025-12-20 18:28:43 +02:00
status = wifi.radio.connected
2025-12-20 12:48:06 +02:00
stext = ''
while not wifi.radio.ipv4_address and r < retries:
status, stext = wifi_connect(ssid, password)
if not status:
time.sleep(tmout)
r += 1
if not status:
stext = 'Could not connect, out of attempts. Last error: ' + stext
return (status, stext, wifi.radio.ipv4_address)
def wifi_scan():
'Scan for Wi-Fi networks (returns (SSID, rssi) tuple list from strongest to weakest)'
networks = []
for network in wifi.radio.start_scanning_networks():
networks.append(network)
wifi.radio.stop_scanning_networks()
networks = sorted(networks, key=lambda net: net.rssi, reverse=True)
return [(net.ssid, net.rssi) for net in networks]
def ssl_context():
'Get the default SSL context for wrapping a raw socket'
return adafruit_connection_manager.get_radio_ssl_context(wifi.radio)
def init_socket():
'Get a socket pool and instantiate a Socket library'
return adafruit_connection_manager.get_radio_socketpool(wifi.radio)
def init_requests():
'Instantiate a Requests library'
return adafruit_requests.Session(init_socket(), ssl_context())
2025-12-23 13:04:47 +02:00
def init_ntp(tz=0):
'Instantiate an NTP time client'
pool = init_socket()
return adafruit_ntp.NTP(pool, tz_offset=tz, cache_seconds=3600)