树莓派折腾全纪录
本文最后更新于:2022年7月8日下午5点08分
最近入手了一个树莓派4B,来折腾一番吧!
0 Linux基础
树莓派自带的操作系统是Linux内核的,要想玩转树莓派,就需要先熟悉一些基本的Linux操作。在这里不展开这一部分,详见这篇文章。
1 基础配置
远程启动
首先在boot目录下,新建ssh空文件,无后缀名
1 |
|
同样在boot目录下,新建wpa_supplicant.conf文件
1 |
|
这样,不出意外我们就可以通过SSH工具远程访问树莓派了(局域网)。另外,最近发现一款免费好用的SSH工具,WindTerm,命令行与传输文件集于一身,颜值也不错。
要想远程桌面访问,首先需要开启VNC。在SSH工具中输入命令
1 |
|
用方向键选择3 Interface Options
,按下Enter
,再选择P3 VNC
,按下Enter
。对于Windows系统,自带的远程桌面工具就挺好用,左下角输入remote
,输入树莓派用户名和密码即可进入树莓派图形化桌面。
更改下载源
1 |
|
1 |
|
静态IP地址
1 |
|
1 |
|
1 |
|
3 个人博客搭建
这里是利用树莓派作为网页服务器搭建个人博客,重点是配置树莓派,使之成为服务器。
主要参考这篇文章
a.本地安装
本地安装及SSH公钥生成参考这篇文章
b.树莓派配置
安装Git
1 |
|
查看版本,确保安装正确
1 |
|
安装Nginx
1 |
|
查看版本,确保安装正确
1 |
|
建立远程git仓库
通过git将本地代码推送到树莓派远程仓库
1 |
|
映射仓库
将仓库映射到博客目录下
1 |
|
写入以下内容
1 |
|
Nginx配置
1 |
|
此时访问树莓派IP地址,出现403 Forbidden
字样说明配置成功
添加本地公钥到远程git仓库
在C:/programfile/.ssh
目录下,右键Git Bash
1 |
|
确认安装即可
推送至树莓派
修改_config.yml
文件中的推送地址
1 |
|
在本地博客根目录右键Git Bash,hexo d -g
,这样再访问树莓派IP地址,就能看见自己的博客了。
c.内网穿透
https://www.ngrok.cc/
想要在非局域网(公网)访问自己的树莓派,就需要一个公网IP地址,这可以通过打电话向运营商直接索取,但目前还在学生阶段的我就不尝试了,直接内网穿透来体验一下。我选用的是Sunny-Ngrok实现内网穿透。以下操作都是通过SSH工具在树莓派中进行的。
下载客户端
我这里选用Linux ARM版本,下载后找个文件夹解压
1 |
|
启动隧道
注册登录,然后需要实名认证,还要通过支付宝人脸识别,然后才能开通隧道,看官方教程即可。注意,本地IP一般不用修改,默认127.0.0.1即可,端口最好改一下比较安全,改成8000或者7000这种。赠送的域名较长,后期可以购买域名绑定。
进入刚才解压的文件
1 |
|
这样就会进入下面这个界面,就代表连接成功
1 |
|
在浏览器输入上方给出的网址,无论局域网或非局域网都可以访问,不过有时网络拥堵,可能打开较慢。Ngrok的原理其实就是将公网域名http://xxx.xxx.xxxxx.com映射到本地127.0.0.1:80端口上。
如果想后台启动Ngrok,输入下方命令即可
1 |
|
Nginx配置
如果你在开通隧道时修改了端口号,打开上述网址,一般会提示隧道 **** 不可用
错误,这时需要配置一下Nginx。
1 |
|
以上,就可以在任何地方访问你的博客了,其实跟Hexo+Gitee搭建个人博客的感觉差不多,只不过Gitee是有人给你搭建好了服务器给你使用,而你将树莓派搭建成一台网页服务器使用。
d 远程公网SSH登录
既然已经实现了内网穿透,我们也可以用它来实现SSH登录。访问网页使用的是http隧道,而ssh连接则使用tcp隧道。
添加TCP隧道,跟上面添加http隧道相似,树莓派默认端口是22(安全起见,最好更改)
启动隧道
访问隧道,端口为刚才设置的远程端口
1
ssh -p 10000 admin@xxx.xxxxxx.com
3 学习环境搭建
安装OpenCV
这里采用源码安装,因为源码安装比较自由且可以选择版本。我第一次直接安装最新版遇到了莫名其妙的问题,因此还是先安装之前的版本。安装参考这个视频或文章。严格按照步骤来,代码可直接复制,手敲容易出错。安装过程中要耐心等待,不要随便敲击键盘。如有出错,后面附有部分debug内容,解决不了就Google it。
更新树莓派
1
sudo apt update && sudo apt upgrade
增大交换空间
1
sudo nano /etc/dphys-swapfile
1
2#CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048安装工具及函数库
1
2
3
4
5
6sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran安装Python3和pip3
1
2sudo apt-get install python3-dev
sudo apt-get install python3-pip下载OpenCV源代码
1
2
3
4wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.0.zip
unzip opencv.zip
unzip opencv_contrib.zip安装numpy
1
sudo pip3 install numpy
编译OpenCV
注意,文件夹位置如有改动,第7行要改成自己定义的位置。
\
代表暂不执行命令,只带遇到..
。1
2
3
4
5
6
7
8cd ~/opencv-4.1.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.1.0/modules \
-D BUILD_EXAMPLES=ON ..Build OpenCV
要确保这一步不出现错误,若出现错误,先解决在执行后面的步骤为宜。
1
make -j4
安装OpenCV
1
sudo make install && sudo ldconfig
若没有错误,即可重启
1
sudo reboot
检查
依次输入以下命令,如给出版本号,则安装成功。
1
2
3python3
import cv2
cv2.__version__
debug
第一次安装时出现过错误,通过Google解决了,忘了记录下来。总之,出现错误直接复制相应错误然后Google it就可以了。
摄像头选取
参考这篇文章
CSI摄像头
摄像头的安装与拆卸一定要在树莓派断电的情况下进行,否则容易烧坏摄像头!
USB摄像头
网络摄像头
手机安装软件
IP摄像头
确保手机和树莓派处于同一局域网,打开
IP摄像头
在浏览器访问给出的IP地址即可看到摄像头画面。
给出一个Python调用摄像头的例子
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#!/usr/bin/env python
'''
Waveshare OpenCV Tutorial
01_IP_Camera.py
A demo to show whether The OpenCV and IP camera is well installed
'''
import numpy as np
import cv2
def main():
print("OpenCV Version:{}".format(cv2.__version__))
# 0: use CSI camera,1:use USB camera
ip_camera_url = 'http://admin:admin@192.168.1.1:8081'
cap = cv2.VideoCapture(ip_camera_url)
if(not cap.isOpened()):
print("can't open this camera")
while(True):
ret, FrameImage = cap.read()
if ret == True:
cv2.imshow('Camera Capture',FrameImage)
#Press Q to quit
if (cv2.waitKey(1)) == ord('q'):
cap.release()
break
else:
break
if __name__ == '__main__':
print(__doc__)
main()
# Release resource
cv2.destroyAllWindows()
远程监控
通过motion将树莓派作为摄像头使用,远程监控。参考这篇文章和这篇文章。我自己实验了一下,不知是不是因为网络不好,非常卡,延迟能到秒量级,如果在加上内网穿透,会更卡,而且我暂时没有学会Nginx的配置,不知道怎么协调配置我的博客和将要使用的视频流。先弃之,以后再说。
后续(待更新)
本文作者: Shixin
本文链接: https://physxz.github.io/posts/10012/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!