Форум самогонщиков Сайт Барахолка На ход коня

Автоматика с веб управлением на основе esp32 и pzem

Форум Оборудование Автоматика
1 2 3 4 ... 18 1
ys1797 Доктор наук Санкт-Петербург 980 318
10 Дек. 18, 19:12
Предлагаю вашему вниманию вариант автоматизации на основе модулей ESP32 и PZEM.

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

Устройство поддерживает:
  • Стабилизацию мощности с использованием симистора с фазовым управлением.
  • До 4 клапанов на 12 вольт.
  • До 8 температурных датчика ds18b20, подключенных через i2c/w1 мост DS2482-100.
  • Поддерживается небольшой oled дисплей по шине I2C или SPI.
  • Соответственно шины I2C и SPI выведены на разъемы и доступны для подключения дополнительного оборудования.
  • Поддерживается тихий режим включения и выключения клапанов.
  • Поддерживается отправка SMS об авариях и состоянии через сервис smsc.ru.


Аппаратное обеспечение:
  • ESP32 модуль revision 1 с 20 контактным разъемом для подключения.
    Я взял такой, для реализации бесперебойности питания, но можно выбрать любой другой с 20 или 18 контактами.
    Надо быть крайне осторожным с микро-usb разъемом. Он на этих модулях крайне не надежен и так и норовит отвалится. Я уже парочку отломал прямо с дорожками платы.
  • PZEM-004t модуль для измерения тока, напряжения и мощности, например такой.
    Т.к. питание у нас 3.3 вольта, желательно допаять резистор номиналом 1 кОм для стабильной работы uart модуля от этого напряжения.
  • Клапана на 12 вольт и датчики ds18b20 в гильзах и без, все с того-же алиэкспресса.
  • 12 вольтовый источник питания, который по току смог бы вытянуть все клапана и сам модуль.
    Модуль при активном использовании WiFi сети может потреблять до 700 mA по 5 вольтовой шине питания.
  • Схема, плата, гербера для сопряжения всего этого добра доступна и выложена в виде проекта на easyeda.
    Там же можно генерировать гербер файлы при необходимости или подправить посадочные места для PZEM модуля, если они отличаются от
    используемого мной.
    hd32.png
    Hd32. Автоматика с веб управлением на основе esp32 и pzem. Автоматика. Оборудование.

    svg изображение платы.
    Логотип сайта с разрешения владельца нанесен на pcb.
  • Симистор с радиатором, корпус, провода и т.д.

Общий вид тестового стенда:
20181219_182021.jpg
20181219_182021. Автоматика с веб управлением на основе esp32 и pzem. Автоматика. Оборудование.


Дисплей.

Устройство поддерживает небольшой Oled дисплей с интерфейсом i2c или spi,
на основе чипа SSD1336, например такой
 Автоматика с веб управлением на основе esp32 и pzem
Автоматика с веб управлением на основе esp32 и pzem. Автоматика. Оборудование.

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


Программное обеспечение.

Написано с использованием esp-idf  .
В общем это модифицированный китайцами FreeRtos.
Проект автоматики располагается на ГитХабе под MIT лицензией.
Веб часть скачивается при первом запуске системы с моего сайта на сам esp32. По аналогии с проектом BrewManiacEsp8266.
Но каждый вправе создать свой веб интерфейс и, указав url в разделе обновления, закачать свою версию web интерфейса.

 Веб часть разрабатывалась ориентируясь на вертикальное расположение на смартфоне, поэтому может выглядеть слегка странным и не логичным
на большом экране.
Для передачи данных в реальном времени используется websocket.
Формат передачи данных модуль Модуль<->Браузер: json.


Стартовая настройка.

  • Устройство после прошивки переходит в режим WiFi точки доступа.
    Для дальнейшей работы нужно подключиться к этой точке и
    зайти браузером на адрес http://192.168.4.1/ выбрать из списка обнаруженных
    WiFi сетей свою, ввести пароль, сохранить и перегрузить устройство.
  • После перезагрузки и успешного подключения к точке доступа, можно зайти
    браузером по назначенному Вашей точкой ip адресу на устройство и загрузить
    html часть в флэшь память устройства. После этого устройство готово к работе.


Веб интерфейс.

hs32_web.png
Hs32_web. Автоматика с веб управлением на основе esp32 и pzem. Автоматика. Оборудование.


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

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

Меню wifi так-же позволяет запомнить данные нескольких wifi сетей и
автоматически к ним подключаться, если находимся в зоне их доступа.

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

Пункт "Обновления" предназначен для обновления web интерфейса, обновления
firware через него пока не предусмотрено.


Установка программной среды для виндовс.

Для заливки программного обеспечения в esp32 необходимо установить набор инструментов - toolchain.
Описывается этот процесс тут: https://docs.espressif.com/...dows-setup.html

1. Скачиваем готовый Toolchain (набор инструментов для компиляции и генерации кода) для создания приложения для ESP32 по указанной выше ссылке.
Прямая ссылка на zip  файл может изменяться при выходе обновлений, поэтому тут я ее не привожу.
Распаковываем полученный архив, например в c:\msys32.
Запускаем C:\msys32\mingw32.exe .
По сути - это юниксовый bash адаптированный под win32 среду.

2. В получившемся окошке мы должны теперь скачать ESP-IDF, который по существу
содержит API для ESP32 и скрипты для работы с Toolchain.
Скачиваем его с GitHub:
git clone --recursive https://github.com/espressif/esp-idf.git
ESP-IDF будет загружен в ~/esp-idf

На забудьте опцию  --recursive, иначе не будут установлены субмодули.
Если все-таки забыли, то можно поправить дело следующими командами:
cd ~/esp-idf
git submodule update --init --recursive

Теперь надо добавить путь до esp-idf. Для этого надо определить переменную
IDF_PATH в профиль пользователя. Эта переменная должна быть настроена,
иначе проекты не будут компилироваться.
Для этого нужно добавить скрипт и указать IDF_PATH в профиле пользователя.
Скрипты пользовательского профиля содержатся в каталоге
C:/msys32/etc/profile.d/. Они выполняются каждый раз, когда вы запускаете
mingw32.exe

Создайте новый текстовый файл скрипта в каталоге C:/msys32/etc/profile.d/. Назовите его export_idf_path.sh .
Определите путь к каталогу ESP-IDF. Он специфичен для вашей конфигурации системы и может выглядеть примерно так: C:\msys32\home\<user-name>\esp-idf.
Где <user-name> - это имя учетной записи в системе виндовс.
 Далее надо добавить одну строчку в этот файл:
export IDF_PATH="C:/msys32/home/<user-name>/esp/esp-idf"
обратите внимание, что обратные косые черты пути windows надо заменить
на прямой слэш "/" принятый для unix систем.

Закроем и заново запустим mingw32.
Проверяем все ли установилось:
$printenv IDF_PATH
C:/msys32/home/yuri/esp-idf

Создание прошивки.

 Переходим в свою домашнюю директорию cd ~ и получаем исходники с ГитХаба:
