树莓派折腾笔记之系统安装与配置
文章目录
最近我的树莓派被用于作原型机了
只好重新用新的板子重新配置
下载系统镜像
我之前是在windows下用win32diskimager往sd卡里刷系统的
这次准备用dd(方便批量操作),在mac下.参考这篇文章:Mac下给SD卡安装树莓派Raspbian系统
2018.1.28更新: 推荐使用: etcher
安装系统
这里我们讨论两种情况,新买的sd卡和已经安装过系统的sd卡(重刷)
新的sd卡
一般新买的卡都已经格式化好了,这是最简单的情况, 按照Mac下给SD卡安装树莓派Raspbian系统的做法就行,微软下快速格式化可能会有问题(没有做分区)
这里复述一下核心内容:
|
|
至此,系统就刷好了
重刷装有系统的sd卡
如果是重刷装有系统的sd卡,我们需要先把SD卡还原成初始状态:
- 下载bootsector.img
- dd bs=4m if=./bootsector.img of=/dev/rdisk1 # 假设设备为disk1
然后格式化sd卡(我把它格式化为MS-DOS(FAT)),至此你就可以把它当做新卡,用处理新卡的方式安装系统了
登录系统
我只买了树莓派,没有买高清转接头之类的东西,没打算把树莓派连到屏幕。那么我们如何登录系统,进行操作呢
首先使用网络连接树莓派网口,然后找个扫描ip的软件,我用的是fing(mac和iphone都有),手机/电脑只要和树莓派在同个网络里,就可以找到它(通过设备名) (ps: brew cask install fing)
然后ssh登录即可,用户名和密码分别是:pi/raspberry (11-25版本可能需要先进用屏幕登录在raspi-config里开启ssh:A SECURITY UPDATE FOR RASPBIAN PIXEL) 文章提到如果你想默认默认ssh只需要在sd卡/boot/里加上ssh
文件就行,内容无所谓,可以为空
树莓派3代自带无线网卡,我们把无线网卡连上wifi,之后就不需要,细节下文再说
配置
输入sudo raspi-config
开始设置,相关设置可以看说明
#Expand Filesystem
扩展 SD 卡上可用的空间, 否则你会觉得怎么可用空间这么小
配置VNC
VNC借由网络,可发送键盘与鼠标的动作及即时的屏幕画面
VNC与操作系统无关,因此可跨平台使用
我在mac下使用RealVNC
|
|
supervisor文件为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/etc/supervisord.conf.d/vncserver.conf [program:vncserver] user = pi ; 用哪个用户启动 environment = HOME="/home/pi",USER="pi" directory = /home/pi/mylab ; 程序的启动目录 command = /usr/bin/vncserver :1 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = false ; 不需要自动重启 ;startretries = 3 ; 启动失败自动重试次数,默认是 3 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /tmp/vncserver.log ;stopsignal = QUIT |
换国内源
1 2 3 |
#sudo vi /etc/apt/sources.list ,使内容变为 deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib |
修改hostname
sudo vim /etc/hostname
无线网络
如果你直接在命令行里配置可以参考:树莓派 Raspberry Pi 设置无线上网
修改配置文件:/etc/network/interfaces
:
1 2 3 4 |
auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa.conf iface default inet dhcp |
之后在/etc/wpa.conf
里加上你的无线热点(可以添加多个):
1 2 3 4 5 6 |
network={ ssid="xxx" key_mgmt=WPA-PSK psk="xxx" id_str="myiphone" } |
无线网卡的控制命令为:
|
|
更直观的配置方式可以使用VNC client进入图形环境里
如果你外接了usb网卡,记得加驱动,诸如(sudo apt-get install firmware-realtek
)
如果有错,查看日志:/var/log/syslog
树莓派作为无线AP
1 2 3 4 5 6 7 8 |
git clone https://github.com/oblique/create_ap cd create_ap sudo make install #安装依赖 sudo apt-get install util-linux procps hostapd iproute2 iw haveged dnsmasq #dnsmasq 是dns服务器 sudo create_ap wlan0 eth0 wwjpi3 wwjpipass --no-virt # https://github.com/oblique/create_ap/issues/185 # 加到supervisor里 #/usr/bin/create_ap wlan0 eth0 wwjpi3 wwjpipass --no-virt |
树莓派的地址为:192.168.12.1
, 路由器的地址为 192.168.0.1
进一步的发挥空间,我们可以把它当做一个钓鱼热点(已经运行了53端口DNS服务器)
注意:如果同时使用无线ap和普通wifi网卡,建议开机后再加入wifi网卡,然后ifup启用,否则可能导致热点无法开机启动
DHCP服务
1 2 3 4 5 6 7 |
sudo apt-get install dnsmasq # vim /etc/dnsmasq.conf interface=wlan0 #可能会影响wifi_ap bind-interfaces address=/#/192.168.12.1 #将对所有网站的访问重定向到本机 sudo service dnsmasq restart |
连接VPN
安装客户端: sudo apt-get install pptp-linux
使用root用户创建/etc/ppp/peers/vpn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
pty "pptp XXX.XXX.XXX.XXX --nolaunchpppd" name 用户名 password 密码 remotename PPTP require-mppe-128 require-mschap-v2 refuse-eap refuse-pap refuse-chap refuse-mschap noauth persist maxfail 0 defaultroute replacedefaultroute usepeerdns |
启动/断开vpn:
1 2 |
pon vpn poff vpn |
蓝牙
树莓派3自带蓝牙
|
|
蓝牙图形界不稳定,命令行的操作为
1 2 3 4 5 6 7 8 |
bluetoothctl power on scan on agent on pair #DD:8E:F1:CA:B8:9F #my bb8 trust DD:8E:F1:CA:B8:9F connect DD:8E:F1:CA:B8:9F quit |
参考:
- 树莓派3 model:B 连接蓝牙设备
- 树莓派3命令行配置wifi无线连接和蓝牙连接:rpi3蓝牙连音箱比较麻烦
如果蓝牙连接好 却无法播放声音,可能是默认的声音输出是系统声卡,设置PulseAudio Volume Control
,在设置里把bcm2835设置为off
音频相关
- play
- mplayer/mpg123
- sox 录音
alsamixer 调节音量
1 2
sox -d /tmp/recording.wav play /tmp/recording.wav
坑
使用蓝牙音箱时,尽量不要同时将树莓派作为作为热点,否则可能导致声音卡顿
PyAudio
1 2 |
sudo apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev sudo pip install PyAudio |
其它
我的编程环境
|
|
jupyter lab (开发环境)
|
|
建议使用jupyterlab
z
|
|
GPIO相关
I2C
如果要用Adafruit_LED_Backpack,需要开启I2C
|
|
系统管理与监控
Linux Dash
A beautiful web dashboard for Linux
|
|
默认80端口
摄像头
我使用的是官方摄像头,连上后
sudo raspi-config #Enable Camera
查看是否正常:ls /dev/video*
,如果有video0就正常,如果没有,则 sudo modprobe bcm2835-v4l2
,写入/etc/rc.local以保证开机运行
###截个图
1 2 |
sudo apt-get install fswebcam fswebcam -r 1280x720 /tmp/image1.jpg |
motion
监控与动作捕捉(像素变化)
sudo apt-get install motion
配置:`sudo vim /etc/motion/motion.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
daemon off #on则后台运行 stream_localhost off #可以局域网内访问,否则只能localhost访问 webcontrol_localhost off quiet on videodevice /dev/video0 framerate 2 #30 很流畅 但是时间快 stream_maxrate 1 #30 auto_brightness off #target_dir /home/pi/camera_data ffmpeg_output_movies on #输出视频(变化) output_pictures off #输出图片 width 640 height 480 threshold 500 #灵敏度,变化的像素,决定是否捕捉 max_movie_time 5 #拍摄时间 logfile /tmp/motion.log #noise_level 60 # event |
运行 :sudo motion
访问:ip:8081
默认存储在/var/lib/motion
在python中调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import pygame import pygame.camera from pygame.locals import * # initialize pygame.init() pygame.camera.init() # capture a image camera = pygame.camera.Camera("/dev/video0", (640, 480)) camera.start() image = camera.get_image() pygame.image.save(image, "image.jpg") camera.stop() |
建议使用python3.6,pygame可直接使用pip安装
使用pyenv文档参考: python多版本安装笔记
记得先安装依赖
1 2 3 |
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev |
机器视觉
pip install opencv-python
在树莓派上目前无法使用 https://github.com/skvark/opencv-python/issues/13
需要编译安装:Raspbian Stretch: Install OpenCV 3 + Python on your Raspberry Pi
netdata
Get control of your servers. Simple. Effective. Awesome
|
|
相关数据:
1 2 3 4 5 6 7 |
- the daemon at /usr/sbin/netdata - config files in /etc/netdata - web files in /usr/share/netdata - plugins in /usr/libexec/netdata - cache files in /var/cache/netdata - db files in /var/lib/netdata - log files in /var/log/netdata |
卸载:sudo ./netdata-uninstaller.sh
如果要监控nginx,需要做些配置:netdata nginx,The spectacles of a web server log file
1 2 3 |
编译nginx --with-http_stub_status_module |
supervisor
Supervisor process control system for UNIX
|
|
supervisor的web管理端口为9001,需要开启
添加新的进程配置,可以使用下边介绍的Ajenti来做, 配置信息会被直接写入:/etc/supervisor/supervisord.conf
更多细节参考:使用Supervisor来管理进程
demo
/etc/supervisord.conf.d/socket_ipc.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[program:socket_ipc] user = root ; 用哪个用户启动 directory = /home/pi/mylab/raspberrypi_lab ; 程序的启动目录 command = /usr/bin/python socket_ipc.py ; autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = false ; 不需要自动重启 ;startretries = 3 ; 启动失败自动重试次数,默认是 3 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /tmp/socker_ipc.log ;stopsignal = QUIT |
gotty
gotty可以把terminal分享到web,默认端口是8080
|
|
如果我们把8080端口用ngrok分享出来(ngrok用supervisor管理),实际就是一个后门,用作开发调试十分方便
Ajenti
Ajenti可以让你很简单地配置不同的常规服务程序,如Apache/nginx、Samba、BIND、Squid、MySQL、cron、防火墙等等
十分适合非技术用户配置系统应用,可以看做服务器管理面板
|
|
默认端口8000,默认登录信息为:root:admin
,之后修改密码之类的都在控制面板里边做
配置文件为:/etc/ajenti/config.json
默认开机自启
国内源安装nodejs
1 2 3 4 5 6 |
#注意编译非常慢 wget https://npm.taobao.org/mirrors/node/v6.9.1/node-v6.9.1.tar.gz tar zxvf node-v6.9.1.tar.gz cd node-v6.9.1.tar.gz/ ./configure sudo make install |
坑
09-23的版本坑多
zip包mac下无法解压
在linux和window下都行
ssh端口拒绝
ip能ping通,ssh端口关闭,怀疑是ssh server没有开启
nmap -p 22 xxx 测试关闭,fuck
建议下载5-27版本,所有版本在这里:downloads.raspberrypi.org
2018.1.10更新(基于2017.11.29版本)
初始化配置SSH(修改boot)
在 boot
分区新建一个文件,空白的即可,文件命名为 ssh
. 默认用户名密码为:pi:raspberry
无屏幕和键盘配置树莓派WiFi
注意: 2017.11.29号的版本(Stretch),无法使用.详情见Raspbian Stretch: Wifi not starting on boot
目前只使用于Stretch之前的版本(2019.11.07更新: 最新的Buster版本没有问题!)
在树莓派的 /boot
目录下新建 wpa_supplicant.conf
文件,按照下面的参考格式填入内容并保存 wpa_supplicant.conf
文件
1 2 3 4 5 6 7 8 9 10 |
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 } |
建议使用有线网线先进入系统,打开vnc,然后在桌面中使用图形化方式连接wifi(之后永久有效)
2017.11.29版本中scratch2、node-red、minecrafe都正常!
vnc
关于vnc的参考这里:VNC (VIRTUAL NETWORK COMPUTING),这篇文章关于配置minecraft部分无效
默认用户名也是:pi:raspberry
使用vnc玩minecraft
要使用vnc玩minecraft,参考How do I enable the experimental direct capture feature from the command line?
在/root/.vnc/config.d/vncserver-x11
添加
1 2 3 4 5 |
CaptureTech=raspi ExperimentalRaspiCapture=1 ServerPreferredEncoding=JPEG |
重启vncserver:sudo systemctl restart vncserver-x11-serviced
如果你觉得清晰且慢,可以试试:vncserver
noVNC
1 2 3 4 |
git clone https://github.com/novnc/noVNC # 安装好tightvncserver之后 ./utils/launch.sh --vnc localhost:5901 # open: http://raspberrypi.local:6080/vnc.html?host=raspberrypi.local&port=6080 |
http://raspberrypi.local:6080/vnc.html?host=raspberrypi.local&port=6080
remote gpio
raspi-config
, enable Remote GPIO
之后使用python-gpiozero控制即可,文档参考:Configuring Remote GPIO.之后你就可以在mac下使用python代码控制树莓派的gpio(pip install gpiozero pigpio
)
1 2 |
export GPIOZERO_PIN_FACTORY=pigpio export PIGPIO_ADDR=10.10.100.183 |
1 2 3 4 5 6 7 8 9 10 |
from gpiozero import LED from time import sleep red = LED(17) while True: red.on() sleep(5) red.off() sleep(5) |
也可以在scratch2中添加树莓派扩展,这样就可以在scratch2中利用remote gpio来与硬件交互
测试工具
shell 下使用gpio
列出所有pin: gpio readall
1 2 3 4 5 6 7 |
# gpio用的mode是wPi,而gpiozero用的是BCM,所以pin17对应wpi的pin0 gpio mode 0 out gpio read 0 # 0 gpio write 0 1 gpio read 0 # 1 gpio write 0 0 gpio read 0 # 0 |
2018.01.30更新
pi zero w可以可以直接使用pi3的镜像。其中的异同参考:SD Cards Images for Pi 3 and Pi Zero
参考
文章作者 种瓜
上次更新 2016-10-11