Русский
Русский
English
Статистика
Реклама

Espressif

ESP32 в окружении VSCode

30.11.2020 20:13:26 | Автор: admin

В нескольких следующих статьях я хотел бы детально рассмотреть настройку окружения VSCode для работы с фреймворком ESP-IDF. Не совсем популярная комбинация ПО обладает как преимуществами, так и недостатками, которые при детальном рассмотрении мы попытаемся исправить, обойти или превратить в достоинства.

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

Поскольку предполагается многопользовательская удаленная разработка, то мы решили вначале отработать выбор и настройку самой среды разработки. После нескольких экспериментов с Eclipse, Visual Studio и QT Creator выбор пал на кроссплатформенный VSCode и плагин от разработчика Espressif IDF для работы с фреймворком ESP-IDF.

В качестве сердца контроллера рассмотрим двухъядерный микроконтроллер ESP32, который обладает рядом преимуществ, которые планируется использовать и раскрыть в проекте, а именно:

  1. ESP32 это не MCU, а SoC*, имеющий на борту:

    1. Wi-Fi: 802.11 b/g/n/e/i (802.11n @ 2.4 GHz up to 150 Mbit/s)

    2. Bluetooth: v4.2 BR/EDR and Bluetooth Low Energy (BLE)

      * Все эти интерфейсы мы планируем использовать для коммуникации с изделием. А вот аналоговый радиоканал и FPV использовать по возможности не планируем.

  2. 2 Cores 240 MHz up to 600 DMIPS

  3. ULP co-processor

В качестве ядра ESP32 использует Tensilica Xtensa 32-bit LX6, у которого есть свои недостатки, главным из который, на мой взгляд, пока является слабая производительность с операциями с плавающей точкой в реальных приложениях. Возможно, это связано с текущей версией ядра LX6 или с компилятором GCC 8 toolchain, пока нет точного понимания. Пока это создает некоторые теоретические проблемы со скоростью работы фильтра Калмана и похожих алгоритмов (реализация Madgwick и Mahony).

Есть информация, что новое ядро LX7 уже имеет большую производительность, но оно пока используется только в одноядерной версии ESP32-S2.

Также мы надеемся, что производительность с float может возрасти с выпуском нового toolchain.

Более детальное сравнение ядер Xtensa vs ARM можно посмотреть здесь.

Начиная с версии фреймворка ESP-IDF v4.0 Espressif существенно улучшила техническую поддержку и дальнейшую разработку фреймворка. Качественно улучшилась техническая документация и поддержка разработчиков на форуме компании и GitHub. Кардинально улучшилась оперативность обработки сообщений об ошибках в фреймворке и их устранение. Ускорился выпуск новых версий базового фреймворка ESP-IDF, и дополнительных на нем основанных, например Arduino-ESP32.

НАСТРОЙКА ОКРУЖЕНИЯ

Установку всех приложений и утилит мы будем рассматривать на совершенно чистую ОС (Win10Pro). Поэтому, если у вас уже установлены какие-то из перечисленных ниже приложений или утилит, то я рекомендую их удалить. Или учитывайте далее, что параллельное использование нескольких копий или версий программ из окружения может привести к непредсказуемым результатам, отличным от описанных ниже, и делайте советующие поправки на результат.

В силу некоторых причин я работаю в стеке Windows. Но все последующие рекомендации, скорее всего, будут подходить и для Linux систем. Поэтому буду признателен за комментарии владельцев Linux, если они обнаружат принципиальные отличия в настройках или поведении системы и приложений. Вопрос скорости компиляции в Win и Linux поднимать не стоит, мы прекрасно знаем, что скорость компилирования в Linux в 2-4 раза выше.

В состав окружения будут входить, в порядке очередности установки:

  1. Git

  2. Python

  3. CMake

  4. VSCode ESP-IDF (далее фреймворк)

  5. ESP-IDF Tools (далее Toolchain)

Я рекомендую все утилиты ставить в отдельную папку в корень диска, например в C:\dev , за исключением VSCode.

А проекты сохранять в папку C:\dev\esp32 .

В дальнейшем это сделает настройку фреймворка более удобной, с визуальной точки зрения, поскольку существенно сократит длину путей к утилитам Toolchain.

Git

Сначала поставим Git

Download URL: https://git-scm.com/

Installation path: C:\dev\Git

Python

Затем поставим Python

Download URL: https://www.python.org/downloads/

Installation path: C:\dev\Python39

Перед установкой убедитесь, что в папке C:\Users\UserName\AppData\Roaming\Python\Python39 не осталось скриптов от предыдущих установок. Почему скрипты для Python из Toolchain попадают в C:\Users\UserName\AppData\Roaming\Python\Python39 (внутри есть еще две папки \Scripts и \site-packages) для меня загадка. Правда скрипты попадают в эту папку только если производить установку ESP-IDF Toolchain из дистрибутива esp-idf-tools-setup-2.3.exe или более ранних версий. Буду признателен, если кто-то подскажет ответ.

(Q1) Вопрос 1: Почему скрипты для Python из дистрибутива ESP-IDF Tools попадают в папку C:\Users\UserName\AppData\Roaming\Python\Python39 (\Scripts и \site-packages), а не в папку с Python? Можно ли изменить этот путь на пользовательский?

Вообще буду признателен за комментарии и ответы на заданные по ходу статьи вопросы. В случае ответа на вопросы прошу начинать их в комментариях с префикса (Q1), где цифра после Q номер вопроса, так их будет легче обрабатывать по тексту.

CMake

Теперь поставим CMake

Download URL: https://cmake.org/download/

Installation path: C:\dev\CMake

На текущий момент Toolchain ESP-IDF использует для сборки проекта только свою версию CMake v3.13.4, которая идет в комплекте, и категорически не хочет использовать другие, в отличии от Python. Это выглядит странно, поскольку на сколько мне известно, у версий 3.13-19 нет явных проблем с обратной совместимостью.

(Q2) Вопрос 2: Какие проблемы с обратной совместимостью есть у CMake версий 3.13-19? Почему Toolchain ESP-IDF не позволяет использовать альтернативные версии CMake?

VSCode

Теперь можно установить VSCode

Download URL: https://code.visualstudio.com/

Installation path: в папку по умолчанию

VSCode plugins

Далее необходимо поставить в VSCode два плагина:

  • Espressif IDF (espressif.esp-idf-extension)

  • C/C++ IntelliSense (ms-vscode.cpptools)

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

Default Terminal Shell

