ESP32/detect_esp32.py

116 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""
ESP32 USB Device Detection Script
Detects and lists ESP32 devices connected via USB
"""
import serial.tools.list_ports
def detect_esp32_devices():
"""
Detect ESP32 devices connected via USB.
Returns a list of tuples containing (port, description, hwid)
"""
esp32_devices = []
# Common USB vendor IDs used by ESP32 boards
ESP32_VID_PIDS = [
('10C4', 'EA60'), # Silicon Labs CP210x
('1A86', '7523'), # CH340
('1A86', '55D4'), # CH9102
('0403', '6001'), # FTDI FT232
('0403', '6010'), # FTDI FT2232
('303A', '1001'), # Espressif USB JTAG/serial debug unit (ESP32-C3, ESP32-S3)
('303A', '1002'), # Espressif USB JTAG/serial debug unit
]
# Keywords that might appear in ESP32 device descriptions
ESP32_KEYWORDS = [
'CP210',
'CH340',
'CH9102',
'UART',
'USB-SERIAL',
'USB SERIAL',
'JTAG',
'ESP32',
]
# Get all available ports
ports = serial.tools.list_ports.comports()
for port in ports:
# Check by VID:PID
if port.vid is not None and port.pid is not None:
vid = f"{port.vid:04X}"
pid = f"{port.pid:04X}"
if any((vid == v and pid == p) for v, p in ESP32_VID_PIDS):
esp32_devices.append(port)
continue
# Check by description keywords
description_upper = port.description.upper()
if any(keyword in description_upper for keyword in ESP32_KEYWORDS):
esp32_devices.append(port)
return esp32_devices
def main():
print("=" * 60)
print("ESP32 USB Device Detection")
print("=" * 60)
print()
# Detect ESP32 devices
esp32_devices = detect_esp32_devices()
if esp32_devices:
print(f"Found {len(esp32_devices)} ESP32 device(s):\n")
for idx, device in enumerate(esp32_devices, 1):
print(f"Device {idx}:")
print(f" Port: {device.device}")
print(f" Description: {device.description}")
print(f" Hardware ID: {device.hwid}")
if device.vid is not None and device.pid is not None:
print(f" VID:PID: {device.vid:04X}:{device.pid:04X}")
if device.manufacturer:
print(f" Manufacturer: {device.manufacturer}")
if device.serial_number:
print(f" Serial: {device.serial_number}")
print()
print("=" * 60)
print(f"Total ESP32 devices detected: {len(esp32_devices)}")
print("=" * 60)
else:
print("No ESP32 devices detected.")
print()
print("Available USB serial devices:")
all_ports = serial.tools.list_ports.comports()
if all_ports:
for port in all_ports:
print(f" - {port.device}: {port.description}")
if port.vid is not None and port.pid is not None:
print(f" VID:PID = {port.vid:04X}:{port.pid:04X}")
else:
print(" No USB serial devices found.")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n\nDetection interrupted by user.")
except Exception as e:
print(f"\nError: {e}")
print("\nMake sure pyserial is installed: pip install pyserial")