Raspberry Pi – Part IV – Simple Wiring Test

I am plugging away working with my Pi. I went back to the Ada Fruit Site, and started working on one of the tutorials from the part I purchased – https://www.adafruit.com/products/2125   I want to be able to demonstrate a simple wiring with my Pi works.

I selected Email Notifier. I read through it, and realized I needed to convert it to work for the B+ model. The pi4j website has a nice diagram for the pins http://pi4j.com/images/j8header-b-plus-large.png and I simplified the test a bit.

I launched the simple python file

pi@seconds ~ $ sudo python testPi.py
Pi with a Green Light - Using Python
Pi with a Green Light – Using Python

I added the pi4j dependency to my maven pom

<dependency>
    <groupId>com.pi4j</groupId>
    <artifactId>pi4j-core</artifactId>
   <version>1.0</version>
</dependency>

I create a servlet which replicated the same code from before (GPIO).

I copied the war file to the local webapp directory, and restarted jetty

pi@seconds /opt/jetty/web/bbq/webapps $ sudo cp ~/pi.webapp.war ./
pi@seconds /opt/jetty/web/bbq/webapps $ sudo chown jetty:jetty pi.webapp.war
pi@seconds /opt/jetty/web/bbq/webapps $ sudo /etc/init.d/jetty restart

Refer to https://wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications  and I did have to add –module=jsp to the start.ini for my web configuration.

I hit the servlet – http://192.168.1.200/pi.webapp/Control?status=true

Exception
Exception

Which makes sense, since “Software using the Pi4J library must be run with ROOT level permissions.” (actually it doesn’t since I am running as root)…

Issues remain.  I’ll tackle them on a different day 🙂   … Part 5 …

Raspberry Pi – Part III – Setting up Jetty

The Raspberry Pi is a device that has so many options open: You can extend the hardware. You can extend the software. I choose to tackle extending the software to start, so I can get the experience that I want setup, and running on the device.  The experience I am after is the web interface to control my Raspberry Pi.

For a Java developer, I conclude that a lightweight interface hosted on a Jetty server is probably easiest.  The Jetty server is a 12.9M download and 30M expanded. It’s also used frequently in devices, and why reinvent the wheel, use the approach that Industry is using.  Jetty is designed for a small memory footprint.   (I did consider using Tomcat Embedded, and came to the conclusion I’d probably want to many features.)

I downloaded the Jetty archive to my local user’s directory. Note, since I want to just use jetty.zip I’m renaming the output file with wget -O.

wget -O jetty.zip http://download.eclipse.org/jetty/stable-9/dist/jetty-distribution-9.2.10.v20150310.zip

I make a directory for the application server, and move over jetty.zip to that directory.

sudo mkdir -p /opt/jetty
sudo mv jetty.zip /opt/jetty

Next I launched into the sudoers root shell, and extract the Jetty archive.  I decided to move it into the runtime folder, so I can have an easy place to backup from.  (Remove the extra space from the .zip)

sudo -s 
cd /opt/jetty
unzip jetty.zip
mv jetty-distribution-9.2.10.v20150310/ runtime
rm jetty.zip

Next, I wanted to setup Jetty as a service, and check that Jetty starts

cp runtime/bin/jetty.sh /etc/init.d/jetty
echo JETTY_HOME=`pwd`/runtime > /etc/default/jetty
service jetty start
Starting Jetty: . . . OK Sun Apr 12 15:38:40 UTC 2015
service jetty stop
Stopping Jetty: OK

Next, I want to automatically start Jetty with the right runlevels

update-rc.d jetty defaults

I want to configure Jetty to run with a set user jetty.

mkdir -p /opt/jetty/web/bbq
mkdir -p /opt/jetty/temp
useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

There is a base configuration that needs to be setup the base site.

cd /opt/jetty/web/bbq
java -jar /opt/jetty/runtime/start.jar --add-to-start=deploy,http,logging

Next, edit the default port value.

vi start.ini

## HTTP port to listen on
jetty.port=80

Finally, I wrap the configuration of the jetty service and app.

chown -R jetty:jetty /opt/jetty
echo "JETTY_HOME=/opt/jetty/runtime" > /etc/default/jetty
echo "JETTY_BASE=/opt/jetty/web/bbq" >> /etc/default/jetty
echo "TMPDIR=/opt/jetty/temp" >> /etc/default/jetty

A good check is to look at service jetty status, and confirm the settings, and then restart your Raspberry Pi. I did find that the startup time was significantly effected by the additional service.  ( +25 seconds from the original 15)

Navigate to http://192.168.1.200/ (or whatever IP you have used) and confirm the page loads Jetty.  If you see a 404, you’re off and ready for the next phase. (as am I) 🙂

Jetty Starting Point
Jetty Starting Point

Raspberry Pi – Part II – Get Up and Going with Java

In recent weeks, I haven’t revisited the Raspberry Pi – Running, Vacation, Work have conspired to keep me away from hobby project.

I’ve stared at the parts long enough, and decide to plug the Raspberry Pi base into the wired network. I plugged in the Raspberry Pi into the Power outlet, and I got the Red Light.  I logged into my router to see if the Pi picked up the Raspberry Pi, and I found the IP from my routers IP reservations table.   I was able to SSH into the Pi and quickly check the release version ( cat issue ) – Raspbian GNU/Linux 7 \n \l.

Headless + SSH + Version

I turned on the SSH server using sudo raspi-config and the advanced options.

The first thing I thought – Upgrade / Update to get the latest environment for the Raspberry Pi.  It’s a good start – always good to be up-to-date. Per the documentation, it may be necessary to run – sudo apt-get clean.

sudo apt-get upgrade
sudo apt-get update

The raspi-config is another item that may need to be updated.   The update goes out and queries for the latest raspi-config, installs and relaunches the raspi-config.

sudo raspi-config
Select Option 8 - Advanced Options
Selection Option A0 - Update 
Select Yes
raspi-config
raspi-config

Next, I looked updated the Java version.  From reading the documentation, the next versions of the Pi are going to automatically include the Java installs.

sudo apt-get update && sudo apt-get install oracle-java7-jdk
Java Installation
Java Installation

I grabbed the Pi4J project jar files. The Pi4J is an opensource project which has some great details on PINOUT and boilerplate java code to access the underlying pin readouts.  I ran some quick code to get the latest snapshot installed.

wget http://get.pi4j.com/download/pi4j-1.1-SNAPSHOT.deb
sudo dpkg -i pi4j-1.1-SNAPSHOT.deb

WGET
WGET

dpkg
dpkg

Pi4J is also installed on the Sonatype repositories and developed on GitHub.  Pi4J includes a script for managing updates.   It’s very convenient with the Apache 2.0 License.

I was ready run a sample program – Get Sample, Compile and Run.

wget https://raw.githubusercontent.com/Pi4J/pi4j/master/pi4j-example/src/main/java/ListenGpioExample.java
pi4j ListenGpioExample.java
pi4j -run ListenGpioExample
First Sample
First Sample

Eventually, I am going to get to the point where I use the diagram from Pi4j.  The future efforts are going to take some time to get to – This step was the right step in the direction I want to go.  BBQ Champion.