Raspberry Pi IP camera with Motion

Using a Raspberry Pi and Camera module you can build yourself a simple IP camera, using Motion.

What you’ll need

– Raspberry Pi Zero Wireless – $10
– Camera module – $9
– Power supply – $5
– SD card – $6

Download and install the latest version of Raspbian onto your SD card, I used the lite version for this project, as I didn’t need a graphical user interface. Setup the wifi and you are ready to get started.

Setup

We need to setup the Pi first, run this command and make the following changes

sudo raspi-config

– Enable ssh
– Enable camera
– Enable boot to command prompt (automatic login)
– Update the default user password

From here you can now do everything over SSH, if that’s easier for you.

We’ll get started by updating Raspbian:

sudo apt-get update
sudo apt-get dist-upgrade

Then install the motion software

wget https://github.com/Motion-Project/motion/releases/download/release-4.0.1/pi_jessie_motion_4.0.1-1_armhf.deb
sudo apt-get install gdebi-core
sudo gdebi pi_jessie_motion_4.0.1-1_armhf.deb

Configure

We’ll make a folder to hold our new config file

mkdir ~/.motion

You can then either copy in the default configuration and edit it yourself, or use mine

cp /etc/motion/motion.conf ~/.motion/motion.conf
sudo nano ~/.motion/motion.conf

Note: You’ll probably want to update the password on line 519

Start

To start motion you can run this command:

motion -c ~/.motion/motion.conf

To start motion on boot you can edit the rc.local file

sudo nano /etc/rc.local

Add in the following line, then reboot

motion -c /home/pi/.motion/motion.conf &

Next steps

Using MotionEye, you can create a hub to view all the cameras in your house/office/hackspace, instructions can be found here

Configuring a 5″ Raspberry Pi Display

I received a 5″ 800×480 Raspberry Pi screen recently, and needed to get the screen and touch input working correctly. After some digging around I got everything working, here’s how I did it.

The screen is marked as “5inch HDMI Display, 800×480 Pixel, XPT2048 Touch Controller”, and doesn’t need any drivers to get it working, despite coming with a driver CD.

Insert the SD card from your Pi into your computer, and open the config.txt file, we’ll be making a couple of changes here.

Resolution and touch input

The Pi can’t auto-detect the screen resolution, so we’ll need to let it know how many pixels we have. Add the following lines to set the resolution.

hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt=800 480 60 6 0 0 0

Now we need to tell the Pi that we have a touch screen connected, in the same file add the following lines

dtparam=i2c_arm=on
dtparam=spi=on
dtoverlay=ads7846,penirq=25,speed=10000,penirq_pull=2,xohms=150

Save the file, and put the SD card back into the Pi. You’ll find the whole screen being used and the touch screen working… but the touch screen input is off by a bit, which we’re going to fix next.

Calibration

We can install a calibrator by running this in the terminal

sudo apt-get install xinput-calibrator

Then you can run it by typing

xinput_calibrator

It’ll get you to touch on four calibration points, after which your touch screen should work much more accurately.

To make this change permanent you’ll need to copy the output from the above command into a config file. It’ll look something like this:

Section "InputClass"
        Identifier "calibration"
        MatchProduct "ADS7846 Touchscreen"
        Option "Calibration" "159 3903 139 4046"
        Option "SwapAxes" "0"
EndSection

Edit your config file with:

sudo nano /etc/X11/xorg.conf.d/99-calibration.conf

Paste the output into that file, save, and you’re done.

Permissions

For some reason the above changes will modify some permissions, which means you will get a non working login screen at boot. To fix this press Ctr-Alt-F5 at the login screen to get the command line.

Login there with your username and password (default is pi and raspberry) then run the following command to fix the permissions.

chown pi:pi .Xauthority

Reboot, your next login should work as normal

ESP8266 + temp sensor fail!

I’ve designed a few sensor boards that collect temperature, humidity, light, sound etc… and send them over wifi, or a local radio network. Recently I switched to the ESP8266, and had my first fail.

The temp sensor was mounted next to the ESP8266, which is fine until you turn everything on, and realise that the ESP gets warm and completely compromises the readings on the temp sensor.

Oops!

Version 1

I designed a second version of the board, with some physical separation between the ESP and the temp sensor, making cuts into the board to stop the heat traveling through to the sensor area.

Version 2

Even with this change we still get heat transfer between the ESP and the temp sensor. Within 10 minutes of power up we have a 4°C rise in temperature readings.

temp

At this point I have a few options

1. Re-design the board, giving even more physical separation between the ESP and the sensors
2. Add a heatsink to the ESP to try and dissipate the heat
3. Modify the software to put the ESP into sleep mode between sensor readings, to reduce heat output

I’ll try a combination of the second two, although ultimately a new board might be the better solution.

ESP8266 as Arduino

You can program the ESP8266-12E as an Arduino, using the board manager plugin in the Arduino IDE. It’s great for deploying simple code with access to wifi, and at less than $2 (including shipping) it’s really affordable.

Because it’s made by multiple sources in China, and because they don’t seem to talk to each other, you get some inconsistencies between the seemingly identical boards.

esp8266

Pins 4 and 5 are swapped on some of them, which means you have to account for this in your PCB designs. I2C runs on these pins, and so it’s important you have them the right way around.

The operation of the reset button is also different on different boards. Usually you need to press the reset button on power up to be able to program, but on some boards you need to keep that button pressed until the upload has started.

This makes the ESP8266 a potentially tricky board to use at first, if you don’t know the quirks.