1、摄像头相关
1.1 拍照
raspistill -o image.jpg
1.2 录影
raspivid -o video.h264
默认录制5秒钟的视频,
1.3 视频串流到vlc
raspivid -o - -t 0 -vf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
raspivid命令用来捕捉摄像头的视频
- -o – 表示将视频输出到stdout
- -t 0 表示视频捕捉时长,0表示无限
- -vf 表示画面垂直翻转vertical flip
- -w 宽度
- -h 高度
- -fps 视频帧率
cvlc是vlc的命令(所以树莓派本地也得安装有vlc)
- -vvv 表示视频输入流
- –sout 表示输出
然后启动电脑的vlc,选择菜单“媒体”-“打开网络串流”,输入URL:“rtsp://your.raspberry.pi.ip:8554/”,然后点击播放即可。
2、系统自带python2与python3两个环境
python --version python2 --version python3 --version pip --version pip3 --version
3、控制WS2812 LED灯带
参考https://learn.adafruit.com/neopixels-on-raspberry-pi?view=all。
需要设备:LED灯带、面包板、杜邦线(连接线)。
网上大部分帖子都是说由于pi的GPIO针脚输出电压是3.3v,而WS2812 LED的控制针脚DIN需要的电压是5v。所以需要加一个3.3v-5v的电平转换器。但是实际上,这并不是必须的,3.3v同样可以驱动WS2812的控制信号。可能只有在灯带长灯珠多的情况下才不行吧?电力不够?sorry,我对电路并不了解。(我试过最长的灯带有200个灯珠,树莓派的GPIO针脚照样可以直接驱动LED的DIN控制信号。不过这时候就不能用树莓派来做LED的电源了,真的是电力不足,好像只能亮不到100个灯珠。需要给LED灯带外接一个5v,60w的电源,因为每个led灯珠功率大概是0.3w。)
我试验时候买的是下面这种,8个灯芯的灯条。
背面还得自己拿焊锡焊上针脚=。=# 还好那天带去单位叫设备室的人帮忙焊了。一个DIN控制信号输入,一个VOC电源输入,两个GND接地(实际上只接一个也是可以的,我也不知道它为啥要设计两个接地=。=)。
整个接好的电路如下图所示
a. 安装相关的python库
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
b. 示例代码
import board import neopixel pixels = neopixel.NeoPixel(board.D18, 8, brightness=0.2) # 全部填充蓝色 pixels.fill((0, 0, 255)) # 第0个节点红色 pixels[0] = (255, 0, 0)
c. 使用sudo运行(因为需要root权限来驱动GPIO针脚)
sudo python3 test.py
4、VNC远程桌面
一开始以为只要在raspi-config中开启vnc服务之后就能通过vnc viewer进程远程连接了。但是实际上,vnc server的默认配置是需要pi连接着显示器的。而我通常是没有连接显示器(叫做headless),那么这时候raspbian是不会自动开启图形桌面的,用vnc viewer连接时候只会显示黑屏并且提示”cannot currently show the desktop”。
想要通过vnc viewer远程连接headless的pi,需要在pi上启动vncserver的虚拟桌面。执行vncserver命令即可。
vncserver
然后记住输出的[vnc-server-ip: display-number],使用vnc viewer连接的时候记得加上这个序号即可。
关闭vnc虚拟桌面:
vncserver -kill :<display-number>
执行该关闭命令会直接关闭vnc虚拟桌面并切断原有的远程连接。
5、播放midi文件
omxplayer是pi内置的播放器,可以播放大部分音视频文件,但是并不支持播放midi。
omxplayer example.mp3
我想在pi上安装python的mido库来自己读取midi文件并播放,mido库本身只支持解析midi文件,它需要调用python-rtmidi(或其他)库来将midi消息发给外部设备(包括虚拟设备)。然后呢,因为并没有支持midi的外部硬件设备,所以希望能直接用pi的耳机接口播放声音,那么就需要在pi上安装软件合成器,然后让python-rtmidi将midi消息发给软件合成器,由它们来进行发声。
我安装了两个软件合成器,都是可以的。fluidSynth与timidity
sudo apt-get install fluidsynth sudo apt-get install timidity
正常时候,我们使用aplaymidi -l命令列出系统支持的midi输出,列表是空的。(或者是有这个Midi Through,这其实是一个无效的输出)
5.1 fluidsynth
如果安装了fluidsynth,需要手工启动fluidsyncth服务:
fluidsynth --server --audio-driver=alsa -o audio.alsa.device=hw:1 /usr/share/sounds/sf2/FluidR3_GM.sf2 // --server 表示以服务进程启动 // --audio-driver=alsa 表示使用的音频驱动,alsa是linux通用音频驱动 // -o audio.alsa.device=xx 表示设置使用的声卡。 // 主板上的3.5mm音频接口以及HDMI口就是hw:0,0与hw:0,1,如果外接usb声卡就可能是hw:1 // 可以使用“aplay -l”命令来列出所有可用的声卡硬件 // FluidR3_GM.sf2 表示用来发声的“声音字体”(sound font,即音源,是预先录制好的各种乐器声音) // 也可以使用fluidsynth直接播放midi而不事先启动fluidsynth服务 fluidsynth --audio-driver=alsa -o audio.alsa.device=hw:1 /usr/share/sounds/sf2/FluidR3_GM.sf2 music.mid
这时候再用aplaymidi -l命令检查会发现多了一个FLUID Synth输出端口。
aplaymidi music.mid -p 128:0
那么就可以使用命令“aplaymidi music.mid -p 128:0”来播放该midi了,同样在python中使用mido.get_output_names()也会有这个输出端口,那么就可以将midi消息发给该端口了。
作为daemon进程随机启动
linux的随机启动项还是用sysmtemd模块好些。
首先,从/usr/lib/systemd/user目录下找到fluidsynth安装时候生成的fluidsynth.service文件。其内容如下:
[Unit] Description=FluidSynth Daemon Documentation=man:fluidsynth(1) After=sound.target [Service] EnvironmentFile=/etc/default/fluidsynth EnvironmentFile=-%h/.config/fluidsynth ExecStart=/usr/bin/fluidsynth -is $OTHER_OPTS $SOUND_FONT [Install] WantedBy=multi-user.target
然后,将该文件copy到/usr/lib/systemd/system目录,该目录是执行systemctl start/stop时候的默认查找路径。同时修改该文件中的两个变量:
SOUND_FONT 替换为 /usr/share/sounds/sf2/FluidR3_GM.sf2
OTHER_OPTS 替换为 -a alsa -o audio.alsa.device=hw:1
然后就可以用”systemctl start/stop fluidsynth”来启停fluidsynth守护进程了。
最后如果想将fluidsynth加入到开机启动中,只需要执行”systemctl enable fluidsynth”命令。该命令相当于在/etc/systemd/system目录添加一个符号链接,指向/usr/lib/systemd/system里面的xxx.service文件。/etc/systemd/system目录是systemd的开机启动目录。
5.2 timidity
如果是安装了timidity,同样需要手工启动timidity服务:
timidity -iA -OO
6、 GPIO针脚输出电流干扰3.5mm音频接口
做midi_led试验的时候,想要一边通过GPIO针脚控制LED灯带,一边通过3.5mm音频接口播放声音。但是结果是3.5mm音频接口连接的耳机只有吱吱吱的电流噪音,完全听不到其他声音。所以上网买了一个usb声卡,通过usb声卡外接音响或耳机,完美解决噪音问题,GPIO针脚与音频可以同时进行了。=。= 看来树莓派的板卡设计一般啊。
7、调整音量
使用alsamixer命令可以进入调整音量的字符界面。按F6还可以选择不同声卡(如果有外接声卡的话)
alsamixer