利用树莓派和官方摄像头实现延时摄影

最近看了一个朋友用树莓派做的延时视频,感觉挺不错的,突然也想做一个. 手头正好有树莓派和摄像头,所以也尝试着做了一下,非常简单.

首先说明一下什么是延时摄影:

要创建延时视频,只需将Raspberry Pi配置为定期拍摄照片(例如每分钟),然后使用应用程序将图片拼接成视频。原理就这么简单.

有两种方法可以做到这一点。如果是官方摄像头,实现起来就更加简单了.

使用Raspistill的内置延时模式

raspistill应用程序具有内置的延时模式,使用--timelapse(或-tl)命令行开关。

切换之后的值是拍摄之间的时间(以毫秒为单位)。

raspistill -t 30000 -tl 2000 -o image%04d.jpg

请注意%04d输出文件名中的数字:这表示文件名中要显示照片编号。因此,例如,上面的命令将每隔两秒(2000毫秒)产生一次照片的捕获,总时间为30秒(30000毫秒),名为image0001.jpg,image0002.jpg,依此类推,直到image0015.jpg。

%04d指示四位数字,有前导零添加,以弥补所需的位数。因此,例如,%08d会产生一个八位数的数字。0 这个位,如果你不想要前导零,你可以不加。

如果输入的- t 为0,则应用程序将以其最小时间间隔进行拍摄照片。请注意,捕获之间存在大约30毫秒的最小强制暂停,以确保可以进行曝光计算。

使用cron(计划任务)

使用自定义拍照的好方法是使用cron

打开cron 表进行编辑:

crontab -e

这将询问您要使用哪个编辑器,或者在默认编辑器中打开。在编辑器中打开文件后,添加以下行以安排每分钟拍照.

camera.sh 可以自己写个拍摄的脚本,其中2>&1是将错误输出输入到标准输出上.

* * * * * /home/pi/camera.sh 2>&1

保存并退出,您应该看到以下消息:

crontab: installing new crontab

确保您的脚本不保存使用相同文件名拍摄的每张照片。否则将每次覆盖原有的图片。

将图像拼接在一起

现在,您需要将照片拼接成一个视频。

你可以在Pi上使用,mencoder非常赞, 但处理速度很慢。也可以将图像文件传输到台式计算机或笔记本电脑并在那里处理视频,那样会快一些,因为如果你拍摄了24小时的图片,每小时的每分钟拍摄5张图片的话,数据量也是大的惊人的.处理起来也是时间更长.但是如果在树莓派上通过脚本自行处理了,最后得到的视频就可以直接播放了. 如果你会推流处理,那还可以直接推到直播平台. 也是很好的.

切换到包含所有图像的文件夹,并将文件名重定向到一个文本文件。例如:

ls *.jpg > pics.list

在RASPBERRY PI上

虽然速度很慢(由于使用软件进行编码而不是使用Raspberry Pi硬件加速),但您可以使用各种可用工具将JPEG图像拼接在一起。其中有个软件叫avconv,需要安装, 安装好以后就可以拼接转码了。

sudo apt-get install libav-tools

现在,可以使用这些工具将JPEG文件转换为H264格式的视频文件。

avconv -r 24 -i image%04d.jpg -r 24 -vcodec libx264 -vf scale=800:480 timelapse.mp4

在Raspberry Pi 3上,它可以每秒编码多于一帧。其他Pi型号的性能会有所不同.

目前我这边使用的参数是:

  • -r 24在输入和输出文件中假设每秒二十四帧。
  • -i image%04.jpg输入文件规范(用于匹配捕获期间生成的文件)。
  • -vcodec libx264使用软件x264编码器进行编码。
  • -vf scale = 800:480  调整为输出720p。您还可以使用1920:1080或更低分辨率,具体取决于你自己的要求, 例如,我是要在52pi.taobao.com 买的800×480分辨率。请注意,Pi只能播放高达1080p的视频,但如果您打算以4K播放,则可以在此设置。
  • timelapse.mp4输出文件的名称。

avconv具有针对不同编码选项和其他设置的综合参数集。这些可以使用列出avconv --help

在另一台LINUX计算机上

您可以使用与Raspberry Pi相同的说明,或者替代包,例如mencoder

sudo apt-get install mencoder

现在运行以下命令:

mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o timelapse.avi -mf type=jpeg:fps=24 mf://@pics.list

一旦完成,您应该有一个视频文件,timelapse.avi

然后你就可以用播放器播放查看了.

omxplayer -o hdmi  timelapse.avi

效果是不是杠杠滴?

树莓派官方镜像更新-新特性解说

树莓派官方放出了最新的镜像版本为2018-06-17, 新版本的发布一般情况下会有一些软件的更新, bug 的修复等等, 我们来一起看看这款新版本的更新更新了什么内容:
1.  添加了新的启动配置向导, 真正实现了傻瓜化的配置道路…
设置国家
设置用户的密码
选择 wifi 网络.
检查更新
安装更新
配置完成后重启.
2. 添加了推荐软件安装器
3. Bluej, Greenfoot, NodeRED, Claws Mail, VNC Viewer 已经被从镜像移除, 可以通过推荐应用进行安装.
4. Qpdfview PDF viewer 集成在系统中用来取代Xpdf, 看 PDF 更加给力了!
5. 系统原生包含Version 65.0 的Chromium浏览器, 并支持最新的 Flash 播放器,意味着如果看优酷视频也不会因为播放器不兼容而不好用了, 系统烧录完直接打开浏览器就看世界杯了.
 
