Table of Contents Overview Pinouts • Power • TFT Display • ESP32-S3 WiFi Module • LC709203 Battery Monitor • BME280 Temperature, Humidity and Pressure Sensor • Logic Pins • NeoPixel and Red LED • STEMMA QT • Buttons • Debug...
Page 3
Entering the REPL • Interacting with the REPL • Returning to the Serial Console CircuitPython Libraries • The Adafruit Learn Guide Project Bundle • The Adafruit CircuitPython Library Bundle • Downloading the Adafruit CircuitPython Library Bundle • The CircuitPython Community Library Bundle •...
Page 4
• Copy Files on MacOS Without Creating Hidden Files • Other MacOS Space-Saving Tips • Device Locked Up or Boot Looping Welcome to the Community! • Adafruit Discord • CircuitPython.org • Adafruit GitHub • Adafruit Forums • Read the Docs...
Page 5
NeoPixel Color and Brightness • RGB LED Colors • NeoPixel Rainbow CircuitPython Internet Test • Secrets File Adafruit IO: Send and Receive Data • NeoPixel Location • Adafruit IO Feeds and Dashboard • Adafruit IO Example Secrets • Adafruit IO Example Code •...
Page 6
• Adafruit IO Setup • Code Usage WipperSnapper Setup • What is WipperSnapper • Sign up for Adafruit.io • Add a New Device to Adafruit IO • Feedback • Troubleshooting • "Uninstalling" WipperSnapper WipperSnapper Usage • Blink a LED •...
But we can provide your second-deepest desire: an ESP32-S3 Feather board with a built in IPS TFT color display. It's got all the delicious creamy goodness features of a Feather main board, the comforting warmth of an ESP32-S3 WiFi+BLE microcontroller, and the crispness of a 240x135 pixel color TFT display.
Page 10
Things (IoT) (), wearable electronics (), and smart homes. The BLE implementation in CircuitPython for the ESP32-S3 is still under development and has limitations. Currently, your program can act as a central, and connect to a peripheral. You can advertise, but you cannot create services.
Page 11
The Feather ESP32-S3 has a dual-core 240 MHz chip, so it is comparable to ESP32's dual-core. However, there is no Bluetooth Classic support, only Bluetooth LE. This chip is a great step up from the earlier ESP32-S2! This ESP32-S3 mini-module we are...
Page 12
TFT feather uses about 100uA of current. Features: • ESP32-S3 Dual Core 240MHz Tensilica processor - the next generation of ESP32-Sx, with native USB so it can act like a keyboard/mouse, MIDI device, disk drive, etc! •...
There are two ways you can power the Feather ESP32-S3, as well as other related pins. • USB-C port - This is used for both powering and programming the board. You can power it with any USB C cable. When USB is plugged in it will charge the LiPoly battery.
Things (IoT) (), wearable electronics (), and smart homes. The Feather ESP32-S3 has a dual-core 240 MHz chip, so it is comparable to ESP32's dual-core. However, there is no Bluetooth Classic support, only Bluetooth LE. This chip is a great step up from the earlier ESP32-S2! This ESP32-S3 mini-module we are using on the Feather comes with 4 MB flash and 2 MB PSRAM, as well as 512KB of...
(mAh of the battery, this helps tune the calculation) and read the voltage and percentage whenever you like. There is no pin on the Feather ESP32-S3 that returns battery voltage, but this I2C monitor makes it super simple to get that data! There is a power pin that must be pulled high for the sensor to work.
The ESP32-S3 TFT Feather comes with an unpopulated space for a BME280 Temperature, Humidity and Barometric Pressure Sensor. There is currently no BME280 sensor shipped on the ESP32-S3 TFT Feather - only a space for it! The sensor connects over I2C (at address 0x77), and provides immediate ambient weather sensing.
Page 20
The SPI pins are on the ESP32-S3 high-speed peripheral. You can set any pins to be the low-speed peripheral but you won't get the speedy interface! • SCK - This is the SPI clock pin. • MOSI - This is the SPI Microcontroller Out / Sensor In pin.
There are two buttons on the ESP32-S3 TFT Feather. • Reset button - This button restarts the board and helps enter the bootloader. You can click it once to reset the board without unplugging the USB cable or battery. Tap once, and then tap again while the NeoPixel status LED is purple to enter the UF2 bootloader (needed to load CircuitPython).
Page 24
• Light sleep: 2mA assuming all external hardware is de-powered • Deep sleep: 100uA assuming all external hardware is de-powered There are two power pins on the ESP32-S3 TFT Feather: , and TFT_I2C_POWER NEOPIXEL_POWER In CircuitPython and Arduino, both power pins are enabled by default, so if desired, y ou must disable them manually in your code to reach lower power modes.
Page 27
1 second pause at deep sleep. Power Draw for ESP32-S3 TFT Feather The following graphs show the power draw for the ESP32-S3 TFT Feather in normal power mode, light sleep mode, and deep sleep mode. Normal Power Mode The power draw, running normally (without WiFi), is 40mA.
3.2V or so before the protection circuitry cuts it off. By measuring the voltage you can quickly tell when you're heading below 3.7V. On the ESP32-S3 only, there is a problem with the I2C implementation in CircuitPython that causes the LC709203F to be unreadable. This issue is being tracked at https://github.com/adafruit/circuitpython/issues/6311.
Page 32
There is no pin on this board that returns battery voltage, but this I2C monitor makes it super simple to get that data! In Arduino, you can measure the battery voltage using the following script. // SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries // SPDX-License-Identifier: MIT // Adafruit Battery Monitor Demo // Checks for MAX17048 or LC709203F #include <Wire.h>...
Page 35
STEMMA QT and NeoPixel Power The ESP32-S3 TFT Feather is equipped with a STEMMA QT port and NeoPixel which are both connected to their own regulators. Unlike the one controlled by the ENable pin, these two are controlled by GPIO. They are enabled by default in CircuitPython and Arduino.
This section covers how to create and edit your first CircuitPython program. To create and edit code, all you'll need is an editor. There are many options. Adafruit strongly recommends using Mu! It's designed for CircuitPython, and it's really simple and easy to use, with a built in serial console! If you don't or can't use Mu, there are a number of other editors that work quite well.
CircuitPython Libraries As CircuitPython development continues and there are new releases, Adafruit will stop supporting older releases. Visit https://circuitpython.org/downloads to download the latest version of CircuitPython for your board. You must download the CircuitPython Library Bundle that matches your version of CircuitPython.
The Adafruit Learn Guide Project Bundle The quickest and easiest way to get going with a project from the Adafruit Learn System is by utilising the Project Bundle. Most guides now have a Download Project Bundle button available at the top of the full code example embed. This button downloads all the necessary files, including images, etc., to get the guide project up...
Library Bundle. The bundle contains all the files needed to use each library. Downloading the Adafruit CircuitPython Library Bundle You can download the latest Adafruit CircuitPython Library Bundle release by clicking the button below. The libraries are being constantly updated and improved, so you'll always want to download the latest bundle. ...
CircuitPython community. These libraries are often written when community members encountered hardware not supported in the Adafruit Bundle, or to support a personal project. The authors all chose to submit these libraries to the Community Bundle make them available to the community.
Page 74
The fourth and final section is About the Project. It includes further information including details on building, testing, and debugging CircuitPython, along with various other useful links including the Adafruit Community Code of Conduct. Whether you're a seasoned pro or new to electronics and programming, you'll find a...
CircuitPython Library Documentation The Adafruit CircuitPython libraries are documented in a very similar fashion. Each library has its own page on Read the Docs. There is a comprehensive list available e (). Otherwise, to view the documentation for a specific library, you can visit the GitHub repository for the library, and find the link in the README.
Page 78
You may be interested in something a little more practical. Here is an example. To use the LED Animation library Comet animation, you would run the following example. # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """...
This section is the same for every library. It includes a list of links to external sites, which you can visit for more information about the CircuitPython Project and Adafruit. That covers the CircuitPython library documentation! When you are ready to go...
Using Older Versions As CircuitPython development continues and there are new releases, Adafruit will stop supporting older releases. Visit https://circuitpython.org/downloads to download the latest version of CircuitPython for your board. You must download the CircuitPython Library Bundle that matches your version of CircuitPython.
Boards without long integer support are mostly SAMD21 ("M0") boards without an external flash chip, such as the Adafruit Gemma M0, Trinket M0, QT Py M0, and the Trinkey series. There are also a number of third-party boards in this category.
Are there other ways to communicate by radio with CircuitPython? Check out Adafruit's RFM boards ()for simple radio communication supported by CircuitPython, which can be used over distances of 100m to over a km, depending on the version. The RFM SAMD21 M0 boards can be used, but they were not designed for CircuitPython, and have limited RAM and flash space;...
As of CircuitPython 8.x we have started to support ESP32 and ESP32-C3 and have added a WiFi workflow for wireless coding! () We also support ESP32-S2 & ESP32-S3, which have native USB. Does Feather M0 support WINC1500? No, WINC1500 will not fit into the M0 flash space.
Page 97
I have to continue using CircuitPython 5.x or earlier. Where can I find compatible libraries? Adafruit is no longer building or supporting the CircuitPython 5.x or earlier library bundles. You are highly encourged to update CircuitPython to the latest version ()
Page 98
Windows 10 Did you install the Adafruit Windows Drivers package by mistake, or did you upgrade to Windows 10 with the driver package installed? You don't need to install this package on Windows 10 for most Adafruit boards. The old version (v1.5) can interfere with recognizing your device.
Page 99
You should now be done! Test by unplugging and replugging the board. You should see the CIRCUITPY drive, and when you double-click the reset button (single click on Circuit Playground Express running MakeCode), you should see the appropriate boar dnameBOOT drive. Let us know in the Adafruit support forums () or on the Adafruit Discord ()
Page 112
Finder because it will still create these hidden extended attribute files in some cases (for files downloaded from the internet, like Adafruit's modules). To copy a file or folder use the -X option for the cp command in a terminal. For example to copy a file_name.mpy file to the board use a command like:...
Page 116
Adafruit Discord The Adafruit Discord server is the best place to start. Discord is where the community comes together to volunteer and provide live support of all kinds. From general discussion to detailed problem solving, and everything in between, Discord is a digital maker space with makers from around the world.
Page 117
CircuitPython.org Beyond the Adafruit Learn System, which you are viewing right now, the best place to find information about CircuitPython is circuitpython.org (). Everything you need to get started with your new microcontroller and beyond is available. You can do things like download CircuitPython for your microcontroller ()
Page 118
GitHub pull requests, or PRs, are opened when folks have added something to an Adafruit CircuitPython library GitHub repo, and are asking for Adafruit to add, or merge, their changes into the main library code. For PRs to be merged, they must first be reviewed.
Page 121
Adafruit GitHub Whether you're just beginning or are life-long programmer who would like to contribute, there are ways for everyone to be a part of the CircuitPython project. The CircuitPython core is written in C. The libraries are written in Python. GitHub is the...
Page 122
You need an Adafruit account to post to the forums. You can use the same account you use to order from Adafruit.
Page 123
There are forum categories that cover all kinds of topics, including everything Adafruit. The Adafruit CircuitPython () category under "Supported Products & Projects" is the best place to post your CircuitPython questions. Be sure to include the steps you took to get to where you are. If it involves wiring,...
Page 125
±0.25°C over the sensor's -40°C to... https://www.adafruit.com/product/5027 Adafruit Mono 2.5W Class D Audio Amplifier - PAM8302 This super small mono amplifier is surprisingly powerful - able to deliver up to 2.5 Watts into 4-8 ohm impedance...
Page 126
Adafruit I2S Stereo Decoder - UDA1334A Breakout Discontinued - you can grab Adafruit I2S 3W Class D Amplifier Breakout - MAX98357A instead! This fully-featured... https://www.adafruit.com/product/3678 Premium Male/Male Jumper Wires - 20 x 6" (150mm) These Male/Male Jumper Wires are handy for making wire harnesses or jumpering between headers on PCB's.
Page 127
CircuitPython you're using and copy the contents of that directory to your CIRCUITPY drive. Your CIRCUITPY drive should now look similar to the following image: # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """CircuitPython Blink Example - the CircuitPython 'Hello, World!'"""...
Page 129
CircuitPython you're using and copy the contents of that directory to your CIRCUITPY drive. Your CIRCUITPY drive should now look similar to the following image: # SPDX-FileCopyrightText: 2022 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """...
Page 135
When you twist it to the right, the value gets bigger up to some value that is dependent on the microcontroller. Many microcontrollers get a value very close to 65535. Some, such as the ESP32-S3, have a smaller limit of about 61000 or 3.1 volts. The code is simple. You begin by importing three modules:...
Page 136
CircuitPython you're using and copy the contents of that directory to your CIRCUITPY drive. Your CIRCUITPY drive should now look similar to the following image: # SPDX-FileCopyrightText: 2022 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """...
Page 138
A NeoPixel is what Adafruit calls the WS281x family of addressable RGB LEDs. It contains three LEDs - a red one, a green one and a blue one - along side a driver chip in a tiny package controlled by a single pin. They can be used individually (as in the built-in LED on your board), or chained together in strips or other creative form factors.
Page 139
# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """CircuitPython status NeoPixel red, green, blue example.""" import time import board import neopixel pixel = neopixel.NeoPixel(board.NEOPIXEL, 1) pixel.brightness = 0.3 while True: pixel.fill((255, 0, 0)) time.sleep(0.5) pixel.fill((0, 255, 0)) time.sleep(0.5)
Page 141
CircuitPython you're using and copy the contents of that directory to your CIRCUITPY drive. Your CIRCUITPY drive should now look similar to the following image: # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """CircuitPython status NeoPixel rainbow example."""...
Page 143
Project Bundle button below to download the necessary libraries and the code.py file in a zip file. Extract the contents of the zip file, and copy the entire lib folder and the code.py file to your CIRCUITPY drive. # SPDX-FileCopyrightText: 2020 Brent Rubell for Adafruit Industries # SPDX-License-Identifier: MIT import ipaddress...
Page 144
The initial secrets.py file on your CIRCUITPY drive should look like this: # SPDX-FileCopyrightText: 2020 Adafruit Industries # SPDX-License-Identifier: Unlicense # This file is where you keep secret settings, passwords, and tokens!
Page 148
"random" number generator and sends the "random" number to Adafruit IO, while simultaneously listening for NeoPixel color data from Adafruit IO. NeoPixel Location The NeoPixel LED (highlighted in green), labeled Neo on the silk, is located near the top left corner of the Feather.
Adafruit IO Example Code To run this example, you need to first install the NeoPixel, Adafruit IO, and Adafruit MiniMQTT libraries into the lib folder on your CIRCUITPY drive. Then you need to update code.py with the example script.
Page 152
Adafruit IO...") io.connect() # Explicitly pump the message loop. io.loop() # Obtain the "random" value, print it and publish it to Adafruit IO every 10 seconds. if (time.monotonic() - timestamp) >= 10: random_number = "{}".format(randint(0, 255)) print("Current 'random' number: {}".format(random_number)) io.publish("random", random_number)
NeoPixel Color Change To change the color of the NeoPixel, go to the NeoPixel Adafruit IO dashboard you created at the beginning, and click on the colored circle in the ColorPicker block. It will bring up the following.
Page 154
These are included where the except code is likely to fail due to WiFi or Adafruit IO connection failures. WiFi can be finicky, and without these code blocks, if the connection was lost, the code would crash. Instead, it is designed to reset the board and start the code over again to reestablish the connection, regardless of the cause.
ImportError: print("WiFi and Adafruit IO credentials are kept in secrets.py - please add them there!") raise Note that if a secrets.py file is not present on your CIRCUITPY drive, the code will fail to run, and you will receive an error in the serial console. Add a secrets.py file to your CIRCUITPY drive to resolve this error.
Page 156
If the MQTT broker connection is not successful, the error is printed to the serial console, and the board will hard reset after 30 seconds. except Exception as e: print("Failed to connect to Adafruit IO. Error:", e, "\nBoard will hard reset in 30 seconds.") time.sleep(30) microcontroller.reset()
Page 157
'random' number: {}".format(random_number)) io.publish("random", random_number) timestamp = time.monotonic() If at any time WiFi or Adafruit IO disconnects, the code will print the error to the serial console, and the board will hard reset after 30 seconds. [...] except Exception as e: print("Failed to get or send data, or connect.
Page 158
This means you can have many different sensors and devices all connected to the same two pins. Both I2C connections require pull-up resistors, and most Adafruit I2C sensors and breakouts have pull-up resistors built in. If you're using one that does not, you'll need to add your own 2.2-10kΩ...
Page 160
The ESP32-S3 TFT Feather comes with one I2C sensor built in. The I2C scan code will show the addresses from the built in sensor and the MCP9808.
Page 162
{:.2f} C {:.2f} F ".format(temperature_celsius, temperature_fahrenheit)) time.sleep(2) For the ESP32-S3 TFT Feather, you'll need to change the I2C setup to the commented out setup included in the code above. The ESP32-S3 TFT Feather STEMMA QT connector is available on board.STEMMA_I2...
Page 163
CircuitPython version, and copy the matching code.py file to your CIRCUITPY drive. Your CIRCUITPY drive should now look similar to the following image: # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """CircuitPython I2C possible pin-pair identifying script"""...
Page 166
The boot.py File The filesystem will NOT automatically be set to read-only on creation of this file! You'll still be able to edit files on CIRCUITPY after saving this boot.py. # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """...
Page 167
CircuitPython you're using and copy the contents of that directory to your CIRCUITPY drive. Your CIRCUITPY drive should now look similar to the following image: # SPDX-FileCopyrightText: 2022 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """...
Page 169
For the ESP32-S3 TFT Feather, the button-press timing is a little different. Press it when the NeoPixel LED turns white! For the ESP32-S3 TFT Feather, it's difficult to get the timing right for when to press the boot button. So, the boot.py file includes turning the NeoPixel on bright white for one second.
Page 173
Your CIRCUITPY drive should now look similar to the following image: Then, connect to the serial console (). # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """ CircuitPython Capacitive Two Touch Pin Example - Print to the serial console when a pin is touched.
Page 176
Adafruit I2S 3W Class D Amplifier Breakout - MAX98357A Listen to this good news - we now have an all in one digital audio amp breakout board that works incredibly well with the https://www.adafruit.com/product/3006 Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm Listen up! This single ...
Page 177
CircuitPython version, and copy the code.py file to your CIRCUITPY drive. Your CIRCUITPY drive should now look similar to the following image: # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """ CircuitPython I2S Tone playback example.
Page 179
# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """ CircuitPython I2S WAV file playback. Plays a WAV file once. """ import audiocore import board import audiobusio audio = audiobusio.I2SOut(board.A0, board.A1, board.A2) with open("StreetChicken.wav", "rb") as wave_file: wav = audiocore.WaveFile(wave_file) print("Playing wav file!")
Page 180
This file runs only once, so if you do not see anything in the output, press CTRL+D to reload and run the code again. # SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """...
Page 183
Extract the contents of the zip file, and copy the entire lib folder and the c ode.py file to your CIRCUITPY drive. # SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries # SPDX-FileCopyrightText: Copyright (c) 2022 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT """...
Page 190
URLs is comma separated, and you will only have to add each URL once. New Adafruit boards and updates to existing boards will automatically be picked up by the Board Manager each time it is opened. The URLs point to index files that the Board Manager uses to build the list of available &...
Page 191
If you have multiple boards you want to support, say ESP8266 and Adafruit, have both URLs in the text box separated by a comma (,) Once done click OK to save the new preference settings. The next step is to actually install the Board Support Package (BSP). Go to the Tools →...
Page 192
Select ESP32-S2/S3 Board in Arduino IDE On the Arduino IDE, click: Tools -> Board -> ESP32 Arduino -> Your Adafruit ESP32-S2/S3 board The screenshot shows Metro S2 but you may have a different board. Make sure the name matches the exact product you purchased.
Page 196
Connect the board to your computer. If your board has a power LED, make sure its lit. Is there a power switch? Make sure its turned On! The ESP32-S3 TFT Feather does not have a power LED or a power switch. No special drivers are required to connect to this board! Start up Arduino IDE and Select Board/Port OK now you are prepared! Open the Arduino IDE on your computer.
Page 205
(Only exception is if you're using an active bus extender ()). The ESP32-S3 Feather has an I2C device built in - the LC709203 battery monitor at address 0x0B. It also has a STEMMA QT connector that shares SCL/SDA with the associated pins available as through-hole pads along the top edge of the board.
Page 206
{ Serial.begin(115200); // Wait for Serial port to open while (!Serial) { delay(10); delay(500); Serial.println("Adafruit I2C Scanner"); #if defined(ARDUINO_ADAFRUIT_QTPY_ESP32S2) || \ defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_NOPSRAM) || \ defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3) || \ defined(ARDUINO_ADAFRUIT_QTPY_ESP32_PICO) // ESP32 is kinda odd in that secondary ports must be manually // assigned their pins with setPins()! Wire1.setPins(SDA1, SCL1);...
Page 207
The first thing you'll want to do is get the sensor connected so your board has I2C to talk to. Adafruit MCP9808 High Accuracy I2C Temperature Sensor Breakout The MCP9808 digital temperature sensor is one of the more accurate/precise we've ever seen, with a typical accuracy of ±0.25°C over the sensor's -40°C to...
Page 208
The LC709203 is available over I2C. The sensor comes with its own Adafruit CircuitPython library that makes it simple to write code to read data from it. This example will be using, among other things, the dafruit LC709203F ()
Page 210
LC709203 Simple Data Example Click File > Examples > Adafruit LC709203F > LC709203F_demo to open the example. #include "Adafruit_LC709203F.h" Adafruit_LC709203F lc; void setup() { Serial.begin(115200); delay(10); Serial.println("\nAdafruit LC709203F demo"); // For the Feather ESP32-S2, we need to enable I2C power first!
Page 211
Thanksfully if you have ESP32 sketches, they'll 'just work' with variations of ESP32. You can find a wide range of examples in the File->Examples->Examples for Adafruit Metro ESP32-S2 subheading (the name of the board may vary so it could be "Example s for Adafruit Feather ESP32 V2"...
Page 213
WiFi Connection Test Now that you can scan networks around you, its time to connect to the Internet! Copy the example below and paste it into the Arduino IDE: // SPDX-FileCopyrightText: 2020 Brent Rubell for Adafruit Industries // SPDX-License-Identifier: MIT Web client This sketch connects to a website (wifitest.adafruit.com/testwifi/index.html)
Page 215
WiFi connection to connect to the Twitter API. Copy and paste it into the Arduino IDE: // SPDX-FileCopyrightText: 2015 Arturo Guadalupi // SPDX-FileCopyrightText: 2020 Brent Rubell for Adafruit Industries // SPDX-License-Identifier: MIT This example creates a client object that connects and transfers data using always SSL.
Page 218
Arduino IDE. // SPDX-FileCopyrightText: 2014 Benoit Blanchon // SPDX-FileCopyrightText: 2014 Arturo Guadalupi // SPDX-FileCopyrightText: 2020 Brent Rubell for Adafruit Industries // SPDX-License-Identifier: MIT This example creates a client object that connects and transfers data using always SSL, then shows how to parse a JSON document in an HTTP response.
Page 224
Adafruit IO Setup If you do not already have an Adafruit IO account, create one now (). Next, navigate to the Adafruit IO Dashboards page. We'll create a dashboard to visualize and interact with the data being sent between your ESP32-S2/S3 board and Adafruit IO. ...
Page 225
We'll want to turn the board's LED on or off from Adafruit IO. To do this, we'll need to add a toggle button to our dashboard. Click the cog at the top right hand corner of your dashboard. In the dashboard settings dropdown, click Create New Block.
Page 226
Change Button Off Text to 0 Click Create block Next up, we'll want to display button press data from your board on Adafruit IO. To do this, we'll add a gauge block to the Adafruit IO dashboard. A gauge is a read only block type that shows a fixed range of values.
Page 228
Code Usage For this example, you will need to open the adafruitio_26_led_btn example included with the Adafruit IO Arduino library. In the Arduino IDE, navigate to File -> Examples -> Adafruit IO Arduino -> adafruitio_26_led_btn. Before uploading this code to the ESP32-S2/S3, you'll need to add your network and Adafruit IO credentials.
Page 229
Click the Upload button to upload your sketch to the ESP32-S2/S3. After uploading, pr ess the RESET button on your board to launch the sketch. Open the Arduino Serial monitor and navigate to the Adafruit IO dashboard you created. You should see the gauge response to button press and the board's LED light up in response to the Toggle Switch block.
Page 230
Simply load the WipperSnapper firmware onto your board, add credentials, and plug it into power. Your board will automatically register itself with your Adafruit IO account. From there, you can add components to your board such as buttons, switches, potentiometers, sensors, and more! Components are dynamically added to hardware,...
Page 231
Sign up for Adafruit.io You will need an Adafruit IO account to use WipperSnapper on your board. If you do not already have one, head over to io.adafruit.com () to create a free account. Add a New Device to Adafruit IO Log into your Adafruit IO ()
Page 232
Follow the step-by-step instructions on the page to install Wippersnapper on your device and connect it to Adafruit IO. If the installation was successful, a popover should appear displaying that your board has successfully been detected by Adafruit IO. Give your board a name and click "Continue to Device Page".
Page 233
Next, Visit this guide's WipperSnapper Essentials pages to learn how to interact with your board using Adafruit IO. Feedback Adafruit.io WipperSnapper is in beta and you can help improve it! If you have suggestions or general feedback about the installation process - visit http s://io.adafruit.com/support (), click "Contact Adafruit IO Support"...
Page 236
(or off) the LED built into your Feather from anywhere in the world. In this demo, we show controlling an LED from Adafruit IO. But the same kind of control can be used for relays, lights, motors, or solenoids.
Page 237
Verify that your Feather is online and ready to communicate with Adafruit IO by checking that the device tile says Online in green text. • If the Feather appears offline on the website but was previously connected, press the Reset (RST) button to force the board to reboot.
Page 238
LED on your Feather as a digital output so you can turn the LED on or off. The ESP32-S3 TFT Feather has a built-in LED located at D13 (LED). Select this pin as the LED Pin and click Create Component.
Page 239
Adafruit IO. Let's wire up a push button to your Feather and configure it with Adafruit IO to publish a value to Adafruit IO when the button has been pressed or depressed. ...
Page 241
The wiring above uses pin D11. The Return Interval dictates how frequently the value of the push-button will be sent from the Feather to Adafruit IO. For this example, the push-button's value should only be sent when it's pressed. Select On Change ...
Page 244
"devices" to a microcontroller. A large number of sensors, including the ones sold by Adafruit, use I2C to communicate. Typically, using I2C with a microcontroller involves programming. Adafruit IO lets you configure a microcontroller to read data from an I2C sensor and publish that data to the internet without writing code.
Page 246
First, double-check the connection and/or wiring between the sensor and the board. Then, reset the board and let it re-connect to Adafruit IO WipperSnapper. Create the Sensor Component Now that you know the sensor can be detected by the Feather, it's time to configure and create the sensor on Adafruit IO.
Page 247
Feather how often it should read from the AHT20 sensor and send the data to Adafruit IO. Measurements can range from every 30 seconds to every 24 hours. For this example, set the Send Every interval for both seconds to Every 30 seconds and click Create Component.
Page 248
The board page should now show the AHT20 component you created. After the interval you configured elapses, WipperSnapper automatically reads values from the sensor and sends them to Adafruit IO. Going Further Want to learn more about Adafruit IO WipperSnapper? We have more complex projects on the Adafruit Learning System ().
Page 249
You're probably used to seeing the FTHRS3BOOT drive when loading CircuitPython or Arduino. The FTHRS3BOOT drive is part of the UF2 bootloader, and allows you to drag and drop files, such as CircuitPython. However, on the ESP32-S3 the UF2 bootloader can become damaged.
Page 250
Note that this file is approximately 3MB. This is not because the bootloader is 3MB, it is because the bootloader is near the end of the available flash. Most of the file is empty but its easier to program if you use a combined file. Click to download adafruit-esp32- s3-feather-tft-factory-reset-and- bootloader.bin Step 2.
Page 257
Now that you've reprogrammed the board, you need to reset it to continue. Click the reset button to launch the new firmware. The TFT display will show "Adafruit Feather" in red, "ESP32-S3 TFT Demo" in yellow, the battery stats (if a battery is plugged in) and the I2C device addresses for any I2C devices present.
Page 259
Load the Blink Sketch In the Tools > Boards menu you should see the ESP32 Arduino menu. In the expanded menu, look for the menu option for the Adafruit Feather ESP32-S3 TFT, and click on it to choose it. Open the Blink sketch by clicking through File > Examples > 01.Basics > Blink.
Page 260
Try to enter the UF2 bootloader before continuing! Double-tap the reset button to do so. The ESP32-S3 TFT Feather ships with a UF2 bootloader which allows the board to show up as FTHRS3BOOT when you double-tap the reset button, and enables you to drag and drop UF2 files to update the firmware.
Need help?
Do you have a question about the ESP32-S3 and is the answer not in the manual?
Questions and answers