Cubieboard/Webcam

= Cubieboard A10 - Surveillance Camera Setup =

Requirements

 * cubieboard A10
 * USB webcam (MJPG support recommended)
 * USB wifi dongle (Realtek RTL8188CUS)
 * (optional) USB HUB

Step 1 - Main objective
Add UVC video support to the SD card image running on the cubieboard.

If you already have a booting linux system on the Cubieboard with the uvcvideo module loaded after boot, skip the following main step.

A new kernel image and modules will be cross-compiled on a cross compile host and then copied to the SD card partitions. The cubieboard will boot and lsmod will confirm the loaded uvcvideo kernel module - that is what this step is all about.

Ubuntu Linaro rootfs is being used for this tutorial.

The following steps are highly recommended:


 * http://linux-sunxi.org/FirstSteps
 * go with the easy option: sunxi-bsp (kernel 3.0.76 checked out)
 * move on to "Building the Kernel" and skip git checkout the kernel
 * run make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun4i_defconfig
 * run make ARCH=arm menuconfig
 * activate some specific kernel options
 * run make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j5 uImage modules
 * run make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install
 * copy the uImage file (arch/arm/boot/uImage) to the SD card BOOT partition
 * copy the modules (output/lib/modules/*) to the SD card ROOT partition (under /lib/modules)

unmount the SD Card partitions, plug the card into the cubieboard and fire it up.

If all went well, lsmod will show the uvcvideo module loaded.

linaro@linaro-alip:~$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB Bus 004 Device 003: ID 046d:0824 Logitech, Inc. Bus 004 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN

linaro@linaro-alip:~$ lsmod Module                 Size  Used by disp_ump                 969  0 cpufreq_stats          2700  0 mali_drm               2560  1 8192cu               587686  0 drm                  176664  2 mali_drm uvcvideo              59051  1 mali                 107255  0 ump                   46575  4 disp_ump,mali sw_ahci_platform       3621  0

Step 2 - Main Objective
Add mjpg-streamer, motion and Wifi support. Email a picture attachment on motion detection.


 * install the following packages:

using a Gmail account for mailing purposes:

setup mjpg-streamer
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer cd mjpg-streamer/mjpg-streamer && make ./mjpg_streamer -i "./input_uvc.so -f 30" -o "./output_http.so -w ./www"

At this point you should have http://:8080 with mjpg-streamer working

stop mjpg_streamer

create the init script

 * 1) !/bin/bash
 * 2) /etc/init.d/mjpg_streamer
 * 3) BEGIN INIT INFO
 * 4) Provides:          mjpg_streamer
 * 5) Required-Start:    $network
 * 6) Required-Stop:     $network
 * 7) Default-Start:     2 3 4 5
 * 8) Default-Stop:      0 1 6
 * 9) Short-Description: mjpg_streamer for webcam
 * 10) Description:       Streams /dev/video0 to http://IP/?action=stream
 * 11) END INIT INFO

f_message{ echo "[+] $1" #echo "space here" }

case "$1" in       start)                f_message "Starting mjpg_streamer"                /usr/local/bin/mjpg_streamer -b -i "/usr/local/lib/input_uvc.so -d /dev/video0 -f 30" -o "/usr/local/lib/output_http.so -w /usr/local/www"                sleep 2                f_message "mjpg_streamer started"                ;;        stop) f_message "Stopping mjpg_streamer." pid=`ps aux | grep [m]jpg_streamer|awk '{print $2}'` if $pid != "" ; then kill -9 $pid fi               f_message "mjpg_streamer stopped" ;;       restart)                f_message "Restarting mjpg_streamer"                pid=`ps aux | grep [m]jpg_streamer|awk '{print $2}'`		if  $pid != "" ; then			kill -9 $pid		fi                /usr/local/bin/mjpg_streamer -b -i "/usr/local/lib/input_uvc.so -d /dev/video0 -f 30" -o "/usr/local/lib/output_http.so -w /usr/local/www"                sleep 2                f_message "Restarted mjpg_streamer"                ;;        status) pid=`ps aux | grep [m]jpg_streamer|awk '{print $2}'` if [ -n "$pid" ]; then f_message "mjpg_streamer is running with pid ${pid}" f_message "mjpg_streamer was started with the following command line" cat /proc/${pid}/cmdline ; echo "" else f_message "Could not find mjpg_streamer running" fi               ;; *)               f_message "Usage: $0 {start|stop|status|restart}"                exit 1                ;; esac exit 0
 * 1) Carry out specific functions when asked to by the system

add the init script to boot:

setup motion
/etc/motion/motion.conf

input 8 netcam_url http://localhost:8080/?action=stream target_dir /motion on_picture_save /usr/local/bin/cubieMotionMail %f

/usr/local/bin/cubieMotionMail


 * 1) !/bin/bash

curdate=`date +"%Y-%m-%d %H:%M:%S"` attachedPic=$1

sendEmail -f @gmail.com -t @gmail.com -u "Cubie Motion" -m "Motion detected - "$curdate -a $attachedPic -s smtp.gmail.com -o tls=yes -xu @gmail.com -xp

rm -rf /motion/*
 * 1) clean up the tmp snapshot dir

/etc/default/motion start_motion_daemon=yes

Test the setup by making some motion happen in from of the camera. An email with date and attached photo should be delivered to the configured email address.

setup Wifi
linaro@linaro-alip:~$ wpa_passphrase wifiAP linaroWifi network={ ssid="wifiAP" #psk="linaroWifi" psk=0b42d2fe2335739a087ef051c07be1c724be49769ff2f724289299ce194949d0 } linaro@linaro-alip:~$

use the output to configure /etc/network/interfaces

auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-ssid "wifiAP" wpa-psk 0b42d2fe2335739a087ef051c07be1c724be49769ff2f724289299ce194949d0

final step: reboot Cubieboard

 * Wifi, mjpg-streamer and motion expected to start at boot
 * emails expected to arrive, with attached photo, over email
 * test the setup by creating some motion in front of the camera - and you're done!

brightness, contrast...
sudo apt-get install v4l-utils v4l2-ctl --list-ctrls

And then as an example: v4l2-ctl --set-ctrl brightness=10

... and on the web viewer, the settings should kick in realtime!

Acknowledgements
This working guide on the Cubieboard came as a result of combining several independent guides scattered over the web and for other platforms. Gathering all the information, adjusting and making it all work resulted in this guide. Some of the scripting has been rewritten/adjusted after testing on the Cubieboard, however original credit should be given to:


 * https://www.olimex.com/wiki/UVC_support
 * http://www.marcomc.com/2012/09/how-to-configure-wireless-lan-on-raspberrypi-with-raspbian-kernel-3-2-27-and-solwise-rtl8188cus-wifi-dongle/
 * http://www.debianadmin.com/how-to-sendemail-from-the-command-line-using-a-gmail-account-and-others.html
 * http://www.raspberrypi.org/phpBB3/viewtopic.php?t=31212&p=279214