Comments: ESP32 Thing Hookup Guide


Looking for answers to technical questions?

We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.

  • Member #867404 / about 8 years ago / 4

    One thing the article did not mention is that to upload the code in the Adruino IDE you need to press and hold the 0 button. You need to press it before hitting the Upload button and keep it help down until starts to run (i.e. the orange code comes up)

    If you don't do this you may get one of these errors: A fatal error occurred: Failed to connect to ESP32: Invalid head of packet A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

    • Member #1520986 / about 5 years ago / 1

      I'm still getting the same error even if I hold down the 0 button - any ideas on what to do ?

      • santaimpersonator / about 5 years ago / 1

        Hi there, it sounds like you are looking for technical assistance. Please use the link in the banner above, to get started with posting a topic in our forums. Our technical support team will do their best to assist you.

        That being said, if I remember correctly... you have to press both the reset and 0 buttons to force the ESP32 into the bootloader (if you are having upload issues). Also, there are some good tips in this comment below.

  • -------------------- Tech Support Tips/Troubleshooting/Common Issues --------------------

    ESP32 Board Definitions

    Installing the board definitions of the ESP32 is not as trivial as using the Arduino board manager. Make sure that you install the ESP32 Arduino core definitions correctly or you might see this error:

    exec: "C:\\Users\\...\\Documents\\Arduino\\hardware\\espressif\\esp32/tools/xtensa-esp32-elf/bin/xtensa-esp32-elf-g++": file does not exist
    Error compiling for board ESP32 Dev Module.

    After going through the installation 4 times from these directions [ ] because the Xtensa and ESP32 Tools were not in the correct folder. I was able to compile and upload to the board once it was installed correctly. You can also follow the directions from our tutorial [ ], just make sure that all the files are installed correctly.

    Upload Error

    If you see this error when uploading: v2.0-dev
    A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

    , try holding the pin 0 LOW by pressing down on the button. Doing a test on Arduino IDE v1.6.5 and v1.6.11, I was not able to upload code unless I hold the button down when the IDE was uploading code. Looking into the Eagle files, it looks like he might have already considered using the DTR from the FTDI to reset the ESP32 to upload. Based on previous experience with the esp-type IC's, it's possible that there is something in the ESP32 Arduino Core's board add-on files preventing the ESP32 from automatically resetting when DTR toggles the pin.

    From what I can see in the ESP32 repository's issues [ ], people that had similar errors were able to upload when GPIO0 was held low (i.e. pressing button 0 down). I am not sure what ESP32 development board was used in the issue reported.

    ESP32 Resetting when Serial Monitor Closed

    This sounds normal. Just like any Arduino connected to the Arduino IDE's, the Arduino resets when you initialize the serial monitor. For the ESP32, it sounds like it might be doing the same thing when the serial monitor is closed. There might be some serial data being sent to the ESP32 that tells it that the serial monitor is closing and it is probably resetting as a result. Doing a quick test with our known good, I am seeing the same behavior. I am not sure how to avoid this.

  • Member #231777 / about 7 years ago / 2

    Power consumption lower than 2mA, is it possible ? I did cut the trace for the PWR led, did try any combination of (slow/fast mem) : esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); with gpio pin wake, seems to work but only down to 2 mA (2.5mA if Vbat is used, instead of V33). Also changed, the bat. charge current limiting Resistor to 10K.

    my code:

    • TeeVeeEee / about 6 years ago / 1

      I'm also very disappointed about the battery power consumption. Looked like a well-thought out board from the schematic but the reality is that deep sleep chews 900uA (after having cut the power LED trace). That's very disappointing. I modded an Adafruit Huzzah32 to put the usb-serial chip into suspend mode and it "only" uses 200-250uA in comparison (identical firmware image), which isn't that great either but a whole lot better. Is it the FT231XS that is using all that power?? Are there some tricks one has to know to get the deep sleep power consumption down?

      • TeeVeeEee / about 6 years ago / 1

        I eventually figured it out... The power consumption comes from the fact that by default the flash chip is not powered down and its chip select ends up floating. The fix is to switch the jumper SJ3 in the back of the board from its default 3.3V power to the flash chip to "flash vdd", which is an output of the esp32. That brings the power consumption down to 63uA, which is 14x better than before! Most of these 63uA are due to the CP2112 power regulator, which has a typical quiescent current of 55uA according to the datasheet. I wish sparkfun had used a better regulator...

  • Member #587429 / about 8 years ago / 2

    I'm a little confused about pins 36-39. Can they still be used as analog inputs, even though they are connected to the caps? Do I need to cut the trace to use them as inputs?

  • thewizster / about 8 years ago / 2

    I get ">>> Client Timeout !" when running the Wifi example.

    1) It is connecting to the internet. I've double checked this. 2) Output says Connected! and then after a brief pause shows the timeout message. 3) I've tried increasing the timeout to 15 seconds

    Any ideas?

    The exact output is:

    WiFi connected!
    IP address:
    Press button 0 to connect to
    Connecting to domain:
    [E][WiFiClient.cpp:196] available(): 88
    >>> Client Timeout !

  • Yashc / about 8 years ago / 2

    I see the serial module error too, and I do have pyserial installed. And I am able to import serial in my other python programs that I'm running from the terminal. Any suggestions?

    • Member #859570 / about 8 years ago * / 2

      I am also experiencing this issue. Fresh install of Python 2.7 and fresh install of the board on Mac running El Capitan

      Error Message from Arduino: Arduino: 1.6.12 (Mac OS X), Board: "ESP32 Dev Module, 80MHz, 921600"

      Traceback (most recent call last): File "/Users/LisaSemidey/Documents/Arduino/hardware/espressif/esp32/tools/", line 25, in <module> import serial ImportError: No module named serial exit status 1 Error compiling for board ESP32 Dev Module.

      This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.

      • Yashc / about 8 years ago / 1

        Member #859570, Did you have pyserial installed? I find that the most common solution to this problem is not having pyserial installed. However, I do have it installed and it works with python when I import it in the terminal.

        • Member #859570 / about 8 years ago / 2

          I do have pyserial installed.

          • Yashc / about 8 years ago / 1

            Hi Member #859570, As I had guessed, I had two versions of python installed on my machine and the Arduino compiler was calling the wrong one. Look at this thread for a possible solution (I'm still trying to point the compiler to the right version, but let me know if you manage to do that.):

  • Member #65628 / about 8 years ago / 2

    If you are having difficulty getting Blink t compile with a fresh install of Python 2.7 and the Arduino IDE, with a "'serial' module not found' error or similar, try installing 'pyserial'. If the installer hits a wall because it cannot locate a registry entry for your Python version, try this:

  • Member #23684 / about 3 years ago / 1

    It seems, that I got a board, where the capacitor C28 was not soldered. I had very bad response times with the webserver example programs and also the asynchronous webserver examples. (Reponse times of 20 seconds and more and inability to connect to local AP). As soon as I soldered a capacitor to the spot of C28, the problems where gone and the responses always under a second.

    In the product images on Sparkfun, it looks like C28 (and maybe L1 as well) are not in place, like on my board.

    But still: A great little board for the ESP32.

    • Wow. I just lost a long post because I had to verify my email. Short version. Thank you member #23684 for this post. I wasted a month trying to 'fix' the connectiviy on an ESP32 Thing and after stealing a 5.4pf cap off another board it works like a champ. Why the 'f' isn't that cap stuffed in the first place?

  • Member #691310 / about 4 years ago / 1

    Are the WiFi examples in the hookup guide obsolete? Has anyone gotten them to work lately?

    • santaimpersonator / about 4 years ago / 1

      I haven't tested the WiFi scanner recently. However, it should be noted that the ESP32 can only connect to 2.4GHz signals. Therefore, you will not be able to detect 5GHz networks (used by most modern routers).

  • Member #1492654 / about 5 years ago / 1

    messing around a half year with this board. using BLE and a capacitive moisture sensor to measure and send values in two our interval (BLE notification) - then deep sleep (hibernation state). With two 2500 mAh batteries and this setup the board works 1 week. I don't know whats wrong.

  • Member #1513232 / about 5 years ago / 1

    I notice on the pinout diagram that both pin 2 and 21 (as marked on the board) are both labeled as GPIO21. Is this a typo?

  • Billbo911 / about 5 years ago * / 1

    I loaded the esp32 Thing with MicroPython because, well, I could. Besides, I wanted to see what that environment looks like. After tinkering around for a while, I realized that MicroPython doesn't support BLE yet. And, as usual, I will be using this "Thing" in an environment where I can't use WiFi, but BlueTooth or BLE are just fine. I see BLE is supported in Arduino, so here is the question:

    How can I get the Arduino Bootloader back on this board?

    • Billbo911 / about 5 years ago / 1

      NEVERMIND!! It's MUCH simpler than that. I just simply selected the Sparkfun ESP32 Thing as the board, selected the port and uploaded the Blink sketch. That's it. No special bootloader needed.

  • Member #1452638 / about 5 years ago / 1

    I'm having trouble downloading the Arduino Core GitHub repository from Espressif as well as installing the FTDI drivers.

    FTDI Driver problem: I am trying to install the FTDI drivers for use with the Sparkfun ESP32 Thing. In the in-depth tutorial for Windows, it says that the FTDI device should show up on your device manager when plugged in, and you select it to update the drivers from the folders where you downloaded them to. My Sparkfun ESP32 thing does not show up on my device manager so I'm not sure how to flash the new drivers that I have downloaded.

    Arduino Core Repository Problem: When I try to download the arduino-esp32 repository, I get an error from my Windows Defender saying that the download is unsafe and it aborts. Not sure what is causing the threat and how to get rid of it.

    Computer details: Windows 10 Pro (version 1803) running on Surface Book, 64-bit, Intel Core i5.

  • Member #1492654 / about 6 years ago * / 1

    1) more than one sensors:
    I try to connect two inputs at the board: first, battery on Pin 34 (over a voltage divider) to measure the current voltage. That works fine. Second, the SparkFun soil moisture on Pin 36 to measure the moisture. In my case, the moisture sensor don't give correct values, dry soil or pure water - the sensor gives values around 700.(I know about ADC noise, but that couldn't the question) I'm confused, wants wrong. Other port permitted ....? why?
    2) use the sparkfun fuel gauge with the ESP32 board:
    The ESP32 Thing I equipped with a battery loader on board, that's fine. I tried to use the sparkfun fuel gauge to measure the battery capacity. But I'm confused, how to connect both boards.The Sparkfun Fuel gauge/Max17043 data sheet suggest me, it's easy - GND to GND, Plus to ESP32 VBAT Pin, I2C to I2C. But that kills the board.

  • Member #1452638 / about 6 years ago / 1

    Question for the designer @jimblom: Why did you rearrange the inductor and capacitor in the RF antenna subcircuit? The ESP32 Hardware Design guidelines has your L1 and C8 in reverse positions. Also, how did you choose the values for those components? Thanks!

  • Member #1448194 / about 6 years ago / 1

    Hi, I'm trying to follow your tutorial but I have a different board. Unfortunately it has a different architecture that can't support the artnetwifi library. It is the mkr1010. It also has the esp32 module. Is there any way to adapt the the artnetwifilibrary to work on the board I have?

  • Member #1424936 / about 6 years ago / 1

    Arduino core for ESP32 WiFi chip can now (as of July 2018) be installed using Arduino IDE Boards Manager

  • abecerra / about 6 years ago / 1

    I have a doubt on SPI bus. I'm trying to use VSPI in Espressif's SDK with this board, so I connected the VSPI bus' pins (19, 23, 18 and 5) to the slave but I couldn't make it work until I changed CS to pin 2 on the board even if I didn't change the pin declaration in my program. I had the same behavior with the arduino IDE. Is this a known issue or am I getting confused with this?


  • Member #860254 / about 7 years ago / 1

    Hi! I have a specific question. I want to drive a LCD 20x04 I2C Display with the ESP32 Thing. This display requires 5 V for VCC. Any suggestions on how a schematic should look like (e.g. implementing a boost converter) ? Thanks!

  • Member #1143949 / about 7 years ago / 1

    Got this board yesterday given it has some perfect specs for a project I'm doing. However, now I read in the Hookup guide that several key features aren't implemented; analogRead and analogWrite is absolutely crucial for my use, touch I have a couple of ideas for, might not be essential though, and BLE is pretty much the reason I got it.

    That said, the Hookup Guide I guess wasn't written yesterday, so the status may have changed, so could someone enlighten me as to which of those features, if any are now available?

    • arvidtp / about 7 years ago / 1

      analogRead() is definitely now available - just used it today. However be warned that the ADC on the ESP32 is noisy and non-linear. They are apparently working on compensation curves and calibration code for the non-linearity. For the noise you need to just oversample and average for now. 100 samples seems to do the trick to make the ADC usable as an 8-bit value without taking too much extra time.

  • Aaron Allar / about 7 years ago / 1

    BLE still not supported natively with adruino IDE...

  • Aaron Allar / about 7 years ago / 1

    When is there going to be a more complete BLE library for arduino?

  • Member #1029813 / about 7 years ago * / 1

    I hope to get helpful resource from you. Thanks :) ;)

  • Member #1029813 / about 7 years ago * / 1

    I hope to get helpful resource from you. Thanks :) ;) :) ! :)

  • Board works OK and it works fine with the Arduino IDE with ESP32 extension. One thing though... Serial monitor pins that control transistors for reset and GPIO0 are unstable when only the battery is connected. This will make the operation of the board unstable and can put board into boot mode and perform random reset. So any battery powered applications are not usable without some small modifications to the board.

    • arvidtp / about 7 years ago * / 1

      Hi - do you have any info as to what those modifications might be? I'm having some issues with mine that only show up when I'm powering it from the LiPo battery. Thanks!

      EDIT: Actually, turns out my issues were more related to the powering of my sensor - the GY-521 breakout board from the MPU6050 and not battery powering the Thing. But still curious!

  • Member #851813 / about 7 years ago / 1

    Is there anyway for the ESP32 Thing board to detect when power has been lost and it is running on the battery?
    This would be very helpful to have the ESP32 send an alert out stating power has been lost.

  • Member #375878 / about 7 years ago / 1

    Espressif has updated the instructions for getting the core on their github page. I followed them explicitly but the 32 does not show up in the board manager. Any idea how to fix that?

    • jimblom / about 7 years ago / 1

      Thanks for the heads up. I updated the installing instructions here a bit too.

      I uninstalled and reinstalled, and it seems to be working for me (following the Windows directions). Make sure you've installed the core in your Arduino sketchbook - exactly as specified. The "esp32" folder should reside in "{Sketchbook Location}/hardware/espressif/".

  • Member #895736 / about 7 years ago / 1

    What's the range of the BLE? As in, how far away can it be before BLE connection gets flaky?

  • Member #873273 / about 8 years ago / 1

    I have gone thru the steps to set up on a Windows 8 machine. When I compile a sketch I get the following error:

    Arduino: 1.6.13 (Windows 8.1), Board: "ESP32 Dev Module, 80MHz, 921600"

    exec: "C:\Users\Jimmy\Documents\Arduino\hardware\espressif\esp32/tools/xtensa-esp32-elf/bin/xtensa-esp32-elf-g++": file does not exist Error compiling for board ESP32 Dev Module.

    This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.

    • I had that same error on my Arduino IDE v.1.6.13. Make sure that the definitions are installed correctly. Try following these directions => [ ]. It took me a few times because I didn't type the commands correctly in the command prompt. -_-

      The issue is that the file "xtensa-esp32-elf-g++" was not installed in the correct directory for the Arduino IDE to find. After going over step 5 a few times, I was able to install the definitions correctly.

  • Member #385618 / about 8 years ago / 1

    Trying to run and I keep getting the error: Traceback (most recent call last): File "C:\Program Files (x86)\Arduino\hardware\espressif\esp32\tools\", line 124, in <module> get_tool(tool) File "C:\Program Files (x86)\Arduino\hardware\espressif\esp32\tools\", line 92, in get_tool unpack(local_path, '.') File "C:\Program Files (x86)\Arduino\hardware\espressif\esp32\tools\", line 55, in unpack zfile.extractall(destination) File "C:\Python27\lib\", line 1040, in extractall self.extract(zipinfo, path, pwd) File "C:\Python27\lib\", line 1028, in extract return self._extract_member(member, path, pwd) File "C:\Python27\lib\", line 1083, in _extract_member file(targetpath, "wb") as target: IOError: [Errno 13] Permission denied: 'xtensa-esp32-elf\xtensa-esp32-elf\sysroot\lib\libm.a'

    I've changed the permissions on libm.a but still no go.

  • Member #404026 / about 8 years ago / 1

    Member #590256, this is because you're using Python3 and not Python2 as required. I am having trouble getting Python2 to work though.

  • Member #590256 / about 8 years ago / 1

    Getting an error when uploaded a sketch. Looks like an error in File "C:\Program Files (x86)\Arduino\hardware\expressif\esp32/tools/", line 183

    print '%s' % inst.CHIP_NAME


    SyntaxError: Missing parentheses in call to 'print'

    • Member #586407 / about 8 years ago / 2

      I fixed this one. It is due to a call to python 3. I uninstalled all python 3 copies I had on my machine and that fixed it. Just moving python 2.7 to first on the (Windows) environment variable did not fix this. Uninstalling python 3 was the only way I could find for a fix.

If you've found an issue with this tutorial content, please send us your feedback!