2017-07-01 20:09:40 +01:00
|
|
|
.. _micropython_lib:
|
|
|
|
|
2015-06-04 23:53:26 +01:00
|
|
|
MicroPython libraries
|
|
|
|
=====================
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2017-05-14 22:26:44 +01:00
|
|
|
.. warning::
|
|
|
|
|
|
|
|
Important summary of this section
|
|
|
|
|
2021-08-12 06:15:03 +01:00
|
|
|
* MicroPython provides built-in modules that mirror the functionality of the
|
2023-05-31 06:59:07 +01:00
|
|
|
:ref:`Python standard library <micropython_lib_python>` (e.g. :mod:`os`,
|
|
|
|
:mod:`time`), as well as :ref:`MicroPython-specific modules <micropython_lib_micropython>`
|
|
|
|
(e.g. :mod:`bluetooth`, :mod:`machine`).
|
|
|
|
* Most Python standard library modules implement a subset of the
|
|
|
|
functionality of the equivalent Python module, and in a few cases provide
|
|
|
|
some MicroPython-specific extensions (e.g. :mod:`array`, :mod:`os`)
|
2021-08-12 06:15:03 +01:00
|
|
|
* Due to resource constraints or other limitations, some ports or firmware
|
|
|
|
versions may not include all the functionality documented here.
|
2023-05-31 06:59:07 +01:00
|
|
|
* To allow for extensibility, some built-in modules can be
|
|
|
|
:ref:`extended from Python code <micropython_lib_extending>` loaded onto
|
|
|
|
the device filesystem.
|
2017-05-14 22:26:44 +01:00
|
|
|
|
2016-06-02 11:05:13 +01:00
|
|
|
This chapter describes modules (function and class libraries) which are built
|
2021-08-12 06:15:03 +01:00
|
|
|
into MicroPython. This documentation in general aspires to describe all modules
|
|
|
|
and functions/classes which are implemented in the MicroPython project.
|
|
|
|
However, MicroPython is highly configurable, and each port to a particular
|
|
|
|
board/embedded system may include only a subset of the available MicroPython
|
|
|
|
libraries.
|
|
|
|
|
|
|
|
With that in mind, please be warned that some functions/classes in a module (or
|
|
|
|
even the entire module) described in this documentation **may be unavailable**
|
|
|
|
in a particular build of MicroPython on a particular system. The best place to
|
|
|
|
find general information of the availability/non-availability of a particular
|
|
|
|
feature is the "General Information" section which contains information
|
|
|
|
pertaining to a specific :term:`MicroPython port`.
|
2016-06-01 22:08:07 +01:00
|
|
|
|
2018-07-20 06:47:42 +01:00
|
|
|
On some ports you are able to discover the available, built-in libraries that
|
2021-08-12 06:15:03 +01:00
|
|
|
can be imported by entering the following at the :term:`REPL`::
|
2018-07-20 06:47:42 +01:00
|
|
|
|
|
|
|
help('modules')
|
|
|
|
|
2016-06-01 22:08:07 +01:00
|
|
|
Beyond the built-in libraries described in this documentation, many more
|
|
|
|
modules from the Python standard library, as well as further MicroPython
|
2021-08-12 06:15:03 +01:00
|
|
|
extensions to it, can be found in :term:`micropython-lib`.
|
2016-04-26 23:32:38 +01:00
|
|
|
|
2023-05-31 06:59:07 +01:00
|
|
|
.. _micropython_lib_python:
|
|
|
|
|
2016-04-26 23:32:38 +01:00
|
|
|
Python standard libraries and micro-libraries
|
|
|
|
---------------------------------------------
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2016-04-26 23:32:38 +01:00
|
|
|
The following standard Python libraries have been "micro-ified" to fit in with
|
|
|
|
the philosophy of MicroPython. They provide the core functionality of that
|
|
|
|
module and are intended to be a drop-in replacement for the standard Python
|
2021-08-12 06:15:03 +01:00
|
|
|
library.
|
2014-11-02 23:37:02 +00:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 1
|
|
|
|
|
2021-08-12 04:56:13 +01:00
|
|
|
array.rst
|
2023-06-08 07:08:09 +01:00
|
|
|
asyncio.rst
|
2021-08-12 04:56:13 +01:00
|
|
|
binascii.rst
|
2018-07-20 06:34:22 +01:00
|
|
|
builtins.rst
|
|
|
|
cmath.rst
|
2021-08-12 04:56:13 +01:00
|
|
|
collections.rst
|
|
|
|
errno.rst
|
2018-07-20 06:34:22 +01:00
|
|
|
gc.rst
|
2023-06-26 17:17:41 +01:00
|
|
|
gzip.rst
|
2021-08-12 04:56:13 +01:00
|
|
|
hashlib.rst
|
|
|
|
heapq.rst
|
|
|
|
io.rst
|
|
|
|
json.rst
|
2018-07-20 06:34:22 +01:00
|
|
|
math.rst
|
2021-08-12 04:56:13 +01:00
|
|
|
os.rst
|
2023-08-21 04:02:20 +01:00
|
|
|
platform.rst
|
2021-08-04 20:08:33 +01:00
|
|
|
random.rst
|
2021-08-12 04:56:13 +01:00
|
|
|
re.rst
|
|
|
|
select.rst
|
|
|
|
socket.rst
|
|
|
|
ssl.rst
|
|
|
|
struct.rst
|
|
|
|
sys.rst
|
|
|
|
time.rst
|
|
|
|
zlib.rst
|
2018-07-20 06:34:22 +01:00
|
|
|
_thread.rst
|
2016-04-26 23:14:16 +01:00
|
|
|
|
2023-05-31 06:59:07 +01:00
|
|
|
.. _micropython_lib_micropython:
|
2016-04-26 23:14:16 +01:00
|
|
|
|
2016-04-26 23:37:45 +01:00
|
|
|
MicroPython-specific libraries
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
Functionality specific to the MicroPython implementation is available in
|
|
|
|
the following libraries.
|
|
|
|
|
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 1
|
|
|
|
|
2021-08-12 04:56:13 +01:00
|
|
|
bluetooth.rst
|
2017-04-03 22:29:23 +01:00
|
|
|
btree.rst
|
2021-08-12 04:56:13 +01:00
|
|
|
cryptolib.rst
|
2023-06-26 17:17:41 +01:00
|
|
|
deflate.rst
|
2017-02-27 06:16:32 +00:00
|
|
|
framebuf.rst
|
2016-04-26 23:37:45 +01:00
|
|
|
machine.rst
|
|
|
|
micropython.rst
|
2021-08-11 07:06:11 +01:00
|
|
|
neopixel.rst
|
2016-04-26 23:37:45 +01:00
|
|
|
network.rst
|
|
|
|
uctypes.rst
|
|
|
|
|
2022-02-10 12:51:48 +00:00
|
|
|
The following libraries provide drivers for hardware components.
|
|
|
|
|
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 1
|
|
|
|
|
|
|
|
wm8960.rst
|
|
|
|
|
2016-04-26 23:37:45 +01:00
|
|
|
|
2018-11-05 07:13:12 +00:00
|
|
|
Port-specific libraries
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
In some cases the following port/board-specific libraries have functions or
|
|
|
|
classes similar to those in the :mod:`machine` library. Where this occurs, the
|
|
|
|
entry in the port specific library exposes hardware functionality unique to
|
|
|
|
that platform.
|
|
|
|
|
|
|
|
To write portable code use functions and classes from the :mod:`machine` module.
|
|
|
|
To access platform-specific hardware use the appropriate library, e.g.
|
|
|
|
:mod:`pyb` in the case of the Pyboard.
|
|
|
|
|
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
Libraries specific to the pyboard
|
2021-08-12 06:15:03 +01:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
The following libraries are specific to the pyboard.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 2
|
2014-11-02 23:37:02 +00:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
pyb.rst
|
2021-08-12 09:51:02 +01:00
|
|
|
stm.rst
|
2018-07-20 06:34:22 +01:00
|
|
|
lcd160cr.rst
|
2015-06-10 22:29:56 +01:00
|
|
|
|
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
Libraries specific to the WiPy
|
2021-08-12 06:15:03 +01:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-07-29 15:19:41 +01:00
|
|
|
The following libraries and classes are specific to the WiPy.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 2
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
wipy.rst
|
2019-09-04 06:05:03 +01:00
|
|
|
machine.ADCWiPy.rst
|
2018-07-29 15:19:41 +01:00
|
|
|
machine.TimerWiPy.rst
|
2015-05-26 22:34:31 +01:00
|
|
|
|
|
|
|
|
2019-01-21 21:06:17 +00:00
|
|
|
Libraries specific to the ESP8266 and ESP32
|
2021-08-12 06:15:03 +01:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2015-05-26 22:34:31 +01:00
|
|
|
|
2019-01-21 21:06:17 +00:00
|
|
|
The following libraries are specific to the ESP8266 and ESP32.
|
2015-05-26 22:34:31 +01:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 2
|
2015-05-26 22:34:31 +01:00
|
|
|
|
2018-07-20 06:34:22 +01:00
|
|
|
esp.rst
|
2019-01-23 06:26:39 +00:00
|
|
|
esp32.rst
|
2021-04-16 12:18:04 +01:00
|
|
|
|
esp32,esp8266: Add support for the Espressif ESP-NOW protocol.
ESP-NOW is a proprietary wireless communication protocol which supports
connectionless communication between ESP32 and ESP8266 devices, using
vendor specific WiFi frames. This commit adds support for this protocol
through a new `espnow` module.
This commit builds on original work done by @nickzoic, @shawwwn and with
contributions from @zoland. Features include:
- Use of (extended) ring buffers in py/ringbuf.[ch] for robust IO.
- Signal strength (RSSI) monitoring.
- Core support in `_espnow` C module, extended by `espnow.py` module.
- Asyncio support via `aioespnow.py` module (separate to this commit).
- Docs provided at `docs/library/espnow.rst`.
Methods available in espnow.ESPNow class are:
- active(True/False)
- config(): set rx buffer size, read timeout and tx rate
- recv()/irecv()/recvinto() to read incoming messages from peers
- send() to send messages to peer devices
- any() to test if a message is ready to read
- irq() to set callback for received messages
- stats() returns transfer stats:
(tx_pkts, tx_pkt_responses, tx_failures, rx_pkts, lost_rx_pkts)
- add_peer(mac, ...) registers a peer before sending messages
- get_peer(mac) returns peer info: (mac, lmk, channel, ifidx, encrypt)
- mod_peer(mac, ...) changes peer info parameters
- get_peers() returns all peer info tuples
- peers_table supports RSSI signal monitoring for received messages:
{peer1: [rssi, time_ms], peer2: [rssi, time_ms], ...}
ESP8266 is a pared down version of the ESP32 ESPNow support due to code
size restrictions and differences in the low-level API. See docs for
details.
Also included is a test suite in tests/multi_espnow. This tests basic
espnow data transfer, multiple transfers, various message sizes, encrypted
messages (pmk and lmk), and asyncio support.
Initial work is from https://github.com/micropython/micropython/pull/4115.
Initial import of code is from:
https://github.com/nickzoic/micropython/tree/espnow-4115.
2020-09-24 06:37:04 +01:00
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 1
|
|
|
|
|
|
|
|
espnow.rst
|
|
|
|
|
2021-04-16 12:18:04 +01:00
|
|
|
|
|
|
|
Libraries specific to the RP2040
|
2021-08-12 06:15:03 +01:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2021-04-16 12:18:04 +01:00
|
|
|
|
|
|
|
The following libraries are specific to the RP2040, as used in the Raspberry Pi Pico.
|
|
|
|
|
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 2
|
|
|
|
|
|
|
|
rp2.rst
|
2021-08-02 23:08:00 +01:00
|
|
|
|
|
|
|
Libraries specific to Zephyr
|
2021-08-12 06:15:03 +01:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2021-08-02 23:08:00 +01:00
|
|
|
|
|
|
|
The following libraries are specific to the Zephyr port.
|
|
|
|
|
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 2
|
|
|
|
|
|
|
|
zephyr.rst
|
2021-08-12 06:15:03 +01:00
|
|
|
|
2023-05-31 06:59:07 +01:00
|
|
|
.. _micropython_lib_extending:
|
|
|
|
|
2021-08-12 06:15:03 +01:00
|
|
|
Extending built-in libraries from Python
|
|
|
|
----------------------------------------
|
|
|
|
|
2023-06-02 14:33:42 +01:00
|
|
|
A subset of the built-in modules are able to be extended by Python code by
|
|
|
|
providing a module of the same name in the filesystem. This extensibility
|
|
|
|
applies to the following Python standard library modules which are built-in to
|
2023-06-26 17:17:41 +01:00
|
|
|
the firmware: ``array``, ``binascii``, ``collections``, ``errno``, ``gzip``,
|
|
|
|
``hashlib``, ``heapq``, ``io``, ``json``, ``os``, ``platform``, ``random``,
|
|
|
|
``re``, ``select``, ``socket``, ``ssl``, ``struct``, ``time`` ``zlib``, as well
|
|
|
|
as the MicroPython-specific ``machine`` module. All other built-in modules
|
|
|
|
cannot be extended from the filesystem.
|
2021-08-12 06:15:03 +01:00
|
|
|
|
|
|
|
This allows the user to provide an extended implementation of a built-in library
|
2023-05-31 06:59:07 +01:00
|
|
|
(perhaps to provide additional CPython compatibility or missing functionality).
|
2023-06-02 14:33:42 +01:00
|
|
|
This is used extensively in :term:`micropython-lib`, see :ref:`packages` for
|
|
|
|
more information. The filesystem module will typically do a wildcard import of
|
|
|
|
the built-in module in order to inherit all the globals (classes, functions and
|
|
|
|
variables) from the built-in.
|
|
|
|
|
|
|
|
In MicroPython v1.21.0 and higher, to prevent the filesystem module from
|
|
|
|
importing itself, it can force an import of the built-in module it by
|
|
|
|
temporarily clearing ``sys.path`` during the import. For example, to extend the
|
|
|
|
``time`` module from Python, a file named ``time.py`` on the filesystem would
|
|
|
|
do the following::
|
2023-05-31 06:59:07 +01:00
|
|
|
|
|
|
|
_path = sys.path
|
|
|
|
sys.path = ()
|
|
|
|
try:
|
|
|
|
from time import *
|
|
|
|
finally:
|
|
|
|
sys.path = _path
|
|
|
|
del _path
|
|
|
|
|
2023-06-02 14:33:42 +01:00
|
|
|
def extra_method():
|
|
|
|
pass
|
|
|
|
|
|
|
|
The result is that ``time.py`` contains all the globals of the built-in ``time``
|
|
|
|
module, but adds ``extra_method``.
|
|
|
|
|
|
|
|
In earlier versions of MicroPython, you can force an import of a built-in module
|
|
|
|
by appending a ``u`` to the start of its name. For example, ``import utime``
|
|
|
|
instead of ``import time``. For example, ``time.py`` on the filesystem could
|
|
|
|
look like::
|
|
|
|
|
|
|
|
from utime import *
|
|
|
|
|
|
|
|
def extra_method():
|
|
|
|
pass
|
|
|
|
|
|
|
|
This way is still supported, but the ``sys.path`` method described above is now
|
|
|
|
preferred as the ``u``-prefix will be removed from the names of built-in
|
|
|
|
modules in a future version of MicroPython.
|
|
|
|
|
|
|
|
*Other than when it specifically needs to force the use of the built-in module,
|
|
|
|
code should always use* ``import module`` *rather than* ``import umodule``.
|