Перед тем как продолжить, я настоятельно рекомендую установить CMD как оболочку терминала VSCode по умолчанию. Дело в том, что по умолчанию после установки в VSCode в качестве терминала используется MS PowerShell, но не все скрипты, которые используются в плагине Espressif IDF для работы с фреймворком корректно выполняются в powershell. А в новой версии оболочки PowerShell, которую предлагается скачать и установить, эти скрипты выполняются еще хуже. К тому же далее мы будем использовать в настройках ESP-IDF некоторый лайфхак, который в PowerShell вообще не выполняется.

Для установки оболочки терминала по умолчанию запустите терминал Terminal ==> New Terminal и выберете окне терминала в выпадающем списке опцию Select Default Shell. Далее выберите в списке Command Prompt cmd.exe

Окно терминала теперь можно закрыть.

Установка ESP-IDF

Если вы еще не убирали опцию Show Onboarding on Visual Studio Code start в настройках Espressif IDF, то после перезагрузки VSCode и выбора в правой части экрана иконки с логотипом Espressif автоматически запустится мастер настройки ESP-IDF (далее просто Мастер).

ESSPRESSIF

Данный Мастер можно также вызвать командой ESP-IDF: Configure ESP-IDF extension (onboarding.start)

Теперь можно приступить непосредственно к установке и базовой конфигурации фреймворка и Toolchain.

Для начала выберем, где хранить настройки фреймворка.

Для первого раза я рекомендую сохранить настройки непосредственно в пустой папке нового проекта, которую мы предварительно создадим, например здесь: C:\dev\esp32\device01 , и откроем в VSCode. Это немного облегчит понимание, какие настройки, когда и для чего создает данный Мастер, и какие настройки понадобятся еще.

Для сохранения настроек в нашу папку выберем опцию Workspace folder settings и укажем путь C:\dev\esp32\device01.

Нажимаем START

_ User & Workplace

Небольшое отступление.

VSCode оперирует двумя типами настроек глобальными, которые обозначаются как User и локальными, которые обозначаются как Workspace и действуют для конкретного проекта. Есть некоторое несоответствие английских названий смыслу, поскольку User ассоциируется с пользовательскими настройками, но так сложилось исторически, и этот момент нужно просто запомнить, как есть. Мы будем далее называть настройки из раздела User Глобальными, а из Workspace Локальными. Если кто-то знает более подходящую терминологию, милости прошу поделиться в комментариях.

Локальные настройки применяются после Глобальных и имеют над ними приоритет, т.е. при дублировании настроек применяются Локальные.

Настройки в VSCode можно просматривать как просто текстовые файлы JSON, так и в форме графического интерфейса VSCode. Полезной фитчей последнего является то, что в разделе измененные значения параметров относительно значений по умолчанию подкрашиваются синей полосой. Это упрощает навигацию по параметрам и также позволяет в два клика вернуться к дефолтным значениям.

Таким образом, те настройки, которые мы получим в результате работы Мастера и сохраним в папке проекта будут для нас Локальными (Workspace), а в дальнейшем мы перенесем их и в Глобальные (User).

Select Python version to use

На данном экране необходимо указать путь к вашей версии Python. Его можно выбрать из выпадающего списка. Иногда скрипты Мастера дают сбой, и после выбора версии Python из списка предлагается снова ввести путь к исполняемому файлу python.exe вручную. Тут ничего нельзя поделать, придется повторить путь вручную.

Также на экране показана определившаяся в нашей системе версия Git, которую мы поставили ранее.

Проверяем путь к Python и нажимаем Configure ESP-IDF

Configure ESP-IDF

На данном экране необходимо выбрать версию фреймворка ESP-IDF, с которой мы хотим работать (и которая будет далее скачиваться), и указать путь, где фреймворк будет сохранен.

Можно также выбрать опцию Find ESP-IDF in your system и указать папку с ранее скаченным фреймворком. Именно этой опцией, скорее всего, вы будете пользоваться в дальнейшей повседневной работе.

Если вы хотите дополнительно использовать в своих разработках класс Arduino, как компоненту проекта, то необходимо выбрать версию ESP-IDF - release/v4.0 (release branch) или v4.0.2 (release version), т.к. фреймворк Arduino-ESP32 доступен сейчас только для версии v3.3, v4.0 и v4.2.

Однако, v3.3 уже морально устарела, а v.4.2, на мой взгляд, пока еще слишком сырая и не имеет окончательного релиза, хотя к моменту окончания нашей установки она может уже и стабилизироваться.

Использование более ранних версий фреймворков ESP-IDF и Arduino-ESP32 чем v.4.0 настоятельно не рекомендуется. Чтобы убедиться в этом можно просто ознакомиться с количеством изменений для базового фреймворка v4.0 по сравнению с версиями v3.x https://github.com/espressif/esp-idf/releases/tag/v4.0 , а фреймворк Arduino-ESP32 основывается как раз на базовой версии фреймворка ESP-IDF. Версии ниже v4.0 также плохо поддерживают, или вообще не поддерживают CMake, а все наши дальнейшие изыскания будут связаны именно с этой популярной системой сборки проектов.

Примечательно, что для Arduino IDE доступен только фреймворк Arduino-ESP32 на версии v.3.3 ESP-IDF, поэтому разработка в нашем окружении VSCode дает несомненное преимущество при работе с классом Arduino, как с компонентой проекта. Правда в этой связке тоже не все так гладко, о чем мы позднее поговорим более подробно.

Если вы хотите на этапе разработки проекта получать поменьше обновлений для вашего фреймворка, то необходимо выбирать версию (release version), а не (release branch).

А мы тем временем, выбираем release/v4.0 (release branch), а в качестве пути к фреймворку ESP-IDF укажем папку C:\dev , к которой автоматически добавится адрес \esp-idf .

Нажимаем Check here to download, после чего начинается процесс загрузки с GitHub.

Ждем несколько минут и после окончания загрузки внезапно видим ошибку:

Дело в том, что в плагине Espressif IDF версии 0.5.1 вот уже много месяцев присутствует ошибка для выбора release/v4.0 (release branch) после загрузки репозитария v4.0 система пытается найти архив для версии 4.0.2

Будем надеяться, что в будущих версиях эту ошибку исправят. Соответствующую проблему я зарегистрировал на GitHub https://github.com/espressif/vscode-esp-idf-extension/issues/223

А нам остается только выбрать v4.0.2 (release version) и повторить загрузку.

После успешной загрузки и распаковки фреймворка Мастер предложит перейти к настройке утилит Toolchain.

Нажимаем Go to ESP-IDF Tools setup

ESP-IDF Tools Configuration

На данном экране выбираем Download ESP-IDF Tools

