树莓派zero 2W初体验

本文详细描述了如何使用树莓派Zero2W烧录操作系统,包括选择镜像、设置SSH文件夹,以及后续的Nginx、MariaDB和PHP的安装及配置过程。过程中遇到了SSHkey验证错误,提示可能存在安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树莓派官网

器件准备:树莓派zero2w,数据连接线,读卡器,sd卡16g左右。

full 包含图形化界面

烧录系统:

下载树莓派镜像烧录器到本地电脑,选择raspberry zero2w

插入读卡器

操作系统选择raspberry pi os(64-bit)full

有wifi相关驱动,下载位置选择到读卡器

next开始设置28269fd460b3417f9353a10e9f5e1385.png

磁盘文件需要新建一个ssh文件夹 

这里只能设置一个wifi

插入sd卡,插入数据线0e686695a07b47e8ae08e639cc7aa463.png

 7c39515b4e7845669c0cd53cd648e64a.png

 新建ssh文件夹

插入sd卡,上电后,要检查是否启动成功,可以查看自己路由器连接设备,可以查询到树莓派zero2w的ip地址。

ping saber.local
ssh root@saber.local
ping 树莓派ip
ssh username@ip
报错
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:YAk1PicuI086yA1K8ZASyM0APcsYrXtnKaC4nKeaaG0.
Please contact your system administrator.
Add correct host key in C:\\Users\\YunJin/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\YunJin/.ssh/known_hosts:3
Host key for 192.168.8.13 has changed and you have requested strict checking.
Host key verification failed.
ssh-keygen -R ip

ssh username@ip

连接成功图片

此报错是由于远程的主机的公钥发生了变化导致的。 
ssh服务是通过公钥和私钥来进行连接的,它会把每个曾经访问过计算机或服务器的公钥(public key),记录在~/.ssh/known_hosts 中,当下次访问曾经访问过的计算机或服务器时,ssh就会核对公钥,如果和上次记录的不同,OpenSSH会发出警告。

一、 Nginx、MaraiDB、PHP的安装以及配置

打开命令行,依次输入以下命令:

sudo apt install nginx

sudo apt install php7.3

sudo apt install php7.3-fpm

sudo apt install php7.3-mysql

sudo apt install php7.3-common

sudo apt install mariadb-serv

PHP 7.3 在 Ubuntu 16.04 默认 repo 中可能不可用,您需要添加第三方 repo。我经常使用 ondrej repo quiet 并且效果很好。

运行以下命令:

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.3

2.修改源文件

在源文件中新增加以下内容:

sudo nano /etc/apt/sources.list

2.修改源文件

在源文件中新增加以下内容:

sudo nano /etc/apt/sources.list
#tsinghua
deb https://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ buster/updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free
sudo nano /etc/apt/sources.list.d/raspi.list
#tsinghua
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

2.2 需改虚拟内存大小

由于zero2w的内存很小,在ssh远程链接的时候同时安装更新软件包,会造成内存过载断开连接的情况。所以适当增大的了虚拟内存的大小。

sudo dphys-swapfile swapoff
sudo nano /etc/dphys-swapfile
#修改100改成自己设置的大小
CONF_SWAPSIZE=100
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
sudo reboot
sudo apt-get update
sudo apt-get upgrade

树莓派ZERO 2W 使用摄像头模块

准备:

-  raspi zero 2w

-  typec/mico数据传输线一根

-    树莓派摄像头

连接摄像头

  1. 检查摄像头配置

$ vcgencmd get_camera

supported = 0 说明没有开启摄像头

       2.修改树莓派配置,开启摄像头模块

$ sudo raspi-config

 选择 Interfacing Options , 选择 Camera

选择 Yes ,同意开启

再次检查

$ vcgencmd get_camera
supported = 1 detected = 0

detected = 0 表明没有接入摄像头设备,看下设备是否插反了

supported = 1 detected = 1  # detected=1 表示识别到1个摄像头
  1. 测试拍照功能

$ raspistill -o test.jpg

 motion

  • 1、安装 motion
$ sudo apt-get install motion
  • 配置 motion.conf

$ sudo vi /etc/motion/motion.conf
############## 参数说明 ##################
target_dir /var/lib/motion # 图片/视频文件存储的位置
webcontrol_localhost on # 将on改成off,允许非本机访问http控制台
stream_localhost on # 将on改成off,允许通过网页查看摄像头
deamon off # 改成on,允许后台启动
width # 设置分辨率 宽
height # 设置分辨率 高
locate_motion_mode on # 设置探测到图像中有运动时,把运动区域用矩形框起来
ffmpeg_video_codec mkv #  设定视频的编码器
snapshot_interval 1 # 设定自动采集图片的周期,当有运动被检测到时,采集频率会自动变高
  • 运行 motion

$ sudo motion

