为了比较方便的实现手机APP控制树莓派摄像头小车。
需要配置下树莓派系统,使树莓派开机就能启动自带的WiFi热点,运行摄像头驱动启动摄像头,还有开机就能启动Python程序。
配置文件下载链接
配置文件的一些笔记
阮一峰的bash脚本教程链接
1.
#!/bin/sh
#!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后的是解释此脚本的shell的路径。
2.
cd $(cd `dirname $0`;pwd)
dirname $0 ,取得当前执行的脚本文件的父目录
cddirname $0
,进入到这个目录
pwd ,显示当前的工作目录
3.
DIR0=$(cd `dirname $0`;pwd)
相当于定义了一个路径的变量,当前父目录的路径赋给了DIR0
4.
apt update
apt install -y rfkill hostapd dnsmasq nginx cmake libv4l-dev
apt-get install -y libjpeg8-dev
apt-get install -y libjpeg62-turbo-dev
下载关于启动摄像头所需的编译工具和软件包
5. websocket的配置
echo '配置Nginx反向代理' &&\
rm -f /etc/nginx/sites-enabled/default &&\
echo 'server {'>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' listen 80;'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' server_name _;'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ''>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' location / {'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' proxy_http_version 1.1;'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' proxy_pass http://localhost:8080/?action=stream/;'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' proxy_set_header Upgrade $http_upgrade;'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' proxy_set_header Connection "upgrade";'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' proxy_read_timeout 5s;'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' proxy_buffering off;'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo ' }'>>/etc/nginx/sites-enabled/Camera.conf &&\
echo '}'>>/etc/nginx/sites-enabled/Camera.conf
上面的是输出文件/etc/nginx/sites-enabled/Camera.conf 的内容
写法可以替换成下面的
echo '配置Nginx反向代理' &&\
//删除默认文件
rm -f /etc/nginx/sites-enabled/default &&\
echo -e 'server {
listen 80;
//指定一个IP或域名来访问这个配置文件, _ 表示默认域名,就是所有ip都可以访问
server_name _;
location / {
//表明使用http版本为1.1
proxy_http_version 1.1;
proxy_pass http://localhost:8080/?action=stream/; // 代理转发地址
//启用支持websocket连接,这两行表明的是websocket连接进入的时候,进行一个连接升级将http连接变成websocket的连接
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
// 超时设置
proxy_read_timeout 5s;
//这个参数用来控制是否打开后端响应内容的缓冲区
proxy_buffering off;
}
}
//输出文件的地址和名称
'>>/etc/nginx/sites-enabled/Camera.conf
先移除掉rm -f /etc/nginx/sites-enabled/default
echo -e 表示对于转义字符按对应的方式进行处理。
6.开始配置
echo 开始配置
# 设置IP地址
ip addr flush dev wlan0 #清除无线网卡IP地址
ip addr add 10.0.0.1/24 dev wlan0 #将wlan0的IP地址设置为10.0.0.1 , /24是子网掩码225.225.255.0
ip link set wlan0 up #激活无线网卡wlan0的IP地址
7.wlan0 IP的配置文件
cat > /etc/network/interfaces.d/wlan0 << EOF
auto wlan0
iface wlan0 inet static
address 10.0.0.1
netmask 255.255.255.0
EOF
将设置ip的内容输出到/etc/network/interfaces.d/wlan0
8.配置无线热点
echo 正在配置无线热点
rfkill unblock all >/dev/null 2>&1
# 配置无线热点
cat > /etc/hostapd/hostapd.conf << EOF
interface=wlan0
driver=nl80211
ssid=Raspberry Pi 4B
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
hw_mode=g
channel=11
auth_algs=1
wpa=2
EOF
9.启动hostapd服务
echo 'DAEMON_CONF="/etc/hostapd/hostapd.conf"'>>/etc/default/hostapd
#启动hostapd服务
systemctl unmask hostapd
systemctl enable hostapd
systemctl restart hostapd
10.配置DNS
echo 即将配置结束
# 配置DNS,dnsmasq 是一个小型的用于配置 DNS 和 DHCP 的工具
cat > /etc/dnsmasq.conf << EOF
bind-interfaces
interface=wlan0
listen-address=10.0.0.1,127.0.0.1
dhcp-range=10.0.0.100,10.0.0.200,24h
EOF
listen-address 定义dnsmasq监听的地址,默认是监控本机的所有网卡上
dhcp-range 配置项的意思是,dhcp 服务会给客户端分配 10.0.0.100 到 10.0.0.200 的 IP 空间,24 小时租期
11.重启dnsmasq
systemctl enable dnsmasq
systemctl restart dnsmasq
12.编译mjpg-streamer(这是摄像头的编译包)
mjpg-streamer的源码链接
if [ ! -d $DIR0/mjpg-streamer-master/build ];then
cd $DIR0/mjpg-streamer-master/mjpg-streamer-experimental
mkdir -p $DIR0/mjpg-streamer-master/build
make
cd $DIR0
fi
if [ ] fi 的写法,[ + 空格****空格 ] fi结束退出
13.设置开机启动所有的配置文件
#设置开机启动
rm -rf ./start.sh >/dev/null 2>&1 #>/dev/null 2>&1不显示报错信息
cat > start.sh << EOF
#!/bin/sh
systemctl restart hostapd
cd $DIR0/mjpg-streamer-master/mjpg-streamer-experimental
bash ./start.sh &
python $DIR0/bluetooth_control.py &
exit 0
EOF
chmod -x start.sh #意思就是给start.sh执行权限
systemctl enable rc-local.service #激活rc-local.service
sed -i 's/exit 0//g' /etc/rc.local >/dev/null 2>&1
sed -i 's/bash .*start.sh//g' /etc/rc.local >/dev/null 2>&1
cat >> /etc/rc.local << EOF
bash $DIR0/start.sh
exit 0
EOF
#暂停5秒
sleep 5
#ping 127.1 -c 5 >/dev/null 2>&1
解释: sed -i 是修改文件 ‘s/需要被修改的字符/替换的字符/g’ 文件路径
sed -i ‘s/exit 0//g’ /etc/rc.local > 就是把rc.local文件里的exit 0修改为无
这里如果没有先把exit 0删除,那么添加的bash $DIR0/start.sh就会被添加到exit 0的下面,而执行rc.local文件时,到exit 0就会退出了,所以就先删除exit 0在添加
bash $DIR0/start.sh
exit 0
14.退出配置文件
exit