Вторая опция выбирается если у вас уже есть папка с предварительно скаченным или клонированным с GitHub фреймворком.

Теперь необходимо указать папку, в которую будет загружен Toolchain ESP-IDF Tools. Укажем C:\dev\.espressif .

Обратите внимание, ниже перечислены версии всех утилит, входящих в комплект Toolchain для ESP-IDF v4.0.2 именно с ними будет гарантироваться работа (компиляция) как самого фреймворка ESP-IDF, так и компоненты Arduino-ESP32 v4.0.

Tool: xtensa-esp32-elf Version: esp-2020r3-8.4.0

Tool: esp32ulp-elf Version: 2.28.51.20170517

Tool: cmake Version: 3.13.4

Tool: openocd-esp32 Version: v0.10.0-esp32-20200709

Tool: mconf Version: v4.6.0.0-idf-20190628

Tool: ninja Version: 1.9.0

Tool: idf-exe Version: 1.0.1

Tool: ccache Version: 3.7

Нажимаем Download

Ждем несколько минут и в самом конце установки получаем в консоли ошибку:


ERROR: Failed building wheel for psutil

ERROR: Command errored out with exit status 1:

VisualStudio is not installed; get it from http://www.visualstudio.com/en-au/news/vs2015-preview-vs

error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/

...

WARNING: You are using pip version 20.2.3; however, version 20.2.4 is available.

You should consider upgrading via the 'C:\dev\.espressif\python_env\idf4.0_py3.9_env\Scripts\python.exe -m pip install --upgrade pip' command.


Оказывается, для установки одной из компонент wheel for psutil требуется ее предварительно скомпилировать с участием MS С++14 и именно из состава Visual Studio! Ну кто бы мог подумать?!

Я не стал пока искать альтернативных решений, а просто перешел по предложенной ссылке https://visualstudio.microsoft.com/downloads/ , скачал и установил VisualStudio.

После чего вернулся в окно VSCode и снова нажал Download.

Забегая вперед, скажу, что в этот раз установка ESP-IDF Tools закончилась успешно, все компоненты скомпилировались и установились. Однако мне осталось не ясным, нужен ли для успешной установки именно компилятор С++14 и состава Visual Studio, или подойдет любой другой компилятор С++14, установленный в системе?

Если у вас не было данной ошибки, значит в вашей системе стояли необходимые компиляторы. Буду признателен, если вы поделитесь описанием вашей конфигурации. С какими компиляторами установка ESP-IDF Tools завершилась у вас удачно?

(Q3) Вопрос 3: С какими компиляторами С++14, помимо штатного из состава Visual Studio, может успешно завершиться установка ESP-IDF Tools? Нужно ли обязательно при этом иметь в системе установленную программу Visual Studio, или достаточно только компилятора?

_ PIP

Перед тем, как вы тоже повторите действия выше с установкой Visual Studio и нажмете Download обратите внимание на последние строчки сообщения об ошибки. Там сказано, что в системе используется устаревшая версия pip в то время, как доступна более новая.

PIP это система управления пакетами, которая используется для установки и управления программными пакетами, написанными на Python. На сколько я помню, pip попадает в систему автоматически при установке Python версии > 3.4.

Я рекомендую перед повторной попыткой установки ESP-IDF Tools устранить это замечание, чтобы данные строки больше не появлялись в консоли и не мешали восприятию сообщений.

Для этого запустим командную стоку CMD из меню Пуск и введем сначала команду C:\dev\.espressif\python_env\idf4.0_py3.9_env\Scripts\python.exe -m pip install --upgrade pip , а затем python -m pip install --upgrade pip

Дело в том, что первая команда обновит pip в локальной копии idf4.0_py3.9_env, а вторая команда обновит pip уже в основной системной версии Python.

_ PIP cache

Еще один нюанс кроется в кэше pip. Если после всех установок и настроек ESP-IDF вы вдруг решите удалить Visual Studio со всеми дистрибутивами C++, а потом решите повторно запустить мастер настройки ESP-IDF, то процесс установки ESP-IDF Tools пройдет успешно, как ни в чем не бывало. Дело в том, что в процессе предыдущей установки pip сохранил в кэш результаты всех успешных компиляций. Кэш находится по адресу C:\Users\UserName\AppData\Local\pip\cache , и далее, при повторных установках, если в кэше находится файл для утилиты подходящей версии, то он берется именно из кэша. Новые файлы будут компилироваться только для новых версий утилит из Toolchain.

Для того чтобы провести полную переустановку Toolchain для ESP-IDF, без использования кэша pip, достаточно просто удалить папку C:\Users\UserName\AppData\Local\pip\cache\wheels , это вернет в консоль сообщение о недостающем дистрибутиве С++14, если таковой отсутствует в вашей системе.

Теперь скачиваем Visual Studio https://visualstudio.microsoft.com/downloads/ , устанавливаем его с одной единственной опцией Разработка классических приложений на C++, возвращаемся в окно VSCode и

Примечание: не стоит пока выбирать опцию Разработка на Python, поскольку это установит в систему еще одну копию Python более низкой версии, что может создать трудности для дальнейшей настройки и работы фреймворка ESP-IDF.

Возвращаемся на шаг назад, нажав на стрелку влево над надписью ESP-IDF Tools, нажимаем Download ESP-IDF Tools и снова нажимаем Download.

В случае успешной установки Toolchain станет доступна кнопка Go to next step.

В логе ниже мы увидим снова предупреждение, что используется устаревшая версия pip. Да как так-то?..

Дело в том, что если мы отмотаем лог наверх, то найдем сообщение:

Creating a new Python environment in C:\dev\.espressif\python_env\idf4.0_py3.9_env ...

Да, Мастер создал новую версию локального окружения Python, в которую поместил версию pip, идущую в комплекте с Toolchain, а не ту, которая установлена и обновлена в системном Python. Почему Мастер не взял системную версию pip неизвестно. Будем надеяться, что в будущих версиях Матера это поправят.

Чтобы снова обновить локальную версию pip снова выполняем в командной строке команду C:\dev\.espressif\python_env\idf4.0_py3.9_env\Scripts\python.exe -m pip install --upgrade pip

Нажимаем Go to next step

Verify ESP-IDF Tools

Теперь мастер предлагает нам проверить все абсолютные пути для утилит из Toolchain.

Обратите внимание, мастер сделал локальную копию нашего Python39 со всеми скриптами и окружением - idf4.0_py3.9_env, и менять этот путь не стоит.

