The REUSE specifications[1] are meant to make it explicit and easier to apply code licensing information for a project. The provided lint tool makes it easy to ensure all the content (code and not code) is tagged. Important notes: * All the code (and documentation) that otherwise didn't have an explicit license headers have been tagged with ladyada's copyright as per the LICENSE file. * favicon.ico and CODE_OF_CONDUCT.md have been synced from the source-of-truth repositories. * All configuration files have been tagged with ladyada's copyright and Unlicense[2]. The current REUSE recommendation is to use CC0-1.0, but that has… side effects. There's some discussion in [3] about the recommendation for likely-uncopyrightable files (such as configuration files). [1]: https://reuse.software/ [2]: https://unlicense.org/ [3]: https://github.com/fsfe/reuse-docs/issues/62
102 lines
3.4 KiB
Python
102 lines
3.4 KiB
Python
# SPDX-FileCopyrightText: 2019 ladyada for Adafruit Industries
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# Example code implementing WPA2 Enterprise mode
|
|
#
|
|
# This code requires firmware version 1.3.0, or newer, running
|
|
# on the ESP32 WiFi co-processor. The latest firmware, and wiring
|
|
# info if you are using something other than a PyPortal, can be found
|
|
# in the Adafruit Learning System:
|
|
# https://learn.adafruit.com/adding-a-wifi-co-processor-to-circuitpython-esp8266-esp32/firmware-files#esp32-only-spi-firmware-3-8
|
|
|
|
import re
|
|
import time
|
|
import board
|
|
import busio
|
|
from digitalio import DigitalInOut
|
|
|
|
import adafruit_esp32spi.adafruit_esp32spi_socket as socket
|
|
from adafruit_esp32spi import adafruit_esp32spi
|
|
import adafruit_requests as requests
|
|
|
|
# Version number comparison code. Credit to gnud on stackoverflow
|
|
# (https://stackoverflow.com/a/1714190), swapping out cmp() to
|
|
# support Python 3.x and thus, CircuitPython
|
|
def version_compare(version1, version2):
|
|
def normalize(v):
|
|
return [int(x) for x in re.sub(r"(\.0+)*$", "", v).split(".")]
|
|
|
|
return (normalize(version1) > normalize(version2)) - (
|
|
normalize(version1) < normalize(version2)
|
|
)
|
|
|
|
|
|
print("ESP32 SPI WPA2 Enterprise test")
|
|
|
|
# ESP32 setup
|
|
# If your board does define the three pins listed below,
|
|
# you can set the correct pins in the second block
|
|
try:
|
|
esp32_cs = DigitalInOut(board.ESP_CS)
|
|
esp32_ready = DigitalInOut(board.ESP_BUSY)
|
|
esp32_reset = DigitalInOut(board.ESP_RESET)
|
|
except AttributeError:
|
|
esp32_cs = DigitalInOut(board.D9)
|
|
esp32_ready = DigitalInOut(board.D10)
|
|
esp32_reset = DigitalInOut(board.D5)
|
|
|
|
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
|
|
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
|
|
|
|
requests.set_socket(socket, esp)
|
|
|
|
if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:
|
|
print("ESP32 found and in idle mode")
|
|
|
|
# Get the ESP32 fw version number, remove trailing byte off the returned bytearray
|
|
# and then convert it to a string for prettier printing and later comparison
|
|
firmware_version = "".join([chr(b) for b in esp.firmware_version[:-1]])
|
|
print("Firmware vers.", firmware_version)
|
|
|
|
print("MAC addr:", [hex(i) for i in esp.MAC_address])
|
|
|
|
# WPA2 Enterprise support was added in fw ver 1.3.0. Check that the ESP32
|
|
# is running at least that version, otherwise, bail out
|
|
assert (
|
|
version_compare(firmware_version, "1.3.0") >= 0
|
|
), "Incorrect ESP32 firmware version; >= 1.3.0 required."
|
|
|
|
# Set up the SSID you would like to connect to
|
|
# Note that we need to call wifi_set_network prior
|
|
# to calling wifi_set_enable.
|
|
esp.wifi_set_network(b"YOUR_SSID_HERE")
|
|
|
|
# If your WPA2 Enterprise network requires an anonymous
|
|
# identity to be set, you may set that here
|
|
esp.wifi_set_entidentity(b"")
|
|
|
|
# Set the WPA2 Enterprise username you'd like to use
|
|
esp.wifi_set_entusername(b"MY_USERNAME")
|
|
|
|
# Set the WPA2 Enterprise password you'd like to use
|
|
esp.wifi_set_entpassword(b"MY_PASSWORD")
|
|
|
|
# Once the network settings have been configured,
|
|
# we need to enable WPA2 Enterprise mode on the ESP32
|
|
esp.wifi_set_entenable()
|
|
|
|
# Wait for the network to come up
|
|
print("Connecting to AP...")
|
|
while not esp.is_connected:
|
|
print(".", end="")
|
|
time.sleep(2)
|
|
|
|
print("")
|
|
print("Connected to", str(esp.ssid, "utf-8"), "\tRSSI:", esp.rssi)
|
|
print("My IP address is", esp.pretty_ip(esp.ip_address))
|
|
print(
|
|
"IP lookup adafruit.com: %s" % esp.pretty_ip(esp.get_host_by_name("adafruit.com"))
|
|
)
|
|
print("Ping google.com: %d ms" % esp.ping("google.com"))
|
|
|
|
print("Done!")
|