Primi passi#
Prerequisiti#
ESP-IDF v6.1 o successivo (bloccato/testato su 6.1 — vedi
dependencies.lock).Un ESP32 con ≥ 4 MB di flash.
Il gestore dei componenti di IDF scarica
joltwallet/littlefs,espressif/cjsone, tramite il componentesensors_local,esp-idf-lib/bmp280eesp-idf-lib/bmp180(che trascinanoi2cdev+esp_idf_lib_helpers) automaticamente.
Compilazione e scrittura#
. $IDF_PATH/export.sh
cd workspace-APRS/esp32_APRS_igate
idf.py set-target esp32 # sdkconfig arriva già con target=esp32
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor
Compila in spagnolo o italiano invece che in inglese (vedi Localizzazione):
idf.py build -DLANGUAGE=LANG_ES
idf.py build -DLANGUAGE=LANG_IT
Suggerimento
sdkconfig arriva con CONFIG_COMPILER_OPTIMIZATION_DEBUG (-Og) e le
asserzioni attive, e con CONFIG_COMPILER_STACK_CHECK_MODE_NORM per il
canary dello stack: è la configurazione sotto cui è stato dimensionato ogni
stack di task del progetto. Passare a
CONFIG_COMPILER_OPTIMIZATION_SIZE (-Os) produce un’immagine più
piccola con frame di stack meno profondi, ma cambia le dimensioni di frame
rispetto a cui quei budget sono stati fissati, quindi ricontrolla i
watermark degli stack (vedi Risoluzione dei problemi) dopo averlo fatto.
Budget di memoria#
L’ESP32 di questo progetto non ha PSRAM, quindi ogni byte di DRAM interna che
la build riserva staticamente è un byte che l’heap non riceve mai.
sdkconfig è tarato per questo, e i valori qui sotto sono deliberati:
alzarne uno qualsiasi abbassa la cifra Min free heap del pannello.
Opzione |
Valore |
Perché |
|---|---|---|
|
6 |
~1,6 KB ciascuno, allocati in |
|
12 / 24 |
Limita il picco di heap richiesto dal driver Wi-Fi. Il traffico APRS è di qualche centinaio di byte al minuto; la banda che questi buffer comprano non viene mai usata. |
|
5760 |
Quattro MSS ( |
|
3 |
httpd prende questo numero più 3 socket propri dal pool di
|
Server HTTPS, bundle di certificati, Wi-Fi Enterprise |
disattivati |
L’amministrazione web è HTTP in chiaro e il collegamento APRS-IS è TCP
in chiaro, e nulla si mette mai in ascolto di TLS:
|
|
8192 / 2048 |
I buffer di record, allocati per sessione TLS, quindi una stazione con il
bot spento non paga nulla per essi. L’ingresso richiede la cifra maggiore
perché il server sceglie la propria dimensione di record e lo standard
consente fino a 16384; l’uscita è una scelta di questo dispositivo e le
sue richieste sono piccole. |
mbedTLS stesso |
abilitato |
La crittografia Wi-Fi ne ha bisogno comunque, quindi
|
Nota
Da ESP-IDF v6.0 il port di mbedTLS chiama psa_crypto_init() da un hook
di avvio di sistema, quindi PSA Crypto è attivo in ogni build che collega
mbedTLS, questa compresa, indipendentemente da
CONFIG_MBEDTLS_TLS_ENABLED. Questo, insieme alla maggiore impronta
statica di mbedTLS 4.x, è il motivo per cui lo stesso firmware riporta meno
heap libero sotto v6.x rispetto a v5.2 con una configurazione per il resto
identica. Il comportamento è stato introdotto in v6.0 ed è invariato nella
v6.1 con cui questo progetto compila ora.
Primo avvio#
Su una partizione nuova, LittleFS si auto-formatta e
app_config_load()scrive un file di configurazione per funzionalità con i valori di fabbrica.L’ESP32 si avvia come AP Wi-Fi: SSID
esp32idf_APRS, passwordesp32idf_APRS, canale 1, WPA2-PSK, max 4 client.Uniscici e naviga al dispositivo (predefinito
http://192.168.4.1/).Accedi:
admin/admin— cambialo nella pagina System. La stessa pagina porta un secondo account facoltativo, Accesso web in sola lettura: vede ogni pagina ma non salva nulla, non sposta file e non trasmette nulla, e può solo avviare e fermare il visore del registro di console. Di fabbrica non è impostato.In Wireless: scegli Station o AP+STA, spunta Enable in un blocco Client Wi-Fi, inserisci SSID/password, Salva.
In IGate: imposta il tuo indicativo, SSID, passcode, host/porta APRS-IS, filtro, coordinate, simbolo, commento.
In Radio / Modem: abilita il modem audio, scegli la modulazione, il preambolo, lo slot temporale TX; usa LOOP TEST per verificare il percorso audio.
Riavvia (o Salva — la maggior parte delle impostazioni si riapplica in tempo reale).
Valori di fabbrica notevoli#
Impostazione |
Predefinito |
|---|---|
Modalità Wi-Fi |
AP (sempre raggiungibile) |
SSID / password AP |
|
Login web |
|
Login web in sola lettura |
non impostato (nessun account di sola lettura) |
Frequenza CPU |
240 MHz |
Orologio di sistema |
sempre UTC (TZ=UTC0). Il selettore di fuso orario della pagina System
(default |
Host NTP |
|
IGate |
abilitato, |
Indicativo / SSID |
|
Coordinate della stazione |
|
Server APRS-IS |
quattro slot di failover, tutti preimpostati a |
Elenco digipeater satellitari |
|
Soppressione duplicati / cache / finestra |
abilitata / 20 voci / 30000 ms (configurabile dal web) |
Limitatore di duty cycle di trasmissione |
disabilitato; tetto del 25 % di una finestra scorrevole di 10 minuti quando abilitato |
Preset di percorso 0 |
|
Selezione del percorso |
preset 0, uguale per i beacon IGate, digipeater, tracker e meteo |
Digipeater |
disabilitato, SSID 1 |
Tracker |
disabilitato, SSID 9 |
Modem audio |
abilitato, 1200 Bd Bell 202 |
Preambolo / slot TX |
300 ms / 2000 ms |
Persistenza CSMA |
63 (~25 % di probabilità di trasmettere per slot libero) |
Slot temporale CSMA / attesa max. canale occupato |
100 ms / 30 s |
Buffer di TX RF |
1 |
Risponditore di query |
disabilitato; RF attivo, Internet spento, intervallo minimo di risposta 30 s |
FX.25 |
disattivato |
PTT |
GPIO26 (la polarità è di compilazione) |
Messaggistica |
abilitata, RF + INET, GPIO di allarme disabilitato |
Pericolo
Cambia NOCALL e imposta un passcode reale prima di trasmettere.
Verifica di essere autorizzato per la frequenza e il ciclo di lavoro che stai
per attivare.
Imposta anche le coordinate della stazione. APRS non ha una coordinata
di «posizione sconosciuta», perciò questo firmware tratta la coppia
predefinita 0.000 / 0.000 — Null Island, non la sede reale di
alcuna stazione radioamatoriale — come «non ancora configurata» e omette i
beacon di posizione di Tracker, IGate e Digipeater (e il locator
Maidenhead dei loro report di stato) invece di mettere in aria una
posizione falsa nel golfo di Guinea. Un beacon le cui coordinate non sono
ancora impostate resta silenzioso invece di trasmettere; controlla il log
se sembra non inviare nulla.