Проблема 1. Архитектура которую я выстраивал - совершенно не подходит...
Переделка архитектуры на async. Стало приятнее заодно освежил знания по async await. Полезная статья на хабре тут.
Также я совершенно не учёл что интервал опроса датчиков будет разный. И надо как-то синхронизировать обогащение данных по разным датчикам и их использование. Математика + вычисление алертов. Надо поразмышлять... порисовать диаграмки\схемки.
Проблема 2. Не запускается проект на МК
При работе столкнулся с тем что код не запускается на микроконтроллере с ошибкой выделения памяти. Происходит это при запуске пакета main. Эту проблему я уже решал в предыдущей части. Для пакета работы с датчиком max3002. Теперь накатил решение на все файлы кроме main и boot, то есть всё компилирую и заливаю на МК. Но вот теперь открыт вопрос хватит ли ресурсов микроконтроллера чтобы запустился весь проект. Сделал я только часть и половина часть логики ещё не реализована.
Проблема 3. Совершенно не удобно работать...
Проект достаточно разросся и пришлось потратить время - написать скрипты компиляции и заливки т.к. вручную ну уже совсем не вариант. Заливать прошивку приходится по одному файлу, ну и компилировать тоже приходится. Постоянно путаешься какие файлы на МК актуальные, а какие нет. От этого ошибки, да и отладка сильно растягивается. Поэтому точим пилу...
Скрипт компиляции сделал пока по простому
Просто в батничке каждый файл компилирую и складываю в отдельную директорию.
Скрипт заливки - пришлось поковырять исходники ampy, кой что перетащил и получился простенький скрипт деплоя.
Полная версия - будет в репке
Ну и настроим IDE
Получилось вполне вменяемо. 1 скрипт для компиляции, 1 скрипт для заливки (+ удаление файлов пере заливкой) и main.py заливаем вручную shift+ctrl+f10.
Проблема 4. Медленная работа датчика
Оказывается пакет DTH для датчика dth11 температуры и влажности (который 1-wire) работает ну очень медленно. И цикл опроса очень медленный ~ 500 микросекунд из-за него. То есть 2 замера в секунду, а для получения данных для вычисления пульса и оксигенации это неприемлемо. У ребёнка пульс 110-130 ударов в минуту считается нормальным. Ну и надо иметь возможность считать более высокие значения пусть с запасом 160 уд/мин. Это чуть меньше 3х ударов в секунду. А мы замеры можем брать 2 раза в секунду, это не говоря уже о вычислении кислорода в крови. Думаю что надо ориентироваться на 10-20 (до 50) мк секунд на цикл. А ещё на экран печатать, звуковые уведомления и запас вычислений надо-бы иметь.
Сперва попробовал поиграться с частотой процессора - безрезультатно. Камень изначально работал на 160, но изменение на 80 вообще никак не повлияло.
Решение - снизить частоту измерений тормозного датчика (или взять более быстрый dth-22).
Для этого сделал вачдог декоратор для для замеров через указанные интервалы (не ранее чем).
Поэтому замеры температуры помещения буду делать редко раз в 5-10 минут - чаще нет смысла. Замеры температуры (с помощью термистора тоже часто нет смысла делать - 1-5 минут устроит). Хотя он работает быстро.
При работе столкнулся с тем что код не запускается на микроконтроллере с ошибкой выделения памяти. Происходит это при запуске пакета main. Эту проблему я уже решал в предыдущей части. Для пакета работы с датчиком max30102. Теперь накатил решение на все файлы кроме main и boot, то есть всё компилирую и заливаю на МК. Но вот теперь открыт вопрос хватит ли ресурсов микроконтроллера чтобы запустился весь проект. Сделал я только часть и половина часть логики ещё не реализована. 01102 датчик (см Проблема 2) а после реализовать математику.
Показания ожидаю увидеть что-то вроде этого:
Планирую взять за основу этот материал, этот, ну и поковырять вот этот пример на си.
Ссылки
- Основная статья
Благодарности
Спасибо за внимание. Подписывайтесь это помогает продвигать канал!