MicroPython:Библиотеки/esp32: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
(не показано 12 промежуточных версий 1 участника) | |||
Строка 19: | Строка 19: | ||
== Класс Partition – разделы flash-памяти == | == Класс Partition – разделы flash-памяти == | ||
Этот класс предоставляет доступ к разделам flash-памяти устройства и содержит методы для беспроводных (over-the-air или OTA) обновлений. | Этот класс предоставляет доступ к разделам [[flash]]-памяти устройства и содержит методы для беспроводных ([[over-the-air]] или [[OTA]]) обновлений. | ||
=== Конструктор === | === Конструктор === | ||
* [[MicroPython:Библиотеки/esp32/Класс Partition/esp32.Partition()|esp32.Partition(id)]] | |||
=== Методы === | === Методы === | ||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.find()|Partition.find(type=TYPE_APP, subtype=255, label=None)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.info()|Partition.info()]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.readblocks()|Partition.readblocks(block_num, buf)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.readblocks()|Partition.readblocks(block_num, buf, offset)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.writeblocks()|Partition.writeblocks(block_num, buf)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.writeblocks()|Partition.writeblocks(block_num, buf, offset)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.ioctl()|Partition.ioctl(cmd, arg)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.set_boot()|Partition.set_boot()]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.get_next_update()|Partition.get_next_update()]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.mark_app_valid_cancel_rollback()|Partition.mark_app_valid_cancel_rollback()]] | |||
=== Константы === | === Константы === | ||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.BOOT|Partition.BOOT]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.RUNNING|Partition.RUNNING]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.TYPE_APP|Partition.TYPE_APP]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/Partition.TYPE_DATA|Partition.TYPE_DATA]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/esp32.HEAP_DATA|esp32.HEAP_DATA]] | |||
* [[MicroPython:Библиотеки/esp32/Класс Partition/esp32.HEAP_EXEC|esp32.HEAP_EXEC]] | |||
== Модуль RMT == | == Модуль RMT == | ||
Модуль RMT (от «remote control», т.е. «дистанционное управление»), использующийся исключительно для ESP32, изначально был создан для отправки и получения инфракрасных сигналов дистанционного управления. Но благодаря гибкой структуре и генерированию импульсов высокой точности (вплоть до 12.5 нс) его также можно использовать для передачи и получения многих других типов цифровых сигналов: | Модуль ''RMT'' (от ''«remote control»'', т.е. ''«дистанционное управление»''), использующийся исключительно для [[ESP32]], изначально был создан для отправки и получения инфракрасных сигналов дистанционного управления. Но благодаря гибкой структуре и генерированию импульсов высокой точности (вплоть ''до [[12.5 нс]]'') его также можно использовать для передачи и получения многих других типов цифровых сигналов: | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
import esp32 | import esp32 | ||
from machine import Pin | from machine import Pin | ||
Строка 62: | Строка 69: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Входящая частота модуля RMT составляет 80 МГц (возможно, в будущем ее можно будет менять, но сейчас она фиксированная). Значение в clock_div – это делитель входной частоты, который задает разрешение RMT-канала. Число, заданное в write_pulses, умножается на разрешение – результат задает, какими будут импульсы. | Входящая частота модуля ''RMT'' составляет ''80 МГц'' (возможно, в будущем ее можно будет менять, но сейчас она фиксированная). Значение в ''clock_div'' – это делитель входной частоты, который задает разрешение ''RMT-канала''. Число, заданное в ''write_pulses'', умножается на разрешение – результат задает, какими будут импульсы. | ||
Значение в clock_div – это 8-битный делитель (0-255), и каждый импульс можно задать, умножив разрешение, полученное с помощью делителя, на 15-битное число (0-32,768). Всего каналов восемь (0-7), и у каждого из них может быть свой делитель частоты. | |||
Чтобы активировать у ESP32 функцию несущей частоты, задайте в carrier_freq что-то вроде «38000» – это стандартная несущая ИК-частота. | Значение в ''clock_div'' – это ''8''-битный делитель (''0-255''), и каждый импульс можно задать, умножив разрешение, полученное с помощью делителя, на ''15''-битное число (''0-32,768''). Всего каналов восемь (''0-7''), и у каждого из них может быть свой делитель частоты. | ||
Итак, в примере выше частота 80 МГц делится на 8. В результате получается разрешение (1/(80МГц/8)) 100 нс. Поскольку начальный уровень (start) – это «0», и с каждым новым «тиком» сигнал переключается, получается битовый поток 0101 с сигналами продолжительностью 100 нс, 2000 нс, 200 нс, 4000 нс. | |||
Чтобы активировать у [[ESP32]] функцию несущей частоты, задайте в ''carrier_freq'' что-то вроде ''«38000»'' – это стандартная несущая ''ИК-частота''. | |||
Итак, в примере выше частота ''80 МГц'' делится на ''8''. В результате получается разрешение (''1/(80МГц/8)'') ''100 нс''. Поскольку начальный уровень (''start'') – это ''«0»'', и с каждым новым «тиком» сигнал переключается, получается битовый поток ''0101'' с сигналами продолжительностью ''100 нс'', ''2000 нс'', ''200 нс'', ''4000 нс''. | |||
Более подробно читайте в [https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/rmt.html документации к модулю RMT для ESP-IDF от Espressif]. | Более подробно читайте в [https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/rmt.html документации к модулю RMT для ESP-IDF от Espressif]. | ||
Внимание | |||
{{Блок/Инфо4 | |||
|1=Внимание | |||
|2=В реализации модуля ''RMT'' в [[MicroPython]] нет некоторых функций оригинала (самая заметная из которых – это получение импульсов). Рассматривайте ''RMT'' как бета-инструмент, интерфейс которого в будущем может поменяться.}} | |||
=== Конструктор === | === Конструктор === | ||
* [[MicroPython:Библиотеки/esp32/RMT/esp32.RMT()|esp32.RMT(channel, *, pin=None, clock_div=8, carrier_freq=0, carrier_duty_percent=50)]] | |||
=== Методы === | === Методы === | ||
* [[MicroPython:Библиотеки/esp32/RMT/RMT.source_freq()|RMT.source_freq()]] | |||
* [[MicroPython:Библиотеки/esp32/RMT/RMT.clock_div()|RMT.clock_div()]] | |||
* [[MicroPython:Библиотеки/esp32/RMT/RMT.wait_done()|RMT.wait_done(timeout=0)]] | |||
* [[MicroPython:Библиотеки/esp32/RMT/RMT.loop()|RMT.loop(enable_loop)]] | |||
* [[MicroPython:Библиотеки/esp32/RMT/RMT.write_pulses()|RMT.write_pulses(pulses, start)]] | |||
== ULP-сопроцессор == | == ULP-сопроцессор == | ||
* [[MicroPython:Библиотеки/esp32/Класс ULP|Класс ULP]] | |||
* [[MicroPython:Библиотеки/esp32/Класс ULP/ULP.set_wakeup_period()|ULP.set_wakeup_period(period_index, period_us)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс ULP/ULP.load_binary()|ULP.load_binary(load_addr, program_binary)]] | |||
* [[MicroPython:Библиотеки/esp32/Класс ULP/ULP.run()|ULP.run(entry_point)]] | |||
=== Константы === | === Константы === | ||
* [[MicroPython:Библиотеки/esp32/Класс ULP/esp32.WAKEUP_ALL_LOW|esp32.WAKEUP_ALL_LOW]] | |||
* [[MicroPython:Библиотеки/esp32/Класс ULP/esp32.WAKEUP_ANY_HIGH|esp32.WAKEUP_ANY_HIGH]] | |||
=См.также= | =См.также= |
Текущая версия от 18:13, 14 мая 2023
Модуль esp32 – функционал ESP32[1]
Модуль esp32 содержит функции и классы, предназначенные исключительно для работы с микроконтроллерами ESP32.
Функции
- esp32.wake_on_touch(wake)
- esp32.wake_on_ext0(pin, level)
- esp32.wake_on_ext1(pins, level)
- esp32.raw_temperature()
- esp32.hall_sensor()
- esp32.idf_heap_info(capabilities)
Класс Partition – разделы flash-памяти
Этот класс предоставляет доступ к разделам flash-памяти устройства и содержит методы для беспроводных (over-the-air или OTA) обновлений.
Конструктор
Методы
- Partition.find(type=TYPE_APP, subtype=255, label=None)
- Partition.info()
- Partition.readblocks(block_num, buf)
- Partition.readblocks(block_num, buf, offset)
- Partition.writeblocks(block_num, buf)
- Partition.writeblocks(block_num, buf, offset)
- Partition.ioctl(cmd, arg)
- Partition.set_boot()
- Partition.get_next_update()
- Partition.mark_app_valid_cancel_rollback()
Константы
- Partition.BOOT
- Partition.RUNNING
- Partition.TYPE_APP
- Partition.TYPE_DATA
- esp32.HEAP_DATA
- esp32.HEAP_EXEC
Модуль RMT
Модуль RMT (от «remote control», т.е. «дистанционное управление»), использующийся исключительно для ESP32, изначально был создан для отправки и получения инфракрасных сигналов дистанционного управления. Но благодаря гибкой структуре и генерированию импульсов высокой точности (вплоть до 12.5 нс) его также можно использовать для передачи и получения многих других типов цифровых сигналов:
import esp32
from machine import Pin
r = esp32.RMT(0, pin=Pin(18), clock_div=8)
r # RMT(channel=0, pin=18, source_freq=80000000, clock_div=8)
# для использования несущей частоты:
r = esp32.RMT(0, pin=Pin(18), clock_div=8, carrier_freq=38000)
r # RMT(channel=0, pin=18, source_freq=80000000, clock_div=8, carrier_freq=38000, carrier_duty_percent=50)
# разрешение канала – 100 нс (1/(source_freq/clock_div)):
r.write_pulses((1, 20, 2, 40), start=0) # отправьте «0» для 100 нс,
# «1» для 2000 нс,
# «0» для 200 нс,
# «1» для 4000 нс
Входящая частота модуля RMT составляет 80 МГц (возможно, в будущем ее можно будет менять, но сейчас она фиксированная). Значение в clock_div – это делитель входной частоты, который задает разрешение RMT-канала. Число, заданное в write_pulses, умножается на разрешение – результат задает, какими будут импульсы.
Значение в clock_div – это 8-битный делитель (0-255), и каждый импульс можно задать, умножив разрешение, полученное с помощью делителя, на 15-битное число (0-32,768). Всего каналов восемь (0-7), и у каждого из них может быть свой делитель частоты.
Чтобы активировать у ESP32 функцию несущей частоты, задайте в carrier_freq что-то вроде «38000» – это стандартная несущая ИК-частота.
Итак, в примере выше частота 80 МГц делится на 8. В результате получается разрешение (1/(80МГц/8)) 100 нс. Поскольку начальный уровень (start) – это «0», и с каждым новым «тиком» сигнал переключается, получается битовый поток 0101 с сигналами продолжительностью 100 нс, 2000 нс, 200 нс, 4000 нс.
Более подробно читайте в документации к модулю RMT для ESP-IDF от Espressif.
Конструктор
Методы
- RMT.source_freq()
- RMT.clock_div()
- RMT.wait_done(timeout=0)
- RMT.loop(enable_loop)
- RMT.write_pulses(pulses, start)
ULP-сопроцессор
- Класс ULP
- ULP.set_wakeup_period(period_index, period_us)
- ULP.load_binary(load_addr, program_binary)
- ULP.run(entry_point)