MicroPython: ESP32/ESP8266 — Получение информации об устройстве (CPU, MAC-адрес, Flash, PSRAM и другое)

MicroPython: ESP32/ESP8266 — получение системной информации: CPU, MAC-адрес, Flash, PSRAM

В этом кратком руководстве мы поделимся простым MicroPython-скриптом, который выводит полезную информацию о вашей плате. Это отличный инструмент для диагностики и тестирования. Скрипт получает данные о чипе (модель и частоту CPU), MAC-адрес, использование памяти, наличие PSRAM, размер файловой системы и свободное место, а также выводит список файлов, хранящихся на плате. Это руководство работает с платами ESP32, ESP8266 и Raspberry Pi Pico.

Код, используемый в этом уроке, был создан и предоставлен Charles E. Hamilton — одним из читателей Random Nerd Tutorials.

Предварительные требования

Для прохождения этого урока на вашей плате ESP32 или ESP8266 должна быть установлена прошивка MicroPython. Вам также понадобится IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE или uPyCraft IDE:

Получение системной информации — MicroPython-скрипт

После загрузки прошивки MicroPython на плату скопируйте следующий код в Thonny IDE или в IDE по вашему выбору.

# WhatsInIt.py - MicroPython Hardware & Environment Diagnostic Tool
# For ESP32 / ESP8266 boards
# Last updated: April 26, 2025 by Charles E. Hamilton
# This program is released into the public domain free of license and without warranties of any kind
# https://RandomNerdTutorials.com/micropython-esp32-esp8266-device-info/

import os
import sys
import gc
import machine
import network
import ubinascii

try:
    import esp
except ImportError:
    esp = None

try:
    import esp32
except ImportError:
    esp32 = None

print("\n" + "=" * 40)
print("        WHATS IN IT REPORT")
print("=" * 40)

# --- Chip & CPU Info ---
print("\n[CHIP INFO]")
print(f"Platform:           {sys.platform}")
print(f"MicroPython ver:    {os.uname().release} ({os.uname().version})")
print(f"Machine ID:         {os.uname().machine}")
print(f"CPU Frequency:      {machine.freq()} Hz")

# --- MAC Address ---
print("\n[NETWORK]")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
mac = ubinascii.hexlify(wlan.config('mac'), ':').decode()
print(f"MAC Address:        {mac}")

# --- Memory Info ---
print("\n[MEMORY]")
print(f"Heap Allocated:     {gc.mem_alloc()} bytes")
print(f"Heap Free:          {gc.mem_free()} bytes")

# Flash size (ESP32 only)
if esp:
    try:
        flash_size = esp.flash_size()
        print(f"Flash Size:         {flash_size // (1024*1024)} MB")
    except:
        print("Flash Size:         Not available")

# PSRAM status (ESP32 only)
if esp32:
    try:
        psram_status = "Available" if esp32.ULP() is not None else "Not available"
    except:
        psram_status = "Not detected"
    print(f"PSRAM:              {psram_status}")

# --- Filesystem Info ---
print("\n[FILESYSTEM]")
try:
    fs_stats = os.statvfs("/")
    block_size = fs_stats[0]
    total_blocks = fs_stats[2]
    free_blocks = fs_stats[3]
    total = (block_size * total_blocks) // 1024
    free = (block_size * free_blocks) // 1024
    print(f"Total Size:         {total} KB")
    print(f"Free Space:         {free} KB")
except:
    print("Filesystem info:    Not available")

# --- Directory Contents ---
print("\n[FILES IN ROOT DIR]")
try:
    files = os.listdir()
    for f in files:
        print(f" - {f}")
except:
    print("Cannot list files.")

# --- Closing ---
print("\n[END OF REPORT]")
print("=" * 40)

Посмотреть исходный код на GitHub

Следующий раздел выводит информацию о чипе и CPU: используемую платформу, версию MicroPython, модель платы и частоту процессора.

# --- Chip & CPU Info ---
print("\n[CHIP INFO]")
print(f"Platform:           {sys.platform}")
print(f"MicroPython ver:    {os.uname().release} ({os.uname().version})")
print(f"Machine ID:         {os.uname().machine}")
print(f"CPU Frequency:      {machine.freq()} Hz")

Эти строки выводят MAC-адрес платы. MAC-адрес — это уникальный идентификатор, присвоенный сетевому интерфейсу вашего устройства. Он используется для связи по Wi-Fi и другим сетям.

# --- MAC Address ---
print("\n[NETWORK]")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
mac = ubinascii.hexlify(wlan.config('mac'), ':').decode()
print(f"MAC Address:        {mac}")

Мы выводим информацию о памяти платы. Heap Allocated (занятая куча) — это объём оперативной памяти, используемый вашей программой в данный момент, а Heap Free (свободная куча) — объём оперативной памяти, ещё доступной для использования.

# --- Memory Info ---
print("\n[MEMORY]")
print(f"Heap Allocated:     {gc.mem_alloc()} bytes")
print(f"Heap Free:          {gc.mem_free()} bytes")

Также есть раздел для вывода размера Flash-памяти платы и наличия PSRAM.

# Flash size (ESP32 only)
if esp:
    try:
        flash_size = esp.flash_size()
        print(f"Flash Size:         {flash_size // (1024*1024)} MB")
    except:
        print("Flash Size:         Not available")

# PSRAM status (ESP32 only)
if esp32:
    try:
        psram_status = "Available" if esp32.ULP() is not None else "Not available"
    except:
        psram_status = "Not detected"
    print(f"PSRAM:              {psram_status}")

Наконец, мы выводим общий размер файловой системы и свободное пространство.

# --- Filesystem Info ---
print("\n[FILESYSTEM]")
try:
    fs_stats = os.statvfs("/")
    block_size = fs_stats[0]
    total_blocks = fs_stats[2]
    free_blocks = fs_stats[3]
    total = (block_size * total_blocks) // 1024
    free = (block_size * free_blocks) // 1024
    print(f"Total Size:         {total} KB")
    print(f"Free Space:         {free} KB")
except:
    print("Filesystem info:    Not available")

А также список файлов в корневом каталоге файловой системы.

# --- Directory Contents ---
print("\n[FILES IN ROOT DIR]")
try:
    files = os.listdir()
    for f in files:
        print(f" - {f}")
except:
    print("Cannot list files.")

Тестирование кода

Подключите плату к компьютеру и установите соединение с Thonny IDE. Нажмите зелёную кнопку «Run» (Запустить), чтобы выполнить программу на плате.

Запуск MicroPython-скрипта в Thonny IDE

Информация о вашей плате будет выведена в MicroPython Shell.

Ниже приведён отчёт для платы ESP32 DOIT.

ESP32 с MicroPython — получение системной информации

Мы также протестировали этот скрипт с платами ESP32-S3, ESP8266 и Raspberry Pi Pico (вы можете нажать на изображения для увеличения).

ESP8266 с MicroPython — получение системной информации Raspberry Pi Pico с MicroPython — получение системной информации ESP32-S3 с MicroPython — получение системной информации

Заключение

В этом кратком руководстве мы поделились полезным скриптом, который вы можете использовать и адаптировать в своих проектах для получения основной информации о чипе и CPU платы, а также о памяти и файловой системе.

Для более углублённого изучения MicroPython ознакомьтесь с нашими ресурсами: