This summer I was developing a web dashboard on Monkey HTTP server for Raspberry Pi. Monkey is a lightweight and powerful web server and development stack for GNU/Linux. It has been designed to be very scalable with low memory and CPU consumption, the perfect solution for embedded devices. Made for ARM, x86 and x64.
I worked on this project as part of GSoC. Google Summer of Code is a global program that offers students stipends to write code for open source projects.
Read more →
This week I implemented WebSocket support in the dashboard. WebSockets are now used for GPIO updating and serial port receive. If Websocket is unavailable or does not connect, polling is used as fallback.
I’ve also improved GPIO dashboard page a bit and written documentation for WebSocket.
Pencils down is tomorrow. I have released version 0.2.0 of my dashboard today. It contains all the features that I’ve planned to implement in my proposal.
Read more →
This week I first tried implementing WebSockets with RaspberryPi GPIO interrupts. I’ve written some code, but it seems duda’s websockets implementation has some bugs in it, so I did not finish this. The code I’ve written is now under websocket branch in github.
Instead of using websockets I’ve written GPIO updating and serial interface in the dashboard using polling the REST api every second.
I’ve also imporoved several things in dashboard including making the main page modular.
Read more →
This week I added interfaces for GPIO (input, output, PWM and tone), I2C, SPI and shift in/out to the Dashboard. Additionally I have also researched WebSockets that I will use for serial and GPIO updating.
Next week I will try to use WebSockets for serial and GPIO implementations. There are also a few smaller things that need to be fixed/updated.
Code is on github.
Read more →
This week I developed REST api interface for GPIO (input, output, PWM, square wave and shift in/out), I2C (read/write general, 8-bit and 16-bit registers), SPI (duplex send/receive) and serial (send and read input buffer). I’ve used wiringPi library I’ve tested last week.
I’ve written full documentation for those modules and added a POST method to jQuery RPiJS plugin.
Next week I will integrate those modules in the Dashboard and try using WebSockets for GPIO and serial connection.
Read more →
This week I tried 2 different libraries for GPIO on Raspberry Pi: bcm2835 and WiringPi.
I’ve decided to use WiringPi, because it allows consistent pin numbers across different RPi versions, i2c, SPI, serial, software PWM, tone and several extensions. I’ve installed the library, spent some time testing it out and figured out how it is going to fit in the REST api.
Next week I will integrate the GPIO, i2c, SPI and serial in the REST api and the Dashboard.
Read more →
This week I updated the documentation, wrote installation instructions for Raspbian, Pidora and Arch Linux, updated the Dashboard a bit and fixed two memory leaks using valgrind.
Besides programming I also created a website for the project that contains project description, full documentation, screenshots and link to a demo version of the Dashboard. I wrote a post about the Dashboard on the official Raspberry Pi forum and got some positive feedback.
Read more →
This update is for weeks 6 and 7, because I was on holiday last Thursday through Tuesday and could not write an update last weekend.
In week 6 I fixed a few bugs in Dashboard mostly related to login issues and removed a major memory leak from angular-google-chart that was causing the Dashboard to freeze.
In week 7 I added support for logged data to the Dashboard. Now the user can change the time frame for history graphs and appropriate data is loaded from logger backend.
Read more →
This week I worked on backend logger. I used RRDtool for storing the information. The information is available through the REST api.
The logger stores CPU-usage, CPU-temperature, memory, network-throughput and storage-throughput information for this hour, day, week, month and year.
Next week I will be working on displaying the logged information in the dashboard. I will also try to provide direct access to RRDtool graphs from the REST api.
Next weekend I am going on holiday from Thursday to Monday and I will not have access to the internet, so I will not post an update next week.
Read more →
This week I was working on the dashboard. It is implemented in AngularJS as a single page JavaScript app. Layout is done using Bootstrap. I use Google Charts for displaying graphs.
I have implemented pages for CPU, memory, network and storage information with graphs.
Graphs display history information for values, but the app will currently freeze if left open too long, because too much data accumulates. I will fix this problem after the value logger is implemented.
Read more →