Adsense HTML/JavaScript

Showing posts with label esptool. Show all posts
Showing posts with label esptool. Show all posts

Sunday, June 19, 2022

Flash MicroPython v1.19 firmware on ESP32-C3 (ESP32-C3-DevKitM-1/NodeMCU ESP-C3-32S-Kit)

To flash MicroPython v1.19 firmware on ESP32-C3, tested on Espressif ESP32-C3-DevKitM-1 and AI-Thinker NodeMCU ESP-C3-32S-Kit, both have a single USB connector. All steps run on Raspberry Pi.



To IDENTIFY connected USB port. 

- BEFORE Connect ESP32-C3 dev. board to USB
clear dmesg buffer:
$ sudo dmesg -c

- AFTER ESP32-C3 dev. board connected to USB
display dmesg:
$ dmesg

Download firmware.

Visit https://micropython.org/download/  to download for esp32c3.

Select "ESP32-C3 Espressif"


Flash Firmware.

To erase the entire flash using:

esptool.py --chip esp32c3 --port /dev/ttyUSB0 erase_flash

Flash firmware starting at address 0x0:

esptool.py --chip esp32c3 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x0 <.bin>












Finally, test with Thonny.









more exercise:
MicroPython/NodeMCU ESP-C3-32S-Kit to control onboard LEDs
MicroPython bluetooth (BLE) exampls
detect onboard BOOT button, and control onboard RGB LED (Neopixel)
send/receive command via BLE UART
multithreading exercise, get user input un-blocked using _thread
ESP32-C3/MicroPython + SSD1306 I2C OLED
ESP32-C3/MicroPython BLE UART Communication


Saturday, April 2, 2022

Upgrade esptool using pip3

To upgrade esptool, enter thte command in Terminal:
$ pip3 install esptool --upgrade

Upgrade esptool on Raspberry Pi

With esptool upgraded to ver 3.3, now ESP32-S3 (also ESP32-C3) can be flashed on Raspberry Pi.


CircuitPython flashed on ESP32-S3 using esptool 3.3 on Raspberry Pi

Related:

Friday, March 11, 2022

Install CircuitPython 7.2.0 on ESP32-S3 (ESP32-S3-DevKitC-1), using esptool v3.2 on Linux Mint

CircuitPython 7.2.0 was released. With espressif ESP32-S3 and ESP32-C3 supported (considered alpha and will have bugs and missing functionality).

To flash firmware on esp32s3, esptool v3.2 is needed. This post show the steps to flash CircuitPython 7.2.0 on ESP32-S3-DevKitC-1 N8R8 (with 8MB Flash and 8MB PSRAM) run on Linux Mint (over VirtualBox/Windows 10).



Visit CircuitPython download page, search "S3" and download .BIN for "ESP32-S3-DevKitC-1-N8R8 by Espressif".

Connect USB to the port marked "UART".

To check the ESP chip ID and Flash using commands:
$ esptool.py --chip auto --port /dev/ttyUSB0 chip_id
$ esptool.py --chip auto --port /dev/ttyUSB0 flash_id

Erase flash:
$ esptool.py --port /dev/ttyUSB0 erase_flash

Flash firmware:
$ esptool.py --chip esp32s3 --port <port> write_flash \-z 0x0 <file.BIN>

To program using CircuitPython, re-connect USB to the port marked "USB".

cpyESP32S3_info.py

"""
CircuitPython 7.2.0 exercise run on ESP32-S3,
get system info.
"""
import board
import sys
import os
"""
ref:
The entire table of ANSI color codes working in C:
https://gist.github.com/RabaDabaDoba/145049536f815903c79944599c6f952a
"""
class color:
   RED = '\033[1;31;48m'
   BLUE = '\033[1;34;48m'
   BLACK = '\033[1;30;48m'
   END = '\033[1;37;0m'

print(board.board_id)
print(sys.implementation[0] + ' ' +
      str(sys.implementation[1][0]) +'.'+
      str(sys.implementation[1][1]) +'.'+
      str(sys.implementation[1][2]))
print("==========================================")
info = color.RED + \
       sys.implementation[0] + ' ' + \
       os.uname()[3] + color.END + '\n' + \
       'run on ' + color.BLUE + os.uname()[4] + color.END
print(info)
print("==========================================")

print()
cpyESP32S3_NEOPIXEL.py, control onboard RGB LED.
import time
import os
import microcontroller
import neopixel
import board

