sierによるsierのためのraspberry pi 入門 2(openjtalk+tweepy)

24
SIerによるSIerのための Raspberry Pi 入門2 OSセットアップ方法の紹介 Tweet pi(無線lan + OpenJTalk + Twitter) 2013/11/15 catmoney http://77sites.appspot.com/2/page1.html

Upload: catmoney

Post on 07-Nov-2014

4.046 views

Category:

Technology


0 download

DESCRIPTION

2013/11/15 勉強会資料 サイト http://77sites.appspot.com/2/page1.html

TRANSCRIPT

Page 1: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

SIerによるSIerのための

Raspberry Pi 入門2

OSセットアップ方法の紹介

Tweet pi(無線lan + OpenJTalk + Twitter)

2013/11/15

catmoney

http://77sites.appspot.com/2/page1.html

Page 2: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

2

本日のアジェンダ

 ・OSセットアップ

 ・tweet Piを作ろう~次回の勉強会ネタも決める~

Page 3: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

3

Raspberry Piを使用するための準備

本体以外に必要なもの● 電源ケーブル(5Vで700mA以上の電流を供給できる

microUSB電源)

● LANケーブル or 無線LANアダプタ

● USBキーボード、マウス

● 8GB以上のSDHCカード(Class10以上がお勧め)

● HDMIもしくはRCAケーブル、対応したディスプレイ

※アクセサリ一覧

http://77sites.appspot.com/2/page2.html

※動作確認されている周辺機器

http://elinux.org/RPi_VerifiedPeripherals

Page 4: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

4

NOOBSのインストール方法

● 1.「SD Formatter」のダウンロード

https://www.sdcard.org/downloads/formatter_4/eula_windows/

 SDカードのフォーマット

● NOOBS (offline and network install)をダウンロード。本日はofflineでのインストール

http://www.raspberrypi.org/downloads

※2013/10/12時点の最新バージョン、NOOBS_v1_3_2.zip(1.1GB)

● NOOBSを解凍したものをSDカードにコピー

● Raspberry Piの起動

Page 5: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

5

NOOBSでインストールできるOSOS 説明Raspbian ラズベリーパイのために最適化されたDebian OS

RISC OS 非常に速く、コンパクトなOS。1987年に、ARMの初のRISC(reduced

instruction set computer, ) チップが登場したとき、作成されたOS。

OpenELEC

XBMC(XBox Media Center)。メディアプレイヤー。テレビ、インターネットビデオストリーミング、音楽や写真が見れる。

Arch ARMデバイス用のアーチのLinux。Arch Linuxは、Linuxディストリビューションの1つ。シンプリシティ、ミニマリズム、エレガンスさ、コードの正しさに焦点を当てて開発されているOS。

RaspBMC XBMC。ラズベリーパイのために最適化されたメディアプレイヤー・

Page 6: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

6

OS 説明Pidora ラズベリーパイのために最適化されたFedora OS

Sugar 子どもの学習のためのlinux OS。40カ国で約300万以上の子供たちが学校で利用されている。

Puppy Linux USBスティックやメモリカードから実行するように設計された小型のLinux OS。

Raspberry Piで使えるOS

Page 7: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

7

Raspbianの初期設定(raspi-config)

No 項目 内容

1 Expand the Filesystem ファイルシステムのサイズ拡張。、最初は先頭の 3GB 程度の パーティションを使うだけになっている。SDカードの容量全体を使うように設定できる。

2 Change the user password デフォルトユーザpiのパスワード変更

3 Enable Boot to Desktop/Scratch

起動時の設定。下記の3つから選択できる。1.コンソールでログイン(デフォルト)2.GUIな画面(Xのデスクトップを表示)3. Scratch のプログラミング環境

Page 8: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

8

Raspbianの初期設定(raspi-config)No 項目 内容

4 Internationalisation options locale,time zone、keyboardなどが設定できる。 localeは、「ja_JP.UTF-8 UTF-8」を選択するとメニューなどが 日本語化される。最初は日本語フォントがインストールされていないため、 文字化けします。日本語フォントをインストールしたあとでせっていしましょう。time zoneは 「Asia」、「Tokyo」 と指定します。

5 Enable Camera Raspberry Pi Cameraの設定

