Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Arduino Nano 33 IoT: Sensor de Agua Multiparámetro (CE, pH, ORP) con BLE y PWA

Componentes y materiales

Arduino Nano 33 IoT × 1
Interfaz de sonda EC aislada Microfire LLC × 1
Interfaz de sonda ISE aislada Microfire LLC × 2

Sobre este proyecto

¿Qué vamos a construir?

Un dispositivo para medir conductividad eléctrica (CE), pH, potencial de oxidación-reducción (ORP) y temperatura. Ideal para monitorizar piscinas o sistemas hidropónicos. Se comunica mediante Bluetooth Low Energy (BLE) y muestra la información en una página web usando Web Bluetooth. Además, convertiremos la web en una Progressive Web App (PWA) instalable desde el navegador.

Arduino Nano 33 IoT: Sensor de Agua Multiparámetro (CE, pH, ORP) con BLE y PWA
Arduino Nano 33 IoT: Sensor de Agua Multiparámetro (CE, pH, ORP) con BLE y PWA

Todos los componentes están disponibles en ufire.co.

Glosario de términos

El hardware

Antes de montar, hay que resolver un detalle: las placas ISE de uFire comparten dirección I2C. Como usamos dos, debemos cambiar la dirección de una a 0x3e (usaremos esa para ORP). Sigue estos pasos.

El montaje es sencillo gracias al sistema Qwiic: conecta todo en cadena. Necesitarás un cable Qwiic-a-macho para conectar el primer sensor al Nano 33. Código de colores: negro a GND, rojo a 3.3V o 5V, azul a SDA (A4), amarillo a SCL (A5).

Arduino Nano 33 IoT: Sensor de Agua Multiparámetro (CE, pH, ORP) con BLE y PWA

Conecta la sonda de temperatura a la placa EC (aunque todas pueden medirla). Conecta las sondas BNC de CE, pH y ORP a sus respectivas placas. Si tienes una carcasa, úsala para proteger la electrónica del agua.

El software

Dividido en dos partes: firmware en el Nano 33 y la página web.

Flujo básico

Esto permite realizar mediciones, calibrar sensores, etc., desde la web.

Servicios y características BLE

Conceptos clave: un servicio es como un "libro" y una característica como sus "páginas", pero con propiedades extra: pueden notificar cambios o permitir escritura. Se identifican por UUID.

En el firmware definimos un servicio y dos características:

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);

Código de enlace:

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();

Comandos de texto

Comunicación mediante comandos simples. Las librerías uFire usan JSON/MsgPack; usaremos JSON por legibilidad.

Ejemplo:

  1. Web envía ec a rx_Characteristic.
  2. Nano responde {"ec":1.24} en tx_Characteristic.
  3. Web muestra el valor.

La página web

Frontend con Vue.js, sin backend ni sistema de build. Estructura: js/, css/, assets/. Usa Bulma.io para estilos.

En el <head> destaca:

<link rel="manifest" href="manifest.json">

Carga el manifiesto PWA. El JavaScript se divide en app.js (UI, variables Vue) y ble.js (lógica Bluetooth).

JavaScript y Web Bluetooth

Solo funciona en Chrome y Opera. En app.js están los mismos UUIDs del firmware. En ble.js están connect() y disconnect().

La conexión requiere interacción física (botón):

this.device = await navigator.bluetooth.requestDevice({
  filters: [{ namePrefix: "uFire" }],
  optionalServices: [this.serviceUuid]
});

Se muestra un diálogo de selección (requisito de seguridad). Luego se configuran servicio y características con callback value_update para recibir notificaciones. Un temporizador actualiza datos cada 5 segundos. Los archivos ec.js, ph.js, orp.js contienen funciones para comandos y calibración.

Para probar: sirve la web vía HTTPS (ej. serve-https), sube el firmware, conecta hardware y abre la web.

La parte PWA

Pasos para convertir la web en app instalable:

  1. manifest.json: Genera con App Manifest Generator. Define scope (ej. /uFire-BLE/), start_url y display: standalone. Colócalo en la raíz junto a index.html.
  2. Service Worker: Para caché offline. Implementación estándar (ejemplo de Google) adaptando la lista de archivos a cachear. Solo archivos de tu dominio.
  3. Iconos: Genera con FavIcon Generator.
  4. Registro en Vue: En mounted():
    mounted: function () {
      if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register('service-worker.js');
      }
    },
    

Verifica con Lighthouse. Si todo va bien, Chrome mostrará banner de instalación.

Arduino Nano 33 IoT: Sensor de Agua Multiparámetro (CE, pH, ORP) con BLE y PWA

Código

Arduino Create
GitHub

https://github.com/u-fire/uFire-BLE

Esquemáticos

Todas las conexiones con cables Qwiic.

Arduino Nano 33 IoT: Sensor de Agua Multiparámetro (CE, pH, ORP) con BLE y PWA

Proceso de manufactura

  1. Raspberry Pi y HDC2010: Guía completa de configuración I2C para sensor de temperatura y humedad
  2. Construye una Puerta con Reconocimiento Facial Segura usando Windows IoT y Raspberry Pi
  3. Botón IoT AWS Controlado por Movimiento con Raspberry Pi, Sensor PIR y MQTT
  4. Monitorización Precisa de Temperatura y Humedad con SHT15 en Windows 10 IoT Core
  5. Instalación de Windows 10 IoT Core en Raspberry Pi 3 Model B+: Guía Paso a Paso
  6. Convierte tu Raspberry Pi 4 en un servidor web y crea tu propio sitio
  7. Extensión de GoPiGo v2 en Windows 10 IoT Core para Raspberry Pi 3
  8. Sistema de Control de Piscina con Azure IoT: Sensores Inteligentes y Monitorización Remota
  9. Infineon nombrado Advanced Technology Partner por Amazon Web Services
  10. DDS habilitado para Web: Conectando IoT, nube y conectividad en tiempo real
  11. Cómo el IoT Está Revolucionando el Diseño y Desarrollo de Aplicaciones Web