Найти тему
Практика

Монитор помощник. Часть 3. MAX30102. Загрузка пакетов mpy_cross, подключение к esp8266.

Оглавление

Если понравился материал Вы всегда можете отблагодарить автора лайком или подпиской. Канал развивается и ему очень помогает ваша активность. А ещё лайки мотивируют автора на новые публикации.

Из Китая пришли модульки и можно дальше продолжать сборку.

Датчики Max30102, макетная плата.
Датчики Max30102, макетная плата.

Max30102

Я заказал в 2х исполнениях, но на борту один и тот же чип max30102.

-2
-3
-4

после распаковки припаял контакты.

Неплохой материал по датчику esp32-heart-rate-pulse-oximeter-max30102

Дальше надо прикрутить к плате. Считать значения, сырые данные меня пока не интересуют, а вот данные пульс, оксигенация и температуры - нужны будут. Достаточно много материалом для ардуино на с++ например тут. На микропитоне по-меньше, но не настолько чтоб портировать max30100, MAX30102-MicroPython-driver. Решил использовать второю. Для работы с ней надо установить пакет на МК.

Учимся загружать пакеты на МК. mip, upip, mpremote

mip пакетный менеджер внутри МК, также и upip работает через интернет соединение микроконтроллера доки mip, доки mpremote. Mip - запускается через REPL, а вот mpremote - через терминал питона на компьютере с которого идёт прошивка. На хостовой машине:

pip install mpremote
mpremote mip install "github:n-elia/MAX30102-MicroPython-drive"

Я работаю через pycharm + micropython plugin И у меня не подцепился venv. Поменял интерпретатор на cmd и всё завелось.

-5

Супер отработало. Но при попытке выполнить код - ошибка!

from time import sleep

from machine import SoftI2C, Pin

from max30102 import MAX30102 # <-

my_SDA_pin = 0 # I2C SDA d3 gpio0

my_SCL_pin = 2 # I2C SCL d2 gpio4

my_i2c_freq = 400000 # I2C frequency (Hz) here!

i2c = SoftI2C(sda=Pin(my_SDA_pin),

scl=Pin(my_SCL_pin),

freq=my_i2c_freq)

sensor = MAX30102(i2c=i2c)

sensor.setup_sensor()

Ошибка!

File"", line6, in

MemoryError: memory allocation failed,allocating 416 bytes

Проблема в том что не хватает оперативы запустить модуль. Об это написано тут и тут.

Решение - скомпилить модуль на хостовой тасчке, - будет *.mpi файл. Дальше его грузим на МК и работаем как обычно. Репозиторий mpy-cross, здесь вменяемый хелп, доки mpy.

Для компиляции так:

### Avoiding low memory error for max30102

pip install mpy_cross

#compile max30102.__init__.py to mpi

python -m mpy_cross -v max30102\__init__.py
Структура файлов проекта
Структура файлов проекта

Рабочий example.

Итак вроде пакеты загружены импорты тоже победили. Снимаем показания!

-7

Что дальше.

Это прототип и тест подключения датчика к МК. Дальше надо обработать сырые данные посчитать пульс и содержание кислорода. Обернуть всё в класс и использовать в основном проекте. Для этого понадобится изучить материалы, найти алгоритм вычисления пульса и spo.

Материалы по будущей теме:

  1. https://forum.micropython.org/viewtopic.php?f=5&t=10824 форум на тему подобного проекта.
  2. max30102-tutorial-raspberrypi Этот проект на питоне. Тут есть реализация вычисление spo и heartbeat rate
  3. LCD-Arduino-STONE-HMI-Display-Heart-Rate/ ардуино проект
  4. max30102-pulse-oximeter-heart-rate-sensor-arduino-tutorial Особенно этот материал понравился

Ссылки

  1. Основная статья

Благодарности

Спасибо за внимание. Подписывайте на канал!