Bootstrap

树莓派4B无屏幕,连接WiFi、SSH、VNC,系统换源、pip换源,安装中文输入法

简介

本文描述:烧录32位的Raspberry Pi OS(Legacy)系统,无屏幕启动,连接WiFi、SSH、VNC,开机,系统换源、pip换源,安装中文输入法。为下一步安装Qt5、Eigen、OpenCV以及ncnn等做准备

注意事项

  • 64位的Raspberry Pi OS会导致树莓派系统变成aarch64(arm64)
    • 缺点
      • 已经尝试在该系统上安装Python环境管理工具conda,发现只能使用conda-forge
      • 使用conda-forge创建环境,并用conda install安装Python的包,import时会显示:非法指令(illegal instruction),是由于系统架构与包不匹配所造成的
      • 因此只能通过sudo pip3 install package_name,来安装需要的包,虚拟环境管理并不方便
      • 基于Debian 11(Bullseye)开发,系统无法使用cv2.VideoCapture()来调用排线连接的摄像头,但可以调用USB摄像头
  • 32位的Raspberry Pi OS(Legacy)是长期尝试后,比较适合用的版本,基于Debian 10(Buster),兼容性极佳

系统烧录、开机前配置

  • 32位的Raspberry Pi OS(Legacy)下载地址,下载最新版的系统即可
    在这里插入图片描述

  • 一张32G的SD卡,可以安装更多软件,方便配置完系统后,将系统读取出来不至于太大

  • 插入读卡器,格式化、烧录
    在这里插入图片描述
    在这里插入图片描述

  • 烧录完后,进入boot盘
    在这里插入图片描述

  • 设置文件资源管理器显示文件扩展名,创建一个空白的txt文件,重命名为ssh,删除.txt扩展名。这样做能使树莓派开机就允许连接SSH
    在这里插入图片描述

  • 找到boot下的config.txt文件,在对应位置,新增并修改为如下:
    在这里插入图片描述

    # uncomment if hdmi display is not detected and composite is being output
    # 强制输出HDMI信号,不管有没有检测到屏幕连接
    hdmi_force_hotplug=1
    
    # Setting hdmi_ignore_edid to 0xa5000080 enables
    # the ignoring of EDID/display data if your display does not have an accurate EDID.
    # It requires this unusual value to ensure that it is not triggered accidentally.
    # 强制按照hdmi_group和hdmi_mode输出分辨率,不管屏幕的实际分辨率是多少
    hdmi_ignore_edid=0xa5000080
    
    # uncomment to force a specific HDMI mode (this will force VGA)
    # 设置分辨率
    hdmi_group=2
    hdmi_mode=82
    
  • 关于hdmi_group和hdmi_mode,如果连接了屏幕,hdmi_group=2可以尝试让屏幕自带的扬声器输出声音,hdmi_mode与分辨率的对应如下
    在这里插入图片描述

  • 新建好ssh文件,并修改完config.txt,就可以设置WiFi文件了,在boot下新建wpa_supplicant.conf文件,修改为如下

    country=CN
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    
    network={
        ssid="WiFi-A"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=1
    }
    
    # ssid:WiFi名称,是字符串,要有双引号
    # psk:WiFi密码,是字符串,要有双引号
    # key_mgmt:WiFi加密方式,如果没有密码或者是WEP加密方式,值为NONE
    # 如果是WPA或者WPA2加密方式,值为WPA-PSK
    # priority:WiFi连接优先级,值越大越优先,不可为负数
    # scan_ssid:连接隐藏WiFi时,需要增加该键,值为1
    
  • WiFi可以设置成手机或者电脑的移动热点,方便接下来获取树莓派的IP地址,例如:win10可以直接查看,连接到本机移动热点的设备
    在这里插入图片描述

  • 也可以设置多个WiFi,记得要修改它们的优先级,以免树莓派开机时连到任意的WiFi上

  • 新建ssh文件,修改config.txt,设置wpa_supplicant.conf后,可以将sd卡插入树莓派,并开机

  • 树莓派开机之后,需要获取树莓派的IP地址,如果之前WiFi设置成了手机或者电脑的移动热点,就可以很方便地获取

  • 其他获取树莓派IP地址的方法

    • 登录路由器账户,查找连接设备中名为“pi”的IP地址;
    • 进入cmd,先运行for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.1.%i(从192.168.1.1遍历到192.168.1.254),再运行arp -a查看局域网内在线的IP,然后逐个SSH,看能不能连接,树莓派通常是192.168开头的
      在这里插入图片描述
  • 连接SSH后,设置raspi-config,在Interface Options,可以enable VNC

    sudo raspi-config
    

    在这里插入图片描述
    在这里插入图片描述

  • 如果进入Display Options,修改分辨率,会导致之前修改的config.txt失效,建议不要修改
    在这里插入图片描述

  • 开机后,之前新建的ssh和wpa_supplicant.conf文件,会被系统移动到其他地方,因此开机后在/boot找不到这两个文件是正常的。其中wpa_supplicant.conf被移动到/etc/wpa_supplicant下,可以继续修改这个文件,对WiFi进行设置

系统换源、pip换源

  • 32位Raspberry Pi OS(Legacy)不可直接使用Debian 10的源,同步时会显示:由于没有公钥,无法验证签名。需要使用北外Raspbian源地址,记得要下拉选buster
    在这里插入图片描述

  • 新建sources.list文件,写入源的内容,然后保存

    nano sources.list
    
    # armv7l 用户:编辑 `/etc/apt/sources.list` 文件,删除原文件所有内容,用以下内容取代
    deb http://mirrors.bfsu.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
    # deb-src http://mirrors.bfsu.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
    
  • 备份系统原始文件,再覆盖掉

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    sudo cp sources.list /etc/apt/sources.list
    
  • 还需要换raspi.list:新建,写入,保存,备份,覆盖

    nano raspi.list
    
    # 对于两个架构,删除原文件所有内容,用以下内容取代:
    deb https://mirrors.bfsu.edu.cn/raspberrypi/ buster main
    
    sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak
    sudo cp raspi.list /etc/apt/sources.list.d/raspi.list
    
  • 同步系统源列表

    sudo apt update
    
  • pip换源,北外pypi源,因为系统中python2和python3并存,因此所有命令都要用pip3、python3开头,网站里指引很明确,不再赘述

安装中文输入法

  • 如果需要使用中文输入法,可以安装谷歌拼音

    sudo apt install fcitx-googlepinyin
    
  • 最后重启一下,把输入法置顶
    在这里插入图片描述
    在这里插入图片描述

  • 可以进行下一步安装Qt5、Eigen、OpenCV以及ncnn等

;