Documentación Técnica

Ranura de expansión

Casi todos los pines ESP32 IO disponibles se encuentran en la ranura de expansión. La ranura de expansión contiene 13 pines en la parte superior, 13 pines en la parte posterior y 5 pines en el medio. Además, el adaptador de programación (RX/TX) incluye dos pines de extensión. Todos los pines están etiquetados en la tarjeta, en la parte delantera con un tamaño de letra pequeño por razones de espacio, y en la parte trasera con un tamaño de letra fácil de leer:

Hemos dado importancia a que los pines usados que se pueden utilizar para otros fines (p.ej.: pulsador, led 1, led 2, IO35 para la medición del voltaje de la batería) también estén disponibles en la ranura de expansión. Por lo tanto, hay muchas posibilidades de extensión disponibles.

Si es necesario, las tarjetas de expansión se pueden enchufar en la parte superior o, alternativamente, desde abajo. Para que sea lo más flexible posible, los conectores hembra (2 x 13 pines) no están soldados, pero se incluyen en el suministro.

Interfaz estándar de Arduino SPI e I2C

Las interfaces SPI e I2C están disponibles en la ranura de expansión. La interfaz SPI también se utiliza para LoRa, la interfaz I2C ya se utiliza para el reloj (RTC) y para el sensor externo de temperatura/humedad. Tenga en cuenta que las interfaces SPI o I2C no deben ser utilizadas simultáneamente por el software RadioShuttle y sus propias aplicaciones.

I2C se puede utilizar dentro del bucle (“loop”), ya que RadioShuttle no accede a él al mismo tiempo.

Con SPI solamente tiene sentido utilizar SPI si LoRa no está activo. Con la función UpdateNodeStartup(RS_Node_Offline), también se puede desactivar temporalmente el LoRa. Alternativamente, las interrupciones pueden ser desactivadas durante el propio acceso SPI.

Instalación de una antena de alambre

La antena de alambre suministrada debe soldarse en el orificio de soldadura suministrado (marcado “ANT”) en la parte posterior a la derecha de la tarjeta y, a continuación, acortarse a 8,2 cm. Por lo tanto, la antena λ/4 está adaptada para 868,1 MHz.

La fórmula exacta para calcular la longitud de la antena es:
Longitud de onda = velocidad de luz / frecuencia

Para λ/4, este valor debe dividirse de nuevo por 4.

Dado que el orificio de soldadura ya actúa como antena y hay que tener en cuenta un factor de acortamiento, 8,2 cm son suficientes.

La tarjeta ECO Power: asignación de pines e interrupciones

Conector de antena SMA o U.FL

El conector SMA se puede soldar fácilmente. A continuación, abra el puente de soldadura de la antena a la derecha de la antena de alambre y añada un puente de soldadura hacia arriba a la línea SMA.

Un conector U.FL ya está soldado. Para esta función, el puente de soldadura de la antena a la derecha de la antena de alambre debe ser abierto y un puente de soldadura a la parte posterior de la línea SMA debe ser añadido. Tenga en cuenta que el conector U.FL sólo está diseñada para unas pocas conexiones, por lo que recomendamos utilizar una conexión SMA, que se puede atornillar tantas veces como sea necesario.

Los puentes de soldadura de la antena deben ser de forma fina y delgada para que no influyan en la funcionalidad. Sólo se puede poner un puente de soldadura a la vez, ya sea una antena de alambre, o SMA, o U.FL.

Encender/apagar el voltaje “VDD-SW” para cargas externas

Un interruptor de voltaje interno permite encender y apagar los consumidores externos para que no consuman energía permanentemente. El pin de E/S “EXT_POWER_SW” se define en el archivo “xPinMap.h” del software RadioShuttle para la conmutación. Se puede cambiar a “EXT_POWER_ON” o “EXT_POWER_OFF”. La medición del voltaje de la batería, que se mide a través de los pines ADC “BAT_POWER_ADC”, se fija al cable “VDD-SW”. Las funciones extendidas del reloj RTC ya se utilizan en la línea “VDD-SW”. Para asegurar que la tarjeta requiere la menor energía posible, el “VDD-SW” suele estar apagado.

La tarjeta ECO Power: realizar un reinicio

