Home > Espressif, FreeRTOS, Hardware, Testing > Getting Started with ESP32-Bit Module and ESP32-T Development Board using Arduino core for ESP32

Getting Started with ESP32-Bit Module and ESP32-T Development Board using Arduino core for ESP32

Espressif ESP32 may have launched last year, but prices have only dropped to attractive levels very recently, and Espressif has recently released released ESP-IDF 2.0 SDK with various improvements, so the platform has become  much more interesting than just a few weeks ago. ICStation also sent me ESP32-T development board with ESP32-bit module, so I’ll first see what I got, before trying out Arduino for ESP32 on the board.

ESP32-T development board with ESP-bit Module – Unboxing & Soldering

One thing I missed when I asked for the board is that it was not soldered, and it comes in kit with ESP32-bit module in one package, and ESP32-T breakout board with headers in another package.

Click to Enlarge

The 21.5x15mm module is based on ESP32-DOWNQ6 processor with 32 Mbit (4MB) of flash, a chip antenna, and a u.FL connector.

Click to Enlarge

The module is apparently made by eBox, and also used in Widora board with all information (allegedly) available on eboxmaker.com website, but more on that later.

Click to Enlarge

ESP32-T breakout board comes with a micro USB port for power and programming/debugging via Silabs CP2102 USB to TTL brige, a power LED, a user LED (LED1), a reset button, and a user button named “KEY”. It has two rows of 19-pin headers, and a footprint for ESP32-Bit module.

Click to Enlarge

The back of the board has a footprint for ESP-32S and ESP-WROOM-32 module, which gives the board some more flexibility, as you could try it with various ESP32 modules.

Time to solder the kit. I placed ESP32-Bit on ESP32-T, and kept it in place with some black tape to solder three to four pins on each side first.

I then removed the tape, completed soldering the module, and added the headers.

Click to Enlarge

The final step is to cut the excess pin on the headers, and now we can test the board which I could insert in a breadboard after pushing with some tools…

I connected a micro USB to USB between the board and my computer, and quickly I could see the PWR LED with a solid green, and LED1 blinking.

I could also see a new ESSID on my network: ESP32_eBox, and I could just input the… wait, what is the password? No idea. So I went to the board’s website, and everything is in Chinese with very limited hardware and software information on the ESP32 page. So it was basically useless, and I did not find the password, and other people neither. I asked ICStation who provided the sample, but they were unable to provide an answer before the review.

I could see the serial ouput via /dev/ttyUSB0 (115200 8N1) in Ubuntu 16.04:

Arduino core for ESP32 on ESP32-T (and Other ESP32 Boards)

But nothing really useful. Since the website mentions Arduino, I just decided to go with Arduino core for ESP32 chip released by Espressif, which explains how to use Arduino or PlatformIO IDEs. I opted to go with the Arduino IDE. The first thing is to download and install the latest Arduino IDE.

I’m running Ubuntu on my computer, so I downloaded and installed the Linux 64-bit version:

The next commands install the Arduino ESP32 support and dependencies:

We can now launch the Arduino IDE:

There are several ESP32 to choose from, but nothing about ESP32-T, ESP32-Bit, or Widora. However, I’ve noticed the board’s pinout looks exactly the same as ESP32Dev board shown below.

Click to Enlarge

So I selected ESP32 Dev Module, and set /dev/ttyUSB0 upload speed to 115200.

Click to Enlarge

The next step is to find an easy example to check if everything works, and there are bunch of those in File->Examples, Examples for ESP32 Dev Module section.

Click to Enlarge

I selected GetCHIPID sample, as it just retrieve the Chip ID from the board, and as we’ll see later the Chip ID is actually the MAC Address. I could upload the code, and it indeed returned the Chip ID:

The next sample I tried – WiFi->SimpleWiFiServer – will allow you to test both WiFi connectivity and GPIOs. I modified the sketch to use pin 2 instead of pin 5  in order to control LED1 on the board connected to GPIO2. You’ll also need to set the SSID and password to connect to your WiFi network. Once you’ve compiled and uploaded the sketch to the board, you’ll need to find the board’s IP address. You can do so in your router DHCP list with the board named “espressif” by default, and the MAC address will be the same as the CHIP ID, 24-0A-C4-01-A4-24 in my case. Now you can open the web interface in a web browser to turn on and off LED1 green LED on the board.

You could also use directly http://IP_ADDRESS/H or http://IP_ADDRESS/L to pull the pin high or low. It worked beautifully, but so far, we have not done anything that does not work on the much cheaper ESP8266 boards, and I can see one Bluetooth LE code sample for ESP32 called simpleBLEDevice in Arduino IDE, so let’s try it. It will just broadcast advertise the name of the device, and change it on button press, which could be used to broadcast message to a BLE gateway.

That’s the output from the serial terminal.

The initial name is ESP32 SimpleBLE, and as I press the KEY button on the board, the name will change to “BLE32 at: xxx”. I could detect a Bluetooth ESP32 device with the various names with my Android smartphone.

Since, it’s just advertising the name, there’s no pairing. But that’s a start. To have more insights into Bluetooth, you may also want to check out WiFiBlueToothSwitch.ino sample which shows show to use various mode such as Bluetooth only, Bluetooth + WiFi, WiFi STA, etc… For a more practical use of Bluetooth on ESP32, Experiments with Bluetooth and IBM Watson article may be worth a read. But a faster dual core processor and Bluetooth support are not the only extra features of ESP32 compared to ESP8266, as you also get more GPIOs, hardware PWM, better ADC, a touch interface, a CAN bus, Ethernet, etc…, so there’s more to explore, although I’m not sure all features are fully supported in ESP-IDF SDK and Arduino.