git clone --recursive https://github.com/ys1797/esp32_hd

Далее выполняем команду для установки пакетов Python.
Пакеты, необходимые для ESP-IDF, находятся в файле $IDF_PATH/requirements.txt
python -m pip install --user -r $IDF_PATH/requirements.txt

 Переходим в папку с проектом
cd ~/esp32_hd

Для заливки загрузчика и прошивки в esp32 необходимо подключить модуль по USB.
После этого посмотреть в диспетчере устройств, какой новый COM порт появился в системе.
Если драйвер устройства не устанавливается автоматически, определите чип USB для последовательного преобразователя на плате ESP32,
найдите драйверы в Интернете и установите их.

 Идем в директорию проекта и выполняем
make menuconfig
В появившейся менюшке переходим в пункт
 Serial flasher config > Default serial port и вбиваем имя com порта, так,
как он обзывается в виндовс, без всяких /dev/, например, если COM14, то так и пишем.
 Сохраняем по "Save" и выходим по "Exit".

 Теперь вы можете создавать и запускать приложение. Выполните в консоли:
make flash monitor
Приложение перекомпилируется, сгенерируется файл бутлоадера,
таблица разделов и собственно сам firmware файл. Все это загрузится
в модуль ESP32, запустится мониторинг порта и модуль перегрузится.

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


История изменений
1.4 В плату добавлено место для датчика давления bmp180.

1.6
  Исправлены падения из-за нехватки памяти под стэк фоновых задач.
  Поправлен режим ректификации.
  С главной страницы убраны элементы не несущие полезной информации.
  Состояние клапанов можно менять на лету. Будьте внимательны и не выключите случайно воду охлаждения!!
  Значения параметров вступают в силу сразу же после изменения.
  Исправлены ручные переходы с одной стадии процесса на другую вперед и назад, где это имеет логический смысл.
1.7.1
  Исправлен алгоритм стабилизации мощности.
  Добавлена поддержка нового протокола PZEM modbus RTU (v.30)

ToDo
  • Подключение датчика атмосферного давления или сервиса для получения значения давления с интернет сервисов.
  • Подключение к автономной системе охлаждения, как к slave устройству по WiFi и контроль потока воды, температур и шим управление насосом и вентилятором.
  • Постепенное добавление остальных режимов работы автомата.
  • OTP. Обновление firmware по сети.
ys1797 Доктор наук Санкт-Петербург 980 318
Отв.1  21 Дек. 18, 19:43
Загрузка готовой прошивки с помощью falsh download tools
Если нет желания ставить целиком esp-idf, можно воспользоваться готовыми прошивками
и утилитой от производителя Flash download tool

Необходимо для первичной прошивки указать:1
1. загрузчик (bootloader.bin)
2. Настройку размещения файловой системы (partition.bin)
3. Само приложение (esp32_hd.bin)
4. Образ файловой системы (spiffs.img)

Текущая версия: 0.7.1

hd_fdt.png Автоматика с веб управлением на основе esp32 и pzem
hd_fdt.png Автоматика с веб управлением на основе esp32 и pzem. Автоматика. Оборудование.


В дальнейшем при обновлении нет причин перепрошивать первые два образа. Достаточно только прошить обновленное приложение.

Rest  API
Ниже приводится описание запросов, которые поддерживает устройство посредством http протокола.
Данное описание может дополнятся по мере модернизации и развития проекта.
По умолчанию для всех текстовых полей на кириллице используется кодировка UTF-8.

Версия 1.02 Дата последнего редактирования 12.02.2020

GET /netcfg
Получение параметров сетевой конфигурации.

Возвращается json объект содержащий следующие значения:
  • host: (строка) Имя устройства (сетевой идентификатор), используемый для дайджест авторизации. Максимально 80 символов.
  • user: (строка) Имя пользователя для авторизации (если включено). Максимально 32 символа.
  • pass: (строка) Пароль пользователя для авторизации (если включено). Максимально 32 символа.
  • secure: (число) Если не ноль - используется дайджест авторизация для контроля доступа к устройству. Ноль - контроль доступа не используется.
  • smscUser: (строка) Имя пользователя на сервисе smsc.ru для отправки уведомлений по SMS.
  • smscHash: (строка) Хэш пароля пользователя на сервисе smsc.ru для отправки уведомлений по SMS.
  • smscPhones: (строка) Номер телефона, на который будут направляться SMS уведомления через сервис smsc.ru.
  • useSmsc: (число) Не ноль - использовать для уведомлений сервис smsc.ru. Ноль - не использовать.
  • wsPeriod: (число) Период в секундах для отправки периодической информации в браузер через websocket service.

Пример ответа:
{

  "host": "hd_esp32",
  "user": "user",
  "pass": "12345",
  "secure": 0,
  "smscUser": "",
  "smscHash": "",
  "smscPhones": "",
  "useSmsc": 0,
  "wsPeriod": 5

}

POST /netcfg
Установка параметров сетевой конфигурации.

Данным запросом устанавливаются значения параметров сетевой конфигурации
устройства. Сами параметры описаны в запросе: GET /netcfg .

Для передачи параметров запроса используется следующий формат:
  • MIME-тип: application/x-www-form-urlencoded;
  • Кодировка символов: UTF-8.
  • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
  • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

Пример запроса:
POST /netcfg HTTP/1.1
Host: 192.168.1.1
Content-Type: application/x-www-form-urlencoded

host=esp32_hd&user=user&pass=password&secure=1

POST /defparam
Данным запросом все рабочие параметры (кроме сетевых настроек) сбрасываются в значение по умолчанию.
У данного запроса нет параметров для передачи на устройство.

Пример запроса:
POST /defparam HTTP/1.1
Host: 192.168.1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Ответ:
{
      "err":"0",
      "msg":"OK"
}

GET /rectparam.json
Данный запрос возвращает сохраненную конфигурацию параметров работы (кроме сетевых настроек) в формате json.