def cycleNeopixel(wait):
    for r in range(255):
        pixel[0] = (r, 0, 0)
        time.sleep(wait)
    for r in range(255, 0, -1):
        pixel[0] = (r, 0, 0)
        time.sleep(wait)
        
    for g in range(255):
        pixel[0] = (0, g, 0)
        time.sleep(wait)
    for g in range(255, 0, -1):
        pixel[0] = (0, g, 0)
        time.sleep(wait)
        
    for b in range(255):
        pixel[0] = (0, 0, b)
        time.sleep(wait)
    for b in range(255, 0, -1):
        pixel[0] = (0, 0, b)
        time.sleep(wait)
        
print("==============================")
print("Hello ESP32-C3/CircuitPython NeoPixel exercise")
#print(os.uname())
for u in os.uname():
    print(u)
print()
print("neopixel version: " + neopixel.__version__)
print()

# Create the NeoPixel object
pixel = neopixel.NeoPixel(board.NEOPIXEL,
                          1,
                          pixel_order=neopixel.GRB)
pixel[0] = (0, 0, 0)
time.sleep(2.0)

cycleNeopixel(0.01)

pixel[0] = (0, 0, 0)
time.sleep(2.0)

print("- bye -\n")

Related:
~ To flash ESP32-S3, esptool v3.2 or above is needed. With esptool upgraded, we can now flash ESP32-S3 on Rspberry Pi.

Next:
CircuitPython BLE UART between XIAO BLE Sense and ESP32-C3/S3


Sunday, February 27, 2022

Install CircuitPython 7.2.0 on ESP32-C3 (ESP32-C3-DevKitM-1/NodeMCU ESP-C3-32S-Kit)

CircuitPython 7.2.0 was released. With espressif ESP32-S3 and ESP32-C3 supported (considered alpha and will have bugs and missing functionality).


This post show how to install CircuitPython 7.2.0 on ESP32-C3-DevKitM-1 (ESP32-C3-MINI-1), using Raspberry Pi 4B running Raspberry Pi OS 32-bit (buster). Then test with exercise to read system info, control onboard RGB (NEOPIXEL), and 0.96" 80x160 IPS.



Download Firmware:

Visit CircuitPython Download page, search C3.

I can't find exact board named "ESP32-C3-DevKitM-1", so I try "ESP32-C3-DevKitC-1-N4 by Espressif". DOWNLOAD .BIN NOW under CircuitPython 7.2.0, it's adafruit-circuitpython-espressif_esp32c3_devkitm_1_n4-en_US-7.2.0.bin.

Identify USB port:

Before connect the board to USB.
Run the command to clear dmesg buffer -
$ sudo dmesg -c

Connect the ESP32-C3-DevKitM-1 board to USB.
Run dmesg again, the connected port will be shown -
$ dmesg

Install CircuitPython firmware using esptool:

esptool is needed to flash firmware on ESP devices.
~ Install esptool on Raspberry Pi OS (32 bit)

With esptool installed, you can check the ESP chip ID and Flash using commands:
$ esptool.py --chip auto --port /dev/ttyUSB0 chip_id
$ esptool.py --chip auto --port /dev/ttyUSB0 flash_id

To erase the flash, enter:
$ esptool.py --port /dev/ttyUSB0 erase_flash

To flash the firmware, I follow the command in MicroPython document > Getting started with MicroPython on the ESP32 > Deploying the firmware.
replace:
- chip to esp32c3
- port
- address start from 0x0
- file name
$ esptool.py --chip esp32c3 --port /dev/ttyUSB0 write_flash \-z 0x0 \
adafruit-circuitpython-espressif_esp32c3_devkitm_1_n4-en_US-7.2.0.bin
Exercise code:

cpyESP32C3_info.py, get CircuitPython info
"""
CircuitPython 7.2.0 exercise run on ESP32-C3,
get system info.
"""
import board
import sys
import os
"""
ref:
The entire table of ANSI color codes working in C:
https://gist.github.com/RabaDabaDoba/145049536f815903c79944599c6f952a
"""
class color:
   RED = '\033[1;31;48m'
   BLUE = '\033[1;34;48m'
   BLACK = '\033[1;30;48m'
   END = '\033[1;37;0m'

