RasPi
Home > RasPi > 記事 > 2015年6月 > RasPi2で定点カメラ ~twitterbot編~(2)

RasPi2で定点カメラ ~twitterbot編~(2)

カテゴリ: 手順メモ, ネコ監視カメラ

遅くなってしまいましたが、前回のbot化の続きです。


無線子機とカメラモジュールが届いたので、画像付きツイートにチャレンジしてみましょう。画像はカメラモジュール。Raspberry Pi公式のカメラモジュールです。千石電商でも秋月電子でも取り扱ってますね。

 

無線親機はこちら。参考サイトより、熱を配慮してPLATEXの無線子機を選びました。

 

目次

  1. 無線の設定
  2. カメラの設定~twitter botでのツイートまで
    1. カメラの取り付け~有効化
    2. カメラで撮影&twitter botでのツイート

 

1.無線の設定

まずは無線親機の設定をします。参考は以下。

手順どおりにまずは無線子機を前準備もなしにプスリ。

$ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
$ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]

4番目のデバイスとして無線子機が認識されました。使えますね。

ということで、無線の接続設定です。

$ sudo vi /etc/network/interfaces



iface lo inet loopback

auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet static
address XXX.XXX.XXX.XXX
netmask 255.255.255.0
gateway XXX.XXX.XXX.YYY
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

#実際はこれより下に有線のIP設定あるが、省略

まずはinterfacesでIPの設定。「iface wlan0 inet static」で固定IP(XXX.XXX.XXX.XXXX)を振って(もちろんサブネットマスクやゲートウェイも環境に合わせてください)、「wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf」で無線接続設定を見に行くように書き換えます。

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf



ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="your-ssid"
	proto=WPA2
	key_mgmt=WPA-PSK
	psk="your-password"
}

次に「wpa_supplicant.conf」という無線の接続設定のファイルを書き換えます。

ssidにご自身の環境の無線のSSIDを、pskにキーフレーズを書き込み、認証方式も合わせましょう。

これでオーケーなはず。

試しにLANケーブルを外して再起動。起動が完了したら、無線で通信できているかを確認しましょう。

無線でのIPにpingを打ったり、sshでログインしたり。大丈夫ならば、カメラに移りましょう。

 

2.カメラの設定~twitter botでのツイートまで

2-1.カメラの取り付け~有効化

無線の設定が完了したので、次にカメラの設定…の前に、まず取り付けましょう。

私が使用したのはRaspberry Pi2ですが、今までと全く同じ方法で良いということ(上の参考サイト1より)だったので、参考サイト2を参考に取り付け。


ここのツメに挿せば良いのですね。

Raspberry Pi B+のケースにはソケット部に「camera」と書かれているので判別しやすいです。

HDMI出力とUSBの間にあるものがそれ。参考サイトですと白いツメとありますが、2はソケット部同様黒いようです。

ただ、ケースに入ったままだとツメの上下が難しいので、ケースから1度取り出した方が作業しやすいと思います。

ツメを持ち上げないとカメラモジュールのケーブルが入らないし、下げてロックしないとすぐに抜けるのでこの作業も必須です。

 

なお、カメラモジュールの先端部はB+用のケースですとちゃんとモジュールの四方の穴とケース蓋の四本の柱が対応していて差し込むだけで固定できるので便利です。

上下裏表どの方向でも挿さってしまいますが、裏表はともかく上下はRaspberry Piのマークのちょうど果実の部分の穴にカメラのレンズが来るように固定する方が正解でしょう。


ということで取り付け完成。ケーブルがやたら入り乱れてしまうのは仕方ないのか。

CPUの上を塞いでしまうので排熱がやや心配ですが…。

では、カメラを有効にしましょう。

$ sudo raspi-confing

で設定画面を開き、cameraをenableに。再起動がかかるので指示に従って再起動。

再起動が完了したら、カメラがきちんと認識されているか試し撮りしてみましょう。

コマンドは以下。

$ aspistill -o img.jpg

これでimg.jpgができていればオーケーです(場所は現在いる場所か、piの直下かは失念)。

 

2-2.カメラで撮影&twitter botでのツイート

では、続いてtwitter botで画像付きツイートをさせましょう。

ということで、ネットで検索してtwythonの「update_status_with_media()」を使ってツイートさせようとしたのですが…。

TwythonDeprecationWarning: This method is deprecated. You should use Twython.upload_media instead.

というエラーを吐かれてツイートできないという事態に…。どうやら、メソッドがいつの間にか非推奨になったようです。

色々探してみましたが、日本語での情報が見当たらず。

最終的には海外のサイトを参考に前回のtwythonのコードを書き換えることになりました。

#!/usr/bin/env python
#coding:utf-8

import time
import subprocess
import twython

#画像サイズとファイル名の指定
IMG_WIDTH = "1280"
IMG_HEIGHT = "720"
IMG_NAME = "hoge-image.jpg"

#撮影コマンド実行
snapCommand = "raspistill -w " + IMG_WIDTH +  " -h " + IMG_HEIGHT + " -o " + IMG_NAME

#Twitterアカウントの認可情報
CONSUMER_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
ACCESS_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

api = twython.Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)

#時間取得
now = time.ctime()
parsed = time.strptime(now)
tweetTime = time.strftime("%Y %b %d (%a) %H:%M:%S ", parsed)

#カメラ撮影
ret = subprocess.call(snapCommand, shell=True)
photo = open(IMG_NAME, 'rb')
media_status = api.upload_media(media=photo)

#投稿
api.update_status(media_ids=[media_status['media_id']], status='時刻: '+str(tweetTime)+' の様子です。')

上記のようになりました。認証情報はご自身の情報に置き換えてください。あと、画像サイズとか名前も適宜変更で。

今回はtwitter上にアップしてしまうことや、microSDカードの容量も考えて、画像ファイルは1つを上書きしていくようにしています。

それと、参考サイトの方法を真似ているので、手動での撮影と同様にraspistillコマンドで撮影し、それをアップするという方式です。

さて、これでどうか。


おー、上手く行っているようです。テストでずっとPCの筐体に向けていたため変わり映えの無い画像ですが。

 


このテスト結果を受けて、翌日からケージ内の猫を監視する定点カメラとして運用を始めました。対象との距離にも依りますが結構広い範囲を撮影できるようで、室内が映り込んでしまっているので灰色で全体的に隠し。

無線の調子が悪くて接続できなかったことが1回ありましたが、それ以外は良好で外気30度くらいの状態でも昼間ずっと動いてきっちり仕事をしてくれました。

なかなか優秀です。

 

ということで、無事に完成&運用までこぎつけました。

タグ: カメラ, Python, twitter

 



関連する記事一覧