ECE434 Project - Bictochat
Embedded Linux Class by Mark A. Yoder
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!
00 Executive Summary 00 Installation Instructions 00 User Instructions 00 Highlights 00 Theory of Operation 00 Work Breakdown 00 Future Work 00 Conclusions 00 Demo 00 Late Comments: I'm looking forward to seeing this. Score: 10/100
Picture that summarizes the project.
The goal of this project is to allow multiple Beaglebones equipped with LCD touch screens to draw together in a sort of collaborative whiteboard. In other words, when one user draws in the drawing app on their screen, the result appears on all connected clients.
This is achieved by using a TCP socket server that transfers X, Y, and color data to allow real-time drawing on multiple Beaglebones.
Ultimately, we were successful in creating a shared canvas in which multiple clients can draw.
We created some small wooden enclosures to house the BeagleBones and mount the screens screens so that all of the wiring would be hidden. The enclosures are the same for all of the three devices we used to display our project.
The cases as shown have a hole cut out for the wiring for the display and a hole on the side for the usb cable that attaches the Bone to the host computer.
Source code available on the Github Bictochat repository
Install the display driver using the pinout provided on the pinout list on Github
Run the installation script as sudo located in Bictochat/Installation/Install.sh
This should setup the xorg enviorment and install the display drivers. You will have to add a line to your uBoot.txt file to include this line :
Connect a keyboard to the Beaglebone. Log in to your user account and then type the command
On a seperate computer run the script ./server.py with the desired port number as an argument. Then on your bone run the PAINT.py program, with the server's IP address and port as arguments. If all goes well you should be able to start drawing.
The pen options allows you to draw single pixels at a time. The brush option at this time performs the same operation as the pen option, but can easily be expanded to draw more than 1 pixel at a time. The color tool allows the user to change the color of their pixels, and the erase button allows to user to erase a single pixel at a time.
Theory of Operation
The system takes x, y data from a mouse connected to the BeagleBone as well as pixel color data and sends it to the server that all of the devices connect to. The server then broadcasts the data back to all of the connected client devices so that the client can draw the pixel in the correct x, y location on the screen. With this implementation, all connected devices can draw at the same time and the server will handle which pixels on the shared screens are drawn to. Additionally, the server handles different colored pixels overlapping by drawing on the last received pixel's color.
The figure to the right shows the general flow of data through the system where the client collects the information to be drawn to the screen, sends it to the server, the server receives that data and shares it with all connected clients and those clients draw on their screens based on what is sent to them by the server.
Brendan Mulholland: Setting up drivers to enable the Beaglebone to communicate and draw on the TFT display.
Isaac Lau: Setting up communication via TCP socket server to send data between clients and server.
Zach Forster: Assisted in implementing communication and designed physical housing.
Some future suggestions for this project include:
- Getting a better touch screen so that touch could be used to draw on the screen instead of a mouse
- Creating a user interface that could switch between multiple chat rooms
- Have the server keep track of who is connected so that users could set up custom chat rooms
In conclusion, this project didn't turn out how we originally planned because of the constraints involving the quality of the hardware (the resistive touch screen) but we are happy with the functionality of the project being able to draw on a shared screen. Furthermore, we think it wouldn't be too difficult to modify this project to use a larger display preferably with capacitive touch sensing that would make it more feasible to rely on the touch screen for drawing to the shared display.
Embedded Linux Class by Mark A. Yoder