From 1ec41466a3bb8eb8de2c6944d0c453726e8f731d Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Wed, 26 Jul 2023 09:36:16 +0200 Subject: [PATCH] get adafruit airlift working --- CIRCUITPY/code.py | 41 ++++++++++++++---- CIRCUITPY/lib/._adafruit_bus_device | Bin 0 -> 4096 bytes CIRCUITPY/lib/._adafruit_esp32spi | Bin 0 -> 4096 bytes .../lib/adafruit_bus_device/.___init__.py | Bin 0 -> 4096 bytes .../lib/adafruit_bus_device/._i2c_device.mpy | Bin 0 -> 4096 bytes .../lib/adafruit_bus_device/._spi_device.mpy | Bin 0 -> 4096 bytes CIRCUITPY/lib/adafruit_bus_device/__init__.py | 0 .../lib/adafruit_bus_device/i2c_device.mpy | Bin 0 -> 1171 bytes .../lib/adafruit_bus_device/spi_device.mpy | Bin 0 -> 817 bytes CIRCUITPY/lib/adafruit_esp32spi/._PWMOut.mpy | Bin 0 -> 4096 bytes CIRCUITPY/lib/adafruit_esp32spi/.___init__.py | Bin 0 -> 4096 bytes .../adafruit_esp32spi/._adafruit_esp32spi.mpy | Bin 0 -> 4096 bytes .../._adafruit_esp32spi_socket.mpy | Bin 0 -> 4096 bytes .../._adafruit_esp32spi_wifimanager.mpy | Bin 0 -> 4096 bytes .../._adafruit_esp32spi_wsgiserver.py | Bin 0 -> 4096 bytes .../lib/adafruit_esp32spi/._digitalio.mpy | Bin 0 -> 4096 bytes CIRCUITPY/lib/adafruit_esp32spi/PWMOut.mpy | Bin 0 -> 1049 bytes CIRCUITPY/lib/adafruit_esp32spi/__init__.py | 0 .../adafruit_esp32spi/adafruit_esp32spi.mpy | Bin 0 -> 12756 bytes .../adafruit_esp32spi_socket.mpy | Bin 0 -> 1876 bytes .../adafruit_esp32spi_wifimanager.mpy | Bin 0 -> 3696 bytes .../adafruit_esp32spi_wsgiserver.py | 0 CIRCUITPY/lib/adafruit_esp32spi/digitalio.mpy | Bin 0 -> 1866 bytes 23 files changed, 32 insertions(+), 9 deletions(-) create mode 100755 CIRCUITPY/lib/._adafruit_bus_device create mode 100755 CIRCUITPY/lib/._adafruit_esp32spi create mode 100755 CIRCUITPY/lib/adafruit_bus_device/.___init__.py create mode 100755 CIRCUITPY/lib/adafruit_bus_device/._i2c_device.mpy create mode 100755 CIRCUITPY/lib/adafruit_bus_device/._spi_device.mpy create mode 100755 CIRCUITPY/lib/adafruit_bus_device/__init__.py create mode 100755 CIRCUITPY/lib/adafruit_bus_device/i2c_device.mpy create mode 100755 CIRCUITPY/lib/adafruit_bus_device/spi_device.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/._PWMOut.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/.___init__.py create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_socket.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_wifimanager.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_wsgiserver.py create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/._digitalio.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/PWMOut.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/__init__.py create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_socket.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_wifimanager.mpy create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_wsgiserver.py create mode 100755 CIRCUITPY/lib/adafruit_esp32spi/digitalio.mpy diff --git a/CIRCUITPY/code.py b/CIRCUITPY/code.py index 89c99bf..1e3f71d 100755 --- a/CIRCUITPY/code.py +++ b/CIRCUITPY/code.py @@ -3,16 +3,39 @@ import time import busio from adafruit_bme280 import basic as adafruit_bme280 -i2c = busio.I2C(scl=board.GP15, sda=board.GP14) -bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, 0x76) +# i2c = busio.I2C(scl=board.GP15, sda=board.GP14) +# bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, 0x76) # location's pressure (hPa) QNH at sea level -bme280.sea_level_pressure = 1016 # value from https://metar-taf.com/EDDM +# bme280.sea_level_pressure = 1016 # value from https://metar-taf.com/EDDM -while True: - print("\nTemperature: %0.1f C" % bme280.temperature) - print("Humidity: %0.1f %%" % bme280.relative_humidity) - print("Pressure: %0.1f hPa" % bme280.pressure) - print("Altitude = %0.2f meters" % bme280.altitude) - time.sleep(5) +# while True: + # print("\nTemperature: %0.1f C" % bme280.temperature) + # print("Humidity: %0.1f %%" % bme280.relative_humidity) + # print("Pressure: %0.1f hPa" % bme280.pressure) + # print("Altitude = %0.2f meters" % bme280.altitude) + # time.sleep(5) + +from digitalio import DigitalInOut +import adafruit_esp32spi.adafruit_esp32spi_socket as socket +from adafruit_esp32spi import adafruit_esp32spi + +esp32_cs = DigitalInOut(board.GP21) +esp32_ready = DigitalInOut(board.GP22) +esp32_reset = DigitalInOut(board.GP17) + +spi = busio.SPI(clock=board.GP18, MOSI=board.GP19, MISO=board.GP20) +esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset) + +if esp.status == adafruit_esp32spi.WL_IDLE_STATUS: + print("ESP32 found and in idle mode") +print("Firmware vers.", esp.firmware_version) +print("MAC addr:", [hex(i) for i in esp.MAC_address]) + +for ap in esp.scan_networks(): + print("\t%s\t\tRSSI: %d" % (str(ap['ssid'], 'utf-8'), ap['rssi'])) +# os.getenv("WIFI_PASSWORD") +# WIFI_SSID +# WIFI_PASSWORD +print("Done!") diff --git a/CIRCUITPY/lib/._adafruit_bus_device b/CIRCUITPY/lib/._adafruit_bus_device new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/._adafruit_esp32spi b/CIRCUITPY/lib/._adafruit_esp32spi new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_bus_device/.___init__.py b/CIRCUITPY/lib/adafruit_bus_device/.___init__.py new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_bus_device/._i2c_device.mpy b/CIRCUITPY/lib/adafruit_bus_device/._i2c_device.mpy new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_bus_device/._spi_device.mpy b/CIRCUITPY/lib/adafruit_bus_device/._spi_device.mpy new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_bus_device/__init__.py b/CIRCUITPY/lib/adafruit_bus_device/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/CIRCUITPY/lib/adafruit_bus_device/i2c_device.mpy b/CIRCUITPY/lib/adafruit_bus_device/i2c_device.mpy new file mode 100755 index 0000000000000000000000000000000000000000..3a36f31dcf12883aed80755ed4ec5f65ea7e293d GIT binary patch literal 1171 zcmZ`&&u<$=6n?Xga=caM~+$4NJz#pBF!PxZK}wq)p&P3ZdP%2 zSG(&FiwY(vNU6jD^@PL?Rj9{xQhG-q{sS%?=$*fSBeQF#1pzC~>dl*PzW2Q!vmO^N z=a0KLmLSp4x?0a2m_E@59_i8p)1VczYD~JYo_@-@XeSBei=+KgoP5VQ~v>xT+3JO=7;l*uNGpMc^dl3X>QyfCQTr4`x-KAWD z-lvU0uSZ>cX~#8v`o_U2uNtOnaEZ>)-?c6BuK?4xtLr6B%QGYZ}6tSSm22h`;#i;w~+m=KpbHX++pghkHMjPkDu3Thb$dG%f2cf7Sq<&o*{ z4)n5N?^n+2ReArsaO-1rcgE@(18>Yy=9i9Peg$3rD$Cw}l5iPzS>`b-)B2Z5$iPK~ z3y3MOc(;V^t%3rXdpCGR;i=xju%)je1wQ+yM^NBd0l&62D9t#t?X?@Uxr?B;!?pc!E z|1Y|vJQpSUe?-ZU<%{OGU$c{XE;GX%rWBWpA1=d-zsdUf<@x5chJFd88M!neeN(?s zFh3cc;_MmDzQEZZaQ3Bo5}OE?!-jCte40hxgt0ZlzoYpD5z-R-rl3M2#l-jIl-H-! zVJd0|(nT5j?vV6tV^4+VAD;(NF&{ji!Z4d;-<2Sc;&OUmjREaD(J`inM))A;Txc9< z{dDBek2}8#OE+iP_nmq{Ek4c{mOnj+VoI_!4wsRoD9r7TVMF5FG5J~`6$(fd+MDaJ zBf`q7<{E2nEPx30qZ;}#41b;fMj>Kxg2=G82=5kzKtg}k5Dnj2xLP52fltK4mLc$w c(80U3W#{<|%a3O#ulf1O_^jnu4zC>k1)auM-~a#s literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_bus_device/spi_device.mpy b/CIRCUITPY/lib/adafruit_bus_device/spi_device.mpy new file mode 100755 index 0000000000000000000000000000000000000000..71ee6d0e94438a7974e8fd49f4c6b8424176eee5 GIT binary patch literal 817 zcmYL{-A)rh6vt;N6)dgYcFT6dcK~TD*qREBdSfYj0mOt>2w0;IyVHSADBaEOY^8|_ z)2axGz69|BRt0?l@ddn)L=&&L(R<^i(-z_+XL9Duf6njBnVIu;43E6XOpSxCtX9-E zEQe62J2ouhDnU4Do8;V0n6>rw_00U(ZS%&X;sgdP-``EiHkO6?dw_}Jl1YhC(aK`? zO3lRaj($I_nWVBg;FX1@6`0t!VrdBL8ro_}gnl2FV0*yR+P$=#TZr=*#}nf`rl@3- zP_4XBS#l`f3>Vw$bHQQ&tcAeDPqmX376tHF^vxtviL@+3Sj84kQ-N>{$RdOmHVp_@ zQi2%f7`1h~=?+=QBSEk;B}z^EPBO_^B}Y#nV>@}#jpXb_Tjq#`czbd+TH<-Lj@{0Z z;D;KwlmTJz^&p!Ze%1TZ2SOk!bF4=OefhXB1#;pLvZ013sbW~w$_~~?_uh<%qOLhb zOQTrl4K$6iW)WKBzRxUab~C8p9cpP1l?}9I>oD#-1YTB9c8ELT^0tJ`n2$Qw7z@9Rykt-&q;Is%YN{`aa=z; zIcC`)Tl?Zlmm}cq5wEm<_Tb^Sx!=15UVsqsJC%0Dg$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/.___init__.py b/CIRCUITPY/lib/adafruit_esp32spi/.___init__.py new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi.mpy b/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi.mpy new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_socket.mpy b/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_socket.mpy new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_wifimanager.mpy b/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_wifimanager.mpy new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_wsgiserver.py b/CIRCUITPY/lib/adafruit_esp32spi/._adafruit_esp32spi_wsgiserver.py new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/._digitalio.mpy b/CIRCUITPY/lib/adafruit_esp32spi/._digitalio.mpy new file mode 100755 index 0000000000000000000000000000000000000000..7f4e7db936ca85f01058b8d51cfd6bbadfd3284c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sRG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(Avx-Dbdo>JjvQQ zqbNT&)f&x^QSN96jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb2#O0I0JG!eAg5 zl95@gP?TDnUs{x$s*sjnl&z4NSCR_scIM|L=Hyf=!cbj9nnLwI M+$%B+a{vDW06I`D5C8xG literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/PWMOut.mpy b/CIRCUITPY/lib/adafruit_esp32spi/PWMOut.mpy new file mode 100755 index 0000000000000000000000000000000000000000..da5eb0724d9c98499c8a64ce945aae50e0469bb5 GIT binary patch literal 1049 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 PIM1Gf1c0!oaN++4L-p2p literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_socket.mpy b/CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_socket.mpy new file mode 100755 index 0000000000000000000000000000000000000000..32e6cce52a1015ed8e1ad8887422ca8c242a5889 GIT binary patch literal 1876 zcmZuxOLNm!6uy$<*a?Y|B_W$QA;J!E?39;dOlPve&m@IB9J`@`naYZM9X!~U$5JTi zh8vf3CO{Y6cG1ps(@ht$NnqXZ=nv=yC}q)^cGF$^2YO^HkSWzhN9Ue<^quc~=Opd) zsCakD8%2(5a#1cdHp;q$wfa;!0{5~$UzXIRp2V5wZwaib(F zID&*B4eRe5L=bX|$;(nMznqTGZwY+oD>btmpKl7Tct)CANay`qcZ3rQi;{Vk&P(x? z_}mr$ccQ@0$3Kyl;--_p6Yj}PQG&3Jb-7q|b+x}#k=HfNvjh=hbwks|H7v?C(IjylH@@(SkrD1ev><*purs*b zx81)Z;sP#g3&@Q;0umUTfQFicWV2y=ZVG`r8>UQVT#8z&VMUM70=gHm3C;#qZV~gW zM_^6cY>OJP3p}*QqAAiV@REE>E?4BW3XVA7%gTa_5vPD=fTX^rxW7#(FLECx)8iAT z#-pg!e4TnnP22GHOJ;!qhv9WeYa68!ZtSIc$X)`10z7Z>)@@S^8D6Gi*EXsK?QUqNNhC%ciJp)J<}6aSb&mex-&-JtSQ?H69#a z3Zd3H`pMIF_D#w`SdL@z$t7uiF_qqDZTxT-z(IKicMKZGn#D?0wTRoXrY+e=*b~Vv ziDk9cQBJ`2FiPVjE_lfG!lhscgnOwKrS=W}Lc0}%Ybeof0Y4z=qBWOm7vMBRci)p<_vU}1oR$}N$ zo4iZ`Z=DMXinO1SXNlXy;HP8g`6KcoHBDGMZ-+qE#|u_@4J;Q8&d2sv%eCD{Q94Hd z{J6EZ2T2}BslU(AE0+1kv)#QvpC$ wh1|iPI#3h`}+ErC#v*2s_9R#?Zrm49@<- zL~^hJ7}ks`im(g-`Yw5qY~I;}`9wPdU4;(R);4wM?E@W7bi+caA?DD; z_{eqvwG8iIw+HC^tq)J~K0CQDPF{fidSIEoP8}nx2kI5AdfyJ1!8u|SthOkvkWO3f zPOL@_jocCPwK(Yy`A?r5?>?8ufMn)$$x6G z?=Ng_$Xcye=5qP;0;ui4k-V~)OQ*o$w<0og3)0p2TwXf=f6fRvMJqBtH=pi=g71Xo z%dIX*x%5K*Kd$BE%He->e%iSjcK-Iuemm&`y`UM;HI!+1xps$|;&BGe_{a|;VvoNa z45gxKFc`q1H3M77=|0={;Ku?wydDh^QLq>d1yO}b7joN(0kiSVDbzZK-0g$QcC^!5 H)z<$7gOe`_ literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_wifimanager.mpy b/CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_wifimanager.mpy new file mode 100755 index 0000000000000000000000000000000000000000..ec875bbdb8b8e74fb7159babffd0a5a909c7d6cc GIT binary patch literal 3696 zcmbtXOK%(36~04?;zJLTGvg5(v-X%2ONv%#nWm}Oa05%CT*;ObQIxEzsWBRHuB53c za>_f5A8G3=H*#t;3!$5A(nb3RI+W7_UCPcMC<+t^9H6T#y6motE_&_^N2L4+3Pgm+ z;koC2_uTJ1Ipg!3mVezBIfeY1s;QgJmToGT7#H%y(9gXhQSR!S`i@#xw{SCO++UaJ zz{Esm;*N}HBt&W$8(HpTz|?ne+$(WwG=k8`pqz;-UqF|6{*<)gjsYVH+@LK@XO*c2w-v?2{U8q0YU8J(>xRu<=#RsEWN)45f_ zBXQ*_;y%6?TjGRIW9#y$_Gx}Euy+DpBYWS6m*BpB8`%r(4WTF+k&qPeO6aX!Y4E-G zmu^liJd(uO_m*du7MJELv*ky-i`l-)1tg(po|8gNOt6{vNW;}ey^gD9-YdnFEo>@v ze9u%=Bi|>*J4;Hv(cDpMd7s2rn^-k5Tke-e-DO-ianoq(1n2z{x|I(|0i!|8d{F8) zT4p{Zg$&iKZs!N2K@Hcii4(gIvRviDAn57!t^ANA>V~3f8rVeg!&1!9@8Oz4Ox0|W zd{{a~^sTze1WjDuGPi-6$m1XX{bS0#gQ7_~Mu$_Wv0N(kb}EC%7skdH(&J-iQQM03 zgNy!R#X=h1Xl)%t0)*(=iWTDyM06_>F;qhCHkw+w=mFUmRxF~LCf+ej@@Fe1E1lcv zjk;pqH!y!m6oIjhYx#@qqG#=?72_Q%!D37N9xXzMfDHIi^ty)cIR^nh3Ol;Ul?LfS zgkvU52jS@iJb7&$p6TcsydP8YL-2A(1~Z)&!A($MyKNk{JL&I8Vobxm7CWU}iSe$`H>N@{a@MtQ%TE`oVhoeCAvsmrQ(+%jT{FRIv0j3h%<8V-o*r(h2d^ z1!capFsoFSrCaxp4*^GH5T4K5IwDRwC#R1y4H?XoB}vvY!9I zwWq&+XbG42*Cegb$-1vfA!>;)0mZ z8M*6vnFY5@3|xh(iZyd;SiDlxiCJyz81JU&20Du@<;EZo)4z@HwF}%iar)m6s|X?A zC-JfIV>QD^jmdH@Q_NgEdp?zzEGK6Xk5o$-;nDATRLgn_o)U#yf#@jvdX{QHkhkP# z?=$T3lPu6MkM4k=z`37a+i@_N^uQV{SVA}5R>0LD0#_Ycs{*(C%}-*SB{(~M1@1-3 zMf5|OxV-T_0B{w!@20)G>5Eo*H6-sh*ep7A{mPw(W(&5G$MWAi6C**ox1Pu*lj%(EO5*m|=vX3~M)c4U2a0II z^X&Qb@95kDvV^yL(##T%mEr`|D9w7I$XP;C6gx4bOfB+g`oPW=cz9|*KyhT)KFapk zTdvQbRUS?Jvviq$IiG{LfDHZu60yDe&0!l->P1PQJ?2>AB;>%=0qQB2zs&UAzRscB zmM|d1bmCTKtd+Ef<*J7{MVN8A7~{-r$Wx2CT#m%Asd^1-Owh4)T!u2(yboHTPp%w# zirs!D(9hSeCTx1r>0eDc45i-zhNk~S=LirZ93v*$OU6hk1wlI`x^OllmT=PL1oGZx zWqJfO{h}Y3a;4CJY_ftqWL@fzH9?=vk2+)>bjccd0S$nWb>fJlXBkhIBWOP?25=oN zTKdsLyQGO|8Tc!*(p`1}Ik~FpcER3+P?=g}G(qs_br3?Kcz`v=;i(=D?cOh|)he`U z*=Xo>Geoje&euiuRd&V$?Tp-U2g78Y?{Y}~=$F4K9C|LNPSC%uCyMaLVlg?JODA%- zSTx$fCWvIz8vnIlzLwVS7I-nZ4e?evZMtdZ8$9Vjp0 z2pgVB-l*>8pRInZ&-QK^?X?Kk)r}fvmHYvndlw=oeJp~K-3a2Hv2_=G!@TP41_JM8 z!t3824k{0v8EY8?{CgW`zL?oxvOPP7hG{6a$-jt=0y3_yGX1f&REFM#YzZ90d1& W3RVJgSU6$3mDNZ#0@_oYz43oOjZyCa literal 0 HcmV?d00001 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_wsgiserver.py b/CIRCUITPY/lib/adafruit_esp32spi/adafruit_esp32spi_wsgiserver.py new file mode 100755 index 0000000..e69de29 diff --git a/CIRCUITPY/lib/adafruit_esp32spi/digitalio.mpy b/CIRCUITPY/lib/adafruit_esp32spi/digitalio.mpy new file mode 100755 index 0000000000000000000000000000000000000000..9ba133bd52d0e85ce59e654b49977807b00ead3d GIT binary patch literal 1866 zcmZ`)OK%%h6ux6;{7CF%UYWQ})7;cCP3$%y6Dws=q!6Zxtp>-=gA#-^Hl8UAb?wp2 zxFraQ>$F*frWB~4q6i7hrs`_k4S#?gOIBUr-@%e|$8M4q)v`VJan3#8J?A^$yvqhA z@m<8tpz!62Ub${JO;nqxy|%^&{RL^gc%`7J z8}H-`TS@?&OxvisX2U8;N|PijTa{YV zAo8Gg6R?-$m}S;AQ|HkkY3<$JKfM3VgKxk4{^1WlKKkkL&%geb8O<{C*(;mHMMYaJ z=GV1izObnv8Sx~|Y%Vf##H^cciH-v@YAX_2LRbi71( zWsnF6Cxe}TvyAb~OGIcnN>v7-gJBqH04D@bCk462DIJ>*t~XpH%lQ24j50g3fjXt`-)aG3iKm{cr->&rUV`_;xRh`Vmmcq5+!J}S6xdnG zP{Z*f!>A`lCHmK*n-PF|DH#BuJ%ACKGDphSdsyfU>&A7nZs>Q^r_3~JkB}9LB&E!z zHm)XnSgz6#6VKH#djD~XbBE)K}pxox`DPc^rpHJYx~>@ks* z&mOOvby(&(%WhbP?d~ceAhe*r=tG_nV^9s(u$3@u1bJ48z!SB3)D~GK+8YOzK^RCn zZF!$Q;KnLL)B)}uYt3W?#E+3LQgaAud|seJ@yrv0*?^ZgB}|D^UP7cvLI-b$;AR)1 z!zjj+uaM`jtvwkSMsbGhAy1lGLOVUnGsfpt!=hTDxx1Ee_IT~o^MO~oiK8eB?sl@bP5S$V#Z5IK)Js9K;OyQ@ofMzYWF-*JNeOLMw*S2 zhh>}u3e2D6ztybOoTa`lVH+sr;EHX$!Yij~Sq;0-D!*Yji}|_BQErMQzhLBvvUUu` z&%m8x8nY~EmvJhSOP*A%EDpit5hJFBh_(U_S=)vr-z2fU*+XYay5fG!lZcOEz?!0zCzJ_eeDQA majL6IaO$Wu$xVW7l4hePXRMR