How about nah?

Using the web can be incredibly distracting, or even outright dangerous thanks to ever-present advertisments and trackers. In this EFF article by friend-of-the-Fruit Cory Doctorow, the problem and solution are spelled out thusly:

As the online world has grown more concentrated, with more and more power in fewer and fewer hands, it's become increasingly difficult for Web publishers to resist advertisers' insistence on obnoxious tracking ads.

But Internet users have never been willing to accept take-it-or-leave-it as the last word in technological self-determination. Adblockers are the new pop-up blockers, a way for users to do what publishers can't or won't do: demand a better deal from advertisers. When you visit a site, the deal on offer is, "Let us and everyone we do business with track you in every way possible or get lost" and users who install adblockers push back. An adblocker is a way of replying to advertisers and publishers with a loud-and-clear "How about nah?"

One solution is to say 'nah' with a Rapsberry Pi-based PiHole -- these work great, and are very fully featured, but can be a bit involved to set up, and we're currently in the middle of an RPi shortage. 

Here we offer a simpler, more readily available solution, the ESP32-S2-based ESPHole ad blocker, based on this terrific project by rubfi.

Our version has been customized for the TFT Feather ESP32-S2, so that you can see relevant info about connection, IP address, and the satisfying Nahs! count.


Adafruit ESP32-S2 TFT Feather powered on by a USB- C power source displaying the product tittle in a red, yellow, green, white and blue.
We've got a new machine here at Adafruit, it can uncover your deepest desires. Don't believe me? I'll turn it on right now to prove it to you! What, you want unlimited...
In Stock
USB Type A to Type C Cable - approx 1 meter / 3 ft long
As technology changes and adapts, so does Adafruit. This  USB Type A to Type C cable will help you with the transition to USB C, even if you're still...
In Stock

We've created a drag-and-drop UF2 file to make it easy to get your ESPHole up and running right away. If you'd like to tweak the code and upload via Arduino IDE, check out the source code here.

While the actual code you'll run is a compiled Arduino sketch, first, you will put CircuitPython on the Feather in order to create a file system accessible as a USB drive. This way, you can add the secrets.json file with login information for the local router. The firmware doesn't have the WiFi access point data, instead it's separated out into a json file that can be easily modified.

Then, you'll drag on the UF2 file of the compiled Arduino code. (Download link below).

Create Filesystem, Add Files

  1. Plug in Feather to your computer with a known good data cable.
  2. Double-click the Feather board reset button to get to bring up the bootloader FTHRS2BOOT drive in your computer File Explorer/Finder.
  3. Download the latest release version of CircuitPython for this board.
  4. Drag the CircuitPython .uf2 file onto FTHRS2BOOT drive (more info here).
  5. After a moment CIRCUITPY drive will show up
  6. Copy the secrets.json code below, paste it into a text editor on your computer and edit it to use your SSID and password for your WiFi router, then save the file to the CIRCUITPY drive.
  7. Next, download the pre-compiled ESPHole UF2 file linked below.
  8. Double-click the Feather board reset button to get to the bootloader AGAIN.
  9. Drag the UF2 onto the FTHRS2BOOT drive to flash it with the ESPHole code.
    'ssid' : 'YOUR_WIFI_SSID',
    'password' : 'YOUR_WIFI_PASSWORD',
    'hostname' : 'esphole',
    'hostfile' : ''

A case is recommended and a 3D printed case is very nice. Below are the steps to 3D print the case used.

Download the 3D files from the link below. You can then print them without support on your 3D printer. Some horizontal expansion settings may need to be tuned for the best snap fit action.

Slice with settings for PLA material. The parts were sliced using CURA using the slice settings below.

  • PLA filament 220c extruder
  • 0.2 layer height
  • 10% gyroid infill
  • 60mm/s print speed
  • 60c heated bed

Now to set up ESPHole to block ads for your devices.

To use the ESPHole to tell advertisers "Nah!", you'll set the DNS (Domain Name Server) to the IP address listed on the ESPHole. In this case

In the example shown below, I've gone to my iPad's:

  • Settings > WiFi
  • Click the SSID name
  • DNS > Configure DNS
  • Manual
  • Press + Add Server
  • Type in the ESPHole IP address as listed on the screen of the Feather TFT (
  • Press - and then Delete to remove any existing DNS server such as
  • Save

Here you can see a split screen of the Automatic DNS settings (default) which allow a big banner ad to distract from a web site.

With the ESPHole on and the iOS device configured to use it as DNS server, you can see the nice, clean content of the website. Hey banner ad, Nah!

These same directions will work on other iOS devices such as iPhones, and you can do similar setups for your computers and other mobile operating systems.

Happy uncluttered web browsing to you!

Here's how to configure an Android device to use the ESPHole -- it's a little more complicated than on iOS, but not too tricky!

First, go to Android Settings > Connections

Click Wi-Fi

Click the gear icon next to the SSID name of your network

Click Advanced

Change from DNS to Static

In Static IP Settings, change the DNS 1 to the IP address of the ESPHole that is shown on the TFT display.

Then, press Save

That's it! Now, visit a website and watch the ads and other critters disappear.



This guide was first published on Apr 27, 2022. It was last updated on Mar 08, 2024.