Также учтите, что несмотря на установленный в системе CMake v3.19 ESP-IDF использует свой CMake v3.13.4, и это доставит нам в дальнейшем некоторые сложности. Заменить путь к CMake более новой версии на данном этапе пока не удастся, т. к. на следующем шаге проверки Мастер укажет на несоответствие версий и не даст завершить настройку. Поэтому оставляем все как есть.

Нажимаем Click here to check tools exist

На этом экране Мастер уже сам проверяет, все ли версии утилит, согласно их абсолютным путям, соответствуют версиям, которые с его точки зрения являются правильными.

Если все соответствует везде появятся положительные галочки и сообщения are satisfied.

Нажимаем Go to next step

ESP-IDF Tools have been configured

И вот она, заветная надпись об успешном окончании установки.

Настройки проекта

Однако не спешите пока открывать примеры кода. Давайте посмотрим вначале, что же записал мастер настройки ESP-IDF в нашу папу, которую мы указали в самом начале как C:\dev\esp32\device01

В данной папке появилась папка .vscode с единственным файлом settings.json который содержит всего пять строк:

{

"idf.espIdfPathWin": "C:\\dev\\esp-idf",

"idf.toolsPathWin": "C:\\dev\\.espressif",

"idf.customExtraPaths": "C:\\dev\\.espressif\\python_env ",

"idf.customExtraVars": "{\"OPENOCD_SCRIPTS ",

"idf.pythonBinPathWin": "C:\\dev\\.espressif\\python_env "

}

Это пять основных переменных, которые определяют какой именно фреймворк ESP-IDF и Toolchain будут применяться для компилирования и работы с проектом.

Но это еще не все настройки, которые нам необходимы.

Теперь давайте создадим еще одну папку, например C:\dev\esp32\device02 , откроем ее в VSCode и выполним команду ESP-IDF: Add vscode configuration folder, далее будем для краткости называть ее ESP:Avcf. Для выполнения команды нажмите F1 и начните набирать ESP, далее уже можно выбрать команду из списка.

Теперь в папке .vscode появилось уже 4 файла. Причем в фале settings.json нет переменных, которые мы получили после мастера настройки ESP-IDF. А в фале c_cpp_properties.json как раз есть ссылки на эти переменные с путями к фреймворку и Toolchain.

Более того, если бы мы выполнили команду ESP:Avcf в нашей первой папке device01, то наши настройки были бы перезаписаны новым файлом settings.json .

Все дело в том, что, к сожалению, эти две команды работают не совсем взаимосвязано. Мастер настройки ESP-IDF запоминает в переменных среды idf пути к фреймворку и toolchain и сохраняет их, в нашем случае, Локально. А команда ESP:Avcf создает конфигурационные файлы ВСЕГДА используя Глобальные переменные.

Теперь получается, для того чтобы корректно заработали настройки в c_cpp_properties.json, нам необходимо сохранить наши переменные Глобально? И да, и нет.

Дело в том, что, как мы уже говорили ранее, параметры Workspace (Локальные) применяются после параметров User (Глобальных), и если и там и там есть одни и те же параметры, то Workspace имеет преимущество перед User и перезаписывает их. Таким образом, мы может как внести наши переменные в User, так и добавить их в наш Workspace, после параметров, созданных командой ESP:Avcf, в низ файла settings.json, непосредственно в папку .vscode в нашей папке проекта . И то и другое будет работоспособно.

Однако, если вы ведете совместную разработку проекта, например на GitHub, то вам я рекомендую обязательно внести все настройки в файл settings.json в самом проекте, чтобы гарантировать себе, что проект будет собираться в одном и том же фреймворке и Toolchain у всех участников разработки.

В свою очередь, если вы сохранили настройки для какого-то конкретного фреймворка и Toolchain Глобально, то не забудьте об этом, когда будете пробовать собирать проект в другом фреймворке.

Внести настройки переменных idf в User можно как вручную, так и еще раз запустив Мастер, выбрав в самом начале опцию User settings и далее указав папку уже со скаченным фреймворком ESP-IDF.

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

ПРИМЕР КОДА и КОМПИЛЯЦИЯ

Чтобы открыть библиотеку примеров кодов ESP-IDF выполним команду ESP-IDF: Show ESP-IDF Examples Projects.

В открывшемся списке выберем проект get-started\blink и нажмем кнопку Crate project using example blink. Разместим проект в папке esp32.

Теперь откроем файл .vscode\settings.json и добавим в конец файла наши настройки из папки device01. Будьте внимательны с синтаксисом JSON, не забудьте про запятые и фигурные скобки.

Теперь перейдем на фаqл с кодом проекта main\blink.c .

Обратите внимание, после открытия проект содержит две проблемы - BLINK_GPIO и portTICK_PERIOD_MS подкрашены красным системой проверки синтаксиса C/C++ IntelliSense. Мы разберем этот момент чуть позже, следующей статье про тонкие настройки окружения VSCode.

А сейчас выполним команду ESP-IDF: Build your project.

Первый процесс компиляции занимает несколько минут, поскольку создается папка build, последующие будут происходить значительно быстрее. В конце компиляции появится сообщение Build Successfully. Это значит, наши Локальные настройки применились успешно.

К сожалению, в случае компиляции проекта командой ESP-IDF: Build your project не происходит отображения лога компиляции в окне терминала. Но можно выполнить эту команду другим способом, из меню Terminal => Run Task => Build Build project или Terminal => Run Build Task

Если окно терминала не было открыто, оно откроется автоматически и в конце компиляции в терминале появится сообщение Project build complete. To flash, run this command:..

Выполнение команд из меню Terminal обеспечивается скриптами в файле .vscode\task.json , но их ход выполнения немного отличается от аналогичных команд через меню F1, например ESP-IDF: Build your project.

На этом мы пока прервемся мы смогли сделать базовую настройку плагина Espressif IDF для работы с VSCode и успешно скомпилировали один из примеров кода из библиотеки фреймворка.

В следующей статье мы займемся более тонкой настройкой окружения VSCode и самого фреймворка рассмотрим утилиту menuconfig, новые скрипты для task.json и решим проблему с не всегда корректной подсветкой синтаксиса IntelliSense, также рассмотрим выполнение команд фреймворка из командной строки.

Подробнее..

ESP32-C3 первое знакомство. Заменим ESP8266?

12.02.2021 18:18:50 | Автор: admin

Новая игрушка

В ноябре 2020 года Espressif анонсировала новую SoC под названием ESP32-C3. Они разослали несколько инженерных прототипов для тестирования и первого ознакомления.