6 Add to RasTrack Rastrack http://rastrack.co.uk/ への登録を行う。自分のpiをマップに登録できます。

7 Overclock CPU、GPU、メモリのクロックの初期設定はそれぞれ700MHz、250MHz、 400MHzです。高負荷になった場合、オーバークロックして最大CPUは 1GHz、GPU は 500MHz、メモリは 600MHz まで高速化する事が出来ます。詳細は http://elinux.org/RPi_Overclocking

8 Advanced Option Overscan(画面の周囲を少し空ける設定)、Hostnameの設定、Memory Split(CPUとGPUへのメモリの配分の変更)SSHの設定、SPIの設定、Updateの取得

9 About raspi-config raspi-configツールの情報を表示

参考サイト http://www.mztn.org/rpi/rpi24.html

Page 9: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

9

Raspbianを利用するにあたって● Raspberry Piは、電源ボタンがありません。

電源の切り方は、シャットダウンコマンド(sudo halt)を実行後、電源ケーブルを抜いてください。電源ケーブルをつなげた際に起動します。

● デフォルトアカウントは、ユーザ名:pi パスワード:raspberry● 初期は、rootパスワードなし。$ sudo sh  # passwdで設定。

● GUIを使う場合

$ startx

● 日本語導入

ロケールをja_JP.UTF-8に変更

$sudo apt-get install jfbterm (日本語パッケージのインストール)

$jfbterm -q(jfbtermの実行)

$ls -l(”合計”という文字が出ていれば成功)

Page 10: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

10

Tweet Piを作ろう

サービス内容:Twitterの特定アカウントのツイートを読み上げる

利用するハード

Raspberry Pi Type B 512MB SDHCカード レゴ 基本セット 青いバケツ

USBハブ USBハブ USBスピーカー

アクセサリ一覧 http://77sites.appspot.com/2/page2.html

Page 11: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

11

Tweet Piを作ろう

No.

作業項目 作業内容

1 セットアップ OS(Raspbian)インストール、無線LAN導入、USBスピーカの設定、音声合成の導入、起動時にIPアドレス読み上げ、FTP,Webサーバの設定、python-twitter

2 UIの設計 スマフォからブラウザ経由でTweetの設定

3 プログラム作成 実装

4 ケース作成 レゴでケース作り

● 作業分担表

今日、手伝ってくれる人募集!!

実施済み

Page 12: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

12

1.セットアップ(無線LAN化)● Raspberry PiのUSBポートに無線LANアダプタをさして、電源をいれて

Raspbianを起動。

● 認識されているかどうか確認。sudo lsusb または sudo ifconfig

● psk事前共有鍵の作成(ssidとpassword自分の環境の値を設定してください)

$sudo wpa_passphrase ssid password

● psk、ssidをwpa_supplicant.conf に記述

$vi /etc/wpa_supplicant/wpa_supplicant.conf● インターフェースの設定

$sudo vi /etc/network/interfaces

● 無線LAN起動確認 $sudo ifup wlan0

● 問題なければLANケーブルを抜いて再起動 $sudo reboot

詳細はこちら http://d.hatena.ne.jp/catmoney/20131103/p1

Page 13: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

13

1.セットアップ(USBスピーカの設定)● $ sudo vi /etc/modprobe.d/alsa-base.conf

下記を先頭に#をつけてコメントアウトする。

#options snd-usb-audio index=-2

一番したの行に以下を追加する。

options snd-usb-audio index=0

● $ sudo reboot 再起動

● 再起動後 snd_usb_audio が “0″ となっていることを確認する。

$ cat /proc/asound/modules

0 snd_usb_audio

1 snd_bcm2835詳細はこちら http://d.hatena.ne.jp/catmoney/20131103/p1

Page 14: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

14

1.セットアップ(スピーカ確認方法)● Alsamixer (音量確認)

参考サイト Alsamixer http://d.hatena.ne.jp/kakurasan/20070907/p1

● 音のテスト

$ aplay /usr/share/sounds/alsa/Front_Center.wav

Page 15: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

15

1.セットアップ(音声合成の導入)

参考サイト http://shokai.org/blog/archives/6893http://skalldan.wordpress.com/2013/02/19/raspberry-pi-%E3%81%A7%E9%81%8A%E3%81%B6-2-open-jtalk-%E3%81%A7%E5%96%8B%E3%81%A3%E3%81%A6%E3%82%82%E3%82%89%E3%81%86/

