Primeros pasos#
Requisitos previos#
ESP-IDF v6.1 o posterior (fijado/probado en 6.1 — véase
dependencies.lock).Un ESP32 con ≥ 4 MB de flash.
El gestor de componentes de IDF descarga
joltwallet/littlefs,espressif/cjsony, a través del componentesensors_local,esp-idf-lib/bmp280yesp-idf-lib/bmp180(que arrastrani2cdev+esp_idf_lib_helpers) automáticamente.
Compilar y grabar#
. $IDF_PATH/export.sh
cd workspace-APRS/esp32_APRS_igate
idf.py set-target esp32 # sdkconfig ya viene con target=esp32
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor
Compilar en español o italiano en lugar de inglés (véase Localización):
idf.py build -DLANGUAGE=LANG_ES
idf.py build -DLANGUAGE=LANG_IT
Truco
sdkconfig viene con CONFIG_COMPILER_OPTIMIZATION_DEBUG (-Og) y
las aserciones activadas, y con CONFIG_COMPILER_STACK_CHECK_MODE_NORM
para el canario de pila: es la configuración bajo la que se dimensionaron
todas las pilas de tareas del proyecto. Cambiar a
CONFIG_COMPILER_OPTIMIZATION_SIZE (-Os) produce una imagen más
pequeña con marcos de pila menos profundos, pero altera los tamaños de marco
con los que se fijaron esos presupuestos, así que vuelve a comprobar las
marcas de agua de pila (ver Resolución de problemas) después de hacerlo.
Presupuesto de memoria#
El ESP32 de este diseño no lleva PSRAM, así que cada byte de DRAM interna que
la compilación reserva de forma estática es un byte que el heap nunca recibe.
sdkconfig está ajustado para eso, y los valores de abajo son deliberados:
subir cualquiera de ellos baja la cifra Min free heap del panel.
Opción |
Valor |
Por qué |
|---|---|---|
|
6 |
~1,6 KB cada uno, reservados en |
|
12 / 24 |
Acota el pico de heap que reclama el driver WiFi. El tráfico APRS son unos cientos de bytes por minuto; el caudal que compran esos búferes no se usa nunca. |
|
5760 |
Cuatro MSS ( |
|
3 |
httpd toma este número más 3 sockets propios del pool de
|
Servidor HTTPS, paquete de certificados, WiFi Enterprise |
desactivados |
La administración web es HTTP plano y el enlace APRS-IS es TCP plano, y
nada queda nunca a la escucha de TLS:
|
|
8192 / 2048 |
Los búferes de registro, reservados por sesión TLS, así que una estación
con el bot apagado no paga nada por ellos. La entrada necesita la cifra
mayor porque el servidor elige su propio tamaño de registro y el estándar
permite hasta 16384; la salida es decisión de este dispositivo y sus
peticiones son pequeñas. |
mbedTLS en sí |
habilitado |
La criptografía Wi-Fi lo necesita de todos modos, así que
|
Nota
Desde ESP-IDF v6.0 el port de mbedTLS llama a psa_crypto_init() desde
un hook de arranque del sistema, así que PSA Crypto está vivo en toda
compilación que enlace mbedTLS, incluida esta, sin importar
CONFIG_MBEDTLS_TLS_ENABLED. Eso, junto con la mayor huella estática de
mbedTLS 4.x, es la razón de que el mismo firmware informe menos heap libre
bajo v6.x que bajo v5.2 con una configuración por lo demás idéntica. La
conducta se introdujo en v6.0 y no cambia en la v6.1 contra la que este
proyecto compila ahora.
Primer arranque#
En una partición nueva, LittleFS se autoformatea y
app_config_load()escribe un archivo de configuración por funcionalidad con los valores de fábrica.El ESP32 arranca como AP Wi-Fi: SSID
esp32idf_APRS, contraseñaesp32idf_APRS, canal 1, WPA2-PSK, máx. 4 clientes.Únete a él y navega al dispositivo (por defecto
http://192.168.4.1/).Inicia sesión:
admin/admin— cámbialo en la página System. Esa misma página lleva una segunda cuenta opcional, Acceso web de solo lectura: ve todas las páginas pero no guarda nada, no mueve archivos y no transmite nada, y solo puede iniciar y detener el visor de registro de consola. Viene sin configurar de fábrica.En Wireless: elige Station o AP+STA, marca Enable en un bloque de Cliente Wi-Fi, introduce SSID/contraseña, Guarda.
En IGate: pon tu indicativo, SSID, passcode, host/puerto de APRS-IS, filtro, coordenadas, símbolo, comentario.
En Radio / Modem: habilita el módem de audio, elige la modulación, preámbulo, ranura de tiempo TX; usa LOOP TEST para verificar la ruta de audio.
Reinicia (o Guarda — la mayoría de los ajustes se aplican en vivo).
Valores de fábrica destacados#
Ajuste |
Por defecto |
|---|---|
Modo Wi-Fi |
AP (siempre accesible) |
SSID / contraseña del AP |
|
Login web |
|
Login web de solo lectura |
sin configurar (sin cuenta de solo lectura) |
Frecuencia de CPU |
240 MHz |
Reloj del sistema |
siempre UTC (TZ=UTC0). El selector de zona horaria de la página System
(por defecto |
Hosts NTP |
|
IGate |
habilitado, |
Indicativo / SSID |
|
Coordenadas de la estación |
|
Servidores APRS-IS |
cuatro ranuras de failover, todas preconfiguradas a |
Lista de satélites digipetidores |
|
Supresión de duplicados / caché / ventana |
habilitada / 20 entradas / 30000 ms (configurable desde la web) |
Limitador de ciclo de trabajo de transmisión |
deshabilitado; techo del 25 % de una ventana deslizante de 10 minutos cuando se habilita |
Preset de ruta 0 |
|
Selección de ruta |
preset 0, igual para las balizas de IGate, digipetidor, tracker y meteo |
Digipeater |
deshabilitado, SSID 1 |
Tracker |
deshabilitado, SSID 9 |
Módem de audio |
habilitado, 1200 Bd Bell 202 |
Preámbulo / ranura TX |
300 ms / 2000 ms |
Persistencia CSMA |
63 (~25 % de probabilidad de transmitir por ranura libre) |
Ranura de tiempo CSMA / espera máx. con canal ocupado |
100 ms / 30 s |
Búferes de TX de RF |
1 |
Respondedor de consultas |
deshabilitado; RF activo, Internet apagado, intervalo mínimo de respuesta 30 s |
FX.25 |
desactivado |
PTT |
GPIO26 (la polaridad es de compilación) |
Mensajería |
habilitada, RF + INET, GPIO de alarma deshabilitado |
Peligro
Cambia NOCALL y establece un passcode real antes de transmitir.
Verifica que tienes licencia para la frecuencia y el ciclo de trabajo que vas
a activar.
Configura también las coordenadas de la estación. APRS no tiene una
coordenada de «posición desconocida», así que este firmware trata el par
por defecto 0.000 / 0.000 — la Isla Null, no la ubicación real de
ninguna estación de radioaficionado — como «aún no configurado» y omite
las balizas de posición de Tracker, IGate y Digipeater (y el locator
Maidenhead de sus informes de estado) en lugar de poner una posición falsa
en el golfo de Guinea al aire. Una baliza cuyas coordenadas siguen sin
configurar queda en silencio en vez de transmitir; revisa el registro si
parece que no está enviando nada.