Так довелось, что мне попался один из них на руки и я успел немного поиграться с ним. Надеюсь, мой краткий опыт будет интересен сообществу, так как тут есть на что посмотреть и ESP32-C3 имеет хороший шанс получить свою нишу в мире встраиваемых систем, так и в области DIY. Меня как раз больше интересует подход со стороны DIY, поэтому статья будет больше с этим уклоном.

В чём разница?

ESP32-C3 пытается занять нишу между ESP32/ESP32-S и нашим старым другом ESP8266. Даже больше хочет вытеснить ESP8266, чем быть дополнением к линейке ESP32.

Не знаю что там будет с ценами, но переход на RISC-V, упрощение периферии и прочее может сделать ESP32-C3 достаточно привлекательным, что бы он смог заменить ESP8266 полностью. В итоге мы получим достойную замену старичку, с которым мы вместе с 2014 года.

В таблице ниже я привёл основные отличия ESP32-C3 от предыдущих ESP32 и ESP32-S2. Так же у Espressif недавно был анонсирован ESP32-S3 с двумя ядрами, но я пока не буду его приводить ниже в силу отсутствия его в широкой продаже.

ESP32

ESP32-S2

ESP32-C3

CPU

Xtensa LX6

Xtensa LX7

RISC-V (RV32IMC)

Частота CPU

160 / 240 MHz

160 / 240 MHz

160 MHz

Количество ядер CPU

2 / 1

1

1

ULP CPU

ULP-FSM

ULP-RISC-V

ULP-FSM

-

SRAM

520 KB

320 KB

400 KB

RTC SRAM

16 KB

8 KB

8 KB

WiFi

802.11bgn

150 Mbit

802.11bgn, 802.11mc

150 Mbit

802.11 bgn, 802.11mc

150 Mbit

Bluetooth

4.2 BR/EDR BLE

-

Bluetooth 5

GPIO

34

43

22

12-bit ADC

1

18 каналов

2

20 каналов

2

6 каналов

8-bit DAC

2

2

-

Touch sensor

10

14

-

SPI

4

4

3

I2S

2

1

1

I2C

2

2

1

UART

3

2

2

SDIO

1

-

-

Ethernet MAC

1

-

-

PWM

16

8

6

USB OTG

-

1

-

Потребление

До 240 мА

До 310 мА

До 325 мА

Modem sleep

27 - 68 мА

12 - 19 мА

15 - 20 мА

Light sleep

0,8 мА

0,45 мА

0,13 мА

Deep sleep

0,01 - 0,15 мА

0,02 - 0,19 мА

0,005 мА

Корпус

48 выводов

56 выводов

32 вывода

Как ESP8266, но не все выводы такие же

DevKit плата

ESP32-C3 приехал ко мне в виде платы ESP32-C3-DevKitM-1, на которой установлен модуль ESP32-C3-Mini-1 со встроенной 4 МБ флеш-памятью.

Так же на этой плате стоит USB-Serial конвертер CP2102 для подключения и прошивки по USB. На GPIO подключен RGB светодиод WS2812.

Сам модуль ESP32-C3-Mini-1 физически по размеру заметно меньше того же ESP-12E на базе ESP8266. И в то же время ESP32-C3 имеет намного больше возможностей.

"Engineering Sample Notes"

С платой была одностраничное приложение с некоторыми пометками.

Например, там написано, что потребление на DevKit'е ещё не достаточно оптимизировано и потому не рекомендуется для оценки в Deep-sleep режиме.

Так же сказано, что в данной версии чипа поддержка USB Serial/JTAG отсутствует, но она будет присутствовать в финальной версии.

Текущая версия ESP-IDF в процесс работы по добавлению поддержки ESP32-C3. Работа в этом направлении ведётся в ветках "master" и "release/v4.3".

Поддержка ESP-IDF

ESP-IDF является официальным фреймворком для разработки под ESP32. Сама среда поддерживает всю линейку ESP32. Большинство примеров можно собрать под Xtensa LX6/LX7, так и под RISC-V. Переключение сводится к одной команде "idf.py set-target esp32c3", которая выставляет riscv32-esp-elf- и прочие параметры в sdkconfig. Теперь после компиляции у нас готова прошивка для нового ESP32-C3.

Предварительно надо подготовить окружение в зависимости от ОС: Windows, Linux или macOS.

git clone --recursive https://github.com/espressif/esp-idf.gitcd esp-idf# Linux/macOS./install.sh# Windowsinstall.ps1

Установочный скрипт скачает компиляторы и дополнительные пакеты для ESP-IDF. После этого надо импортировать окружение для начала работы:

# Linux/macOS. ./export.sh# Windowsexport.bat

Рекомендую для проверки собрать "hello world":

cd examples/get-started/blink# По-умолчанию настроено для ESP32, но если надо собрать прошивку для ESP32-S2idf.py set-target esp32s2# Или для ESP32-C3idf.py set-target esp32c3# Сборка, прошивка, USB консольidf.py build flash monitor

Не все примеры собираются под ESP32-C3, но Espressif активно работает над ESP-IDF для поддержки этого чипа.

CoreMark

Ради интереса запустил CoreMark бенчмарк для оценки производительности нового RISC-V ядра и сравнил эти данные с предыдущим ESP32 (к сожалению, у меня нет ESP32-S2 для более широкого сравнения).

Ниже приведены попугаи для разной частоты процессора и для общего ознакомления добавлены значения при компиляции с выключенными оптимизациями (-O0):

CoreMark 1.0

GCC

Частота CPU

ESP32-C3

388

GCC8.4.0 -O3

160 МГц

98

GCC8.4.0 -O0

160 МГц

ESP32 (одно ядро)

313

GCC8.4.0 -O3

160 МГц

77

GCC8.4.0 -O0

160 МГц

469

GCC8.4.0 -O3

240 МГц

115

GCC8.4.0 -O0

240 МГц

Я сделал измерения ESP32-C3 на 80 МГц, но значения получились ровно в два раза ниже, что и предполагалось и поэтому в таблице не привожу.

В попугаях RISC-V получился примерно на 24% быстрее. Конечно, обычные задачи, которыми мы загружаем такие микроконтроллеры будут сильно отличаться от синтетических бенчмарков, но было интересно посмотреть.

Надо так же не забывать, что ESP32 поддерживает работу на частоте 240 МГц, а у ESP32-C3 максимальная частота только 160 МГц. Так же ESP32 имеет два ядра, которые можно задействовать в зависимости от задач.

Но повышенная частота 240 МГц так же скажется на потреблении устройства. То есть, ESP32-C3 за каждый попугай будет просить меньше электронов (я не измерял потребление, но есть несколько замеров других наблюдателей).

ESP RainMaker

