Giter Site home page Giter Site logo

ololoevreal / waterius32 Goto Github PK

View Code? Open in Web Editor NEW
16.0 3.0 0.0 18.7 MB

Migration of the original project [Waterius](https://github.com/dontsovcmc/waterius) to ESP32

License: GNU Lesser General Public License v3.0

C++ 47.90% C 52.10%
arduino esp32 blynk iot hardware esp32-ulp nb-iot ulp sim7020e ulp-adc

waterius32's Introduction

__        ___  _____ _____ ____  ___ _   _ ____       _________  
\ \      / / \|_   _| ____|  _ \|_ _| | | / ___|     |___ /___ \ 
 \ \ /\ / / _ \ | | |  _| | |_) || || | | \___ \ _____ |_ \ __) |
  \ V  V / ___ \| | | |___|  _ < | || |_| |___) |_____|__) / __/ 
   \_/\_/_/   \_\_| |_____|_| \_\___|\___/|____/     |____/_____|
   

Познавательно-исследовательский проект

Цель экспиремента

Перенести логику и наработанные механизмы проекта Waterius на моно кристал ESP32. Основные постулаты:

  • Во главе угла проекта долгосрочная автономная работа от элементов питания
  • Простота сборки, настройки и управления
  • Большое кол-во IO портов для подключения сенсоров
  • Передача данных через WiFi или NB-IoT
  • COAP протокол для NB-IoT, и для WiFi

Прототип устройства

Прототип устройства выполнен в распределительной коробке, резиновые заглушки позволили удобно и герметично разместить NB-IoT антенну и светодиод индикатора. Кнопка управления размешена внутри одной из резиновых заглушек, для нажатия необходимо продавить заглушку - материал не жесткий, податливый. WiFi антенна размещена на плате модуля ESP32, и наружу не выведена.

Архитектура

  • Используемые GPIO:
  GPIO-25 - Setup button

  GPIO-32 - analog counter_0 (Namur), using internal PullUp
  GPIO-33 - analog counter_1 (Namur), using internal PullUp

  GPIO-02 - BUILD IN LED
  GPIO-05 - HIGH level activate additional power supply for WiFi/BT purpose
  GPIO-27 - Measuring Input voltage, after LDO

  GPIO-04 - the sourse of reference voltage for sensors
  GPIO-34 - Water Sensor 0
  GPIO-35 - Water Sensor 1
  GPIO-36 - Water Sensor 2
  GPIO-39 - Water Sensor 3
  
  GPIO-16 - RX NB-IOT
  GPIO-17 - TX NB-IOT
  GPIO-18 - EN NB-IOT

Проблемы

  • Как оказалось, при детальном погружении в тему, не понятно чем питать ESP32. Рекомендации разработчиков 3.3в минимум 500мА источник. Широко распространенные LDO способные отдать такой ток имеют высокое потребление по сравнению с потреблением всей схемы в режиме покоя. В интернетах народ не парится, а использует прямое подключение к элементам питания LiFePo4, так себе решение.
  • Сопроцессор ULP на котором реализована логика опроса датчиков программируется на ассемблере, очень сильно урезанном ассемблере.
  • Как отлаживать асемблерный код ULP?
  • Кто-нибудь знает как получить из ULP текущее значение регистра PC?!
  • В рамках проекта на ULP возложены функции считывания данных с ADC, усреднение значений, инкрементация значений счетчиков, обработка данных с digital датчиков, обработка кнопки управления, пробуждение CPU в случае необходимости. Все эти задачи порождают не малую простынку ассемблерного кода и в конце концов получаем ошибку -
ulp_process_macros_and_load(): program too big: 133 words, max is 128 words
  ERROR     (ULP) : Error loading ULP code!

VSCode и Platformio с ардуино фреймворком используют прекомпелированные файлы собраны с параметром CONFIG_ULP_COPROC_RESERVE_MEM 512. Решение с простор интернета Increase ULP program size

  • В момент пробуждения CPU из глубокого сна ULP получает от АЦП некорректные значения ESP32 ULP ADC sampling glitch during wakeup. Что с этим делать не совсем ясно.
ID: 1505         Value: 171
ID: 1506         Value: 171
ID: 1507         Value: 172
ID: 1508         Value: 170
ID: 1509         Value: 172
ID: 1510         Value: 170
ID: 1511         Value: 171
ID: 1512         Value: 4095 <- Bug, while wakeup CPU
ID: 1513         Value: 170
ID: 1514         Value: 169
ID: 1515         Value: 171
ID: 1516         Value: 170
ID: 1517         Value: 170
ID: 1518         Value: 169
ID: 1519         Value: 169
ID: 1520         Value: 168
  • На борту ESP два ADC (18 pins maximum), но если в проекте испльзуется WiFi, то доступен к использованию только ADC-1. Но 4 его канала не имею встроенной подтяжки, а 2 заняты конденсаторами analogRead not working on pins 37,38. Из 18 остается ВСЕГО два ADC канала для наших нужд.
//     ADC1_CHANNEL_0 = 0, /*!< ADC1 channel 0 is GPIO36 */ - без internal PullUp/PullDown
//     ADC1_CHANNEL_1,     /*!< ADC1 channel 1 is GPIO37 */ - SENSOR_CAPP
//     ADC1_CHANNEL_2,     /*!< ADC1 channel 2 is GPIO38 */ - SENSOR_CAPN
//     ADC1_CHANNEL_3,     /*!< ADC1 channel 3 is GPIO39 */ - без internal PullUp/PullDown
//     ADC1_CHANNEL_4,     /*!< ADC1 channel 4 is GPIO32 */
//     ADC1_CHANNEL_5,     /*!< ADC1 channel 5 is GPIO33 */
//     ADC1_CHANNEL_6,     /*!< ADC1 channel 6 is GPIO34 */ - без internal PullUp/PullDown
//     ADC1_CHANNEL_7,     /*!< ADC1 channel 7 is GPIO35 */ - без internal PullUp/PullDown

Результат

Потребление в различных режимах (with Debug output):

  • 20-30 мкА ESP32 в режиме DeepSleep, с запущенным ULP, ведется подсчет импульсов
  • 53 мА ESP32 в нормальный режиме работы, ULP ведет подсчет импульсов, WiFi/BT выключены
  • 130 мА ESP32 в нормальном режиме работы, ULP ведет подсчет импульсов, WiFi подключен и передаются данные, BT выключен
  • 80-130 мА ESP32 в нормальном режиме работы, ULP ведет подсчет импульсов, WiFi/BT выключены, NB-IoT модем активирован, регистрация в LTE сети и передача данных

Вывод

Предварительно, в связи с все новыми и новыми открывающимися проблемами и ограничениями платформы ESP32, легаси проект Waterius - дешевле, проще, автономнее. Реализация на ESP32 целесообразна в случае возникновения необходимости управлять большим числом IO или использования GSM/UMTS/LTE/NB-IoT модема

waterius32's People

Contributors

ololoevreal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

waterius32's Issues

GPIO без подтяжек

"Но 4 его канала не имею встроенной подтяжки"

Решение: использовать GPIO без подтяжек, а подтяжку подключать через другой GPIO, подавая на него HIGH.
Либо на 2 входа использовать 2 OUPUT + резистор, либо подключить диоды + 1 общий резистор на 1 OUTPUT.

Потребление

А откуда набирается 20-30мкА? Хочу меньше =).
Пробовали отключать периферию: 2-й стабилизатор, танцы-с бубном при инициализации ESP и т.п.?
2-й стаб ничего не потребляет при EN=LOW? А то давайте аналог найдём.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.