Возвращается json обьект содержащий следующие значения:
  • maxPower: (число) Максимальная мощность нагрева тэна в ваттах. Возможные значения от 0 до 15000 Вт. Значение по умолчанию: 2000 Вт.
  • ustPowerReg: (число) Мощность в режиме регулятора мощности. Возможные значения от 0 до 15000 Вт. Значение по умолчанию: 900 Вт.
  • tempEndRectRazgon: (число) Температура окончания режима разгона. Возможные значения от 0 до 120 C. Значение по умолчанию: 83.0 C.
  • powerRect: (число) Мощность нагрева в режиме ректификации. Возможные значения от 0 до 15000 Вт. Значение по умолчанию: 1000 Вт.
  • tEndRectOtbGlv: (число) Температура окончания отбора голов в режиме ректификации. Возможные значения от 0 до 120 C. Значение по умолчанию: 85.4
  • timeChimRectOtbGlv: (число) Период для шим'a отбора голов в режиме ректификации. Возможные значения от 0 до 10000 Сек. Значение по умолчанию: 20 Сек.
  • procChimOtbGlv: (число) Процент шим'a отбора голов в режиме ректификации. Возможные значения от 0 до 100%. Значение по умолчанию: 5 %.
  • minProcChimOtbSR: (число) Минимальный процент ШИМ'а отбора СР в режиме ректификации. Возможные значения от 0 до 100%. Значение по умолчанию: 20 %.
  • beginProcChimOtbSR: (число) Начальный процент ШИМ отбора СР в режиме ректификации. Возможные значения от 0 до 100. Значение по умолчанию: 40 %.
  • timeChimRectOtbSR: (число) Период для шим'a отбора СР  в режиме ректификации. Возможные значения от 0 до 1500 Сек. Значение по умолчанию: 10 Сек.
  • tempDeltaRect: (число) Дельта температуры по достижении которой происходит переход в режим повторной стабилизации температуры колонны. Возможные значения от  0 до 120 С. Значение по умолчанию: 0.3 C.
  • tempEndRectOtbSR: (число) Температура окончания отбора СР и перехода к отбору хвостовых фракций в режиме ректификации. Возможные значения от 0 до 120 С. Значение по умолчанию: 96.5 C.
  • tempEndRect: (число) Температура в кубе, при которой прекращается ректификация. Возможные значения от 0 до 120 С. Значение по умолчанию: 99.5 C.
  • p_MPX5010: (число) Поправка для датчика давления. Возможные значения от 0 до 100. Значение по умолчанию: 0.
  • timeStabKolonna: (число) Время стабилизации колонны  в режиме ректификации. Возможные значения от 0 до 3500 Сек. Значение по умолчанию: 900 Сек.
  • timeRestabKolonna: (число) Тайм аут для повторной стабилизации колонны в режиме ректификации. Возможные значения от 0 до 3500 Сек. Значение по умолчанию: 1800 Сек.
  • klpSilentNode: (переключатель) Использовать или нет тихий режим открытия и закрытия клапанов. 0 - не использовать, 1 - использовать. Значение по умолчанию: 1.
  • urovenProvodimostSR: (число) Уровень проводимости, меньше которого переходим к СР в режиме ректификации. Возможные значения от 0 до 1000. Значение по умолчанию: 0.
  • cntCHIM: (число) Количество значений в таблице авто обучения ШИМ в режиме ректификации. Возможные значения от -100 до 100. Значение по умолчанию: -4.
  • decrementCHIM: (число) Шаг уменьшения % ШИМ'a при отборе СР в режиме ректификации. Возможные значения от 0 до 100%. Значение по умолчанию: 10 %.
  • incrementCHIM: (число) Шаг увеличения % ШИМ'a при отборе СР в режиме ректификации. Возможные значения от 0 до 100%. Значение по умолчанию: 5 %.
  • timeAutoIncCHIM: (число) Время, если в течении которого не происходит увеличение температуры, то увеличиваем процент ШИМ'а отбора СР в режиме ректификации. Возможные значения от 0 1000 Сек. Значение по умолчанию: 600 Сек.
  • alarmMPX5010: (число) Давление при котором надо выдавать сигнал тревоги. Возможные значения от 0 до 100. Значение по умолчанию: 0.
  • beepChangeState: (переключатель) Озвучивать переходы между стадиями процесса. 0 - не озвучивать, 1 - подавать короткий сигнал. Значение по умолчанию: 1.
  • powerDistil: (число) Мощность нагрева в режиме дистилляции. В ваттах.  Диапазон значений от 0 до 15000, значение по умолчанию: 1000 Вт.
  • tempEndDistil: (число) Температура в градусах Цельсия по достижению которой прекращается процесс дистилляции. Диапазон значений от 0 до 120. Значение по умолчанию: 99.5 C.
  • processGpio: (число) Номер gpio порта, который будет переведен в активное состояние, когда на тэн должна подаваться мощность и в неактивном состоянии все остальное время. Нулевое значение - функция отключена. Значение по умолчанию: 0.
  • klp1_isPWM: (переключатель) Использовать канал клапана воды в режиме управления насосом автономной системы охлаждения, вместо клапана включения воды охлаждения. 1 - насос, 0 - клапан. Значение по умолчанию: 1.
  • pzemVersion: (переключатель) Использовать новый протокол PZEM v.30 modbus RTU. 1 - Новый протокол, 0 - старый протокол. Значение по умолчанию: 0.

{

  "maxPower": "2000",
  "ustPowerReg": "900",
  "tempEndRectRazgon": "83",
  "powerRect": "1000",
  "tEndRectOtbGlv": "85.4",
  "timeChimRectOtbGlv": "20",
  "procChimOtbGlv": "5",
  "minProcChimOtbSR": "20",
  "beginProcChimOtbSR": "40",
  "timeChimRectOtbSR": "10",
  "tempDeltaRect": "0.3",
  "tempEndRectOtbSR": "96.5",
  "tempEndRect": "99.5",
  "p_MPX5010": "0",
  "timeStabKolonna": "900",
  "timeRestabKolonna": "1800",
  "pShim": "90",
  "klpSilentNode": "1",
  "urovenProvodimostSR": "0",
  "cntCHIM": "-4",
  "decrementCHIM": "10",
  "incrementCHIM": "5",
  "timeAutoIncCHIM": "600",
  "alarmMPX5010": "0",
  "beepChangeState": "0",
  "powerDistil": "1000",
  "tempEndDistil": "99.5"

}

POST /saveparam
Установка параметров устройства, за исключением сетевой конфигурации и параметров для SMS информирования.

Данным запросом устанавливаются значения параметров устройства, такие как мощность нагрева для различных режимов, температурные и другие параметры.
Сами параметры описаны в запросе: GET /rectparam.json

Для передачи параметров запроса используется следующий формат:
  • MIME-тип: application/x-www-form-urlencoded;
  • Кодировка символов: UTF-8.
  • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
  • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

Пример запроса:
POST /saveparam HTTP/1.1
Host: 192.168.1.1
Content-Type: application/x-www-form-urlencoded

powerDistil=1200&tempEndDistil=99.8

POST /setpower
Установка мощности нагрева.

Данным запросом устанавливается текущая мощность нагрева тэна.
Если передано не цифровое или отрицательное значение - нагрев будет отключен.
Если значение превышает максимальную мощность - будет установлена максивальная мощность.

Для передачи параметров запроса используется следующий формат:
  • MIME-тип: application/x-www-form-urlencoded;
  • Кодировка символов: UTF-8.
  • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
  • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

Пример запроса:
POST /setpower HTTP/1.1
Host: 192.168.1.1
Content-Type: application/x-www-form-urlencoded
power=1200

POST /setmainmode
Установка режима работы устройства

Данным запросом устанавливается режим работы устройства. Состояние автомата устанавливается в начальное для каждого процесса.
Например, для ректификации устанавливается состояние ожидания запускапроцесса.

Параметр нового состояния: new_mode. Может принимать на данный момент следующие значения (возможно расширение):
  • 0 - Режим мониторинга
  • 1 - Режим регулятора мощности
  • 2 - Режим дистилляции
  • 3 - Режим ректификации
  • 10- Режим тестирования клапанов

Для передачи параметров запроса используется следующий формат:
  • MIME-тип: application/x-www-form-urlencoded;
  • Кодировка символов: UTF-8.
  • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
  • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

Пример запроса:
POST /setmainmode HTTP/1.1
Host: 192.168.1.1
Content-Type: application/x-www-form-urlencoded
new_mode=1

POST /set_status
Ручной переход к следующей или предыдущей фазе в котором находится процесс для устройства.

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

Параметр "new" может принимать значение "1", если необходимо перейти к следующему состоянию или "0" - если к предыдущему.
Для передачи параметров запроса используется следующий формат:
  • MIME-тип: application/x-www-form-urlencoded;
  • Кодировка символов: UTF-8.
  • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
  • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

Пример запроса:
POST /set_status HTTP/1.1
Host: 192.168.1.1
Content-Type: application/x-www-form-urlencoded
new=1

POST /startprocess
Запуск процесса предварительно заданного запросом setmainmode.

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

Пример ответа:
{
  "err": "0",
  "msg": "OK"
}

POST /endprocess
Ручной останов заданного процесса работы

Данный запрос завершает заданный процесс на устройстве. Служит как для штатного завершения работы, так и аварийного. (Для совместимости оставлен метод GET, но начиная с версии 0.7.2 его использование не рекомендуется.)
Параметров данный запрос не имеет.