Вместе с этой новой платой Espressif продвигает платформу ESP RainMaker. Это некая среда, которая позволяет быстро создавать концепты и прототипы для IoT устройств.

На ESP32-C3-DevKitM-1 плате уже была прошивка ESP RainMaker, с которой можно получить общее представление об этом платформе.

Идея примерно такова:

На плате настроен обычный бинарный переключатель. При подключении платы через USB консоль мы получаем QR код, который надо отсканировать в приложении ESP RainMaker (доступно для Android и iOS) для первоначальной конфигурации настроек WiFi и добавлении этого устройства в приложение.

После этого можно управлять встроенным RGB светодиодом на плате через Espressif облако, которое находится на Amazon AWS.

ESP RainMaker SDK позволяет создавать разнообразные устройства, не только бинарный переключатель как в примере. Это может быть датчик измерения температуры или влажности, LCD экран, несколько выключателей сразу или много разных устройств вместе сразу. В последнем случае одна плата будет показана как несколько устройств в приложении.

Для того, что бы поиграться с ESP RainMaker не обязательно ждать когда можно купить ESP32-C3. Сама платформа замечательно работает на ESP32 и ESP32-S2. Для сборки прошивки достаточно иметь настроенный ESP-IDF:

git clone --recursive https://github.com/espressif/esp-rainmaker.gitcd esp-rainmaker/examples/switch# По-умолчанию настроено для ESP32, но если надо собрать прошивку для ESP32-S2idf.py set-target esp32s2# Или для ESP32-C3idf.py set-target esp32c3# Сборка, прошивка, USB консольidf.py build flash monitor

В консоле появится QR код и дальше уже всё в приложении.

Выводы

Большее количество микроконтроллеров для фанатов DIY всегда позитивно, так как при большем выборе можно подобрать более подходящий МК и плату в зависимости от того, что более важно в новом проекте.

Всегда будут востребованы микроконтроллеры с большим количеством периферии, так и мелкие с хорошим соотношением потребления к производительности, но имеют достаточно памяти для разных свистелок и хотелок.

Отдельное спасибо Espressif за то, что сделали WiFi доступным для встраиваемых устройств 7 лет назад. А там и другие производители подтягиваются. Мы только в плюсе.

Подробнее..

Умный дозатор таблеток или мой первый опыт в IoT

22.01.2021 16:14:24 | Автор: admin

Автоматический дозатор


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


Немного про IT Академию Samsung


Перед тем, как рассказать про мою разработку, хочу поделиться впечатлениями от первых занятий в IT Академии Samsung по треку Интернет вещей, который я прошел в НГТУ в прошлом учебном году. Началось всё с прошивки контроллера STM32 RIOT OSИ всё это через Linux и командную строку. Честно скажу, что опыт незабываемый настолько, что я уже начал переживать, что в 2020 году люди все еще программируют в командной строке и после компиляции заливают образ вручную на контроллер. Но уже на следующем занятии нас познакомили с инструментами, которыми пользуются разработчики, а всё предыдущее было для демонстрации того, что происходит, когда мы нажимаем волшебную кнопку Build в среде разработки. Хочу также отметить, что за весь курс мы ни разу не программировали с помощью фреймворка Arduino, что, как по мне, является огромным плюсом, поскольку в реальных задачах и на производствах данный фреймворк (я надеюсь) не используется. Нас познакомили с Mbed, RTOS, а также ESP-IDF (которая, к слову, базируется на FreeRTOS). Мне нравилось, что каждый кейс начинался с объяснения, для чего будет использоваться данное устройство, и какие технологии уместно применять в нем.


По окончании обучения каждый студент представлял свой проект по Интернету вещей для получения сертификата IT Академии Samsung. Это мог быть простой светильник с функцией включения по Bluetooth, или что-то посложнее Мне хотелось сделать устройство, которое будет сложным с точки зрения программирования, при этом решать действительно важную проблему. Поэтому я остановился на умном дозаторе таблеток.


В основе умного дозатора лежит простая идея выдача заранее распределённых лекарственных препаратов по индивидуальному расписанию. При этом хотелось, чтобы расписание можно было настраивать с помощью любого устройства, которое имеет доступ к домашней сети. Но обо всём по порядку.


Про разработку


Как же я пришёл к тому устройству, что есть сейчас, получившему название AutoPill?


Шаг 1. Определение функционала и выбор микроконтроллера


Поскольку с идеей я разобрался, необходимо было переходить непосредственно к реализации. Я опросил знакомых, что им бы хотелось видеть в этом устройстве. Отсёк те идеи, которые посчитал не моим путём, и составил описание функционала будущего устройства получилось около 15 пунктов. А затем снова опросил тех же знакомых со словами выбери из данного списка самые важные, по твоему мнению, пункты. Это позволило уже на начальном этапе определить тот основной функционал, который нужен именно потребителю, а не тот, который проще всего реализовать или интересен мне.


Итак, что я хотел получить на выходе? Как мне казалось на тот момент, успеть это выполнить к сроку (конец учебного года) вполне реально.


  • Устройство должно быть таким, чтобы пользователь (пациент) не мог по ошибке открыть сектора с хранящимися препаратами. Сектора должны открываться по расписанию автоматически и блокироваться при открытии следующего отсека.
  • Устройство должно сигнализировать пользователю о необходимости принять новую порцию препаратов.
  • Отсеков должно хватать более чем на один день.
  • Конструкция устройства должна быть компактной (в качестве примера большинство приводили шкатулки или небольшую коробку).
  • Гибкая настройка расписания: возможность задать периодичность с шагом в 30 минут.
  • Возможность посмотреть, принял пользователь препараты или нет.

И необходимо проработать следующие особенности:


  • Как открывать/закрывать отсеки?
  • Как понять, когда пользователь принял препараты, чтобы отключить индикацию?
  • Как сообщать пользователю состояние?
  • Как настраивать устройство?

Начнём с самого очевидного: для настройки и передачи состояния таблетницы было предварительно решено использовать Bluetooth или Wi-Fi, поскольку у большинства людей в доме есть устройство, поддерживающее тот или иной протокол.


Чтобы понять всё остальное, необходимо было разработать конструкцию таблетницы. На этом этапе я также выбрал микроконтроллер ESP32, поскольку у него есть множество встроенных возможностей, которые позволят в дальнейшем значительно расширить платформу (например, ESP-NOW, ESP-Touch и ESP-Mesh), а бонусом была поддержка двух необходимых протоколов связи WiFi и Bluetooth.


Шаг 2. Конструкция устройства


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