● OpenJTalkをインストールする

$sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

● デフォルトの声を変更

$ wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.3/MMDAgent_Example-1.3.zip

$ unzip MMDAgent_Example-1.3.zip

$ sudo cp -R MMDAgent_Example-1.3/Voice/* /usr/share/hts-voice/

Page 16: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

16

1.セットアップ(音声合成の導入)

● $ cd

● $ mkdir bin

● $ sudo vi /home/pi/bin/jsay

● $ chmod +x /home/pi/bin/jsay

● /home/pi/bin/jsay "テスト"

詳細はこちら http://d.hatena.ne.jp/catmoney/20131103/p1

#!/bin/shTMP=/tmp/jsay.wav#cd /usr/share/hts-voice/nitech-jp-atr503-m001cd /usr/share/hts-voice/mei_happyecho "$1" | open_jtalk \-td tree-dur.inf \-tf tree-lf0.inf \-tm tree-mgc.inf \-md dur.pdf \-mf lf0.pdf \-mm mgc.pdf \-dm mgc.win1 \-dm mgc.win2 \-dm mgc.win3 \-df lf0.win1 \-df lf0.win2 \-df lf0.win3 \-dl lpf.win1 \-ef tree-gv-lf0.inf \-em tree-gv-mgc.inf \-cf gv-lf0.pdf \-cm gv-mgc.pdf \-k gv-switch.inf \-s 20000 \-p 110 \-a 0.05 \-u 0.0 \-jm 1.0 \-jf 1.0 \-jl 1.0 \-x /var/lib/mecab/dic/open-jtalk/naist-jdic \-ow $TMP && \aplay -D plughw:0,0 -q $TMPrm -f $TMP# ends here

Page 17: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

17

1.セットアップ(起動時にIPアドレス読み上げ)

● wlan0 のIPアドレスを抽出するスクリプト

● $ sudo vi /home/pi/bin/ip.sh

● $ chmod +x /home/pi/bin/ip.sh

● $ sudo vi /home/pi/bin/starting.sh

● $ chmod +x ~/bin/starting.sh

● $sudo vi /etc/rc.local

下記を追記

/home/pi/bin/starting.sh● 再起動

$ sudo reboot

動画はこちら http://www.youtube.com/watch?v=aEEMFEkVpPo

#!/bin/bash

/home/pi/bin/jsay "ラズビアン。起動しました。ipアドレスは"

/home/pi/bin/jsay `/home/pi/bin/ip.sh`"です"

#!/bin/bash

echo `sudo ifconfig wlan0 | grep 'inet addr:' | sed -e 's/^.*inet addr://' -e 's/ .*//'`;

Page 18: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

18

1.セットアップ(vsftpdインストール)● $ sudo apt-get install vsftpd

● $ sudo service vsftpd stop

● $ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf-ORG

● $ sudo vi /etc/vsftpd.conf

● $ su -

● # echo pi >> /etc/vsftpd.chroot_list

● # exit

● ftpの起動

● $ sudo service vsftpd start

● プロセスの確認方法

● $ ps -ef | grep vsftpd | grep -v grep

参考サイトはこちら http://assimane.blog.so-net.ne.jp/2013-04-14

---- 変更箇所anonymous_enable=NO #匿名ユーザー(anonymous)のログイン禁止local_enable=YES #ローカルユーザーを許可write_enable=YES #書き込み許可local_umask=022 #ファイル作成時のパーミッション755xferlog_file=/var/log/vsftpd.log #logファイルの設定ascii_upload_enable=YESascii_download_enable=YES## アクセスディレクトリ関係chroot_local_user=YES #ローカルユーザの制限chroot_list_enable=YES #リストにより制限を行うchroot_list_file=/etc/vsftpd.chroot_list #リストのパス## ユーザ制限関係userlist_enable=YES #ユーザ制限userlist_deny=NO #リストに書かれていないユーザは制限userlist_file=/etc/vsftpd.user_list #ユーザリストのパスls_recurse_enable=YES #一括アップロード・ダウンロード許可

Page 19: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

19

1.セットアップ(vsftpd自動起動設定)● $ sudo update-rc.d vsftpd defaults