Final Words about ESP32-T and ESP32-Bit

After some initial difficulties, and confusions, I managed to make ESP32-T development kit work, but it’s difficult to recommend it. First, documentation is really poor right now, and while I found out you can use the exact same instructions than for ESP32Dev board, it does not reflect well on the company. Second, the board is sold as a kit that needs to be soldered, which may be a hassle for many, and possibly a fun learning experience for a few. Finally, ESP32-T + ESP32-Bit sells for $15 to $20 on various website, which compares to competitors fully assembled development boards – such as Wemos LoLin32 – now going for less than $10 shipped, and which basically the same features set (ESP32 + 4MB flash) minus the user LED and button, and a u.FL connector for an external antenna.

I’d still like to thank ICStation for giving me the opportunity to test the board. They are now selling it for $14.99 shipped with 15% extra discount possible with Jeanics  coupon (for single order). You’ll also find ESP32-T board on Aliexpress, but pay close attention if you are going to buy there, as it may be sold without ESP32-Bit module. Usually, all prices well below $10 are without the module.

  1. Theguyuk
    May 7th, 2017 at 14:41 | #1

    I see what you mean about their website, even English page is mainly Chinese.

    I got Google Chrome on Android to brute translate to English on most pages and any that would not, I typed translate into Chrome and used the first translate service to copy Chinese to, and translate to English. Hope it helps others.

  2. May 7th, 2017 at 14:54 | #2

    Even the translation of the website is not useful. Once you know it’s just like the first ESP32Dev board, it becomes easy, just avoid the ESP32-T/ESP32-Bit official website, and instead follow one of the many instructions for ESP32Dev on the web.

  3. frank
    May 7th, 2017 at 15:25 | #3

    I’m using a doit dev board with a esp-wroom-32 module on it. I payed $8.50 including shipping.
    PlatformIO makes things easier to set up. That setup includes the arduino framework. PlatformIO has a extension in VisualStudioCode. If you add the sources and tweak the c/c++ extension you can even “Go to Definition” and such.

  4. frank
    May 7th, 2017 at 15:37 | #4

    underneath it is just a esp32, the only thing you need to keep in mind are the other hardware from the dev board attached to the esp32. Like a led, its spi flash size, or sd card slot.

  5. May 7th, 2017 at 15:46 | #5

    I am wondering if there is a way for the Beacon to also listen (receive) for events, so that it could potentially wake up a device with wifi. The use case could be for an offline file storage system, which is off most of the time, and only woken up by a BT event.

  6. May 7th, 2017 at 16:20 | #6

    “ESP32Dev” is the name of a specific board. That was the first ESP32 development board released by Espressif.

  7. Frank
    May 7th, 2017 at 18:14 | #7

    Yeah I know, https://espressif.com/en/products/hardware/esp32-devkitc/overview
    I am just saying, those board settings just specify if there is extra hardware on the board and how its linked to the esp32

    But the esp32 has wifi and ble. you can certainly accomplish something like that. Like a relay hooked up to the esp32, listen to ble advertisements and switch on anything you want.

  8. willmore
    May 7th, 2017 at 22:18 | #8


    It also sets the GPIO pin mapping, right? So if your board calls the pins “D1”, etc. then that’s what you call them in the schetch. If it calls them “GPIO0015x3” then that’s what you can call it in the scetch–as horrid as that would be. 😉

  9. Frank
    May 8th, 2017 at 00:45 | #9

    Yes, it translates the i/o pins on the esp32 with the pins on the board. https://github.com/espressif/arduino-esp32/blob/master/variants/esp32/pins_arduino.h
    You are not bound by these terms, you can still address any gpio pin using the normal “gpio_num_t” defined in esp-idf. it just makes it easier.

    These settings are board specific and thus essential(although they mostly only differ in flash size)

  10. May 11th, 2017 at 20:25 | #10

    Thanks for the info, I am using NodeMCU ESP32 with Arduino IDE. I made everything work besides BLE example. From the serial output I get:

    ESP32 SDK: v2.0-rc1-761-g65acd99c
    btip start
    copy .data from 4000d890 to 3ffae6e0, len 00001830
    set .bss 0x0 from 3ffb8000 to 3ffbff70, len 00007f70
    BD_ADDR: 30:AE:A4:01:CF:62
    RF Init OK with coex
    Enable Classic BT
    Enable Low Energy

    The ESP gets stuck here. Any idea why?

  11. May 11th, 2017 at 21:03 | #11

    I just reproduce my output here for easier comparison:

    It looks like on the last line is missing. Try to add some serialprintln for the code between the last two line to see where it may be stuck.

  12. May 12th, 2017 at 16:05 | #12

    It gets stuck after ble.begin(); I get up to “Enable Low Energy” and then nothing. It is not printing “Press the button to change the device name”

  13. May 12th, 2017 at 16:17 | #13

    We knew about that. So you need to check where exactly in ble.begin function it gets stucks.
    Alternatively, if you don’t feel confident about checking the code, open an issue in Github.

  14. May 12th, 2017 at 16:55 | #14

    Ok sorry. So in begin() it gets stuck in ble_send_cmd() and inside this function at the end

    int res = _vhci_host_command_result;

    It never gets out from the while

  15. May 12th, 2017 at 17:02 | #15

    So it gets more complicated, as I assume this function is part of the SDK, and we’d have to dig into that.
    With the information you have, you could probably open an issue @ https://github.com/espressif/arduino-esp32/issues

  16. May 12th, 2017 at 17:17 | #16

    I open an issue, let’s see!

  1. No trackbacks yet.