迁移到Raspberry Pi2之后,原来的Pi1继续发挥余热——接着个PS2 Eyetoy摄像头,每小时自动拍照、获取空气质量指数、发twitter。当然,Eyetoy拍出来的渣画质不能看,只是做着玩的。
这里记录一下实现的细节。
- 拍照
树莓派的官方镜像的kernel已经支持很多摄像头了,USB接口的Eyetoy插上去,直接就有/dev/video0设备。
各种软件都可以拍照,比如说fswebcam, streamer,等等。我用的是fswebcamfswebcam -r 640x480 -S 20 --title "xxx"
其中`-r`是分辨率,不多说了;`-S 20`是跳过20帧,因为如果只取第一帧,画面会不完整,曝光也不对,20帧(大概3秒之后)差不多就够了; `–title “xxx”`是嵌在图像里的标题。
- 获取AQI
在aqicn.org上查了一下,离家最近的是张江的监测点,网页是http://aqicn.org/city/shanghai/pudongzhangjiang/
网页内容里已经带了AQI指数,所以要获取AQI的数值,直接在页面里用正则表达式匹配一下就行了。pattern = (' Air Pollution measured on (\w+) (.+): ' + city.capitalize() + ' overall air quality index is (\d+)') results = re.findall(pattern, content)
得到的`results[0]`就是匹配到的内容,是个tuple,分别是weekday,time,AQI。
- 发Twitter
网上有各种twitter的库,google一下,选了个简单的twython。
使用 Twitter API 也超简单,到https://apps.twitter.com/申请一个app拿到consumer key/secret;
再generate一个access token/secret;
然后用这4个参数初始化twython,发带图片的tweet调用`update_status_with_media`,搞定。
不过`update_status_with_media`已经过时了,以后应该需要用`upload_media`+`update_status`来搞定,不过现在还能用,先这么用着。CONSUMER_KEY = 'YOUR-CONSUMER-KEY' CONSUMER_SECRET = 'YOUR-CONSUMER-SECRET' ACCESS_KEY = 'YOUR-ACCESS-KEY' ACCESS_SECRET = 'YOUR-ACCESS-SECRET' ... api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) image = open(imagefile, 'rb') api.update_status_with_media(media=image, status=tweet)
- 其它
要定时跑脚本,crontab里加一个每小时跑一次的脚本就行;
要翻墙,用的是shadowsocks + cow,然后在脚本前加上http/https proxy的环境变量:0 * * * * http_proxy=http://127.0.0.1:7777/ https_proxy=http://127.0.0.1:7777/ /home/pi/pi-pudongair/main.py
完整的code放在了gist上:https://gist.github.com/mine260309/771512fc912d283496d9
效果见 @PiPudongAir,欢迎关注。