[Диао Йе изучает программирование] Руководство по MicroPython Специальная библиотека портов ESP32 esp32.hall_sensor()

Вставьте сюда описание изображения

MicroPython — это облегченная версия интерпретатора, предназначенная для запуска языка программирования Python 3 во встроенных системах. По сравнению с обычным Python, интерпретатор MicroPython имеет небольшой размер (всего около 100 КБ) и для запуска компилируется в двоичный исполняемый файл, что приводит к более высокой эффективности выполнения. Он использует облегченный механизм сбора мусора и удаляет большую часть стандартной библиотеки Python для поддержки микроконтроллеров с ограниченными ресурсами.

К основным особенностям MicroPython относятся:
1. Синтаксис и функции совместимы со стандартным Python, что упрощает его изучение и использование. Поддерживает большую часть основного синтаксиса Python.
2. Прямой доступ и управление оборудованием, управление GPIO, I2C, SPI и т. д., например, Arduino.
3. Мощная система модулей, обеспечивающая файловую систему, сеть, графический интерфейс и другие функции.
4. Поддержка кросс-компиляции для создания эффективного собственного кода, который в 10-100 раз быстрее интерпретатора.
5. Объем кода небольшой, а использование памяти небольшое.Подходит для работы на MCU и платах разработки с небольшим объемом памяти.
6. Лицензия с открытым исходным кодом, бесплатная для использования. Интерактивная среда Shell обеспечивает удобство разработки и тестирования.
7. Встроенный драйвер ввода-вывода поддерживает большое количество платформ микроконтроллеров, таких как ESP8266, ESP32, STM32, micro:bit, плата управления и PyBoard и т. д. Есть активное сообщество.

Сценарии приложений MicroPython включают:
1. Быстрое создание прототипов и взаимодействие с пользователем для встроенных продуктов.
2. Сделайте несколько небольших программируемых аппаратных проектов.
3. В качестве образовательного инструмента он помогает новичкам изучать программирование на Python и IoT.
4. Создайте прошивку для интеллектуальных устройств, чтобы обеспечить расширенные возможности управления и подключения к облаку.
5. Различные приложения для микроконтроллеров, такие как Интернет вещей, встроенный интеллект, роботы и т. д.

На что следует обратить внимание при использовании MicroPython:
1. Объем памяти и флэш-памяти ограничен.
2. Эффективность объяснения и выполнения не так хороша, как в языке C.
3. Некоторые функции библиотеки отличаются от стандартной версии.
4. Оптимизировать синтаксис платформы и исправить различия со стандартным Python.
5. Рационально используйте ресурсы памяти и избегайте частого выделения больших блоков памяти.
6. Используйте собственный код для повышения производительности частей, критичных к скорости.
7. Используйте абстракцию соответствующим образом для инкапсуляции базовых аппаратных операций.

Вообще говоря, MicroPython выводит Python в область микроконтроллеров, что является важным нововведением, которое не только снижает порог программирования, но и обеспечивает хорошие возможности управления оборудованием. Он очень подходит для разработки различных типов Интернета вещей и интеллектуального оборудования.
Вставьте сюда описание изображения

ESP MicroPython относится к прошивке MicroPython и соответствующим библиотекам программного обеспечения для чипов ESP8266 и ESP32. ESP8266 и ESP32 — это класс недорогих и маломощных модулей Wi-Fi и Bluetooth, широко используемых в IoT и встроенных системах. ESP MicroPython предоставляет расширенную среду сценариев для обоих чипов, позволяя разработчикам использовать язык Python для быстрого прототипирования и разработки.

ESP8266: это недорогой модуль/чип Wi-Fi с низким энергопотреблением, разработанный Espressif Systems. Он имеет встроенный стек протоколов TCP/IP, может использоваться для подключения к Интернету и обладает мощными возможностями обработки. ESP MicroPython предоставляет встроенное ПО и соответствующие библиотеки программного обеспечения для ESP8266, что позволяет разработчикам использовать язык MicroPython для разработки приложений ESP8266.

ESP32: Это высокоинтегрированный модуль/чип Wi-Fi и Bluetooth, выпущенный Espressif Systems. По сравнению с ESP8266 он имеет более мощную вычислительную мощность, больше периферийных интерфейсов и больше памяти. ESP MicroPython также предоставляет встроенное ПО и соответствующие библиотеки программного обеспечения для ESP32, что позволяет разработчикам использовать язык MicroPython для разработки приложений ESP32.

