Este proyecto experimental utiliza un HackRF One para transmitir boletines meteorológicos náuticos sintetizados vía FM de banda estrecha (NB-FM) para veleros en Guna Yala, Panamá. El sistema obtiene datos meteorológicos actuales de la API OpenWeatherMap, convierte el texto a voz utilizando la API ElevenLabs, y transmite el boletín en el canal 16 marítimo (156,800 MHz) a través del HackRF One.
Nota: Este es un proyecto experimental/prueba y no debe ser usado para transmisiones reales sin los permisos correspondientes.
- HackRF One
- Antena adecuada para la frecuencia de transmisión
- Computadora Mac con macOS
- macOS (probado en macOS Sonoma/Ventura)
- Homebrew
- Python 3
- Dependencias: jq, sox, hackrf, curl, numpy
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install hackrf sox jq python3
pip3 install numpy
brew install libusb
brew install --HEAD hackrf
hackrf_info
Si el dispositivo es detectado correctamente, verás información sobre tu HackRF One.
El proyecto ahora utiliza un archivo .env
para almacenar todas las claves de API y configuraciones confidenciales. Un archivo .gitignore
también fue configurado para evitar que tus claves sean enviadas a repositorios públicos.
Edita el archivo .env
en la raíz del proyecto y configura tus claves de API y otros parámetros:
# ElevenLabs API (main.sh)
ELEVENLABS_API_KEY="tu_clave_api_elevenlabs"
ELEVENLABS_VOICE_ID="id_de_la_voz_elegida"
# OpenWeatherMap API (weather.sh)
OPENWEATHERMAP_API_KEY="tu_clave_api_openweathermap"
OPENWEATHERMAP_LAT="9.574" # Latitud de Guna Yala
OPENWEATHERMAP_LON="-78.789" # Longitud de Guna Yala
OPENWEATHERMAP_UNITS="metric" # Métrico o imperial
# Transmisión HackRF (main.sh)
HF_FREQ=156800000 # 156,800 MHz (canal 16 marítimo)
HF_GAIN=30 # dB 0-47
HF_SLEEP=10 # Segundos entre transmisiones
HF_DEV=3000 # Desviación FM ±2,5 kHz
HF_AUDIO_RATE=48000 # Hz (salida de sox)
HF_IQ_RATE=2400000 # Hz (TX HackRF: ≥2 MHz)
Importante:
- El archivo
.env
ya está incluido en el.gitignore
para evitar la exposición accidental de tus claves. - Los scripts fueron actualizados para leer estas variables automáticamente.
-
Asegúrate de que el HackRF One esté conectado a la computadora
-
Ejecuta el script principal:
chmod +x main.sh weather.sh # Hace los scripts ejecutables (sólo la primera vez)
./main.sh
El script:
- Buscará los datos meteorológicos actuales vía API
- Generará un mensaje de voz con esos datos
- Convertirá el audio a un formato adecuado
- Modulará la señal en FM
- Transmitirá la señal a través del HackRF One
- Repetirá la transmisión en el intervalo configurado
Para interrumpir la transmisión, presiona Ctrl+C
.
Si encuentras errores de permisos:
sudo pkill hackrf_transfer # Termina cualquier proceso HackRF en ejecución
Si aún tienes problemas:
sudo hackrf_info # Verifica si el problema es de permisos
echo $PATH # Verifica si la ruta a hackrf_transfer está en el PATH
which hackrf_transfer # Encuentra la ruta del ejecutable
Verifica si las claves de API son válidas y si tienen créditos/solicitudes disponibles.
-
Regulación: Asegúrate de que la frecuencia y potencia utilizadas estén de acuerdo con las regulaciones locales (ANATEL en Brasil, FCC en los EE.UU.).
-
Interferencia: Evita frecuencias utilizadas por servicios esenciales o de emergencia.
-
Licencia: Dependiendo del uso y frecuencia, puedes necesitar una licencia de radioaficionado.
Para modificar el contenido del mensaje meteorológico, edita el archivo weather.sh
. La salida de este script es utilizada como entrada para la API de síntesis de voz.