ECE497 Beagle VNS

From eLinux.org
Revision as of 16:06, 2 November 2012 by Atniptw (Talk | contribs)

Jump to: navigation, search

thumb‎ Embedded Linux Class RHIT

by Tom Atnip, Kevin Geisler, Ruffin White


BeagleVNS.png


Executive Summary

Where is Dr. Yoder?
I'll leave him a message

We wanted a way for students to be able to leave audio (and possibly video) messages for professors when they are out of their office. Using a BeagleBoard Bone, we plan to connect a wireless USB device and a PlayStation Eye to achieve this. Students will be able to walk up to the device and press a button to record their message which will then be available for the professor.

At this time, we have a method for capturing audio for a specified amount of time and encoding that recording into a mp3 file. We also have python script that allows the user to send email messages to another email by running a script. We also have a working external power source for the beagle.

The wireless usb adapter does not work at this time. We are still trying to get recompile the kernel to install and enable the driver for this wireless adapter.

Overall we are looking at creating a c program that will record the audio while the button is being pressed. Once the button has been released the program will encode the raw audio into mp3 format, and then attach it via an email and send it to the owner of the Beagle VNS system.

Software

  • Angstrom A5 Image
In order to use the camera drivers for the playstation eye you will need to install the A5 image on the beagle bone. To do this you will need to download the A5 image. Then you will need to install this image on the sd card of the BeagleBone using the instructions bases on ECE 497 Exercise 03 Installing a Beagle OS.
  • github
In order to use the project code for the Beagle VNS, you will need github installed in order to download the code. If you do not have github there are instruction on how to install it on the ECE Exercise 16 web page.
To download the code for the Beagle VNS run the following code:
beagle$ git clone https://github.com/geislekj/BeagleBoardVNS.git
  • Python
Python is natively installed on the Beagle operating system. However it is important to note that the program will be using a python script to send email.
  • ALSA
The project uses ALSA drivers in order to record audio from a microphone device.
In order to download the ALSA drivers you will need to run the following commands:
beagle$ opkg update
beagle$ opkg install alsa-utils-aplay alsa-utils-amixer
  • Lame
Lame is a audio encoder that will take raw audio and convert it into an mp3 format.
To install the lame onto the beagle board you will need to run the following command.
beagle$ opkg install lame
  • GStreamer
GStreamer is an application that allows the user to capture video from a camera for multiple types of solutions. For this project, it is being used to capture an image of the person leaving a message.
Instructions to install GStreamer is still in the process of being developed.

Hardware

BeagleBone
PlayStation Eye
File:Belkin N150 Micro Wireless USB Adapter.jpg
Belkin N150 Micro Wireless USB Adapter
  • BeagleBone
This project is design primarily for the BeagleBone, but could be implemented on any other Beagle Board given the proper driver installation for the USB hardware and available GPIOs. The BeagleBone is applicable for this project due to is small size, low power consumption, and networking capabilities. Make sure to use the A5 image of Ångström as the A6 image is still buggy with respect to audio/video capturing, as well as using the USB WiFi drivers.
Further BeagleBone documentation can be found on the official Beagle Board website.
This device can be found available here
  • Camera
In this project tutorial, we will be using the PlayStation Eye as the audio and video source to recod messages and capture face images. The PlayStation Eye is very compatible with the A5 image of Ångström and used in many other Beagle embedded Linux projects.
This device can be found available here
  • Wifi dongle
Here we would like to use a WiFi dongle to easily connect to surrounding wireless networks for ease of installation and placement in the remote stretches of hallways and doorframes. We will need we will need network connectivity to transmit e-mails and recording attachments over to an available e-mail server account. In particularly we are using the Belkin N150 Micro Wireless USB Adapter.
Although this device is not natively supported with the stock A5 image of Ångström, a brief tutorial has already been made on how to compile and install the device drivers for this particular wireless USB adapter: Belkin Micro Wi-Fi USB dongle on the BeagleBoard
  • Battery Pack and USB Hub
To again better a ease installation and quick deployment for our system we are using a battery pack to provide power for the BeagleBone, the WiFi dongle and the USB camera. Due to the hottest limitations of the Beagle bones single USB port, in addition to the limited amount of current that the single USB port can provide, we will also use a USB hub with power adapter to solve both issues.
Specific products we are using included Duracell Instant USB Charger and Gigaware® USB 4-Port Hub
  • Doorbell
In order for the end user to trigger the recording sequence, we will implement a traditional mechanical momentary pushbutton that will connect to the BeagleBone’s GPIO using the enabled internal pull-up resistors.
  • LED