现在我们的摄像头已经变成了一台网络摄像头。在浏览器下访问 http://ip:8081 即可看到摄像头当前拍摄的画面.第一种网络摄像头搭建方式不便于Android手机端的访问,所以这里并未使用,这里仅做拓展讲解。

树莓派使用mjpg-streamer方式

 第一步:安装所需模块

sudo apt-get update
sudo apt-get install subversion 
sudo apt-get install libjpeg8-dev 
sudo apt-get install imagemagick
sudo apt-get install libv4l-dev 
sudo apt-get install cmake
sudo apt-get install git

注意,在试验这里的时候(2025.3.1),libjpeg8-dev会显示报错:

导致后面make 的时候会出现报错信息:

解决办法是参考文章树莓派安装libjpeg-dev出错 

大概的命令有

//注意这里肯定会有变化,按照你自己的提示进行改正
sudo apt-get install libjpeg62-turbo=1:1.5.2-2+deb10u1
sudo apt-get install libjpeg62-turbo-dev
sudo apt-get install libjpeg-dev

第二步:git一个开源的project:MJPG-streamer

sudo git https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
sudo make all
sudo make install

git过程比较缓慢,大家可以耐心等待一段时间,等待100%后确认完成后再执行下一条命令,启动USB摄像头,指令如下:

指令启动普通USB摄像头指令:
./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"  
启动树莓派专用摄像头RaspiCamera的指令:
./mjpg_streamer -i "./input_raspicam.so" -o "./output_http.so -w ./www"

并且使用树莓派专用摄像头需要开启专用摄像头配置的,输入指令如下:

sudo raspi-config

点击摄像头使能开启即可。

以上就实现了全部的网络摄像头搭建。不过每次我们启动树莓派的时候还是需要手动去执行对应的命令,比较麻烦。那么接下来我们把当前项设置为一个系统自启动项。

第三步:设置自启动

cd到系统home目录下,新建一个sh可执行文件,输入如下命令即可:

sudo nano videoStart.sh

videoStart.sh文件中输入内容如下:

cd /home/pi/mjpg-streamer/mjpg-streamer-experimental/

./mjpg_streamer -i "./input_uvc.so" -d /dev/video0 -f 30 -r 1280x720 " -o 

"./output_http.so -p 8080 -w ./www"

然后退出保存,最后记得再给个可执行权限,输入命令:

sudo chmod +x /home/pi/videoStart.sh

接着再创建一个目录,输入命令如下:

sudo mkdir .config/autostart

继续新建一个文件,输入对应命令如下:

sudo nano .config/autostart/my.desktop

文件内容如下:

[Desktop Entry]

Type=shell

Exec=/home/pi/videoStart.sh

最后保存退出,这样每次开机就自动执行对应文件命令,省去了每次手动执行的麻烦。

第四步:测试

查看图像,在PC端打开浏览器,输入下面网址可以看到静态截图:

http://<树莓派IP>:8080/?action=snapshot

输入下面两条网址可以看到动态图像:

http://<树莓派IP>:8080/?action=stream

使用安卓查看摄像头传输的图像

 AndroidManifest.java

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <!--允许程序打开网络套接字-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--允许程序获取网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 允许应用程序多播状态 -->
    <uses-permission android:name = "android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <!-- 允许应用程序改变网络状态 -->
    <uses-permission android:name = "android.permission.CHANGE_NETWORK_STATE" />
    <!-- 允许应用程序改变WIFI连接状态 -->
    <uses-permission android:name = "android.permission.CHANGE_WIFI_STATE" />
    <!-- 允许应用程序访问WIFI网卡的网络信息 -->
    <uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"

        android:usesCleartextTraffic="true"

        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Testudp"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

.java 

package com.yunjin.testudp;

import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;

import androidx.annotation.Nullable;

public class MainActivity extends AppCompatActivity {
    private Button playBtn, stopBtn;
    MediaController mMediaController;
    private WebView webview1;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        VideoView mVideoView = new VideoView(this);
        //mVideoView = (VideoView) findViewById(R.id.video);
        mMediaController = new MediaController(this);
        webview1 = (WebView) findViewById(R.id.webview1);
        playBtn = (Button) findViewById(R.id.login1);
        //stopBtn = (Button) findViewById(R.id.stopbutton);
        // playBtn.setOnClickListener(new mClick());
        //stopBtn.setOnClickListener(new mClick());
        setview();


    }
    private void setview() {
        String url="http://192.168.8.13:8080/?action=stream";//视频链接
        webview1.loadUrl(url);//打开指定URL的html文件

    }
}

.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <WebView
        android:id="@+id/webview1"
        android:layout_width="match_parent"
        android:layout_height="300dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/login1"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="返回"
            android:textColor="@color/colorAccent"
            android:textSize="20dp"

            >

        </Button>

    </LinearLayout>
</LinearLayout>

最终效果图片 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值