giovedì 19 aprile 2012

Internet Radio with Arduino User Interface


Progetto presentato da SuLuLab insieme ad HackLab Terni.

English version below

In questo progetto abbiamo realizzato una Internet Radio usando un Wireless Router (TP-LINK TL-MR3220) con l'uscita audio via USB e l'interfaccia utente implementata con Arduino.
Il Wireless Router si occupa di collegarsi alla stazione radio via Internet, ricevere lo stream audio, decodificarlo e inviarlo ad una porta USB audio che fa suonare due altoparlanti amplificati.
L'Interfaccia utente è stata realizzata con Arduino, un display LCD da 20x4 caratteri per la visualizzazione, un encoder per selezionare le stazioni da una lista già impostata via browser, e un pulsante per stop e play.

COMPONENTI

Componenti principali Arduino:
•    Arduino
•    Display LCD 20x4
•    Encoder e pulsante
•    Sketch per la comunicazione via seriale con il Wireless Router

Componenti Principali Wireless Router:
•    TP-LINK TL-MR3220
•    OpenWRT
•    Script in bash per la comunicazione seriale con Arduino e il play dello stream mp3
•    Programma in C per l'estrazione dei tag dallo stream mp3

SOFTWARE

Nel Wireless Router è stato installato OpenWRT  insieme ai pacchetti necessari alla gestione dell'applicazione (uhttpd, wget, madplay, ...). Il Wireless Router è stato configurato per accettare connessioni sia tramite Wi-Fi che tramite ethernet.
La preselezione della lista delle stazioni radio avviene collegandosi con un browser al server HTTP configurato all'interno del Wireless Router con degli script bash CGI.

Il programma principale lato Wireless Router è stato scritto in bash e svolge i seguenti compiti:
•    riceve i comandi da Arduino legati all'encoder per il cambio stazione e al pulsante per il play / stop
•    si collega all'indirizzo della stazione selezionata per ricevere lo stream dalla rete con il comando wget
•    manda in play lo stream mp3 con il comando madplay
•    invia le stringhe con i tag name e streamtitle ad Arduino (per questo compito è stato scritto un programma in C)

Lo sketch scritto per Arduino si occupa di gestire la comunicazione seriale con il Wireless Router, l'input dal pulsante e dall'encoder e l'output verso il display LCD.
Ogni volta che l'utente cambia stazione con l'encoder, o preme il pulsante stop/play, vengono generate delle stringhe con i comandi corrispondenti che Arduino invia al Wireless Router tramite la porta seriale.
Quando si cambia stazione o inizia un nuovo brano il Wireless Router invia ad Arduino delle stringhe con le informazioni relative al nome della stazione o del brano che vengono visualizzate sul display LCD.




In un prossimo post saranno disponibili schemi più dettagliati e il software necessario liberamente scaricabile.



In this project we have developed an Internet Radio Using a Wireless Router (TP-LINK TL-MR3220) with the audio output via USB and the user interface implemented with Arduino.
The Wireless Router is responsible to connect to the Internet radio station, to receive the audio stream, decode it and send it to a USB audio that plays two amplified speakers.
The user interface was built with Arduino, a 20x4 character LCD display for viewing, an encoder to select stations from a list already set through the browser, and a button to stop and play.

COMPONENTS

Main Arduino Components:
•    Arduino
•    Display LCD 20x4
•    Encoder and Push Button
•    Sketch for serial communications with the Wireless Router

Main Wireless Router Components:
•    TP-LINK TL-MR3220
•    OpenWRT
•    Bash script to do serial communication with Arduino and play the mp3 stream
•    C program for extracting tags from the mp3 stream

SOFTWARE

On the Wireless Router we installed OpenWRT along with the packages needed to manage the application (uhttpd, wget, madplay, ...). The Wireless Router has been configured to accept connections both via Wi-Fi or via Ethernet.
The list of preset radio stations is realized connecting with a browser to the HTTP server configured in the Wireless Router with bash CGI scripts.

The main program on the Wireless Router has been written in bash and performs the following tasks:
• receives, from Arduino, commands related to the encoder to select the station and to the button for play / stop
• using the command wget it connects to the station selected to receive the stream from the network
• play the mp3 stream with the command madplay
• sends the strings with the tags name and streamtitle to Arduino (this task is performed with a program written in C)

The sketch written for the Arduino handles the serial communication with the Wireless Router, the input from button and encoder and the output to the LCD display.
Each time the user changes the station with the encoder or press the stop / play button, Arduino generate strings with related commands and sends it to the wireless router via the serial port.
When the user change station or a new song begin the Wireless Router sends to Arduino strings, with information about the station name or song title, that appears on the LCD.

In a next post will be available more detailed diagrams and the necessary software freely downloadable.