raspi

raspberry pi

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