Освой MicroPython играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Модуль esp
Модуль esp32
Модули os и uos
Модуль machine
Модуль utime
Я проверял на устройстве M5Stack Fire.
Получить список всех модулей в режиме REPL:
help('modules')
Такой ответ я получил на M5Stack.
>>> help('modules')
MicroWebSrv/__init__ flow/protocol modules/_goPlus units/_env
MicroWebSrv/microWebSocket framebuf modules/_gps units/_env2
MicroWebSrv/microWebSrv gc modules/_lego units/_ext_io
MicroWebSrv/microWebTemplate hardware/__init__ modules/_legoBoard units/_finger
__main__ hardware/button modules/_lidarBot units/_gps
_boot i2c_bus modules/_lorawan units/_ir
_flow inisetup modules/_m5bala units/_joystick
_onewire libs/__init__ modules/_plus units/_light
_thread libs/bmm150 modules/_pm25 units/_makey
_uasyncio libs/bmp280 modules/_servo units/_mlx90640
_webrepl libs/config modules/_stepMotor units/_ncir
apa106 libs/dht12 neopixel units/_pahub
ble/Blynk/BlynkLib libs/easyIO network units/_pbhub
ble/Blynk/__init__ libs/echo ntptime units/_pir
ble/Blynk/blynkBLE libs/imu sys units/_relay
ble/__init__ libs/m5mqtt uarray units/_rfid
ble/ble_advertising libs/mpu6050 ubinascii units/_rgb
ble/ble_uart libs/mstate ubluetooth units/_rgb_multi
ble/blynk libs/numbers ucollections units/_servo
btree libs/nvs ucryptolib units/_tof
builtins libs/power uctypes units/_tracker
cmath libs/sh200q uerrno units/_weight
deviceCfg libs/speak uhashlib uos
display libs/timeSchedule uhashlib urandom
esp libs/time_ex uheapq ure
esp32 libs/urequests uiflow uselect
espnow m5stack uio usocket
face m5uart ujson ussl
faces/_calc m5ui umqtt/__init__ ustruct
faces/_encode machine umqtt/robust utils
faces/_finger math umqtt/simple utime
faces/_gameboy menu/__init__ unit utimeq
faces/_joystick menu/app units/_accel uwebsocket
faces/_keyboard menu/cloud units/_adc uzlib
faces/_rfid menu/setup units/_angle wav/chunk
flashbdev menu/startup units/_button wav/wav_player
flow/__init__ menu/wifi units/_cardKB wav/wave
flow/adaptation micropython units/_color wifiCfg
flow/flowDeinit module units/_dac wifiWebCfg
flow/m5cloud modules/_baseX units/_dual_button
flow/m5ucloud modules/_cellular units/_earth
Plus any modules on the filesystem
Узнать список всех функций в модуле можно следующим образом. Сначала импортируем нужный модуль, потом вызываем dir
import esp
dir(esp)
Ответ
['__class__', '__name__', 'LOG_DEBUG', 'LOG_ERROR', 'LOG_INFO', 'LOG_NONE', 'LOG_VERBOSE', 'LOG_WARNING', 'dht_readinto', 'flash_erase', 'flash_read', 'flash_size', 'flash_user_start', 'flash_write', 'gpio_matrix_in', 'gpio_matrix_out', 'neopixel_write', 'osdebug']
Импорт модуля, который находится внутри какой-то папки на примере wav/wave, происходит следующим образом.
#import wav/wave - так не работает
from wav import wave
from wav import * # или так
Функции модуля
import esp
from m5stack import lcd
lcd.setCursor(0, 0)
lcd.print(esp.flash_size())
Функции.
import esp32
from m5stack import lcd
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(esp32.hall_sensor())
lcd.setCursor(0, 30)
lcd.print(esp32.raw_temperature())
Модуль os относится к "взрослому" Python, а модуль uos специально для MicroPython. Частично они совпадают и дублируют друг друга.
Узнаем информацию о диске (на примере диска '/flash' у M5Stack.
import os
def get_disk_stats():
stats = os.statvfs('/flash')
block_size = stats[0]
total_blocks = stats[2]
free_blocks = stats[3]
stats = dict()
stats['free'] = block_size * free_blocks
stats['total'] = block_size * total_blocks
stats['used'] = stats['total'] - stats['free']
return stats
def format_size(val):
val = int(val / 1024) # convert bytes to KiB
val = '{:,}'.format(val) # add thousand separator
val = '{0: >6} KiB'.format(val) # right align amounts
return val
def print_stats():
stats = get_disk_stats()
print('free space: ', format_size(stats['free']))
print('used space: ', format_size(stats['used']))
print('total space:', format_size(stats['total']))
print_stats()
С помощью uos.uname() можно получить информацию о системе и плате через tuple с пятью именами.
import uos
result = uos.uname()
print(result)
Ответ у M5Stack: (sysname='esp32', nodename='esp32', release='1.12.0', version='v1.12-559-g3191f2bb3-dirty on 2020-06-05', machine='M5Stack with ESP32').
Методы для работы с файлами не отличаются в Python и MicroPython. Можно посмотреть на примере M5Stack.
Функций много. Часть из них.
import machine
from m5stack import lcd
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(machine.freq())
Программная перезагрузка платы.
import machine
machine.reset()
Также содержит классы (частично).
Включаем светодиод, который присоединён к выводу 26.
import machine
pinout = machine.Pin(26, machine.Pin.OUT)
pinout.value(1) # или pinout.value(True)
Мигаем светодиодом (не проверил на M5Stack):
import machine
import utime
led = machine.Pin(26, machine.Pin.OUT)
led.on # ещё один способ включения светодиода
for i in range(10): # while True: # бесконечный цикл
led.on()
time.sleep(0.5)
led.off()
time.sleep(0.5)
Считываем данные, поступаемые на вывод 26.
import machine
pinin = machine.Pin(26, machine.Pin.IN)
val = pinin.value()
Выводим в последовательный порт текст через UART.
from machine import UART
#Create a serial port instance
uart1 = machine.UART(1, tx=1, rx=3)
#Initialize the serial port
uart1.init(115200, bits=8, parity=None, stop=1)
#Is there any content in the cache?
#uart1.any()
#Read the content in the buffer area
#uart1.read()
#Write content to the serial port
uart1.write('Hello Kitty')
Модуль для операций, связанных с временем, задержкой, замерами длительности операций. Является младшей сестрой модуля Python time.
import utime
print('Counter:')
i = 1
while True:
print(i)
i += 1
time.sleep(1.0) # delay for 1 second.