La tarjeta ECO Power no tiene la posibilidad de efectuar un reinicio para la programación a través de USB. La línea de control serie utilizada con otros módulos no está disponible en el adaptador de programación. Por lo tanto, se requiere una combinación de teclas especial para la programación, todos los detalles se describen en el capítulo Puesta en Servicio.

5 V pin en la ranura de expansión

El pin USB 5 V en la ranura de expansión se conecta directamente al pin de 5 V del adaptador de programación o a la fuente de alimentación externa micro USB. Se dispone de un fusible de rearme (500 mA) para la fuente de alimentación externa micro USB. Sin embargo, no hay ningún fusible para la alimentación a través del adaptador de programación USB. En el funcionamiento a batería sin fuente de alimentación USB, no se aplica tensión al pin de 5 V.

Si se conecta una fuente de alimentación externa a través del adaptador de programación, también puede ser superior a 5 voltios (máx. 9 voltios). Por lo tanto, el uso del cable USB directo de 5 V debe ser manejado con cuidado; un cortocircuito puede a veces destruir el puerto USB de la computadora, al igual que con otros consumidores USB también.

Sensor de temperatura y humedad

El sensor ofrece la posibilidad de medir la temperatura y la humedad exacta de una manera que ahorra mucha energía. No se debe quitar el fieltro blanco del sensor, ya que tiene una función protectora para que el sensor funcione correctamente. Se utiliza un sensor “Si7021-A20-GM1” de Silicon Labs, el controlador está incluido en el software RadioShuttle.

Conectar el sensor

El sensor se conecta a través del bus I2C y requiere cuatro líneas (GND, VDD, SCL, SDA). Las siguientes opciones de instalación están disponibles:

  • Conecte el sensor superior izquierdo a la tarjeta
  • Conecte el sensor a la tarjeta en la parte superior izquierda de la parte posterior
  • El sensor puede instalarse externamente utilizando un cable alargador (no incluido), por ejemplo, fuera de la carcasa o directamente en un calentador, etc.

Por favor, preste atención al orden de los pines (“GND” está fuera); el sensor tiene dos lados de conexión y puede girarse según la instalación (superior o inferior).

Nota:
Dos componentes (resistencias opcionales) en el sensor no están equipados intencionalmente, son resistencias pull-up I2C, que ya están incluidas como resistencias de 10 kΩ en la tarjeta principal. Para un sensor externo con cables largos, puede ser útil soldar dos resistencias de 1 kΩ (incluidas) para obtener señales estables. Una opción adicional es reducir la velocidad del I2C. Compartiremos nuestra experiencia aquí en una fecha posterior.

Uso del software del sensor

Si está conectado, el sensor está permanentemente activo, pero sólo necesita aprox. 1 μA mientras no se lean los valores del sensor. Cuando la tarjeta ECO Power está conectada (fuente de alimentación conectada o reiniciada), el sensor se inicializa una sola vez y se emite la temperatura con los mensajes de inicio. Si la tarjeta está en “deepsleep” (“RadioShuttle RS_Node_Offline”), los valores de los sensores se miden automáticamente y se muestran de nuevo al despertar periódicamente (aprox. cada 10 segundos). El código para ello se encuentra en el archivo “RTCUtil.cpp” de la aplicación de prueba “RadioTest”.

Se recomienda no leer innecesariamente el sensor permanentemente, ya que cada lectura de los valores toma tiempo y consume energía durante este tiempo. La lectura de la temperatura tarda unos 13 ms, la de la humedad del aire unos 20 ms. Durante este tiempo, la MCU ESP32 está activo.

Medición del voltaje de la batería

Para medir el voltaje de alimentación del VDD (aprox. 3,3 voltios cuando se alimenta a través de USB, aprox. 3,0 voltios con funcionamiento por batería) se incluye un dispositivo de medición en la tarjeta. El voltaje de la batería se muestra con una precisión de unos 100 mV. El voltaje se mide y se muestra al arrancar o reiniciar. La función GetBatteryVoltage() en el archivo “RTCUtil.cpp” mide y devuelve el valor del voltaje.

Precisión del convertidor analógico-digital (ADC) ESP32