print(board.board_id)
print(sys.implementation[0] + ' ' +
      str(sys.implementation[1][0]) +'.'+
      str(sys.implementation[1][1]) +'.'+
      str(sys.implementation[1][2]))
print("==========================================")
info = color.RED + \
       sys.implementation[0] + ' ' + \
       os.uname()[3] + color.END + '\n' + \
       'run on ' + color.BLUE + os.uname()[4] + color.END
print(info)
print("==========================================")

print()

cpyESP32C3_NEOPIXEL.py, control onboard RGB (Neopixel).
import time
import os
import microcontroller
import neopixel
import board

def cycleNeopixel(wait):
    for r in range(255):
        pixel[0] = (r, 0, 0)
        time.sleep(wait)
    for r in range(255, 0, -1):
        pixel[0] = (r, 0, 0)
        time.sleep(wait)
        
    for g in range(255):
        pixel[0] = (0, g, 0)
        time.sleep(wait)
    for g in range(255, 0, -1):
        pixel[0] = (0, g, 0)
        time.sleep(wait)
        
    for b in range(255):
        pixel[0] = (0, 0, b)
        time.sleep(wait)
    for b in range(255, 0, -1):
        pixel[0] = (0, 0, b)
        time.sleep(wait)
        
print("==============================")
print("Hello ESP32-C3/CircuitPython NeoPixel exercise")
#print(os.uname())
for u in os.uname():
    print(u)
print()
print("neopixel version: " + neopixel.__version__)
print()

# Create the NeoPixel object
pixel = neopixel.NeoPixel(board.NEOPIXEL,
                          1,
                          pixel_order=neopixel.RGB)
pixel[0] = (0, 0, 0)
time.sleep(2.0)

cycleNeopixel(0.01)

pixel[0] = (0, 0, 0)
time.sleep(2.0)

print("- bye -\n")

cpyESP32C3_st7735_80x160.py, test with 0.96" 80x160 IPS.
"""
CircuitPython 7.2.0 exercise run on ESP32-C3
with unknown brand 0.96 inch 80x160 SPI ST7735 IPS

ref:
adafruit/Adafruit_CircuitPython_ST7735R
https://github.com/adafruit/Adafruit_CircuitPython_ST7735R
"""

from sys import implementation as sysImplementation
import time
import board
import busio
import displayio
import terminalio

from adafruit_st7735r import ST7735R as TFT_ST7735
from adafruit_st7735r import __name__ as ST7735_NAME
from adafruit_st7735r import __version__ as ST7735_VERSION

from adafruit_display_text import label

# Release any resources currently in use for the displays
displayio.release_displays()

#Connection between ESP32-C3 and SPI ST7735 display
                        #marking on display
tft_sck = board.IO2     #SCL
tft_mosi = board.IO3    #SDA
tft_reset = board.IO0   #RES
tft_dc = board.IO1      #DC
tft_cs = board.IO10     #CS
#Backlight (BLK) connect to ESP32-C3 3V3
#TFT VCC - ESP32-C31 3V3
#TFT GND - ESP32-C3 GND

tft_spi = busio.SPI(clock=tft_sck, MOSI=tft_mosi)
display_bus = displayio.FourWire(
    tft_spi, command=tft_dc, chip_select=tft_cs, reset=tft_reset
)

# I find out colrstart/rowstart by try/error and retry
display = TFT_ST7735(display_bus, width=160, height=80,
                     colstart=26, rowstart=1,
                     rotation=90,
                     invert=True
                     )

print(type(display))
print("display.width:  ", display.width)
print("display.height: ", display.height)

# Make the display context
splash = displayio.Group()
display.show(splash)