Возможные типы дозаторов
  1. Набор контейнеров самый популярный тип, модификаций которых несколько десятков, вот один из них
    Набор контейнеров

    Aidapt Deluxe VM930AB
  2. Карманная таблетка этот тип я назвал так, потому что он округлой формы, с отсеками, расположенными по кругу. В центре есть место для таймера, который может сигнализировать о необходимости принятия лекарств
    Карманная "таблетка"

    Bradex недельная с таймером KZ 0439

Потом я попытался найти какой-нибудь готовый механизм, оказывается, на YouTube даже было 1-2 устройства, похожих на дозаторы, правда, их надёжность оставляла желать лучшего...


Какие дозаторы были найдены


Я принял решение разработать свой корпус устройства, не забывая и о функциональности, обозначенной в шаге 1.


Для того, чтобы разработать конструкцию, было бы неплохо выучить какой-нибудь САПР. К счастью, в лицее я научился работать в Компас-3D, что сильно упростило задачу. Вторая проблема изучить, из каких материалов можно сделать из 3D модели настоящий прототип. Мой выбор пал на 3D-принтеры, поскольку это, по моему мнению, самая простая возможность создать прототип и напечатать деталь практически любой сложности.


Итак, представляю самую первую версию сборки из, на тот момент, трёх деталей


Инженерам не открывать!

1я версия устройства


Если вы все-таки взглянули на это и уже стремитесь закидать меня тапками, спешу оправдаться это лишь основные внешние конструктивные элементы, которые в дальнейшем были сильно доработаны. Сразу скажу об ошибках, которые были допущены при проектировании корпуса эта информация может пригодиться тем, кто сам хочет или уже начал разработку собственного корпуса для устройства, и это его самый первый опыт:


  1. Не поленитесь посмотреть размеры столов самых популярных принтеров, чтобы у вас был широкий выбор, где заказать печать или попросить по дружбе
  2. При проектировании, если вы раньше ни разу не видели принтеры вживую (как я, например), посмотрите, как эта технология реализована, и какие детали ей сложнее всего печатать, постарайтесь оптимизировать модель под более простую печать для уменьшения времени печати и количества брака. Наглядный пример, как делать не надо, можете посмотреть на первую версию крышки устройства. У неё очень пологий угол наклона, что делает печать без поддержек невозможной, и даже с поддержками шанс брака очень велик, так как пластик при такой толщине может просто не сцепиться.
  3. Не печатайте на плохо откалиброванных принтерах или принтерах с низкой точностью печати, особенно это касается конструктивно важных деталей (шестерни). Тоже немного негативного опыта я получил при печати основы на дешёвом принтере: вышло нарушение соосности деталей, что создало множество проблем, начиная с неравномерного трения при разных положениях отсеков, и заканчивая длительной подгонкой деталей.

Очень хотелось бы показать все подробности создания, от начала с тарелкой, к которой была приклеена основа от скотча, до картонного редуктора, но, к сожалению, фото осталось немного. Поэтому сразу продемонстрирую, что получилось:


Сборка последней версии


На данной иллюстративной сборке не видно таких элементов, как:


  • нижняя крышка основы, в которой расположен редуктор и посадочные места для всех электронных компонентов;
  • шестерня (к сожалению, пришлось просчитывать свою шестерню для плоскоцилиндрической передачи), в остальном редукторе используются шестерни из первого попавшегося набора шестерёнок для электроконструктора.

В целом, можно заметить изменение крышки: появилась петля, она стала плоской сверху для более простой печати, да и сама конструкция стала напоминать большую таблетку. В дальнейших итерациях уже появились технические отверстия под различные датчики и индикаторы.


Шаг 3. Электроника


Конечно же, разработка корпуса не происходит изолированно, при разработке должны учитываться размеры всей электронной начинки, которую вы собираетесь расположить внутри. А на момент создания прототипа, когда вы используете заранее распаянные датчики на платах, места потребуется немного больше, и необходимо также учитывать расположение и размеры плат. Что же требуется, чтобы таблетница заработала?


  1. Микроконтроллер. В моём случае я взял ESP32 Dev Kit с уже распаянным на плате понижающим регулятором напряжения, а также отладчиком.
    ESP32 Dev Kit
    ESP32 Dev Kit
  2. DC мотор мотор коллекторного типа, наверное, один из самых популярных, используется в радиоигрушках.
    DC двигатель
    DC двигатель
    Рабочее напряжение: 3 Вольт ~ 8 Вольт
    Ток потребления при напряжении 3,6В: 240 мА
    Тип двигателя: коллекторный
    Вес: 26 гр
  3. Щелевой датчик датчик, необходимый для отслеживания количество оборотов редуктора. В устройстве стоит датчик с уже распаянным компаратором LM393 (на изображении приведён датчик непосредственно с платой развязки).
    Щелевой датчик ITR9608
    Щелевой датчик
    Рабочее напряжение: 3.3 Вольт ~5.0 Вольт
    Ток потребления энкодера: 1.4 мА
    Ширина паза в щелевом датчике: 5 мм
    Вес: 8 гр
    Рабочая температура: от 0 до +70
  4. Датчик наклона датчик необходим, чтобы определять, взял ли пациент лекарство из устройства. Поскольку отсеки глубокие и достать пальцем сложно, предполагается что пользователь будет вынимать необходимые препараты, наклоняя таблетницу.
    Датчик наклона SW-200D
    Датчик наклона SW-200D
    Рабочее напряжение: до 12 В
    Потребляемый ток: до 20 мА
    Время отклика: 2 мс
    Время жизни: 100000 циклов
    Размер: 12 x 3,6 мм
    Вес: менее 1 гр
    Рабочая температура: от -40 до +80

Помимо датчиков, также использовался MOSFET-транзистор, который служил ключом для запуска и остановки мотора. Собственно, это была вся электроника.


Сейчас для повышения точности позиционирования также планируется использовать еще и датчик чёрной линии, но об этом позже.


Шаг 4. ПО


Хочется отметить, что, конечно, к шагам 2-4 после первой итерации я возвращался не раз, т.к. шла и доработка конструкции, и создание ПО. И хочется уточнить, что шаги ни в коем случае не выполнялись одновременно, а именно доводились до логического завершения, потому что ПО сильно зависело от текущей конструкции.


Самый первый вопрос разработчика ПО для IoT будет следующим (по крайней мере для меня): существует ли IDE для разработки устройств IoT? Почти для каждого микроконтроллера существует своя IDE, но лично я пользовался универсальной средой PlatofrmIO. В течение всего цикла разработки я ни разу не пожалел об этом решении.


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