Para aumentar significativamente la precisión de las mediciones de ADC en la tarjeta ECO Power, la referencia del voltaje interna del procesador ESP32 se mide durante la producción de las tarjetas ECO Power y se guarda internamente en la memoria eFuse. La función GetProperty(prop.ADC_VREF, 1100); permite recuperar el valor en milivoltios para realizar un cálculo preciso de las mediciones ADC. Dado que casi todos los módulos del ESP32 tienen una desviación en su voltaje de referencia interno (1,100 voltios), la calibración de las tarjetas ECO Power para mediciones de ADC más precisas es una gran ventaja.

El voltaje de referencia analógica interna del ESP es de aprox. 1,100 voltios (ajuste “Attenuation ADC_0db”), otros voltajes de referencia (p. ej. 6 dB = aprox. 2,2 voltios) sólo se derivan de la referencia interna de 1,100 voltios (0 dB). Por lo tanto, para las mediciones de ADC se recomienda utilizar el voltaje de referencia de 1,100 voltios (“ADC_0db”) de inmediato, ya que fue medido y, por lo tanto, calibrado durante la producción de la tarjeta ECO Power.

El ADC ofrece una precisión de hasta 12 bits (12 bits = 4.096 gradaciones) en un rango de voltaje de 0-1.100 voltios (voltaje de referencia aprox. 1,100 voltios). Desafortunadamente, estas 4.096 gradaciones del ADC interno del ESP32 no son lineales, lo que afecta a la precisión de las mediciones del ADC. Para lograr mediciones ADC más precisas es necesario que ambos convertidores internos, ADC0 y ADC1, creen y utilicen sus propias tablas de consulta (“lookup tables”) para la linealización.

Como ya se ha mencionado anteriormente, las mediciones precisas de ADC sólo son limitadas, o sólo son posibles con un mayor esfuerzo de calibración. Un tema en el que el fabricante, Espressif Systems, debe seguir trabajando.

ESP32 “deepsleep” y despertar

Durante el modo “deepsleep” (p. ej. en el modo “Node Offline”) la MCU se apaga por razones de ahorro de energía. La única unidad que funciona durante el “deepsleep” es un reloj interno ESP32 (RTC, que no debe confundirse con el RTC externo), que despierta a la MCU en eventos externos. Estos eventos externos pueden ser cambios de pines GPIO o una función de despertador periódico.

Los siguientes pines soportan la función de despertador en el modo “deepsleep”:

IO 0
IO 2
IO 4
IO 12-15
IO 25-27
IO 32-39

Además, la MCU se activa brevemente cada 10 segundos y hace que el led 1 parpadee brevemente como indicador de actividad. Sin embargo, esto se hace sin poner en marcha la MCU completamente. Cada minuto (definible) la MCU se inicia completamente para permitir que los programas comprueben periódicamente si hay alguna tarea que hacer – esto ahorra energía. Las siguientes funciones afectan al tiempo de reposo y al número de pasadas:

FunciónEstándarMin … Max
ESP32SetDeepSleepDuration(int ms)10 000 ms200 … 1 200 000 ms
ESP32SetDeepSleepBlinkDuration(int µs)100 µsSe recomienda un máximo de 10 000, para evitar un aumento significativo del consumo de energía
ESP32SetDeepSleepWakeupInterval(int count)6 ejecuciones
Una vez que se han completado las ejecuciones, se produce un despertar (tiempo total = ejecuciones x duración)

ESP32 “sleep” y despertar

La función sleep() simple se utiliza cuando ya no quedan tareas por hacer. Permite que la CPU actual se duerma y espere por eventos como interrupciones, temporizador, etc. La memoria completa se conserva y el periférico sigue funcionando. Por lo general, una interrupción del sistema se produce 1 000 veces por segundo, por lo que el led 1 (verde) parpadea ligeramente. La función “sleep” también ahorra energía, evitando que la CPU se caliente. Sin embargo, “sleep” todavía se necesita una corriente de aprox. 55 mA, con “deepsleep” es de aprox. 7 µA.

La función sleep() se ejecuta dentro de la función loop() tan pronto como ya no hay tareas por hacer. Un bucle infinito dentro del bucle (“polling”) no es recomendable y debe ser evitado. La programación limpia debe estar basada en eventos y no en encuestas. Esto se aplica no sólo al ESP32 sino a todos los programas, también bajo Windows, Linux, Mac, y en particular en aplicaciones integradas (“embedded applications”).