As a simple display, our project will utilize a simple LED as an indicator for the user that the audio is currently being recorded and that a face capture will be taken.

User Instructions

  • Basic Command Line Examples
In order to give you a feel to how the program is capturing and sending emails. Here is a short run down of how the program works
  • Audio Capture
In order to capture audio, the project uses arecord. This application allows you to grab audio from a microphone that is attached to your device and save to the current directory in a raw format.
Here is an example command that allows you to record audio and then pipe the audio into aplay to instantaneously hear feedback:
beagle$ arecord -D plughw:1,0 | aplay
In order to encode the audio into mp3 format, you will need to pipe the audio into lame instead of aplay.
Here is an example of this:
beagle$ arecord -D plughw:2,0 -r 16000 -f S16_LE -c 2 -t raw -d 3 | lame  -s 16 -r - blackbird.mp3
For more information about ALSA and how to use many of its interesting features visit | Jan Axelson's Lakeview Research web page
  • Email Script
A python mail client that prompts the user for information to send an email with optional attachments.
 python smtp-mail-client-attachments.py
 Send To (Separated by a comma): 
 Files (Separated by a comma): 
 Send From: beagle497@gmail.com #Must use this email for now
 Subject: 
 Message:

Highlights

Here is where you brag about what your project can do.

Include a YouTube demo.

Theory of Operation

Give a high level overview of the structure of your software. Are you using GStreamer? Show a diagram of the pipeline. Are you running multiple tasks? Show what they do and how they interact.

Work Breakdown

List the major tasks in your project and who did what.

Also list here what doesn't work yet and when you think it will be finished and who is finishing it.

1. Acquire Hardware - Ruffin

Done

2. Set up project page - Tom & Kevin

Page made and updated

3. Get USB wireless to work - Kevin & Ruffin

This is not working at this time for A6 image

4. Get PlayStation Eye to work - Tom

Audio working, need to use A5 image
Passing capture video on to Ruffin

5. Get BeagleBoard Bone to run off a battery pack - Ruffin

Done

6. Register an email for the BeagleBoard - Ruffin

Google acound made, along with Gmail and Google vouice accounts

7. Create an email script to send email with attachments - Tom

Email sending, google is blocking attachments however

8. Encode the raw audio from ALSA into mp3 format - Kevin

Able to record on bone, use lame to convert file, and SCP to send to PC and listen to the recording

9. Capture an image using GStreamer - Kevin & Tom

This is still being developed

10. Create a C program to capture the audio and listen for GPIO inputs - Kevin & Ruffin

This is still being developed

11. Putting all the pieces together - Tom, Kevin, & Ruffin

Making c file for initializing GPIOs, interrupts and start up scripts for VNS server

Code

Python

import smtplib, os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders

def send_mail():
    #This version promts the user to specify recipient, files,
    #subject, and message. The version for incorperating in the
    #notifier will need to read from a preferences file that 
    #should be modifiable by the user.

    send_to = raw_input("Send To (Separated by a comma): ")
    files = raw_input("Files (Separated by a comma): ")

    send_to=send_to.split(',')
    files=filter(None, files.split(','))

    #Make sure that we are working with a list
    assert type(send_to)==list
    assert type(files)==list

    send_from = raw_input("Send From: ")
    subject = raw_input("Subject: ")

    #Create a message object that we will be sending
    msg = MIMEMultipart()
    msg['From'] = send_from
    msg['To'] = COMMASPACE.join(send_to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject

    text = raw_input("Message: ")

    msg.attach( MIMEText(text) )

    #Attach files to message
    for f in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(f,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
        msg.attach(part)

    #Open up a connection to the gmail servers on port 587
    server = smtplib.SMTP('smtp.gmail.com',587) #port 465 or 587
    server.ehlo()
    server.starttls()
    server.ehlo()
    #password = getpass()
    password="beagleece497"
    server.login(send_from, password)
    server.sendmail(send_from,",".join(send_to),msg.as_string())
    server.close()



if __name__ == '__main__':
    send_mail()

Future Work

Suggest addition things that could be done with this project.

  1. Web Interface using HTML and NodeJS

Parts

Beagle Bone

PlayStation Eye

Belkin N150 Micro Wireless USB Adapter

Duracell Instant USB Charger

Gigaware® USB 4-Port Hub

Conclusions

Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.
Need More Cake



thumb‎ Embedded Linux Class RHIT

by Tom Atnip, Kevin Geisler, Ruffin White