Aah – the summer arrives, so now I can actually finish/document some work that languished during the academic year. Have a look at this project over on Github and build your own! This fork of the popular RPi_Web_Cam_Interface adds support for night vision via IR LED ring (including auto shutoff so you’re not blasting your tot with IR all night).
A little research online seems to indicate the potential for IR LEDs to damage eyesight. Perhaps this is the tinfoil hat squad talking, but I don’t want to take chances with my kid’s eyesight. Thus, we need to wire/program the pi so that it only flips the IR array on during active recording.
A little poking around revealed that the status of the camera (“ready” or “halted”) is held at
/var/www/status_mjpeg.txt . I created a simple python script in the same directory called checkCam.py:
# status can be "ready" or "halted"
import RPi.GPIO as GPIO ## Import GPIO library
GPIO.setwarnings(False) ## Prevent constant warnings (maybe I did something inelegant?)
GPIO.setmode(GPIO.BCM) ## Use board pin numbering
GPIO.setup(7, GPIO.OUT) ## Setup GPIO Pin 7 to OUT
if 'ready' in open('/var/www/status_mjpeg.txt').read():
GPIO.output(7,True) ## Turn on GPIO pin 7
GPIO.output(7,False) ## Turn off GPIO pin 7
/etc/rc.local with nano to include
python /var/www/checkCam.py somewhere before
exit 0 . That will cause the script to run on startup.
Next up: connect pin 7 to a transistor so that it can control an IR array!
Today I got down to business on a new Raspberry Pi project. I started with the following parts:
- RPi 2B (w/ 8G NOOBS)
- USB wifi dongle
- RPi Noir camera board
- Monitor, keyboard and mouse (just for setup)
Following a clean install* I set up my RPi to enable SSH and the camera. If your RPi system software is already installed, you can reach these features by entering
raspi-config in the Terminal. I also got the wifi dongle talking to my network. Camera installation is really simple. See this link to make sure you get the ribbon cable polarity right.
Now we install RPi-Cam-Web-Interface. The documentation is a little hard to follow, so here’s a condensed version:
sudo apt-get install lsb-release
- Confirm OS code name is “Jessie”
git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
chmod u+x *.sh
- Enter the IP address of the RPi into a browser from another computer on your network. You should get a page full of options and a live image from the camera.
Ok! Next time I’ll talk about adding UV LEDs.
*After one unsuccessful run at this project, I ran into problems trying to reinstall NOOBS from the RPi boot screen. You’re supposed to be able to do this by holding shift, but I couldn’t get it to work (even after trying all the voodoo like rapidly pressing both shift keys in alternating fashion). I wound up downloading a fresh copy of NOOBS and copying it to the SD after wiping it with the OSX disk utility. Everything worked perfectly after that.
The good folks at Element14 got in touch after they read some of the Raspberry Pi tutorials on this website. They offered to send me some parts for a project, so I decided to start with a networked baby monitor. I’ll post progress as I go!
This is my first complex Raspberry Pi project. The guts are working great: plug the device in and it automatically boots up and starts checking arrival times at my favorite stop. Planned improvements include a Flask-based web interface for selecting bus routes and a nicer case.
Though a Raspberry Pi can act like a conventional desktop computer, my RPi projects are generally “headless”, in that no monitor, keyboard or mouse are present. This means that we must “harden” the system settings and code to be self-starting and fault-tolerant. Here are the steps I took to ensure that my CTA bus tracker could run indefinitely without user input.
- Set the default user “pi” to automatically log in on power up.
- Follow these instructions to daemonize your script. This allows it to run as a service, which is easier to monitor and restart.
- Install and configure Monit to resurrect the daemon if it dies. A script can die/exit unexpectedly if it encounters an unhandled error. It’s good practice to take care of these errors within the script itself, but I kept getting occasional script exits despite my best efforts. Here’s a nice little python tutorial about exceptions.
sudo nano /etc/kbd/config and search for BLANK_TIME=30 and POWERDOWN_TIME=30. Change both values to zero (meaning never). This prevents the Pi from falling asleep.
Update: I’ve been chasing bugs for a month, and I’ve finally got 24 hours of up time according to Monit. I think the problem had to do with the python requests module. I added a timeout to each URL request, allowing the loop to continue even if the CTA server is acting up.
Update 2: It also looks like the API will start bouncing requests once you hit a certain number in 24 hours from the same IP.
Use SSH so you can operate your Pi in “headless” mode: no monitor, keyboard or mouse required. Adafruit has covered this at length, but here are my personal notes on one page.
- Connect RPi to modem via Ethernet cable. Connect a keyboard, mouse and monitor too.
- Power on the RPi.
- If it’s your first time booting, you can search through the setup menu to enable SSH.
- If you’ve already booted up before, open up the Terminal application and type
- SSH > Enable
- Connect your computer to the same network (wired or wireless).
- Determine the IP address of your RPi. Steps will vary based on your modem. If I type the IP address on the side of my modem into a web browser, I can find an option to list all device IPs that are currently connected. Here’s another method that I haven’t tested.
- Open the OSX terminal (Applications > Utilities). Be aware that you can do some major file/systems damage if you’re not careful.
ssh [device IP] -l [device name] . Replace the bracketed text and delete the brackets. The RPi is named “pi” by default.
- When prompted, enter the RPi password. It’s “raspberry” by default. You won’t see any cursor activity as you type – this really confused me the first time around.
Let’s make a custom “clock” that constantly checks and updates the arrival times for the bus outside my house. You’ll need to apply for a CTA API key to make this work. I’ve run my clock for about 12 hours total, will update if I find reliability issues.
- Raspberry Pi
- Pi power supply
- Wifi dongle
- 7-segment LED “backpack”
Wiring (Backpack to Pi Rev2). If you look at the Pi with the SD card facing up, you’ll see GPIO pin #1 marked at upper right as “P1”.
- D >> SDA
- C >> SCL
- + >> 5v
- – >> GND
- IO >> 3.3v
Now follow this tutorial to get all your libraries in place. Once everything is wired/updated, try entering the following 3 commands into the terminal:
sudo python ex_7segment_clock.py
If that works then you’re ready for the last step. Download this python script on Github. Follow these instructions to get your Pi to automatically run the script on startup. Enjoy! Will update soon with pictures/CAD files of the finished housing.