6. 音量的调节可以以5%的幅度进行增减了, 并且可以选择输出设备了.
7. 网络的插件可以对以前输入过的网络密码进行记忆了, 当重连的时候会提示密码信息.方便了不少.
8. 串口和串口控制台能够在树莓派配置中进行切换.
9. Lxkeymap 键盘语言设置移除 – 替换为在 Raspberry Pi Configuration的对话设置中了.
10.  Wifi 国家及键盘语言设置对话框可以被其他应用调用了,就意味着如果其他的应用程序需要修改语言或者键盘映射类型就可以直接调用管理控制台完成设置了.

11. 新版本的PiBOTO字体包括在某些恶意应用程序中以正确的权重渲染.

12. 在重新启动时,自动重新连接到蓝牙音频设备. 你如果有蓝牙音箱的应用就非常舒服了.

13. 如果选择了”单击启用” ,请在文件管理器中”禁用单击以重命名文件”

14. “外观设置对话框”对某些QT文件进行配置更改,以匹配选定主题.

15. 改进的MIME文件类型关联

16. 多个桌面管理选项取消了鼠标中键作用.

17. 修改了树莓派Pi网站的菜单快捷方式,使得访问更加清晰,帮助就是帮助,项目就是项目.一目了然.

18. 删除了Python 2 idle 的菜单链接,看来要全面支持 python3了.

19. MAGPI PDF安装在/home /pi/MagPi 中, 更加方便查看 magpi 杂志.

20. 应用各种小调整、错误修复和外观更改

21. 蓝牙更新, 连接速度更快更有效.并且具有蓝牙4.2特性的固件,虽然我的蓝牙无法支持4.2, 但是固件升级了肯定增加很多新特性.

22.通过bthelper.serivce添加了对 SCO 配置的支持.

23. 内核方面的升级: Linux内核4.1450+

Raspberry Pi固件78FB1799 2426BB29 D9224B93CB962FEFBDC833

更多新特性等待你起来尝试! 快点去下载新镜像来武装你的树莓派吧!!!

 

树莓派使用 USB 麦克风录音

前几天,有朋友从我们淘宝店买了USB 接口的麦克风, 说是无法识别, 没办法录音, 经过交流发现, 实际上是咩有开启麦克风的音量.

这篇帖子简单介绍一下怎么去利用 usb 麦克风录音,更多应用在后面给大家拓展一下.

首先这个麦克风,超级小巧和物美价廉.哈哈10元你买不了吃亏买不了上当…

 

接驳的方式很简单, 麦克风接入树莓派的 USB 口,然后启动树莓派, 这里我说的直接启动是在假设你已经通过烧录工具烧录好了操作系统.目前操作环境使用的是 Raspbian 系统.

可以去官方下载: http://www.raspberrypi.org/downloads

我这里测试环境是树莓派3B+, 8GBTF 卡.

然后登陆系统,打开终端, 输入如下命令检查是否识别出了 USB 设备.

第一个是我的2.4Ghz 的无线键鼠, 第二个就是麦克风的设备了.

也可以通过 dmesg 看看:

可以看到已经检测到 PnP Sound Device.

接下来,我们看看使用什么方式去录音.你可以安装 ALSA 的录音应用软件:

安装软件前先升级或者说更新一下软件仓库的索引信息: sudo apt-get update

然后执行安装:

sudo apt-get -y  install  alsa-utils   pulseseaudio

然后直接输入:

arecord  -L

就列出目前你机器上可以用的声卡了.

然后可以通过:

arecord –device=hw:1,0 –format S16_LE –rate 44100 -c1 test.wav

说明一下: –device=hw:1,0 是定义录音的设备. –format S16_LE 是定义 signed 16-bit (S16_LE) 音频. 码率是: 44100 Hz (--rate 44100) 后面的参数是定义为mono 格式 (-c1) , 文件名为: test.wav

这里的录音设备1,0 是因为系统设别出来的状态决定的, subdevices 是1, subdevice是0.

来吼一曲一人我饮酒醉, 然后录音录下来,播放看看效果如何.

可以按下 ctrl+C 终止.

如果想播放看看效果:

aplay –device=plughw:1,0 test.wav

之前我们提到了,如果麦克风音量没有开,可能会录出来的内容是无声的.

因此可以通过 alsamixer 去调整, 这里- c 1 是设置输入输出都在一个设置层面上,就是可以在一个终端中通过面板操作所有的音频设备:

alsamixer -c 1

默认为00,按F5的上就可以看到这样的画面:

Mic 就是麦克风了,现在音量很低,你需要按上调试合适的音量.

按 Tab 键可以切换调试的设备.

