Inspired by “Reading Analogue Sensors with One GPIO Pin“, Sebastian Bub rolled this approach into a project of his own, “Raspberry Pi GPIO Web Control,” a lightweight Java-based web application to control the GPIO ports.
From his BitBucket.org project description:
A Java webapp to control your GPIO ports of the Raspberry Pi using http.
What is raspberry-pi-gpio-web-control?
raspberry-pi-gpio-web-control is a lightweight java based web application to control your GPIO ports of your Raspberry Pi over http. It is based on documentation at elinux.org: RPi Low-level peripherals
It is tested with Winstone Servlet Container, but any other servlet engine will probably do, too.Features:
- Every port can be set as input, output or analog input (requires a simple circuit based on raspberrypi-spy.co.uk: Reading Analogue Sensors).
- Output ports can be set conditionally on values of input ports (i.e. darknessSensor1in==1&lamp1out=1, see cron.conf).
- You can give each port a custom name to make your client look better.
- You can define a default state on output ports.
- You can define a blocking time for an output port (so it is not switched to fast in case the user makes a request twice).
- You can define a toggle time for an output port (i.e. if you want to turn a port on for a defined period of time, it can be done with a single request).
- You can set a simulation mode for testing your client.
- Setting multiple ports in one requests are set one after another, but the code is optimized and nothing unnecessary is done in between (it takes about 2-5ms on an idle Raspberry Pi to set all 17 ports, some artificial load (e.g.’find /’ in the background) will slow it down to 10-15ms).
- Cronjobs (exact to the second) for output ports are based on quartz-scheduler.org. Output ports can be set conditionally and you have a simple but powerful semaphore mechanism.
- You may define your own variables with a prefix VIRTUAL which are persisted in memory (unknown virtual variables default to “0”).
Planned Features
- If GPIO ports are used to represent binary output values, blocking single ports is dangerous: Delayed/Queue requests
- Automated tests
- Custom hooks (pre/post), e.g. for notifications
- More status and configuration information requestable via json (disengageable)
Possible Unplaned Features
- Bit sequences (especially with AUTO.TOGGLE.TIME) for serial output or to control a servo (probably an SPI interface)
- Some kind of PLC (Programmable Logic Controller)
- Suggestions are welcome
Project Status
The project has started and I use it by myself mainly for simple output (manually and with cronjobs). If I had to give it a release number, I would say it is a 0.85 release. Bug reports and feature requests are welcome.
Each Friday is PiDay here at Adafruit, be sure to check out our posts, tutorials and new Raspberry Pi related products. Have you tried the new “Adafruit Raspberry Pi Educational Linux Distro” ? It’s our tweaked distribution for teaching electronics using the Raspberry Pi. But wait, there’s more! Try our new Raspberry Pi WebIDE! The easiest way to learn programming on a Raspberry Pi.
Want a FREE RASPBERRY PI? All orders over $350 get a FREE Raspberry Pi Model B with 512MB RAM!