Прошивка MicroPython esp: это версия прошивки MicroPython, специально предназначенная для чипов ESP8266 и ESP32. Эти прошивки были специально оптимизированы для работы на ESP8266 и ESP32 и предоставляют API для взаимодействия с оборудованием, сетевой связи и управления периферийными устройствами.

Библиотеки программного обеспечения: esp от MicroPython также предоставляет ряд библиотек программного обеспечения, связанных с оборудованием ESP8266 и ESP32, для упрощения и ускорения процесса разработки. Эти программные библиотеки предоставляют богатый набор функциональных интерфейсов, охватывающих часто используемые аппаратные средства и протоколы связи, такие как Wi-Fi, Bluetooth, GPIO (вход и выход общего назначения), I2C, SPI и PWM, что позволяет разработчикам легко получать доступ к оборудованию и управлять им. Ресурсы.
Вставьте сюда описание изображения
esp32.hall_sensor() в MicroPython — это функция, используемая для считывания необработанного значения встроенного датчика Холла ESP32. Эта функция возвращает целое число, представляющее выходное напряжение датчика Холла в милливольтах. Эта функция не требует никаких параметров.

Основными особенностями esp32.hall_sensor() MicroPython являются:

ESP32 может обнаруживать изменения магнитного поля вокруг себя без необходимости использования внешнего датчика Холла, тем самым реализуя функцию измерения магнитного поля.
Исходное значение может быть преобразовано в плотность магнитного потока или интенсивность магнитной индукции в соответствии с различными сценариями применения, а магнитное поле можно контролировать или отображать.
Может использоваться в сочетании с другими модулями или функциями для реализации различных приложений, связанных с магнитным полем.

Сценарии применения esp32.hall_sensor() MicroPython включают в себя:

Случай 1: Отображение магнитного поля: используйте плату разработки ESP32, OLED-дисплей и другие компоненты, а также используйте функцию MicroPython esp32.hall_sensor() для реализации отображения магнитного поля. Интенсивность магнитного поля вокруг ESP32 может отображаться на OLED-дисплее и на основе выбор пользователя для переключения между различными единицами магнитного поля. Вот несколько примеров кода::

# 导入 esp32 模块
import esp32
# 导入 OLED 模块
import ssd1306
# 导入按键模块
from machine import Pin

# 定义 OLED 引脚号和尺寸
OLED_SCL_PIN = 22
OLED_SDA_PIN = 21
OLED_WIDTH = 128
OLED_HEIGHT = 64

# 定义按键引脚号和状态
KEY_PIN = 4
KEY_ON = 0
KEY_OFF = 1

# 创建 OLED 对象并初始化
oled = ssd1306.SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, machine.I2C(scl=machine.Pin(OLED_SCL_PIN), sda=machine.Pin(OLED_SDA_PIN)))
oled.fill(0)
oled.text("Magnetic Field Display", 0 ,0)
oled.show()

# 创建按键对象并初始化,设置为上拉输入模式,并注册中断回调函数,触发方式为下降沿(按下)
key = Pin(KEY_PIN, Pin.IN, Pin.PULL_UP)
key.irq(lambda pin: change_unit(), trigger=Pin.IRQ_FALLING)

# 定义一个全局变量,用于存储当前的磁场单位,初始值为特斯拉(T)
unit = "T"

# 定义一个函数,用于读取 ESP32 内置霍尔效应传感器的原始值,并转换为不同的磁场单位
def read_mf():
    global unit
    # 调用 esp32.hall_sensor() 函数,获取原始值(单位为毫伏)
    raw = esp32.hall_sensor()
    # 根据当前的磁场单位,将原始值转换为对应的磁通量密度或磁感应强度(单位为特斯拉、高斯或奥斯特)
    if unit == "T":
        # 原始值乘以 1.4e-6 得到特斯拉(单位为 T)
        mf = raw * 1.4e-6
    elif unit == "G":
        # 原始值乘以 1.4e-2 得到高斯(单位为 G)
        mf = raw * 1.4e-2
    elif unit == "O":
        # 原始值乘以 1.75e-5 得到奥斯特(单位为 O)
        mf = raw * 1.75e-5
    else:
        return None
    # 返回转换后的磁场值和单位字符串
    return "{:.2f} {}".format(mf, unit)

# 定义一个函数,用于在 OLED 上显示 ESP32 周围的磁场强度,并根据用户的选择来切换不同的磁场单位
def show_mf():
    # 调用 read_mf 函数,获取磁场值和单位字符串
    mf_str = read_mf()
    # 在 OLED 上显示磁场字符串
    oled.fill(0)
    oled.text("Magnetic Field Display", 0 ,0)
    oled.text(mf_str, 32 ,16)
    oled.show()

