https://blog.adafruit.com/2020/01/10/testing-circuitpython-on-teensy-4-0-iot-made-easy-ioteensy-adafruit-circuitpython-arturo182-tannewt-nxp-paulstoffregen/
CircuitPython 已经移植到 Teensy 4.0
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
import adafruit_ssd1306
print("ESP32 SPI webclient test")
JSON_URL = "https://www.adafruit.com/api/quotes.php"
i2c = busio.I2C(board.SCL, board.SDA, frequency=100000)
display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
# If you have an externally connected ESP32:
esp32_cs = DigitalInOut(board.D5)
esp32_reset = DigitalInOut(board.D6)
esp32_ready = DigitalInOut(board.D9)
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")
print("Firmware vers.", esp.firmware_version)
print("MAC addr:", [hex(i) for i in esp.MAC_address])
display.fill(0)
display.text("Found ESP32", 0, 0, 1)
display.show()
for ap in esp.scan_networks():
print("\t%s\t\tRSSI: %d" % (str(ap['ssid'], 'utf-8'), ap['rssi']))
print("Connecting to AP...")
display.text("Connecting to AP", 0, 8, 1)
display.show()
while not esp.is_connected:
try:
esp.connect_AP(b'adafruit', b'ffffffff')
except RuntimeError as e:
print("could not connect to AP, retrying: ",e)
continue
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"))
display.text("Connected: "+str(esp.ssid, 'utf-8'), 0, 16, 1)
display.text("IP: "+esp.pretty_ip(esp.ip_address), 0, 24, 1)
display.show()
def wrap_nicely(string, max_chars):
"""A helper that will return a list of lines with word-break wrapping.
:param str string: The text to be wrapped.
:param int max_chars: The maximum number of characters on a line before wrapping.
"""
string = string.replace('\n', '').replace('\r', '') # strip confusing newlines
words = string.split(' ')
the_lines = []
the_line = ""
for w in words:
if len(the_line+' '+w) <= max_chars:
the_line += ' '+w
else:
the_lines.append(the_line)
the_line = ''+w
if the_line: # last line remaining
the_lines.append(the_line)
# remove first space from first line:
the_lines[0] = the_lines[0][1:]
return the_lines
while True:
print()
print("Fetching json from", JSON_URL)
r = requests.get(JSON_URL)
j = r.json()
print('-'*40)
print(j)
print('-'*40)
quote = j[0]['text']
author = j[0]['author']
r.close()
display.fill(0)
lines = wrap_nicely(quote, 21)
lines.append(" ")
lines.append(author)
print(lines)
for i, line in enumerate(lines[:-2]):
display.fill(0)
display.text(line, 0, 0, 1)
if len(lines) > i+1:
display.text(lines[i+1], 0, 8, 1)
if len(lines) > i+2:
display.text(lines[i+2], 0, 16, 1)
if len(lines) > i+3:
display.text(lines[i+3], 0, 24, 1)
display.show()
time.sleep(0.5)
time.sleep(3)
print("Done!")
|