● $ cd /etc/init.d

● $ sudo cp vsftpd vsftpd.org

● $ sudo chmod 666 vsftpd.org

● $ sudo vi vsftpd

● $ sudo update-rc.d vsftpd remove

● $ sudo update-rc.d vsftpd defaults

● 再起動

● $ sudo shutdown -r now

● $ ps -ef | grep vsftpd | grep -v grep

参考サイトはこちら http://assimane.blog.so-net.ne.jp/2013-04-14

Page 20: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

20

1.セットアップ(Webサーバー)● $ sudo vi /home/pi/bin/starting.sh

● $ sudo reboot

● sudo ps -ef | grep CGI #プロセスの確認

● $ vi /home/pi/index.html

● ブラウザから http://192.168.1.101/ にアクセス

● vi /home/pi/cgi-bin/test.py

● ブラウザからhttp://192.168.1.101/cgi-bin/test.py

にアクセス

#!/bin/bash

/home/pi/bin/jsay "ラズビアン。起動しました。ipアドレスは"/home/pi/bin/jsay `/home/pi/bin/ip.sh`"です"

cd /home/pipython -m CGIHTTPServer 80

<html><head><title>HelloWorld</title></head><body>Hello World!!</body></html>

#!/usr/bin/env python

print "Content-type: text/html\n"print "Hello World"

Hello Worldが表示されたらOK

Page 21: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

21

1.セットアップ(tweepy)

参考サイトはこちら http://mba-hack.blogspot.jp/2013/05/twitteruser-stream.html

● $ cd /usr/local/src

● $ sudo wget https://pypi.python.org/packages/source/s/simplejson/simplejson-3.3.1.tar.gz

● $ sudo tar zxvf simplejson-3.3.1.tar.gz

● $ cd simplejson-3.3.1

● $ sudo python setup.py install

● $ sudo easy_install pip

● $ sudo pip install tweepy● アプリケーションを登録する

https://dev.twitter.com/apps

Page 22: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

22

1.セットアップ(tweepy)● 動作確認スクリプト

#!/usr/bin/python import sysimport tweepyfrom tweepy import Stream, TweepErrorimport loggingimport urllibimport os CONSUMER_KEY='XXXXX'CONSUMER_SECRET='XXXXX'ACCESS_TOKEN='XXXXX'ACCESS_TOKEN_SECRET='XXXXX' auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) class CustomStreamListener(tweepy.StreamListener): def on_status(self, status): try: cmd = "/home/pi/bin/jsay '" + status.author.name + " " + status.text + "'" os.system(cmd.encode('utf_8')) except Exception, e: print >> sys.stderr, 'Encountered Exception:', e pass def on_error(self, status_code): print >> sys.stderr, 'Encountered error with status code:', status_code return True # Don't kill the stream def on_timeout(self): print >> sys.stderr, 'Timeout...' return True # Don't kill the stream

tweet.py

Page 23: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

23

1.セットアップ(tweepy) def on_timeout(self): print >> sys.stderr, 'Timeout...' return True # Don't kill the stream class UserStream(Stream): def user_stream(self, follow=None, track=None, async=False, locations=None): self.parameters = {"delimited": "length", } self.headers['Content-type'] = "application/x-www-form-urlencoded" if self.running: raise TweepError('Stream object already connected!') self.scheme = "https" self.host = 'userstream.twitter.com' self.url = '/2/user.json' if follow: self.parameters['follow'] = ','.join(map(str, follow)) if track: self.parameters['track'] = ','.join(map(str, track)) if locations and len(locations) > 0: assert len(locations) % 4 == 0 self.parameters['locations'] = ','.join(['%.2f' % l for l in locations]) self.body = urllib.urlencode(self.parameters) logging.debug("[ User Stream URL ]: %s://%s%s" % (self.scheme, self.host, self.url)) logging.debug("[ Request Body ] :" + self.body) self._start(async) def main(): stream = UserStream(auth, CustomStreamListener()) stream.timeout = None stream.user_stream() if __name__ == "__main__": main()

Page 24: SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

24

1.セットアップ(tweepy)● クーロンに登録

● $ crontab -e

下記を追加

@reboot /usr/bin/python /home/pi/cgi-bin/tweet.py >> log.txt 2>&1