# 定义一个函数,用于切换磁场单位,并重新显示磁场
def change_unit():
    global unit
    # 根据当前的磁场单位,切换到下一个磁场单位(T -> G -> O -> T)
    if unit == "T":
        unit = "G"
    elif unit == "G":
        unit = "O"
    elif unit == "O":
        unit = "T"
    else:
        return
    # 调用 show_mf 函数,重新显示磁场
    show_mf()

# 定义一个循环,用于调用 show_mf 函数,并延迟一秒钟
while True:
    show_mf()
    time.sleep(1)

Случай 2: Управление магнитным полем: используйте плату разработки ESP32, электромагниты, светодиодные фонари и другие компоненты, а также функцию MicroPython esp32.hall_sensor() для реализации управления магнитным полем. Переключателем электромагнита можно управлять в зависимости от напряженности магнитного поля вокруг ESP32, таким образом достигая функции магнитной адсорбции. Вот несколько примеров кода:

# 导入 esp32 模块
import esp32
# 导入电磁铁模块
from machine import Pin
# 导入 LED 灯模块
from machine import PWM

# 定义霍尔效应传感器引脚号和阈值
HALL_PIN = 36
HALL_THRESHOLD = 500

# 定义电磁铁引脚号和状态
MAGNET_PIN = 4
MAGNET_ON = 1
MAGNET_OFF = 0

# 定义 LED 灯引脚号和频率
LED_PIN = 2
LED_FREQ = 1000

# 创建 ADC 对象并初始化,设置为输入模式,并设置分辨率和衰减
adc = ADC(Pin(HALL_PIN))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT)

# 创建电磁铁对象并初始化,设置为输出模式,并设置初始状态为关闭
magnet = Pin(MAGNET_PIN, Pin.OUT)
magnet.value(MAGNET_OFF)

# 创建 LED 灯对象并初始化,设置为 PWM(脉冲宽度调制)输出模式,并设置频率和占空比
led = PWM(Pin(LED_PIN))
led.freq(LED_FREQ)
led.duty(0)

# 定义一个函数,用于根据 ESP32 周围的磁场强度来控制电磁铁的开关,并显示 LED 灯的状态
def magnet_control():
    # 读取 ADC 的值,并将其映射到 0-1023 的范围
    value = adc.read()
    value = int(value * 1023 / 4095)
    # 如果值小于阈值,则表示周围的磁场强度低于设定值,打开电磁铁,吸附金属物体
    if value < HALL_THRESHOLD:
        magnet.value(MAGNET_ON)
        # 设置 LED 灯的占空比为最大(1023),亮起 LED 灯
        led.duty(1023)
    # 如果值大于等于阈值,则表示周围的磁场强度高于或等于设定值,关闭电磁铁,释放金属物体
    else:
        magnet.value(MAGNET_OFF)
        # 设置 LED 灯的占空比为零(0),熄灭 LED 灯
        led.duty(0)

# 定义一个循环,用于调用 magnet_control 函数,并延迟一秒钟
while True:
    magnet_control()
    time.sleep(1)

В этой программе используется датчик Холла 1, встроенный в ESP32, который может обнаруживать изменения магнитного поля вокруг него и управлять переключением электромагнита в соответствии с установленным порогом. В то же время светодиодные фонари используются для отображения состояния электромагнита.

Случай 3: Обнаружение магнитного поля: используйте плату разработки ESP32, зуммер и другие компоненты, а также используйте функцию MicroPython esp32.hall_sensor() для реализации обнаружения магнитного поля. Тон зуммера можно контролировать в зависимости от напряженности магнитного поля вокруг объекта. ESP32, тем самым реализуя магнитное поле.Звуковая подсказка. Вот несколько примеров кода:

# 导入 esp32 模块
import esp32
# 导入蜂鸣器模块
from machine import Pin
from machine import PWM

# 定义蜂鸣器引脚号和频率
BUZZER_PIN = 5
BUZZER_FREQ = 1000

# 创建蜂鸣器对象并初始化,设置为 PWM(脉冲宽度调制)输出模式,并设置频率和占空比
buzzer = PWM(Pin(BUZZER_PIN))
buzzer.freq(BUZZER_FREQ)
buzzer.duty(0)

