Arduino Nano 33 IoT: Мультипараметрический датчик воды (EC, pH, ORP) с BLE и PWA
Компоненты и материалы
| Arduino Nano 33 IoT | × | 1 |
| Microfire LLC Isolated EC Probe Interface (изолированный интерфейс зонда EC) | × | 1 |
| Microfire LLC Isolated ISE Probe Interface (изолированный интерфейс ионоселективного электрода) | × | 2 |
О проекте
Что мы будем создавать?
Устройство для измерения электропроводности (EC), pH, окислительно-восстановительного потенциала (ORP) и температуры. Оно подходит для мониторинга бассейнов, гидропонных установок и аквариумов. Данные передаются по Bluetooth Low Energy (BLE) и отображаются на веб-странице через Web Bluetooth. Для удобства проект оформлен как Progressive Web App (PWA) — его можно «установить» на смартфон прямо из браузера.


Все компоненты можно приобрести на ufire.co.
Расшифровка терминов
- EC / pH / ORP / температура — основные параметры качества воды. Электропроводность (EC) применяется в гидропонике для контроля питательного раствора, pH показывает кислотность/щелочность, ORP — способность воды к самообеззараживанию.
- Bluetooth Low Energy (BLE) — энергоэффективный беспроводной протокол. Плата Arduino Nano 33 IoT имеет встроенные модули Wi-Fi и BLE.
- Web Bluetooth — API в браузерах Chrome и Opera, позволяющее веб-странице общаться с BLE-устройством напрямую.
- Progressive Web App (PWA) — веб-приложение, ведёт себя как нативное: можно установить на главный экран, работает офлайн, имеет иконку.
Железо
Платы uFire ISE имеют одинаковый I2C-адрес. Так как мы используем две такие платы (одну для pH, вторую — для ORP), адрес одной нужно изменить. Выбираем плату для ORP и меняем её адрес на 0x3E по инструкции.
Сборка проста: все модули используют систему Qwiic (JST-SH 4-pin). Соединяем их в цепочку. Для подключения к Nano 33 IoT нужен один кабель Qwiic–Male (мама). Цветовая маркировка проводов:
- Чёрный → GND
- Красный → 3.3V или 5V
- Синий → SDA (A4)
- Жёлтый → SCL (A5)

Температурный датчик подключается к плате EC (хотя все платы поддерживают измерение температуры). Зонды EC, pH и ORP подключаются BNC-разъёмами. Рекомендуется поместить всё в корпус — водная среда требует защиты электроники.
Программная часть
ПО делится на две части: прошивка Nano 33 и веб-страница.
Алгоритм работы:
- Веб-страница подключается к Nano по BLE.
- Страница отправляет текстовые команды (запрос измерения, калибровка и т.д.).
- Nano принимает команду, выполняет её и возвращает JSON-ответ.
- Страница обновляет интерфейс.
BLE-сервисы и характеристики
В прошивке используется один кастомный сервис и две характеристики:
BLEService uFire_Service("4805d2d0-af9f-42c1-b950-eae78304c408");
BLEStringCharacteristic tx_Characteristic("50fa7d80-440a-44d2-967a-ec7731ec736a", BLENotify, 20);
BLEStringCharacteristic rx_Characteristic("50fa7d80-440b-44d2-967b-ec7731ec736b", BLEWrite, 20);
tx_Characteristic(с флагомBLENotify) — отправка данных на веб-страницу (измерения, статусы).rx_Characteristic(с флагомBLEWrite) — приём команд со страницы.
Инициализация BLE:
BLE.setLocalName("uFire BLE");
BLE.setAdvertisedService(uFire_Service);
uFire_Service.addCharacteristic(tx_Characteristic);
uFire_Service.addCharacteristic(rx_Characteristic);
BLE.addService(uFire_Service);
rx_Characteristic.setEventHandler(BLEWritten, rxCallback);
BLE.advertise();
rx_Characteristic.setEventHandler(BLEWritten, rxCallback) — вызывает функцию rxCallback при записи в характеристику. BLE.advertise() запускает анонсирование устройства.
Текстовые команды
Обмен данными происходит простыми текстовыми командами. Библиотека uFire поддерживает JSON и MsgPack; в проекте используется JSON для читаемости.
Пример:
- Страница отправляет
ecвrx_Characteristic. - Nano возвращает
{"ec":1.24}вtx_Characteristic. - Страница отображает значение.
Веб-страница (Vue.js + Web Bluetooth)
Фронтенд на Vue.js без бэкенда, без сборщиков (plain JS/CSS). Стилизация — Bulma. В <head> подключён манифест PWA:
<link rel="manifest" href="manifest.json">
JS разбит на модули: app.js (UI, Vue), ble.js (Bluetooth), ec.js, ph.js, orp.js (команды датчиков).
Особенности Web Bluetooth
- Работает только в Chrome/Opera.
- Подключение инициируется только пользовательским действием (нажатие кнопки).
- Фильтр по имени (
namePrefix: "uFire") иoptionalServicesобязательны. - Chrome показывает системный диалог выбора устройства — это требование безопасности.
Подключение к характеристикам и подписка на уведомления:
service = await server.getPrimaryService(this.serviceUuid);
characteristic = await service.getCharacteristic(this.txUuid);
await characteristic.startNotifications();
characteristic.addEventListener("characteristicvaluechanged", this.value_update);
Таймер опрашивает датчики каждые 5 секунд. Функция value_update парсит входящий JSON и обновляет UI.
Важно: для работы Web Bluetooth страница должна быть обслужена по HTTPS. Для локальной разработки удобен serve-https.
PWA: превращаем страницу в приложение
Шаги:
- manifest.json — генерируется онлайн (например, App Manifest Generator). Ключевые поля:
scope,start_url,display: "standalone". Файл кладётся в корень сайта. - Service Worker — для кэширования и офлайн-работы. Используется стандартный шаблон от Google с перечнем кэшируемых файлов. Регистрация в
mounted()Vue:
mounted: function () {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js');
}
},
- Иконки — генерируются через FavIcon Generator.
Проверка — через Lighthouse. При успехе Chrome предложит установить приложение баннером.
Код
- Репозиторий на GitHub (прошивка + веб-часть)
- Arduino Create: доступен в репозитории
Схемы
Все соединения выполнены кабелями Qwiic.

Производственный процесс
- Infineon назван Advanced Technology Partner Amazon Web Services
- Raspberry Pi и HDC2010: полное руководство по настройке I2C датчика температуры и влажности
- Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
- Создание кнопки AWS IoT с управлением движением на Raspberry Pi, PIR-датчике и MQTT
- Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
- Установка Windows 10 IoT Core на Raspberry Pi 3 Model B+: Пошаговое руководство
- Превратите Raspberry Pi 4 в веб-сервер и создайте свой сайт
- Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3
- Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг
- Как IoT революционизирует дизайн и разработку веб-приложений