Raspberry pi camera

2014-11-07
manual
sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
sudo reboot

Скачиваем mjpeg-streamer и компилируем

sudo apt-get install cmake
git clone https://github.com/silvanmelchior/userland.git
cd userland
./buildme

sudo ln -s /opt/vc/bin/raspimjpeg /usr/bin/raspimjpeg

или скачиваем готовый

wget https://www.dropbox.com/s/3f47cyh902l4dto/raspimjpeg
chmod a+x raspimjpeg

Устанавливаем RPi Cam Web Interface

git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface
chmod u+x RPi_Cam_Web_Interface_Installer.sh
./RPi_Cam_Web_Interface_Installer.sh install

Проверяем работу RPi Cam Web Interface http://ip-adress-raspberry-pi

более подробное описание

http://elinux.org/RPi-Cam-Web-Interface

http://www.raspberrypi.org/forums/viewtopic.php?f=43&t=63276


Устанавливаем pi-pan управление сервоприводами

mkdir pi-pan
cd pi-pan
wget http://openelectrons.com/files/documents/pi-pan.tar.gz`

Извлекаем следующей командой:

cd pi-pan
tar -zxvf pi-pan.tar.gz`

Pi-Pan использует ServoBlaster; устанавливаем следующими скриптами:

cd pi-pan
sudo ./install-pi-pan.bash
sudo ./install-pilight.bash

проверяем работоспособность

python ./neutral_servo.py

Создаем файл “pipan_pipe.py”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
import time
import os, sys
import pipan
import pilight
p_servo = pipan.PiPan()
p_led = pilight.PILIGHT()
while True:
pipein = open("/var/www/FIFO_pipan", 'r')
line = pipein.readline()
line_array = line.split(' ')
if line_array[0] == "servo":
p_servo.do_pan(int(line_array[1]))
p_servo.do_tilt(int(line_array[2]))
elif line_array[0] == "led":
p_led.createPiLight(int(line_array[1]),int(line_array[2]),int(line_array[3]))
pipein.close()
cd /var/www/
sudo mknod FIFO_pipan p
sudo chmod 666 FIFO_pipan

Редактируем “/etc/rc.local”: вставляем код

python /home/pi/pipan_pipe.py &

после строчки содержащей raspimjpeg (директорию следует поменять на ту, где находится pipan_pipe.py) :

Создаем файл “pipan.php” в “/var/www”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
//
// settings
//
$min_pan = 60;
$max_pan = 190;
$min_tilt = 120;
$max_tilt = 220;
//
// code
//
if(isset($_GET["pan"])) {
if(is_numeric($_GET["pan"])) {
if(is_numeric($_GET["tilt"])) {
$pan = round($min_pan + (($max_pan - $min_pan)/200*$_GET["pan"]));
$tilt = round($min_tilt + (($max_tilt - $min_tilt)/200*$_GET["tilt"]));
$pipe = fopen("FIFO_pipan","w");
fwrite($pipe, "servo $pan $tilt ");
fclose($pipe);
}
}
}
if(isset($_GET["red"])) {
if(is_numeric($_GET["red"])) {
if(is_numeric($_GET["green"])) {
if(is_numeric($_GET["blue"])) {
$pipe = fopen("FIFO_pipan","w");
fwrite($pipe, "led " . $_GET["red"] . " " . $_GET["green"] . " " . $_GET["blue"] . " ");
fclose($pipe);
}
}
}
}
?>

Создаем файл “pipan.js” to “/var/www”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
var pan = 100;
var tilt = 100;
var pan_bak = 100;
var tilt_bak = 100;
var pan_start;
var tilt_start;
var touch = false;
var led_stat = false;
var ajax_pipan;
var pipan_mouse_x;
var pipan_mouse_y;
document.onkeypress = pipan_onkeypress;
if(window.XMLHttpRequest) {
ajax_pipan = new XMLHttpRequest();
}
else {
ajax_pipan = new ActiveXObject("Microsoft.XMLHTTP");
}
ajax_pipan.onreadystatechange = ajax_pipan_done;
function ajax_pipan_done() {
if(ajax_pipan.readyState == 4) {
if(touch) {
if((pan_bak != pan) || (tilt_bak != tilt)) {
ajax_pipan_start();
}
else {
setTimeout("ajax_pipan_done()", 100);
}
}
}
}
function ajax_pipan_start () {
ajax_pipan.open("GET","pipan.php?pan=" + pan + "&tilt=" + tilt, true);
ajax_pipan.send();
pan_bak = pan;
tilt_bak = tilt;
}
function servo_left () {
if(pan <= 190) pan += 10;
ajax_pipan_start();
}
function servo_right () {
if(pan >= 10) pan -= 10;
ajax_pipan_start();
}
function servo_up () {
if(tilt >= 10) tilt -= 10;
ajax_pipan_start();
}
function servo_down () {
if(tilt <= 190) tilt += 10;
ajax_pipan_start();
}
function led_switch () {
if(!led_stat) {
led_stat = true;
ajax_pipan.open("GET","pipan.php?red=" + document.getElementById("pilight_r").value + "&green=" + document.getElementById("pilight_g").value + "&blue=" + document.getElementById("pilight_b").value, true);
ajax_pipan.send();
}
else {
led_stat = false;
ajax_pipan.open("GET","pipan.php?red=0&green=0&blue=0", true);
ajax_pipan.send();
}
}
function pipan_onkeypress (e) {
if(e.keyCode == 97) servo_left();
else if(e.keyCode == 119) servo_up();
else if(e.keyCode == 100) servo_right();
else if(e.keyCode == 115) servo_down();
else if(e.keyCode == 102) led_switch();
}
function pipan_start () {
pipan_mouse_x = null;
pipan_mouse_y = null;
pan_start = pan;
tilt_start = tilt;
document.body.addEventListener('touchmove', pipan_move, false)
document.body.addEventListener('touchend', pipan_stop, false)
touch = true;
ajax_pipan_start();
}
function pipan_move (e) {
var ev = e || window.event;
if(pipan_mouse_x == null) {
pipan_mouse_x = e.changedTouches[0].pageX;
pipan_mouse_y = e.changedTouches[0].pageY;
}
mouse_x = e.changedTouches[0].pageX;
mouse_y = e.changedTouches[0].pageY;
e.preventDefault()
var pan_temp = pan_start + Math.round((mouse_x-pipan_mouse_x)/5);
var tilt_temp = tilt_start + Math.round((pipan_mouse_y-mouse_y)/5);
if(pan_temp > 200) pan_temp = 200;
if(pan_temp < 0) pan_temp = 0;
if(tilt_temp > 200) tilt_temp = 200;
if(tilt_temp < 0) tilt_temp = 0;
pan = pan_temp;
tilt = tilt_temp;
}
function pipan_stop () {
document.body.removeEventListener('touchmove', pipan_move, false)
document.body.removeEventListener('touchend', pipan_stop, false)
touch = false;
if(pipan_mouse_x == null) led_switch();
}

Добавляем данный код

<script src="pipan.js"></script>

ниже этой строчки

"<script src="script.js"></script>" 

в файл “index.php”

Добавляем код в файл “index.php” кнопки вращения сервоприводов

1
2
3
4
5
<br>
<input type="button" value="up" onclick="servo_up();"><br>
<input type="button" value="left" onclick="servo_left();">
<input type="button" value="down" onclick="servo_down();">
<input type="button" value="right" onclick="servo_right();">

кнопки для регулирования освещения

<tr>
  <td>Pi-Light:</td>
  <td>
    R: <input type="text" size=4 id="pilight_r" value="255">
    G: <input type="text" size=4 id="pilight_g" value="255">
    B: <input type="text" size=4 id="pilight_b" value="255"><br>
    <input type="button" value="ON/OFF" onclick="led_switch();">
  </td>
</tr>