Now that you're connected, you will probably want to get data from the Internet! Here's a demo showing how you can get data from the web via a URL.
The ESP supports SSL, so if you want to use secure connections, start the URL with https://.
Update your SSID and password and try it out!
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import time
import adafruit_connection_manager
import adafruit_requests
import board
import busio
from digitalio import DigitalInOut, Direction
import adafruit_espatcontrol.adafruit_espatcontrol_socket as pool
from adafruit_espatcontrol import adafruit_espatcontrol
# Get wifi details and more from a secrets.py file
try:
from secrets import secrets
except ImportError:
print("WiFi secrets are kept in secrets.py, please add them there!")
raise
# Debug Level
# Change the Debug Flag if you have issues with AT commands
debugflag = False
# How long between queries
TIME_BETWEEN_QUERY = 60 # in seconds
if board.board_id == "challenger_rp2040_wifi":
RX = board.ESP_RX
TX = board.ESP_TX
resetpin = DigitalInOut(board.WIFI_RESET)
rtspin = False
uart = busio.UART(TX, RX, baudrate=11520, receiver_buffer_size=2048)
esp_boot = DigitalInOut(board.WIFI_MODE)
esp_boot.direction = Direction.OUTPUT
esp_boot.value = True
status_light = None
else:
RX = board.ESP_TX
TX = board.ESP_RX
resetpin = DigitalInOut(board.ESP_WIFI_EN)
rtspin = DigitalInOut(board.ESP_CTS)
uart = busio.UART(TX, RX, timeout=0.1)
esp_boot = DigitalInOut(board.ESP_BOOT_MODE)
esp_boot.direction = Direction.OUTPUT
esp_boot.value = True
status_light = None
print("ESP AT commands")
esp = adafruit_espatcontrol.ESP_ATcontrol(
uart, 115200, reset_pin=resetpin, rts_pin=rtspin, debug=debugflag
)
URL = "http://wifitest.adafruit.com/testwifi/index.html"
print("ESP AT GET URL", URL)
print("Resetting ESP module")
esp.hard_reset()
ssl_context = adafruit_connection_manager.create_fake_ssl_context(pool, esp)
requests = adafruit_requests.Session(pool, ssl_context)
while True:
try:
print("Checking connection...")
while not esp.is_connected:
print("Connecting...")
esp.connect(secrets)
# great, lets get the data
print("Retrieving URL...", end="")
r = requests.get(URL)
print("Status:", r.status_code)
print("Content type:", r.headers["content-type"])
print("Content size:", r.headers["content-length"])
print("Encoding:", r.encoding)
print("Text:", r.text)
print(f"Sleeping for: {TIME_BETWEEN_QUERY} Seconds")
time.sleep(TIME_BETWEEN_QUERY)
except (ValueError, RuntimeError, adafruit_espatcontrol.OKError) as e:
print("Failed to get data, retrying\n", e)
continue
While we work on the library, you may notice it takes a lot of retries to get going. Did we mention parsing AT commands isn't the most fun way to communicate with the Internet? However, it will eventually work and usually once it starts working, it will keep up.
Notice that we add loops and try: except: blocks to catch failures and automatically retry our commands, this is essential for any network project due to the inconsistencies/reliability issues you will experience. That's true even for Ethernet!
Page last edited January 22, 2025
Text editor powered by tinymce.