This is part of a series of posts related to My Internet of Things and MobileFirst adventure. An index to all posts can be found at the end of the first post.
With the hardware all set up, I was ready to dive into the software on the Raspberry Pi. I quickly learned that there is a bunch of software available for the Raspberry Pi. Most of it is really easy to install with ‘apt-get’ command and npm. I also discovered that the Raspberry Pi Documentation is really helpful. Here are a few things I started with:
I knew I wanted to run the GUI from my MacBook and not require an external monitor. I followed the instructions in the Raspberry Pi Documentation pretty much exactly as written.
I already had VNC Viewer on my MacBook. I connected to the Pi and had GUI on my MacBook in no time.
Git is a very popular open source version control system. I could already see I was going to need Git on the Pi in order to get some code I would need, so I installed with
sudo apt-get install git-core
But, I still don’t have a way to monitor my pushbutton or control my LED circuits. After a little Googling, I came across wiringPi, an access package for the GPIO interface. It also comes with a simple command line interface, so I would have a way to test out my circuits. I installed wiringPi using the instructions on the wiringPi install page.
Now, I could go to my command prompt and run gpio commands. The pin numbering used by wiringPi is not obvious. There is a whole history there but I’m not going to get into that. I could read the state of the pushbutton using
gpio read 1
I could control the LED with the following:
gpio mode 6 out gpio write 6 1 gpio write 6 0
Yes, you can install Eclipse on the Raspberry Pi! My architecture did not include a Java program written in the Eclipse IDE, but I tried it anyway. Again, installation is pretty easy with the package manager:
sudo apt-get install eclipse
There are a couple prerequisites, though.
It is best to get the full Oracle Java 7 JDK using the Raspberry Pi Documentation.
Pi4J is an API that gives you simple access to the GPIO pins on the board. Install it with
curl -s get.pi4j.com | sudo bash
I followed Ian Bull’s tutorial with a few minor modifications to create a simple Java program that monitors the pushbutton and controls the LED. But to get it to run, I ran into another issue – the underlying wiringPi must be run as root.
Configure Eclipse to run programs as root
There is a really clever Stack Overflow on how to do this.
Ok, now that I was able to interface with the hardware using the command line and a Java program, I was ready to move on to bigger and (hopefully) better things. I wanted to use Node-RED. What is Node-RED? I lifted this description from an IBM page:
Node-RED provides a browser-based UI for creating flows of events and deploying them to its light-weight runtime. With built in node.js, it can be run at the edge of the network or in the cloud. The node package manager (npm) ecosystem can be used to easily extend the palette of nodes available, enabling connections to new devices and services.
A textual description doesn’t really do it justice. You really need to see a flow to understand how powerful it can be, so let’s get it installed, but beware – there be dragons here.
I Googled around a bit and instead of following the instructions on nodered.org, I jumped into a tutorial I found. Unfortunately, that tutorial was outdated and lead me down a dead end. As of this writing, Node-RED does not run on the very latest Pi-compatible version of Node.js. I would definitely recommend you follow the instructions specific to the Raspberry Pi version you have from the Node-RED documentation. I won’t repeat those instructions here.
Installing additional Nodes
Node-RED can be extended easily by installing additional nodes. The best place to look is the Node-RED Library. I installed node-red-contrib-gpio, but here is where another dragon appeared. Being relatively unfamiliar with Node.js, I overlooked one very important line in the instructions: “From inside your node-red directory“. In the case of a local Node.js instance, that means the hidden .node-red directory in my home directory on the Pi. Until I figured that out, the nodes just wouldn’t show up in Node-RED. So, the installation instructions should be:
cd ~/.node-red npm install node-red-contrib-gpio
In the next post, I will look at how I created my first Node-RED flow on the Raspberry Pi before I stared interfacing it to the Internet of Things.