# 定义一个函数,用于根据 ESP32 周围的磁场强度来控制蜂鸣器的音调
def buzzer_control():
    # 调用 esp32.hall_sensor() 函数,获取原始值(单位为毫伏)
    raw = esp32.hall_sensor()
    # 将原始值映射到 100-2000 的范围,作为蜂鸣器的频率(单位为赫兹)
    freq = int(raw * 1900 / 1023 + 100)
    # 设置蜂鸣器的频率和占空比(50%)
    buzzer.freq(freq)
    buzzer.duty(512)

# 定义一个循环,用于调用 buzzer_control 函数,并延迟一秒钟
while True:
    buzzer_control()
    time.sleep(1)

Эта программа использует датчик Холла, встроенный в ESP32, который может обнаруживать изменения магнитного поля вокруг него и управлять частотой зуммера на основе исходного значения.

Случай 4: Обнаружение изменений магнитного поля

import esp32

while True:
  print(esp32.hall_sensor()) 
  # 输出磁场读数

Постоянное считывание значений датчика магнитного поля позволяет обнаружить изменения магнитного поля.

Случай 5: Магнитный датчик двери:

import esp32

THRESHOLD = 10

def check_door_state():
  value = esp32.hall_sensor()
  if value > THRESHOLD:
    print('Door opened!')
  else:
    print('Door closed!')
      
check_door_state()

Определите, открыта ли дверь, по показаниям датчика двери.

Случай 6: Управление динамиками

import esp32

def beep(duration):
  # 打开喇叭 
  esp32.hall_sensor() # 重置计数器
  while esp32.hall_sensor() < 40 * duration:
    pass
  # 关闭喇叭
    
beep(1) # 蜂鸣1秒  

Используйте подсчет магнитного поля для реализации простого управления зуммером. В этих примерах показано использование датчиков Холла для обнаружения магнитного поля, ввода датчиков и т. д.

Случай 7: Мониторинг напряженности магнитного поля:

import esp32
import time

while True:
    hall_value = esp32.hall_sensor()
    print("Hall Sensor Value:", hall_value)
    time.sleep(1)

В этом примере мы используем бесконечный цикл для непрерывного мониторинга значения датчика Холла. Вызвав функцию esp32.hall_sensor(), мы можем получить текущее значение датчика Холла. Распечатайте его и используйте функцию time.sleep(1), чтобы задержать повторное считывание значения датчика через одну секунду.

Случай 8: Работа триггера по магнитному полю::

import esp32
import machine

# 配置外部引脚触发
trigger_pin = machine.Pin(4, machine.Pin.IN, machine.Pin.PULL_DOWN)

while True:
    if trigger_pin.value() == 1:
        hall_value = esp32.hall_sensor()
        print("Hall Sensor Value:", hall_value)

В этом примере мы настроили внешний контакт (контакт 4) в качестве триггерного контакта и подключили его к триггеру (например, кнопке). В бесконечном цикле мы проверяем состояние триггерного контакта. Когда значение триггерного контакта равно 1 (высокий уровень), мы вызываем функцию esp32.hall_sensor(), чтобы получить текущее значение датчика Холла и распечатать его.

Случай 9: Задача триггера магнитного поля::

import esp32
import machine

# 配置外部引脚触发
trigger_pin = machine.Pin(4, machine.Pin.IN, machine.Pin.PULL_DOWN)

while True:
    if trigger_pin.value() == 1:
        hall_value = esp32.hall_sensor()
        if hall_value > 1000:
            print("Magnetic field detected!")
            # 执行其他任务...

В этом примере мы настроили внешний контакт (контакт 4) в качестве триггерного контакта и подключили его к триггеру (например, кнопке). В бесконечном цикле мы проверяем состояние триггерного контакта. Когда значение триггерного контакта равно 1 (высокий уровень), мы вызываем функцию esp32.hall_sensor(), чтобы получить текущее значение датчика Холла. Если значение датчика Холла больше 1000, это означает, что магнитное поле обнаружено, и мы можем выполнять другие задачи, например, распечатывать сообщение «Обнаружено магнитное поле!» или выполнять другие сопутствующие операции.

В этих примерах показано, как использовать функцию esp32.hall_sensor() в MicroPython для считывания значения датчика Холла и выполнения соответствующих задач по мере необходимости. Пожалуйста, выполните соответствующие настройки и настройки параметров в соответствии с вашими конкретными потребностями и подключениями оборудования.

Вставьте сюда описание изображения

Supongo que te gusta

Origin blog.csdn.net/weixin_41659040/article/details/132917218
Recomendado
Clasificación