按 ESC 退出.

再执行录音就可以了.

后面和语音相关的应用介绍:

可以通过命令录音,然后上传给百度语音识别的 API 接口,通过百度语音识别后, 生成 Text 文本,然后将 text 文本提交到图灵机器人后台的 API, 可以得到图灵机器人的反馈,也应该是文本,然后再将文本转语音,就是传说中的 TTS, 那样,你的树莓派就可以和天猫精灵,小米智能音响一样和你交互了.

快去试试看吧!

 

Pi0drone:Pi Zero的200美元智能无人机

故事

使用MQTT连接树莓派IoT设备

有时候,你可能会发现自己处于一种你想让设备通过互联网相互通信的情况。例如,当我到另一个城市旅行的时候,我意识到我忘了关掉我房间的灯光。在这种情况下,我希望有一个Android应用程序或一个网站,我可以监视我家的灯光状态,并能打开或关闭它们。

所以,假设你想在一个可以在世界任何地方操作的房间里连接一个电灯开关。一个快速而稳定的选项是使用MQTT。

什么是MQTT?

MQTT(消息队列遥测传输)是一种轻量级消息传递协议,非常适用于物联网连接设备的通信。

MQTT有三个组件:代理,发布者和订阅者。经纪人是处理设备之间进行通信的中介实体。发布者是发送消息的设备。订阅者收听发布者发送的消息。

在MQTT中还有一件更重要的事情,那就是一个话题。不同设备之间的通信需要一个主题。例如,设备A想要向设备B发送消息。为此,两者之间应该有一些共同之处,那就是主题。把它想象成一个电话号码。

CloudMQTT

CloudMQTT是为特定数量的设备提供免费MQTT通信的代理服务。

设置MQTT

  • 在“名称”字段中输入CMQTT

  • 点击创建
  • 记下您的数据,如下图所示

 

 

  • 在同一页面上,在管理用户中添加一个用户:
    • 名字:pi
    • 密码:pi

 

  • 点击“保存”
  • 再次在最后的同一页上:
    • 用户:pi
    • 主题:pi

 

  • 并点击“保存”
  • 现在,在顶部的栏中,点击“WebSocket UI”

 

 

  • 你会看到一个页面,所有的传感器数据将被显示
  • 将以下代码上传到Arduino

下面的代码是用虚拟字符串代替传感器的示例代码。您可以用来自传感器的值替换字符串。

String sensorsData=""; 
String randSensorsData=""; 
void setup() {
   // put your setup code here, to run once: 
Serial.begin(9600); 
pinMode(A0,INPUT);//temperature sensor 
pinMode(A1,INPUT);//windspeed sensor 
pinMode(A2,INPUT);//wind direction sensor 
pinMode(A3,INPUT);//rain fall sensor 
pinMode(A4,INPUT);///barometric pressure sensor
} 

void loop() {
   // put your main code here, to run repeatedly:      
sensorsData=String("-")+String("S1=")+String(analogRead(A0))+String(",")+String("S2=")+String(analogRead(A1))+ \
String(",")+String("S3=")+String(analogRead(A2))+String(",")+String("S4=")+  \
String(analogRead(A3))+String(",")+String("S5=")+String(analogRead(A4))+String("+");     
randSensorsData=String("-")+String("S1=")+String(random(100))+String(",")+String("S2=")+ \
String(random(200))+String(",")+String("S3=")+String(random(125))+String(",")+String("S4=")+\
String(random(500))+String(",")+String("S5=")+String(random(50))+String("+");     
   Serial.println(sensorsData);     
   Serial.println(randSensorsData);   
   delay(200); 
}

此代码使用Arduino的模拟引脚来获取传感器的值,并传递到Raspberry Pi进行处理和MQTT通信。上面的代码使用随机函数来生成随机值来模拟模拟引脚。

  • 传感器应连接到A0,A1,A2,A3,A4引脚,
  • Serial.println(randSensorsData);
  • 这一行发送随机数据来检查服务器。
  • 您也可以检查在WebSocket UI中显示的随机数据。
  • 打开python 2.7并在其中编写下面的代码:
import paho.mqtt.client as mqtt
import time
data=”Hello from Raspberry Pi!”
while True:
    print(data)
    try:
        client=mqtt.Client()
        client.username_pw_set("yoyojacky","MyRPiPr0J")#替换成你的用户名和密码
        client.connect("m13.cloudmqtt.com",13017,60)
        client.publish("pi",data) #这里的 pi 是你的话题,客户端就订阅这个话题
        time.sleep(1)
    except KeyboardInterrupt:
        print("end")
        client.disconnect()
  • 现在使用python 2.7运行代码
  • 您将在每秒钟后看到传感器数据显示在CloudMQTT的WebScoket UI中。

  • 在这里,您将看到从Raspberry Pi发送的数据。

令人惊讶的是,CloudMQTT提供了一个完整的dashboard用于测试目的。您可以使用此dashboard订阅或发布主题.

在接下来就可以去配置你的 arduino 和树莓派来管理家里的设备或者查询家里的设备信息了!