Язык, на котором написан код проекта: C. Честно сказать, после нескольких лет написания кода на языках Java, Kotlin и иногда C#, я, хоть и был морально готов к этому испытанию, но не ожидал, что встречу столько неудобств. Но в итоге это оказался очень классный опыт.


Прежде чем приступить к разработке ПО, я изучил на просторах GitHub, как вообще пишут программы под ESP-IDF, и, к моему большому удивлению, результатов (если не считать библиотеки с примерами) оказалось крайне мало. Ладно, подумал я, и решил разработать свою архитектуру для ПО.


Вся программа была разбита на модули. Каждый модуль отвечал за точно описанную функциональность, при этом, если одному модулю необходимы другие модули для работы (например, модулю сервера необходим модуль аутентификации), то он должен сам их инициализировать. Тем самым обеспечивается самостоятельность каждого модуля. При этом, если модулю необходимо обрабатывать какие-то пользовательские события, то это должно происходить исключительно в главном классе, а сам модуль ничего не должен знать об этом. Данное условие позволяет использовать уже написанные модули в других проектах без необходимости переписывания их логики.


Если говорить о том, что получилось, то в целом проект остаётся читаемым и легко масштабируется. Единственный недостаток данного подхода в том, что класс main содержит уж слишком много обработок пользовательских действий, и в дальнейшем было бы хорошо добавить также слой, который частично берёт на себя обработку пользовательских действий в пределах определённого набора функционала.


После того, как мы разобрались с архитектурой, приступаем к планированию, в каком порядке мы будем реализовывать наши модули:


  1. Работа с периферией. Самый очевидный модуль, причём я принял решение разработать отдельные модули для отображения и для входных данных. Как впоследствии оказалось, достаточно было сделать только тот, что для входа.
  2. Подключение устройства к Wi-Fi. Я решил именно подключаться к Wi-Fi и разворачивать свой мини-сервер, поскольку станций Интернета вещей не было ни у кого из опрошенных, а Wi-Fi есть дома всегда. Подключение производилось через WPS, с возможностью изменения в настройках.
  3. Создание HTTP-сервера на устройстве. Очевидно, что для такого сегмента использование протокола HTTP неудачное решение, но на данный момент я его не заменил, поскольку мне важна возможность использования устройства в изолированной сети, что не даёт возможности автоматически продлевать сертификат, а с самоподписанными сертификатами на сервер пропускает разве что Internet Explorer, и то с предупреждениями о том, что это всё мошенничество.
  4. Реализация модуля безопасной авторизации. В данном случае мы говорим о Digest-аутентификации. Данная аутентификация позволяет в пределах локальной сети сделать устройство максимально устойчивым к взлому.
  5. Модуль планировщика. Наверное, самый важный модуль, который должен поворачивать сектор точно при наступлении необходимого времени. При этом, данный модуль должен также поддерживать синхронизацию времени (т.е. перераспределение задач и автоматическое устранение ошибок)

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


Но, приступая к реализации самого, казалось бы, банального, первого модуля для работы с периферией, я столкнулся с объемной и непонятной документацией. Я думаю, это один из основных факторов, почему каких-либо готовых проектов на ESP-IDF мало. К счастью, у разработчиков есть GitHub, который, благодаря примерам, сильно упрощает понимание. Единственное, не забудьте выбрать нужную ветку с вашей версией ESP-IDF! Пожалуй, это единственная проблема данного фреймворка. А в остальном он очень неплох. Внутри него есть практически всё, что раньше вы добавляли с помощью библиотек: WiFi, WPS, HTTP-сервер, NTP, различные функции хэширования и многое другое.


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


Варианты использования устройства


Для управления параметрами одного устройства можно использовать веб-интерфейс как в роутерах, т.е. при подключении к веб-интерфейсу пользователю необходимо ввести логин и пароль, после чего он попадает в непосредственно настройки и состояние таблетницы. При этом микроконтроллер служит, по сути, сервером, к которому подключаются любые устройства в домашней сети. При входе используется digest аутентификация, как я упоминал ранее. В результате веб-интерфейс выглядит минималистично и приятно.


Веб-консоль настройки

Веб-консоль


Также был разработан планировщик, который запускает поворот таблетницы, согласно тонкой настройке расписания. При этом планировщик разработан таким образом, что он корректно обрабатывает синхронизацию времени, что немаловажно для такого устройства. Синхронизация времени происходит при помощи NTP-сервера, который может находится как локально, так и в глобальной сети.


Что получилось?


Сам код устройства находится в открытом доступе, и вы можете найти его здесь.


Давайте подытожим.


Для кого разработан AutoPill? Целевая аудитория люди с деменцией и плохой памятью, которые принимают медицинские препараты на постоянной основе. Стоит учитывать, что данное устройство не способно полностью заменить близкого человека или медицинского работника, который выдаёт медицинские препараты, но способно значительно упростить процесс выдачи и контроля принятия лекарств пациентом. Необходимо лишь раз в неделю или реже раскладывать препараты по секторам, а далее удалённо отслеживать принятие препаратов.


Как подключить AutoPill? При первом запуске устройства или смены точки доступа это можно сделать с помощью WPS или протокола ESP-Touch (через приложение на смартфоне).


На данный момент устройство работает от сети, но в дальнейшем будет добавлена возможность работы от аккумулятора, при этом внимание будет уделено режиму энергосбережения (в т.ч. автономной работе, либо работе в режиме клиента, когда в качестве сервера будет выступать станция IoT).


За счёт червячной передачи в редукторе пользователь не может провернуть секцию вручную. Конечно, сорвать пластиковую шестерню можно, но это потребует значительных усилий. Кроме того, в конструкции есть простейший замок, который открывается и закрывается обычной прямой отвёрткой. Согласитесь, эти варианты исключают случайный доступ к внеочередной порции препаратов.


Видео о проекте:



Что дальше?


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


Сейчас, помимо полировки уже существующих функций устройства, передо мной стоит очень важная задача уменьшение энергопотребления. Кроме того, я работаю над интеграцией устройства в систему SmartThings. Это позволит продублировать все автономные функции на хабе или в облаке, при этом само устройство сможет более эффективно расходовать энергию. Помимо этого, после интеграции AutoPill сможет не просто подавать сигнал с помощью собственных встроенных возможностей, но использовать и носимые устройства и умные колонки для оповещения пользователя о тех или иных событиях.


Владимир Шперлинг

Владимир Шперлинг
vladimir-shperling@yandex.ru
Kotlin, Java, C#-разработчик
Победитель финала конкурса проектов IT Школы Samsung, 2016
Победитель конкурса Школа VR 360, 2018
Победитель конкурса IT Академии в треке Интернет вещей, 2020

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru