Добавить в корзинуПозвонить
Найти в Дзене

ESP-32 (WT32-ETH01) и датчик KY-IIC-3V3 (JHM1200) шина I2C

В этой серии статей мы разберём, как подключить модуль WT32‑ETH01 (на базе ESP32) к датчику давления воды KY‑IIC‑3V3 — полному аналогу JHM1200. Задача проекта подключение датчика KY‑IIC‑3V3 по I2C-шине, преобразователь CAN-интерфейса, передача полученных данных по Ethernet на ПК, получение данных в Python программе. При выборе решения я ориентировался на следующие критерии: Рассмотрим несколько вариантов реализации: Исходя из этих критериев, первый вариант был отвергнут из‑за лишних проводов, второй — из‑за высокой стоимости и длительного срока поставки. В итоге выбор пал на WT32‑ETH01 как наиболее подходящий вариант. При попытке найти информацию о том, на каких выводах модуля WT32‑ETH01 расположена шина I2C, я столкнулся с проблемой: в официальном datasheet (версия 1.1 от 23.10.2019) эта информация отсутствует. Однако решение нашлось: достаточно обратиться к документации на чип, установленный на модуле. Там указано расположение I2C‑интерфейса. Шина I2C на модуле WT32‑ETH01 находится н
Оглавление

В этой серии статей мы разберём, как подключить модуль WT32‑ETH01 (на базе ESP32) к датчику давления воды KY‑IIC‑3V3 — полному аналогу JHM1200.

Задача проекта подключение датчика KY‑IIC‑3V3 по I2C-шине, преобразователь CAN-интерфейса, передача полученных данных по Ethernet на ПК, получение данных в Python программе.

При выборе решения я ориентировался на следующие критерии:

  • низкая стоимость компонентов;
  • доступность модулей на рынке;
  • физическое подключение по Ethernet через кабель;
  • возможность подключить CAN‑шину.

Существующие решения

Рассмотрим несколько вариантов реализации:

  1. Arduino + Wiznet:
    Плюсы:
    низкая стоимость, широкая доступность.
    Минусы: необходимость дополнительных соединений (модуль Wiznet подключается по интерфейсу SPI, что добавляет лишних проводов).
  2. STM32 с Ethernet на борту:
    Плюсы:
    встроенный CAN‑интерфейс.
    Минусы: высокая стоимость, срок поставки — около двух недель (что не подходило для моего проекта).
  3. WT32‑ETH01:
    Плюсы:
    низкая стоимость, доступность, встроенный Ethernet‑интерфейс на плате.
    Минусы: изначально не очевидна возможность подключения I2C, CAN. Именно об этом мы будем говорить.

Исходя из этих критериев, первый вариант был отвергнут из‑за лишних проводов, второй — из‑за высокой стоимости и длительного срока поставки. В итоге выбор пал на WT32‑ETH01 как наиболее подходящий вариант.

Проблема с поиском I2C‑пинов на WT32‑ETH01

При попытке найти информацию о том, на каких выводах модуля WT32‑ETH01 расположена шина I2C, я столкнулся с проблемой: в официальном datasheet (версия 1.1 от 23.10.2019) эта информация отсутствует.

Однако решение нашлось: достаточно обратиться к документации на чип, установленный на модуле. Там указано расположение I2C‑интерфейса.

Расположение I2C‑шины на WT32‑ETH01

Шина I2C на модуле WT32‑ETH01 находится на следующих пинах:

  • IO33 (маркировка на модуле) — I2C SDA (линия данных);
  • IO32 (маркировка на модуле) — I2C SCL (линия синхронизации).
-2

Таблица подключения датчика давления воды KY‑IIC‑3V3 к WT32‑ETH01 представлена ниже. ВНИМАНИЕ цвет проводов может отличаться, уточняйте у продавца.

-3

Устанавливаем подтягивающие резисторы (pull‑up resistors), которые подключают линии SDA и SCL к напряжению питания. В результате их работа будет заключаться:

1. Установка логической единицы (HIGH). Когда все устройства «отпускают» линию, резистор поднимает напряжение до уровня питания, формируя стабильный логический уровень «1».

2. Предотвращение неопределённого состояния. Без резисторов линии оставались бы в «воздухе» (floating), то есть с непредсказуемым напряжением. Это приводит к ошибкам чтения данных и сбоям в работе шины.

Полный код с комментариями на GitFlic: https://gitflic.ru/project/lecter2005/wt32-eth01-i2c

Процесс прошивки WT32‑ETH01 и полная схема подключения будут рассмотрены в следующей статье. Здесь приведём ключевые пояснения к программной реализации.

Комментарии программного кода

Датчик KY‑IIC‑3V3 обновляет данные с частотой 500 Гц (каждые 2 мс). Однако для снижения нагрузки на систему и освобождения ресурсов под другие задачи частота опроса ограничена 200 Гц (каждые 5 мс). Это реализовано в основном цикле через проверку времени:

if (SENSOR_ENABLE && (millis() - lastSensorRead >= SENSOR_READ_INTERVAL))

Для минимизации влияния отладочных сообщений на время выполнения кода вывод в COM‑порт управляется директивами препроцессора. Это позволяет:

  • отключать отладочную информацию в финальной версии проекта;
  • сохранять высокую скорость работы системы.

В дальнейшем с целью сокращения времени передачи и минимизации трафика по сети Ethernet отправляются бинарные данные: переменные press_raw и temp_raw. Пересчет в значения температуры и давления будут выполняться на стороне ПК

Датчик KY‑IIC‑3V3 требует калибровки при пересчеты сырых данных в значения давления и температуры. Мои значения представлены ниже, у вас могут быть другие:

press_l = -125000.0; press_h = 1125000.0;

temp_offset = 157.8; temp_scale = -226.8;