ECE597 Project EchoLink
Embedded Linux Class by Mark A. Yoder
Team members: Kyle Daruwalla
Contents
Grading Template
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!
09 Executive Summary 10 Installation Instructions - Nice, very detailed. 10 User Instructions 09 Highlights 10 Theory of Operation 10 Work Breakdown 10 Future Work 10 Conclusions 10 Demo 10 Not Late Comments: Very well done for a solo effort Score: 98/100
Executive Summary
The purpose of this project is to explore the Intel Edison and how it correlates to the Beaglebone. As features and weaknesses are discovered, the Edison will be used to create a simple project (similar to those that others are performing) that highlights its strengths. After exploration, it was determined that the Edison is aptly suited for a network related project, due to its built-in WiFi. The new goal of the project is to set the Edison up as an EchoLink node.
The Edison has been configured to run with the WiFi on the Rose-Hulman Campus via the simple utility that Intel provides. The Edison, at this stage, must be running Yocto (a Linux build by Intel); custom kernel compilation is not possible because of how the Intel Edison is flashed. Furthermore, the Edison breakout board does not expose any GPIO pins, so using I2C, UART, SPI, or other I/O is not possible. SparkFun has several boards that expose these functions to the user, but they are still on pre-order only.
Due to the lack GPIO, a Beaglebone Black will be used to develop the EchoLink node for the Rose Tech Radio Club. The EchoLink node will be controllable through a web-server. The hope is that this system can be easily ported to the Edison when the SparkFun breakout boards are available.
While building the EchoLink node will be feasible, I believe we might run into problems with Yocto when we are trying to get the necessary libraries on the Edison.
Packaging
Could you show a picture of this? It's OK if not.
The BeagleBone Black is currently in an old metal enclosure that previously held radio equipment.
Installation Instructions
In order to install the system on the BeagleBone, you must already have a Bone set up with Wheezy.
First, make sure you are in the "root" directory, then get the source code (do NOT rename the folder; there are path-dependent configuration files).
bone# cd /root bone# git clone https://github.com/darsnack/ECE597-EchoLinkNode.git
The next step is to build thelinkbox, a piece of software that will handle the Echolink node (credit to ON1ARF, the original developer). You will need the libusb-dev package to perform this task.
bone# apt-get install libusb-dev bone# cd ECE597-EchoLinkNode/thelinkbox bone# ./configure --enable-usb bone# make bone# make install
The configuration files already contain necessary for the club at Rose-Hulman to use the system. For example, the call sign (an identifier for licensed HAMs) is the club call, W9NAA. If you are running your own node, you will need to modify these configuration files. They are located in the tlb-configs directory in the main project folder. All the configurable elements contain comments explaining their purpose. The major files that need to be updated are tlb-configs/tlb.conf and tlb-configs/port0.conf.
Now, you must install the necessary audio drivers that work with the software and ALSA (Advanced Linux Sound Architecture).
bone# apt-get install alsa-oss bone# modprobe snd-pcm-oss bone# modprobw snd-mixer-oss
You can make the modules load on boot by editing /etc/modules. Simply add the module names to the file.
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. snd-pcm-oss snd-mixer-oss
By default, the software is configured to use a USB soundcard listed in the device tree at /dev/dsp1. Make sure you have such a device listed.
bone# ls -l /dev/ | grep dsp
Open alsamixer to configure the soundcard. Use "F6" to select the sound card as the device, then press "TAB" twice to access all the options available to it. Turn up the volume and capture levels to the maximum for everything.
Now that the software is configured, the hardware must be installed. You can build the interface board using the schematics in the github repository. By default, the software will use GPIO 48 (P9_15). Plug the signal line into this pin on the headers, and the ground line into digital ground on the headers (P9_1). You will also need to pass the audio out from the sound card to the transceiver you are using. Similarly, the audio from the transceiver must be passed into the sound card. Finally, configure the GPIO pin.
bone# echo "48" > /sys/class/gpio/export bone# echo "out" > /sys/class/gpio/gpio48/direction
In addition to the Echolink software, you might be interested in using the website controller. To do this, you must install the Node Package Manager, Grunt, and Bower. They are software tools that make managing a web development very easy. First change directories into the website folder
bone# cd /root/ECE597-EchoLinkNode/website/ bone# apt-get install npm bone# npm install -g bone# npm install -g grunt bone# npm install -g grunt-cli bone# npm install -g bower bone# bower install
User Instructions
YOU MUST BE A REGISTERED HAM IN THE ROSE-TECH RADIO CLUB TO USE THIS SYSTEM.
Once the system is set up, you can run it by running the following command:
bone# /usr/local/libexec/tlb -f /root/ECE597-EchoLinkNode/tlb-configs/tlb.conf -d
This will run the system in one level of debug. Opening EchoLink on your own computer will list your node, and you can connect to it.
Now, you can run the server with Grunt. Note that you must be using the default configurations in order for some of the server functionality to work. For example, the server will set up the GPIO pins, but if you are not using GPIO 48 to key the radio, then this functionality will be useless to you.
bone# grunt serve
Navigate to your Beaglebone's address at port 9000 to use the website.
Press Start Node to start the Echolink node, Stop Node to stop the Echolink node, and List Members to list all currently connected members.
Highlights
This project is a fully functioning Echolink node with a complementary GUI interface. Now, any HAM buddies you have can connect to your node from anywhere in the world and take part in your weekly net. If you are a registered HAM in Rose-Hulman Inst. of Tech., Terre Haute, IN, you can join the Rose Tech Radio Club to get the password to connect to our node. Then, you'll be able to join our nets!
Theory of Operation
The theory of operation for the Echolink software will be familiar to most HAMs. Normally, a bunch of operators will tune to a given frequency, allowing them to talk to each other. The Echolink node is a computer that is tied to a radio that is tuned to that frequency. Like any of the other radios, the radio connected to the node will receive signals when someone transmits. It will then send the audio from the transmission to the Beaglebone. The Beaglebone will then send the audio via VoIP to everyone connected to the Echolink node. Similarly, if someone transmits on Echolink, the node will send the audio to everyone else on the node, as well as the radio. It will also key the PTT switch, so that the radio thinks it is receiving audio from a mic. The radio will then transmit that signal to everyone tuned into that frequency via RF.
In order to key the radio, the software uses a GPIO pin as an output. This is simply set up in /sys/class/gpio as any other GPIO pins.
The website uses NodeJS, AngularJS, Jade and Bootstrap. NodeJS controls the server side code. It uses Express server to route all the GET requests to the appropriate server side functions. These functions will then send the appropriate HTTP responses back to the client. On the client side, I used Jade instead of HTML, which is a tab-based language (indentation matters!). In Jade, different buttons are have their ng-click attributes set to call client side AngularJS functions. These client side functions will get called when a button is pressed, and then make a GET request to the server. The functions also take the data received from the server HTTP responses and post them onto the page.
Work Breakdown
I, Kyle Daruwalla, worked on the project alone. Below is a breakdown of the tasks, and what state each one is in
- Set up Intel Edison - Complete
- Set up Echolink software - Complete
- Test Echolink node using ECHOTEST - Complete
- Test if Echolink node transmits received signals via RF - Complete
- Build keying circuit board - Complete
- Test if Echolink node keys transceiver - Complete
- Test if Echolink node takes audio received via VoIP and transmits it over RF through the transceiver - Complete
- Build basic website to start node, stop node, and list connected members - Complete
- Allow user to configure ALSA settings via website - Not complete
- Port system to Intel Edison and Raspberry Pi - Not complete
Future Work
Below is a list of future work that could be done for the project
- Build authentication into the website
- Allow users to configure ALSA via the website
- Set up Echolink node to transmit pre-recorded audio when commanded via website
Conclusions
I thoroughly enjoyed this project. As a newly licensed HAM, I believe I can get some good use out of it.
Setting up the system on the Beaglebone as an Echolink node required some debugging. The VoIP transmissions did not work at first, and the error messages that are printed out by the software are not helpful. After digging through the C++ code, I managed to resolve this issue by adding a configuration file for the VoIP settings. After this, software problems soon turned into hardware problems.
Noise is extremely intrusive when working with RF. Anytime the Beaglebone would try to transmit via the transceiver, the received audio on other radios was extremely noisy. I had to fix everything from solder joints to cable choice. Finally, adding a capacitor into the audio line fixed most of the noise, so that the received signal was understandable.
Embedded Linux Class by Mark A. Yoder