Пример ответа:
{
  "err": "0",
  "msg": "OK"
}
    GET /klp_status
    Получение состояния электромагнитных клапанов, управляемых устройством.

    Данный запрос возвращает настройки работы и текущее состояние
    заданного параметром "id", клапана в формате json.

    Возвращается json обьект содержащий следующие значения:
    • id: идентификатор клапана. Нумерация начинается с нуля.
    • is_pwm: флаг, 0 - обычный режим, 1 - режим ШИМ.
    • is_open: флаг, 0 - клапан закрыт, 1 - открыт
    • pwm_time: время периода в секундах для режима ШИМ.
    • pwm_percent: Процент времени, когда кламан находится в открытом состоянии для режима ШИМ.
    • err: 0 - если клапан существует, не ноль - при ошибке.
    • msg: "OK" - если клапан существует, иначе - сообщение об ошибке.

    Пример ответа:
    [/list]
    {
      "id": 0,
      "is_pwm": 0,
      "is_open": 0,
      "pwm_time": 0,
      "pwm_percent": 0,
      "err": 0,
      "msg": "OK"
    }

    POST /klp_on
    Перевод состояния указанного электромагнитного клапана в открытое состояние.

    Данным запросом клапан указанный в параметре "id" переводится в открытое состояние (на него подается напряжение).
    id нумеруется с нуля.
    Для передачи параметров запроса используется следующий формат:
    • MIME-тип: application/x-www-form-urlencoded;
    • Кодировка символов: UTF-8.
    • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
    • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

    Пример запроса:
    POST /klp_on HTTP/1.1
    Host: 192.168.1.1
    Content-Type: application/x-www-form-urlencoded
    id=0

    POST /klp_off
    Перевод состояния указанного электромагнитного клапана в закрытое состояние.

    Данным запросом клапан указанный в параметре "id" переводится в закрытое состояние (с него снимается напряжение).
    id нумеруется с нуля.
    Для передачи параметров запроса используется следующий формат:
    • MIME-тип: application/x-www-form-urlencoded;
    • Кодировка символов: UTF-8.
    • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
    • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

    Пример запроса:
    POST /klp_off HTTP/1.1
    Host: 192.168.1.1
    Content-Type: application/x-www-form-urlencoded
    id=0

    POST /klp_shim_on
    Перевод указанного электромагнитного клапана в ШИМ режим с заданной
    скважностью.

    Данным запросом клапан переводится в режим ШИМ с заданым периодом в секундах и процентом времени, когда он должен находиться в открытом состояеии.

    Запрос должен содержать следующие параметры:
    • id: идентификатор клапана нумеруется с нуля (значения от 0 до 3).
    • period: период в секундах.
    • klp_on: процент от указаного времени, когда клапан находится в открытом состоянии.

    Для передачи параметров запроса используется следующий формат:
    • MIME-тип: application/x-www-form-urlencoded;
    • Кодировка символов: UTF-8.
    • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
    • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

    Пример запроса:
    POST /klp_shim_on HTTP/1.1
    Host: 192.168.1.1
    Content-Type: application/x-www-form-urlencoded
    id=0&period=10&klp_on=40

    GET /senslist
    Вывод списка температурных датчиков, их параметров и температуры.

    Данный запрос возвращает список (в формате json) подключенных температурных
    датчиков, их назначение, корректировку температуры и фактически измерянное
    ими значения.

    Возвращается json обьект содержащий следующие значения:
    • id: идентификатор датчика температурв. Нумерация начинается с нуля.
    • rom: адрес датчика на шине 1wire.
    • descr: описание заданное для датчика.
    • type_str: строка с описанием назначения датчика температуры.
    • type: цифровой код, определяющий назначение датчика:
      • 0: Датчик температуры куба
      • 1: Датчик в нижней части колонны
      • 2: Датчик в верней части колонны
      • 3: Датчик в дефлегматоре
      • 4: Датчик воды охлаждения - вход
      • 5: Датчик воды охлаждения - выход
      • 6: Датчик для аварийной сигнализации
      • 7: Неизвестный информационный датчик
    • corr: значение корректировки температуры измеренного данным датчиком.
    • talert: Температура для срабатывания аварийной сигнализации в случае, если тип датчика "Датчик для аварийной сигнализации".
    • temp: Фактическое измерянное значение датчиком с учетом корректировки.

    Пример ответа:
    {
    }

    POST /updatesens
    Редактирование параметров указанного сенсора температуры.

    Данным запросом можно установить описание, назначение и другие параметры для
    каждого из датчика температуры.
    Параметры, которые необходимо передать в запросе:
    • id: идентификатор датчика температурв. Нумерация начинается с нуля.
    • type: цифровой код, определяющий назначение датчика, значения  можно найти в описании запроса /senslist.
    • descr: Строка с тектовым описанием для датчика температуры.
    • corr: В данном поле указывается корректировка значений температуры, измерянной датчиком. Значение может иметь как положительной, так и отрицательное значение.
    • talert: Если датчик температуры имеет тип номер 6 (Датчик для аварийной сигнализации), в этом поле указывается температура, по достижении которой срабатывает тревога и отключается нагрев.

    Для передачи параметров запроса используется следующий формат:
    • MIME-тип: application/x-www-form-urlencoded;
    • Кодировка символов: UTF-8.
    • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
    • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

    Пример запроса:
    POST /updatesens HTTP/1.1
    Host: 192.168.1.1
    Content-Type: application/x-www-form-urlencoded
    id=0&type=0&descr=Cube&corr=0.2&talert=100

    GET /rescansens
    Подача запроса на повторное сканирование шины 1wire и поиск новых устройств.

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

    Пример ответа:
    {
      "err": 0,
      "msg": "OK"
    }

    GET /maininfo
    Получение информации о параметрах работы устройства.

    Данный запрос является основным и наиболее часто использующимся.
    Он возвращает всю основную информацию о работе устройства, состоянии клапаном и внешних датчиков.
    Информация возвращается в виде json объекта, который состоит из отдельных элементов, других json объектов или массивов объектов.
    Некоторые элементы могут присутствовать только для конкретных режимов работы и отсутствовать в других режимах.

    Ниже приводится описания возвращаемых полей:
    • cmd: Поле для определения типа информации, оно всегда должно иметь значение
      "info"  Его можно проигнорировать. Основное его предназначение - это выделение данной структуры при передачи информации через websocket.
    • time: Текущее время в формате hh:mm в 24 часовом формате.
    • MainMode: Номер режима работы устройства.
    • MainModeStr: Текстовое представление режима работы устройства.
    • MainStatus: Номер состояния (фазы) работы устройства.
    • MainStatusStr: Текстовое представление состояния (фазы) работы устройства.
    • uptime: Время прошедшее с последней перезагрузки устройства.
    • CurVolts: Текущее измерянное напряжение в сети.
    • CurPower: Текущая измерянная мощность нагрева.
    • SetPower: Установленная мощность нагрева в ваттах.
    • CurFreq: Текущее измерянное значение частоты сети 220 вольт в герцах.
    • AlarmMode: Текстовое представление уведомления о тревоге или аварийной ситуации.
    • WaterOn: Состояние датчика потока воды. "On"- работает. "Off" - нет потока воды.
    • TempWaterIn: Температура в градусах Цельсия подаваемой воды с системы автономного охлаждения.
    • TempWaterOut: Температура в градусах Цельсия воды, которая поступает в автономную систему охлаждения.
    • WaterFlow: Данные со счетчика потока воды автономной системы охлаждения.
    • heap: Количество свободной памяти доступной устройству в байтах.
    • sensors: json массив, описывающий состояние подключанных датчиков температуры. Содержит объекты, содержащие следующие поля:
      • id: идентификатор датчика температурв. Нумерация начинается с нуля.
      • descr: описание заданное для датчика.
      • type_str: строка с описанием назначения датчика температуры.
      • type: цифровой код, определяющий назначение датчика:
        • 0: Датчик температуры куба
        • 1: Датчик в нижней части колонны
        • 2: Датчик в верней части колонны
        • 3: Датчик в дефлегматоре
        • 4: Датчик воды охлаждения - вход
        • 5: Датчик воды охлаждения - выход
        • 6: Датчик для аварийной сигнализации
        • 7: Неизвестный информационный датчик
      • temp: Фактическое измерянное значение датчиком с учетом корректировки.
    • klapans: json массив, описывающий состояние подключанных клапанов.
      Содержит объекты, содержащие следующие поля:
      • id: идентификатор клапана. Нумерация начинается с нуля.
      • is_pwm: флаг, 0 - обычный режим, 1 - режим ШИМ.
      • is_open: флаг, 0 - клапан закрыт, 1 - открыт
      • pwm_time: время периода в секундах для режима ШИМ.
      • pwm_percent: Процент времени, когда кламан находится в открытом состоянии для режима ШИМ.
    • rect_p_shim: Только в режиме ректификации. Текущий процецнт открытия клапана для ШИМ отбора СР.
    • rect_time_stab: Только в режиме ректификации. Время в секундах, оставшееся до конца процесса стабилизации колоны.
    • rect_timer1: Только в режиме ректификации. Время в секундах, оставшееся до конца ожидания возрата температуры в колоне к температуре стабилизации колоны, в режиме повторной стабилизации.
    • rect_t_stab: Только в режиме ректификации. Температура в градусах Целсия на которой стабилизировалось состояние колоны.

    Пример ответа:
    {
      "cmd": "info",
      "time": "15:48",
      "MainMode": 3,
      "MainModeStr": "Ректификация",
      "MainStatus": 0,
      "MainStatusStr": "Ожидание запуска процесса",
      "uptime": "00:00:45",
      "CurVolts": 0,
      "CurPower": 0,
      "SetPower": 1000,
      "CurFreq": 0,
      "AlarmMode": "<b class=\"red\">Нет напряжение сети</b>",
      "WaterOn": "No data",
      "TempWaterIn": -1,
      "TempWaterOut": -1,
      "WaterFlow": -1,
      "heap": 169608,
      "sensors": [ ],
      "klapans": [
          {
             "id": 0,
              "is_pwm": 0,
              "is_open": 0,
              "pwm_time": 0,
              "pwm_percent": 0
          },
          {
              "id": 1,
              "is_pwm": 0,
              "is_open": 0,
              "pwm_time": 0,
              "pwm_percent": 0
          },
          {
              "id": 2,
              "is_pwm": 0,
              "is_open": 0,
              "pwm_time": 0,
              "pwm_percent": 0
          },
          {
              "id": 3,
              "is_pwm": 0,
              "is_open": 0,
              "pwm_time": 0,
              "pwm_percent": 0
          }
      ],
      "rect_p_shim": 0,
     "rect_t_stab": "0.0 C"
    }

    GET /sysinfo
    Получение системной информации о програмной среде.

    Запрос возвращает json объект, содержащий следующие поля:
    • version: Версия программного обеспечения устройства.
    • totalBytes: Общее количество свободного места на внутреннем flash диске.
    • usedBytes: Свободное количество на внутреннем flash диске в байтах.
    • heap: Размер свободной памяти, доступной для работы приложения в байтах.
    • rReason: Строка содержащая причину последней перезагрузки устройства. (начиная с версии 0.7.2).

    Пример ответа:
    {
      "version": "0.6.0",
      "totalBytes": 896321,
      "usedBytes": 380516,
      "heap": 175436
    }

    GET /list
    Получение списка файлов на внутренней флеш памяти.

    Запрос возвращает json массив объектов, которые описывают файлы, записанные на внутреннем flash диске.
    Каждый из объектов имеет следующие поля:
    • name: Имя файла.
    • size: Размер файла в байтах.

    Пример ответа:
    [
      {
          "name": "index.html",
          "size": 46342
      },
      {
          "name": "jq.js",
          "size": 95786
      },
      {
          "name": "ver.txt",
          "size": 6
      },
      {
          "name": "zip32z64.dll",
          "size": 231936
      },
      {
          "name": "net.cfg",
          "size": 156
      },
      {
          "name": "wifi.cfg",
          "size": 50
      },
      {
          "name": "rectparam.json",
          "size": 671
      }
    ]


    POST /rm
    Запрос на удаление определенного файла на внутренней флеш памяти.

    Данным запросом можно удалить файл на внутреннем флеш диске устройства.
    Запрос принимает в качестве параметра имя файла в переменной запроса "file".
    Для передачи параметров запроса используется следующий формат:
    • MIME-тип: application/x-www-form-urlencoded;
    • Кодировка символов: UTF-8.
    • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
    • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

    Пример запроса:
    POST /rm HTTP/1.1
    Host: 192.168.1.1
    Content-Type: application/x-www-form-urlencoded
    file=zip32z64.dll

    Пример ответа:
    {
      "err": 0,
      "msg": "OK"
    }

    GET /wifi
    Сканирование и получение данных о доступных wifi сетях.

    Данный запрос запускает процедуру сканирования на наличие доступных wifi сетей в зоне видимости устройства. На это может потребоваться некоторое время, обычно не более 10 секунд.
    По окончании сканирования будет возвращен массив json объектов, содержащих следующие поля:
    • ssid: Название WiFi сети.
    • rssi: Сила сигнала точки доступа.
    • primary: канал, на котором работает AP.
    • authmode: режим авторизации на точке доступа.

    Пример ответа:
    [
      {
          "ssid": "KAN-Home",
          "rssi": -82,
          "primary": 1,
          "authmode": "WPA2_PSK"
      },
      {
          "ssid": "dougqh-guest",
          "rssi": -88,
          "primary": 6,
          "authmode": "WPA_WPA2_PSK"
      },
      {
          "ssid": "dougqh",
          "rssi": -88,
          "primary": 6,
          "authmode": "WPA_WPA2_PSK"
      },
      {
          "ssid": "KAN-Home",
          "rssi": -90,
          "primary": 1,
          "authmode": "WPA2_PSK"
      }
    ]

    GET /wificfg
    Получение списка своих wifi точек.

    Этим запросом получаем свои известные wifi сети, для которых указано ssid и пароль для подключения.
    В ответе будет возвращен массив json объектов, содержащий следующие поля:
    • ssid: Имя wifi точки доступа.
    • pass: Пароль для подключения к этой точки доступа.

    Пример ответа:
    [
      {
          "ssid": "12345-aaa",
          "pass": "9876543210"
      }
    ]

    POST /addwifi
    Добавление новой своей wifi точки.

    Данным запросом добавляется новая известная WiFi точка доступа, к которой мы хотим подключаться.
    Для добавления точки необходимо два параметра:
    • ssid: SSID точки доступа (название сети).
    • pass: Пароль для подключения к точки доступа.

    Для передачи параметров запроса используется следующий формат:
    • MIME-тип: application/x-www-form-urlencoded;
    • Кодировка символов: UTF-8.
    • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
    • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

    Пример запроса:
    POST /addwifi HTTP/1.1
    Host: 192.168.1.1
    Content-Type: application/x-www-form-urlencoded
    ssid=esp32_hd&pass=0987654321

    Пример ответа:
    {
      "err": 0,
      "msg": "OK"
    }

    POST /delwifi
    Удаление своей wifi точки.

    Удаление своей известной WiFi сети из списка.
    Удаляемая сеть указывается параметром "ssid" в POST запросе.

    Для передачи параметров запроса используется следующий формат:
    • MIME-тип: application/x-www-form-urlencoded;
    • Кодировка символов: UTF-8.
    • Каждый параметр указывается парой ключ/значение в виде параметра POST-запроса.
    • Если какой-либо параметр не указан в запросе, то его значение не будет изменено.

    Пример запроса:
    POST /delwifi HTTP/1.1
    Host: 192.168.1.1
    Content-Type: application/x-www-form-urlencoded
    ssid=esp32_hd

    GET /wifi0
    Получение html страницы поиска wifi сетей.

    По этому запросу будет выдана внутренняя html страница со списком доступных wifi сетей, на которой нужно выбрать свою сеть, указать пароль.
    Сохранить информацию и перегрузить устройство.
    Страница прредназначена для первичной конфигурации устройства, когда оно еще не знает ни одной wifi сети и находится в режиме точки доступа (AP) без пароля.

    GET /r
    Запрос на перезагрузку устройства.

    Данный запрос перегружает устройство. Ответ на этот запрос обычно не приходит по понятным причинам.

    /ws
    Точка входа в websocket service.

    По этому URL устанавливается перманентное websocket соединение для приема информации с устройства практически в реальном времени, через указанные в параметре конфигурации промежутки времени.
    Поле протокола для соединения должно быть указано "web".
    Так-же могут приходить асинхронные сообщения с информацией логирования или с сообщениями об аварии.
    Передача параметров от клиента к устройству не используется, для этого используются асинхронные ajax POST запросы.

    Все сообщения представляют собой json объекты, с обязательным полем
    "cmd", которое определяет назначение сообщения.
    На данный момент может принимать следующие значения:
    • "logline" - передача с сервера строки лога.
      Сообщение содержит следующие поля:
      • 'ch' - виртуальный канал для сообщения.
      • 'level' - важность (level) сообщения. 0: самый низкий приоритет.
      • 'date' - отметка даты и времени сообщения.
      • 'message' - собственно само сообщение.
    • "info" - передача с сервера текущего состояния устройства.
      Передаваемые данные аналогичны GET запросу "GET /maininfo".
    • "mode" - передача строки с названием текущего процесса. Устаревший метод.
      В сообщении содержится следующий параметр:
      • 'MainMode' - строка с названием режима работы устройства.

    fw_esp32_v071.zip 621.0 Кб
    msg31 Научный сотрудник Барнаул 4459 2315
    Отв.2  22 Дек. 18, 08:49
    Интересная штука, респект!
    Первый регулятор мощности на ESP с фазовым управлением мощностью, который я знаю.
    Сам пытался на ESP8266 сделать такое, но они у меня висли на аппаратных прерываниях.
    IvanAltay Доцент Бийск/Алтай 1109 223
    Отв.3  22 Дек. 18, 18:26
    ys1797, я тут попытался развернуть на компе пот WIN7 esp-idf, тоже дОфига делОв... Мне кажется, развернуть Arduino IDE, попроще будет. Это в т.ч. ответ, почему я на Arduino IDE подсел.
    Андрей Администратор Бухарест 3786 4205
    Отв.4  23 Дек. 18, 17:49
    ys1797, Могу подсказать или помочь с интерфейсом, чтобы он стал адаптивным на мобильных устройствах и более удобным. А что за источник питания используется?
    ys1797 Доктор наук Санкт-Петербург 980 318
    Отв.5  24 Дек. 18, 01:00
    msg31, Спасибо. У меня там с прерываниями тоже были кактусы. Не любит esp длинные фронты на прерываниях.
    Если подать напрямую с оптопары на линию irq - в секунду получается 2500 прерываний (во всех доступных режимах)
    не знаю с чем это связано, но ни pullup, ни pulldown ни внешний не внутренний не помогали. Помогло только, если пропустить
    через любой логический элемент. На плате был ULN2003, провел через него и чудо - 100 прерываний в секунду Улыбающийся.
    Так-же 1wire можно сделать и программном, но хлипкость gpio мне не понравилась совсем.
    Еще один съеденый кактус - в двух разных трейдах нельзя пользовать i2c и spi одновременно, пришлось защищаться мутексами.


    IvanAltay, Я перед написанием снес в ноль всю оболочку и поставил с нуля. Да mingw довольно большой: ~600 Мб с хвостом.
    esp-idf  вообще с гитхаба скачивается без проблем. Есть примеры натянуть eclipse, но я не заморачивался. Мне и vim хватает Улыбающийся
    В ардуино, кстати,  не все плюшки реализованы, да и отстают от idf.

    Андрей, Если есть опыт по css для мобильных устройств - это сильно интересно. Там вообще какой-то свой web мир, иногда непонятный и жестокий Улыбающийся Я пока сделал только для вертикального расположения и пытался рассчитать зону кнопки под свой палец Улыбающийся.

    Источник питания - у нас тут микроника закрывалась, взял там по дискаунту без корпусный импульсный источник на 12 вольт, 2 ампера выдает. Но шумит зараза гадски, надо в экран убирать.
    Андрей Администратор Бухарест 3786 4205
    Отв.6  24 Дек. 18, 11:12
    ys1797, css такой же, как на ПК, наш форум тому пример.
    Хотел посмотреть страничку автоматики на гитхабе, но не нашел ее Грустный
    Дай прямую ссылку.
    ys1797 Доктор наук Санкт-Петербург 980 318
    Отв.7  24 Дек. 18, 16:15
    Андрей, Да, страничка и jquery грузится прошивкой с внешнего url
    Сейчас со своего адреса http://hd.rus.net/index.html
    Понятно, что без самой автоматики - это просто обертка.
    Да и ссылка "Обновления" за хардкожена в сам сишный код, чтоб с чего-то можно было начать процесс.
    IvanAltay Доцент Бийск/Алтай 1109 223
    Отв.8  24 Дек. 18, 19:29
    Я перед написанием снес в ноль всю оболочку и поставил с нуля. Да mingw довольно большой: ~600 Мб с хвостом.ys1797, 24 Дек. 18, 01:00
    У меня сейчас системник валяется на работе, аж пентиум 4 DELL. У приятеля на работе валялся системник, он его хотел выкинуть, но потому как до помойки не донёс, подарил его мне. Просто разъёмы памяти окислились, просто память переконнектил и всё заработало. Винта только нет, сейчас найду винт и поставлю туда семёрку и попытаюсь там развернуть esp-idf с нуля. У меня с Arduino IDE, тоже непонятки с ESP8266. Разворачивал Arduino IDE сразу под esp32, всё завелось с первого тычка. Вот с ESP8266 трабблы и всё тут, библиотеки не грузятся/не обновляются, вернее пытаются обновиться каждый раз и идут ошибки.

    "Arduino: 1.8.5 (Windows 7), Плата:"Heltec_WIFI_LoRa_32, 80MHz, 921600"
    Invalid version found: Internal RTC2.0
    Не найден boards.txt в C:\Users\1\Documents\Arduino\hardware\heltec\InstallGuide. Это точно pre-1.5?
    Не найден boards.txt в C:\Users\1\Documents\Arduino\hardware\heltec\SchematicDiagram. Это точно pre-1.5?
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Не найден boards.txt в C:\Users\1\Documents\Arduino\hardware\heltec\InstallGuide. Это точно pre-1.5?
    Не найден boards.txt в C:\Users\1\Documents\Arduino\hardware\heltec\SchematicDiagram. Это точно pre-1.5?
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0
    Invalid version found: Internal RTC2.0"
    AlexDol Магистр Екатеринбург 260 372
    Отв.9  24 Дек. 18, 20:08, через 39 мин
    Коллега ys1797 сам не желая того в своей новой теме с первых строк сообщения запугал (шутка) народ.
    Но если перейти ко второму сообщению "Загрузка готовой прошивки" для ленивых или кто не намерен вникать в программирование - то всё невероятно просто! Если кого то испугала необходимость изготовления печатной платы, то это и не обязательно.
    ESP32 и четыре мелкосхемы плюс два-четыре мосфета для управления клапанами легко распаяете на макетной платке.
    Существуют и макетные платы для WiFi модулей ESP32, ESP8266 (двусторонние, металлизированные отверстия).
    Это мой случай, поскольку в Е-Бурге я ESP32 на отладочной плате, а проще в сборе с программатором купить не смог. Нашелся лишь такой: IntoRobot W33 module (ESP-32). Сделаю по старинке обычным программатором, как ранее прошивал ESP8266.
    Радует что после включения автоматики все настройки будут доступны с экрана смартфона (например).
    И меню понятно любому самогонщику. Нет необходимости редактировать настройки оборудования в коде программы.  
    Короче: Это народный вариант автоматики на базе ESP32!

    На фото.
    IntoRobot W33 module (ESP-32) ... 590р
    ESP-32 adapter (AI) ... 80р
    Макетные платы для WiFi модулей ESP32, ESP8266 (двусторонние, металлизированные отверстия).
    Prototype PCB 5x7cm DS ESP-12/32 ... 120р
    Prototype PCB 7x9cm DS ESP-12/32 ... 170р
    PROTOTYPE.JPG
    PROTOTYPE.JPG Автоматика с веб управлением на основе esp32 и pzem. Автоматика. Оборудование.
    ESP32 Adapter.JPG
    ESP32 Adapter.JPG Автоматика с веб управлением на основе esp32 и pzem. Автоматика. Оборудование.
    ys1797 Доктор наук Санкт-Петербург 980 318
    Отв.10  24 Дек. 18, 20:20, через 12 мин
    IvanAltay, ну не знаю. Видимо Arduino IDE музейной версии. Вот я взял в менеджере плат поставил esp8266 - поставился. Удалил - удалился. ver 1.8.1
    IvanAltay Доцент Бийск/Алтай 1109 223
    Отв.11  24 Дек. 18, 20:38, через 19 мин
    ys1797, у меня версия  1.8.5 , видимо не стабильная.

    Добавлено через 11мин.:

    Arduino 1.8.8 уже вышла.
    https://www.arduino.cc/en/Main/Software
    Надо заменить.

    Добавлено через 52мин.:

    Обновил Arduino IDE до версии 1.8.9 ещё хуже стало. Теперь скетчь проверенный/исправный под 1.8.5 не шьётся в esp32 LoRa. Надо на чистой винде развернуть и поменьше не нужных драйверов... Отдельный комп для esp32, видимо уже необходимость.
    ys1797 Доктор наук Санкт-Петербург 980 318
    Отв.12  25 Дек. 18, 19:39
    На фото.IntoRobot W33 module (ESP-32) ... 590рAlexDol, 24 Дек. 18, 20:08

    При прошивке придется играться кнопками boot и en или покупать usb2com адаптер с полными сигналами и уровнем 3.3v, т.к. esp32 не толерантен к 5 вольтовой логике. Проще переплатить 100 руб и взять esp32 модуль уже с USB.

    Или не переплачивать:
    https://ru.aliexpress.com/...2796032726.html 494 руб и usb

    https://ru.aliexpress.com/...2835829447.html 925руб с акб отсеком и экраном
    сообщение удалено
    Totenkopf Специалист Ташкент-Ютербог-Берлин-Пограничный-Суйфеньхэ-Елизово-Подольск-Долгопрудный 199 58
    Отв.13  25 Дек. 18, 21:23
    Друзья, а схема есть?
    Андрей Администратор Бухарест 3786 4205
    Отв.14  25 Дек. 18, 22:19, через 56 мин
    ys1797, я так понял интерфейс еще в разработке. То, что ресурс сторонний - это плохо, эта ж система для домашнего использования предполагается. Ты сделай простой API и интегрируй интерфейс в проект, я форкну и сделаю альтернативный интерфейс с применением современных подходов.

    IvanAltay, для тестирования ПО воспользуйся лучше виртуалбоксом, вместо старого ПК.
    ys1797 Доктор наук Санкт-Петербург 980 318
    Отв.15  26 Дек. 18, 11:43
    Друзья, а схема есть?Totenkopf, 25 Дек. 18, 21:23
    Попробуйте еще раз прочитать первое сообщение.
    5 пункт в "Аппаратном обеспечении".
    ys1797 Доктор наук Санкт-Петербург 980 318
    Отв.16  26 Дек. 18, 20:52
    я так понял интерфейс еще в разработке. То, что ресурс сторонний - это плохо, эта ж система для домашнего использования предполагается. Ты сделай простой API и интегрируй интерфейс в проект, я форкну и сделаю альтернативный интерфейс с применением современных подходов.Андрей, 25 Дек. 18, 22:19

    Да. Постоянно что-то допиливается и перепиливается. Хочется минимум графики использовать.
    Ресурс сторонний, но мой Улыбающийся А так на странице загрузки html морды есть поле для url, где указывается, откуда брать файлы.
    Можно поставить localhost и с самого себя и поставить...
    Я пока не пойму, как сделать образ партишен с уже прошитыми в нее файлами. Есть мысль попробовать mkspifs.

    Под API имеется ввиду, что можно запросить json запросами и что можно получить в ответ?
    Плюс еще json сообщения приходят асинхронно по websocket…
    IvanAltay Доцент Бийск/Алтай 1109 223
    Отв.17  26 Дек. 18, 22:45
    При прошивке придется играться кнопками boot и en или покупать usb2com адаптер с полными сигналами и уровнем 3.3v, т.к. esp32 не толерантен к 5 вольтовой логике. Проще переплатить 100 руб и взять esp32 модуль уже с USB.

    Или не переплачивать:
    https://ru.aliexpress.com/...2796032726.html 494 руб и usb

    https://ru.aliexpress.com/...2835829447.html 925руб с акб отсеком и экраномys1797, 25 Дек. 18, 19:39
    У меня в наличии есть модуль ESP32 DEVKIT TV1. Тоже кнопки ананировать приходится при прошивке. Но вполне себе удобный девайс. Работает стабильно.

    https://ru.aliexpress.com/...-dc6e97d8ea3f-1

    Добавлено через 2мин.:

    IvanAltay, для тестирования ПО воспользуйся лучше виртуалбоксом, вместо старого ПК.Андрей, 25 Дек. 18, 22:19
    СчАс НГ настанет и я вообще всё попробую от безделья. Улыбающийся

    Добавлено через 11мин.:

    ys1797, а есть большой смысл вешать регулятор мощности на ESP? По идее, РМ2 стоит порядка 2 рублей с тиристором. А если рассмотреть гибрид ESP32+РМ2+SSR40DA(в виде ключа), без PZEM. А нужно ли так измерять мощность нагрева, если мы её точно знаем?

    Добавлено через 24мин.:

    ys1797, мне бы вот был сильно интересней девайс ESP32(LoRa Heltec)+РМ2+SSR40DA +ESP32(LoRa Heltec) в качестве носимого брелка/монитора/терминала. ESP32, стабильно мониторит температуру и т.п. данные, присылает мне их на терминал из аналогичного ESP32(LoRa Heltec) по частоте 433mHz. При необходимости/аварийной ситуации, можно погасить нагрев твердотельным реле SSR40DA. Через эту же релюху SSR40DA можно сделать регулятор мощности, она имеет уже контроль перехода нуля синуса. Подаём ШИМ сигнал нужной скважности на SSR40DA и имеем регулировку мощности нужной. ТЭН - девайс резистивный, если он питается стабильным напряжением с РМ2, там и измерять нечего, в обратной связи нагрева ТЭНа нужды нет.

    Добавлено через 11мин.:

    Ну и понятно, что носимый терминал на ESP32(LoRa Heltec) может быть ещё и пультом ДУ. Дуплексный протокол в LoRa заложен изначально. И малюсенький уже встроенный дисплей, вполне достаточен на настроенной стабильной системе.
    Андрей Администратор Бухарест 3786 4205
    Отв.18  27 Дек. 18, 00:16
    ys1797, я не спец микроконтроллерам, только интересуюсь. Вот что заметил:
    есть 2 версии libesphttpd
    1. https://github.com/Spritetm/libesphttpd
    2. https://github.com/chmorgan/libesphttpd
    вторая поновее, с поддержкой ssl, у тебя первая.
    так же там есть папка espfs, а в документации написано:
    cgiEspVfsGet (arg: base filesystem path) This is a catch-all cgi function. It takes the url passed to it, looks up the corresponding path in the filesystem and if it exists, sends the file. This simulates what a normal webserver would do with static files. If the file is not found, (or if http method is not GET) this cgi function returns NOT_FOUND, and then other cgi functions specified later in the routing table can try. See the example projects for an implementation that uses this function call. FreeRTOS Example

    The cgiArg value is the base directory path, if specified. Usage:

        ROUTE_CGI("*", cgiEspVfsGet)
        ROUTE_CGI_ARG("*", cgiEspVfsGet, "/base/directory/")
        ROUTE_CGI_ARG("*", cgiEspVfsGet, ".") to use the current working directory
    По ссылке в цитате пример с папкой html, в ней как раз стили и гифка, посмотри как сервер с этими файлами работает, мне общий код не очень понятен.

    Простой API, в смысле как в REST. Чтобы GET и POST правильно использовались, маршруты интуитивно понятные, исключения.

    JSON это очень удобно в JS и, кстати, для работы с ним не нужен jQuery, он уже давно потерял свою актуальность.
    Если не все данные приходят через вебсокет, могут быть проблемы с политикой безопасности браузера, он не даст работать с чистыми данными в кроссдоменных запросах, надо или заголовки CORS добавлять или JSONP. А если все на одном адресе будет крутиться - никаких проблем с JS скриптами.
    saniaxxx Магистр Кострома 271 36
    Отв.19  27 Дек. 18, 00:32, через 16 мин
    Тож когда то начинал похожий, но более простой проект с управлением через json api. Забросил в связи с нерациональной тратой времени на разработку, перешёл на малинку и пайтон