color_bitmap = displayio.Bitmap(display.width, display.height, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0x000000
time.sleep(1)

bg_sprite = displayio.TileGrid(color_bitmap,
                               pixel_shader=color_palette, x=0, y=0)
splash.append(bg_sprite)

for c in [["RED", 0xFF0000],
          ["GREEN", 0x00FF00],
          ["BLUE", 0x0000FF]]:
    print(c[0], " : ", hex(c[1]))
    color_palette[0] = c[1]
    time.sleep(2)

splash.remove(bg_sprite)
#---

# Make the display context
#splash = displayio.Group()
#display.show(splash)

color_bitmap = displayio.Bitmap(display.width, display.height, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0x00FF00

bg_sprite = displayio.TileGrid(color_bitmap,
                               pixel_shader=color_palette, x=0, y=0)
splash.append(bg_sprite)

# Draw a smaller inner rectangle
inner_bitmap = displayio.Bitmap(display.width-2, display.height-2, 1)
inner_palette = displayio.Palette(1)
inner_palette[0] = 0x0000FF
inner_sprite = displayio.TileGrid(inner_bitmap,
                                  pixel_shader=inner_palette, x=1, y=1)
splash.append(inner_sprite)

# Draw a label
text_group1 = displayio.Group(scale=1, x=5, y=10)
text1 = "ESP32-C3"
text_area1 = label.Label(terminalio.FONT, text=text1, color=0xFF0000)
text_group1.append(text_area1)  # Subgroup for text scaling

# Draw a label
strSys = sysImplementation[0] + ' ' + \
         str(sysImplementation[1][0]) +'.'+ \
         str(sysImplementation[1][1]) +'.'+ \
         str(sysImplementation[1][2])
text_group2 = displayio.Group(scale=1, x=5, y=25)
text2 = strSys
text_area2 = label.Label(terminalio.FONT, text=text2, color=0xFFFFFF)
text_group2.append(text_area2)  # Subgroup for text scaling

# Draw a label
text_group3 = displayio.Group(scale=1, x=5, y=40)
text3 = ST7735_NAME
text_area3 = label.Label(terminalio.FONT, text=text3, color=0x0000000)
text_group3.append(text_area3)  # Subgroup for text scaling
# Draw a label
text_group4 = displayio.Group(scale=1, x=5, y=55)
text4 = ST7735_VERSION
text_area4 = label.Label(terminalio.FONT, text=text4, color=0x000000)
text_group4.append(text_area4)  # Subgroup for text scaling

text_group5 = displayio.Group(scale=1, x=5, y=70)
text5 = str(display.width) + " x " + str(display.height)
text_area5 = label.Label(terminalio.FONT, text=text5, color=0x000000)
text_group5.append(text_area5)  # Subgroup for text scaling

splash.append(text_group1)
splash.append(text_group2)
splash.append(text_group3)
splash.append(text_group4)
splash.append(text_group5)

time.sleep(3.0)

rot = 90
while True:
    time.sleep(5.0)
    rot = rot + 90
    if (rot>=360):
        rot = 0
    display.rotation = rot

Download firmware for "ESP-C3-32S by Ai-Thinker",  adafruit-circuitpython-ai_thinker_esp32-c3s-en_US-7.2.0.bin.



Replace the file name in flashing command:
$ esptool.py --chip esp32c3 --port /dev/ttyUSB0 write_flash \-z 0x0
adafruit-circuitpython-ai_thinker_esp32-c3s-en_US-7.2.0.bin
cpyESP32C3_info.py run on NodeMCU ESP-C3-32S-Kit:


check the board assignment:





next:
ESP32-C3/CircuitPython 7.2.0 + ST7735 TFT, display bmp in slideshow, and using displayio.OnDiskBitmap/adafruit_imageload.

Tuesday, November 23, 2021

ESP-C3-12F First power-up

Just received ESP-C3-12F. With "C3FN4" marked on the module shield, that means it have Build-in 4MByte FLASH. ESP-C3-12F is a Wi-Fi module developed by Ai-Thinker. This module core processor ESP32-C3 is a Wi-Fi+ BLE combination of system-level chips (SoC).

In order to use the ESP-C3-12F, I solder it on a special multi-function PCB for ESP-12F (or called "diymore ESP8266 ESP-12E ESP-12F ESP32 Double Side Prototype PCB Board").


I also add buttons of RESET and BOOT connect EN and IO9 (same position of IO0 on ESP-12F), to force it entering BOOTLOADER mode for using with esptool.

It's strongly recommended using separate 3V3 Power Supply for ESP-C3-12F. A USB to Serial Breakout (FT232RL) in 3V3 operation mode is used to connect to ESP-C3-12F.

In my practice, the connection is:

USB-to-Serial (FT232RL)   ESP-C3-12F
(in 3V3 mode)
RX                        TX0
TX                        RX0
GND                       GND

RESET BUTTON              EN/GND
BOOT BUTTON               IO9/GND

Separate Power Supply
+3V3                      VCC
GND                       GND


log of esptool output:
pi@raspberrypi:~ $ esptool.py --chip auto --port /dev/ttyUSB0 chip_id
esptool.py v3.1
Serial port /dev/ttyUSB0
Connecting........_____....._
Detecting chip type... ESP32-C3
Chip is unknown ESP32-C3 (revision 3)
Features: Wi-Fi
Crystal is 40MHz
MAC: 84:f7:03:a5:10:94
Uploading stub...
Running stub...
Stub running...
Warning: ESP32-C3 has no Chip ID. Reading MAC instead.
MAC: 84:f7:03:a5:10:94
Hard resetting via RTS pin...
pi@raspberrypi:~ $ esptool.py --chip auto --port /dev/ttyUSB0 flash_id
esptool.py v3.1
Serial port /dev/ttyUSB0
Connecting...
Detecting chip type... ESP32-C3
Chip is unknown ESP32-C3 (revision 3)
Features: Wi-Fi
Crystal is 40MHz
MAC: 84:f7:03:a5:10:94
Stub is already running. No upload is necessary.
Manufacturer: 20
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...
pi@raspberrypi:~ $


log of AT Command:
ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x1 (POWERON),boot:0xc (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:2
load:0x3fcd6100,len:0x147c
load:0x403ce000,len:0x91c
load:0x403d0000,len:0x2838
entry 0x403ce000

################################################
arch:ESP32C3, 3
compile_time:Ai-Thinker|B&T
ble_mac:84F703a51096
wifi_mac:84F703a51094
sdk_version:v4.3-beta3-195-g6be10fab0
firmware_version:2.2.0
compile_time:Jul  5 2021 13:46:35

ready

################################################AT

OK
AT

OK
AT+GMR
AT version:2.2.0.0(s-90458f0 - ESP32C3 - Jun 18 2021 10:24:22)
SDK version:v4.3-beta3-195-g6be10fab0
compile time(5fb0957):Jul  5 2021 13:46:35
Bin version:2.2.0(MINI-1)

OK
AT+RST

OK
ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0xc (RTC_SW_CPU_RST),boot:0xc (SPI_FAST_FLASH_BOOT)
Saved PC:0x40383888
SPIWP:0xee
mode:DIO, clock div:2
load:0x3fcd6100,len:0x147c
load:0x403ce000,len:0x91c
load:0x403d0000,len:0x2838
entry 0x403ce000

################################################
arch:ESP32C3, 3
compile_time:Ai-Thinker|B&T
ble_mac:84F703a51096
wifi_mac:84F703a51094
sdk_version:v4.3-beta3-195-g6be10fab0
firmware_version:2.2.0
compile_time:Jul  5 2021 13:46:35

ready

################################################



Remark:

Actually, I'm confussed.

According to ESP-AT v2.2.0.0_esp32c3 User Guide, AT Command should be sent to UART1 (GPIO6/GPIO7). But in my test as shown in the video. Both esptool and AT Command are sent to UART0 (GPIO20/21).

Or, is it AI-Thinker firmware have different port usage?




Next::

Monday, October 18, 2021

Flash MicroPython firmware on ESP32-C3

Updated@2022-06-19

~ Flash MicroPython v1.19 firmware on ESP32-C3 (ESP32-C3-DevKitM-1/NodeMCU ESP-C3-32S-Kit)

It is aimed to flash MicroPython firmware on ESP32-C3-DevKitM-1 with unknown ESP32-C3 (revision 3) and 4MB flash. I can't find any official installation instruction, it's found out by my guessing and trying. Not sure is it correct approach, it seem work for me anyway.

Download MicroPython for ESP32-C3:

Visit https://micropython.org/download/all/, search "esp32c3" firmware for ESP32-C3, download the .bin file. It's esp32c3usb-20211018-unstable-v1.17-84-gba940250a.bin I tried.

Identify port and chip/flash:

To identify the ESP32 device connected USB port, chip and flash, refer to the last post.

It's unknown ESP32-C3 (revision 3) and 4MB flash on  ESP32-C3-DevKitM-1, connected to /dev/ttyUSB0.

Flash MicroPython firmware:

Erase flash, enter the command:

$ esptool.py --port /dev/ttyUSB0 erase_flash
Flash firmware with:
$ esptool.py --chip esp32c3 -p /dev/ttyUSB0 -b 460800 \
--before=default_reset --after=hard_reset write_flash --flash_mode dio \
--flash_freq 80m --flash_size 4MB \
0x0 esp32c3usb-20211018-unstable-v1.17-84-gba940250a.bin
* write firmware to on ESP flash from 0x0

Wrote 1495696 bytes (888871 compressed) at 0x00000000 in 26.6 seconds (effective 449.2 kbit/s)...

ref:

To verify that data in flash matches a local file:

$ esptool.py verify_flash --diff yes 0x0 <.bin>

ref:


MicroPython code tried:

mpyESP32C3_info.py
"""
MicroPython/ESP32C3 exercise run on ESP32-C3-DevKitM-1,
to display info.
"""
import uos
import usys
import machine
import esp

print("from uos.uname():")
for u in uos.uname():
    print(u)
print()

print("from usys:")
print("usys.platform: ", usys.platform)
print("usys.implementation: ", usys.implementation)
print()

print("====================================")
print(usys.implementation[0], uos.uname()[3],
      "\nrun on", uos.uname()[4])
print("====================================")
print("Flash size:", esp.flash_size())
print("CPU frequency:", machine.freq(), "(Hz)")
mpyESP32C3_RGB.py
"""
MicroPython/ESP32C3 exercise run on ESP32-C3-DevKitM-1,
to control the onboard GB LED (WS2812), driven by GPIO8.
"""

import uos
import usys
import machine
import neopixel
import time

print("====================================")
print(usys.implementation[0], uos.uname()[3],
      "\nrun on", uos.uname()[4])
print("====================================")

np = neopixel.NeoPixel(machine.Pin(8), 1)

np[0] = (0, 0, 0)
np.write()
time.sleep(1)
np[0] = (100, 100, 100)
np.write()
time.sleep(1)
np[0] = (0, 0, 0)
np.write()
time.sleep(1)

for i in range(256):
    np[0] = (i, 0, 0)
    np.write()
    time.sleep_ms(10)
for i in range(256):
    np[0] = (0, i, 0)
    np.write()
    time.sleep_ms(10)
for i in range(256):
    np[0] = (0, 0, i)
    np.write()
    time.sleep_ms(10)

for i in range(256):
    np[0] = (255-i, 255-i, 255-i)
    np.write()
    time.sleep_ms(10)



It's another form of the flash command, modified from  Getting started with MicroPython on the ESP32 > Deploying the firmware, change starting address to 0x0.

$ esptool.py --chip esp32c3 --port /dev/ttyUSB0 write_flash -z \
0x0 esp32c3usb-20211018-unstable-v1.17-84-gba940250a.bin
but it take longer time.

Wrote 1495696 bytes (888871 compressed) at 0x00000000 in 79.6 seconds (effective 150.4 kbit/s)...




More ESP32-C3/MicroPython exercises:

Sunday, October 17, 2021

Identify ESP chip and flash using esptool

Here to identify ESP chip and flash using esptool.py

First, you have to identify the USB port connect to ESP. In Linux/Raspberry Pi

- Before connect your ESP device to USB, run following command to clear dmesg buffer:

$ sudo dmesg -c

- Connect your ESP32 device to USB, and then run dmesg:

$ dmesg

-  You will find some like "cp210x converter now attached to ttyUSB0". Where /dev/ttyUSB0 is the USB port connected to ESP device.

TO Read Chip ID, enter the command:

$ esptool.py --chip auto --port /dev/ttyUSB0 chip_id
TO read SPI flash manufacturer and device ID, enter the command:
$ esptool.py --chip auto --port /dev/ttyUSB0 flash_id
Here is the output for ESP32-DevKitC V4 with ESP32-D0WD-V3 (revision 3) chip and 8MB flash.


ESP8266 with ESP8266EX chip and 4MB flash.


ESP32-S2-Saola-1 with ESP32-S2 chip and 4MB flash.


ESP32-C3-DevKitM-1 with unknown ESP32-C3 (revision 3) and 4MB flash.






Monday, November 16, 2020

Install esptool on Raspberry Pi OS (32 bit)

esptool.py is a Python-based, open source, platform independent, utility to communicate with the ROM bootloader in Espressif ESP8266 & ESP32 chips, and also ESP32-S2.

To install on Raspberry Pi (running 32 bit Raspberry Pi OS), open Terminal and enter the command:

$ sudo pip install esptool

or install Development mode, allows you to run the latest development version from this repository.

$ git clone https://github.com/espressif/esptool.git
$ cd esptool
$ pip install --user -e .