ECE597 Project EchoLink

From eLinux.org
Revision as of 07:37, 20 November 2014 by Yoder (talk | contribs) (Grading Template)
Jump to: navigation, search

thumb‎ Embedded Linux Class by Mark A. Yoder


Team members: Kyle Daruwalla

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.




thumb‎ Embedded Linux Class by Mark A. Yoder