SSブログ
Raspberry Pi ブログトップ
前の10件 | -

ラズパイ試食レポ[12]: ケースをゲットだぜ! [Raspberry Pi]

ラズパイのケースとして市販のクリアケースを使ってきましたが、最近、高校時代の友人がなんと3Dプリンタでケースを自作したとのこと、「すげー」とか言ってたら、私にも作ってくれました!

3Dプリンタで作ったものを初めて触りましたが、積層面も結構きれいにできるのにびっくり。もっとでこぼこかと思っていました。

P_20160502_081348.jpg 

オレンジ色のにくいやつ! 


ラズパイ試食レポ[11]:メディアセンターその2 [Raspberry Pi]

以前、メディアセンターKodiの設定だけやっていたのですが、ようやく活用してみることにしました。


ところが、これが一筋縄では行きませんでした。ホームビデオのデータのバックアップに一番手間取ったのですが、関係ないところは省略して、Kodi関係の備忘録的に大切なところだけメモしておきます。


  • 簡易NASが対応しているファイルシステムに注意: FAT32にしか対応していないルータが多い。 

  • HDD上の一部の日本語のフォルダやファイル名が化ける。 : NTFSのときにはなかった。「学習」が「学試」に。気のせいか、PCに付けている時には見えるファイルが、samba越しにみるとPCからでも見えなかったり?

  • kodiからsamba越しに見ると、フォルダやファイル名の日本語が化けている: /home/kodi/.smb/smb.confに以下を追加したら解決。

    dos charset = CP932
    unix charset = UTF-8
    display charset = UTF-8
    dos filemode = Yes
    dos filetimes = Yes
    dos filetime resolution = Yes


  • 一部のフォルダに入っていけない: 最初は日本語が化けているせいかとも思ったが、日本語が解決しても一部フォルダに入れず、「エラー2:利用できません」メッセージが出る。多くのフォルダは普通に入れる。上記smb.confの最後3行を追加したら起きなくなった気がするが、本当にそれが原因かは不明。

  • テレビリモコンが効かなくなる: 最近発生。リモコンが効かない。リブートすると治ることもある。Kodiに関係しないところのリモコンは効く。つまりHDMI越しにラズパイに制御が渡るところが不通になるイメージ。HDMIの接触が微妙?

  • アドオンのYouTUBEが動作しない:これはアドオンの最新版をダウンロードしたら解決。kodiのメニューからはアップデートできず、zipをダウンロードする。ここを参照(自己責任でお願いします)。

  • mpeg2の絵と音がずれる。Windows上で再生する場合は気にならないので、ファイルではなく再生環境のせいだと思うんだが、ラズパイが非力ってことなのかな?

 と、いくつか気になる点はあるものの、昔からの写真やホームビデオが気軽にテレビで見られるようになったので、家族には好評でした。 

 


ラズパイ2試食レポ[10]: メディアサーバにチャレンジ [Raspberry Pi]

ラズパイ関連のサイトを拝見していると、メディアサーバにする例がたくさん載っています。kodi(旧名xbmc)というアプリケーションがあり、キオスク的にこれを使用できるようにしてあるインストールパッケージも用意されているようです。

でも、メディアサーバって何?って感じでした。もともとNASやサーバに写真、動画、音楽などの情報ファイルを集中管理している人は、それらをリビングのテレビでブラウジングして視聴可能になるので、相当利便性が上がると思います。私はそんな事をしていないので、まあ、何ができるかやってみよう、という感じです。

◆HDMIの解像度設定

リビングのテレビでの表示が不調(たまに映らなかったり、ちらついて安定しなかったり)なので、ちゃんと設定することにしました。テレビのマニュアルを調べたところ、HDMI入力で対応可能な解像度の選択肢が載っていました。ラズパイが設定可能な解像度はこちらのページの中程。両方を見比べてワイド画面にピッタリなWXGAの1360×768を選択しました。

ラズパイの設定は/boot/config.txtで。hdmi_group=2、hdmi_mode=39、としました。

結果、ばっちり安定して映るようになりました。

◆kodiのインストール

基本はbe-damaさんのサイトを参考にしました。ここでは補足情報だけ追記します。

ラズパイをHDMIケーブルでテレビに繋ぎ、キーボードとマウスをUSBに繋ぎました。kodiをインストールして自動起動設定をして再起動すると、kodiが起動しました。でもキーボードもマウスも効かなくて操作できません。kodiはkodiというユーザで起動されているのですが、kodiユーザがinputグループに属していないためにこうなるそうです。なので、以下で解決。

pi@raspberrypi ~ $ sudo usermod -a -G input kodi

◆kodiの操作

せっかくテレビにkodiの画面が出ているのに、操作がキーボード&マウスでは不便です。なんとテレビのリモコンでkodiの操作が可能です。初めて知ったのですが、HDMIというのは単に映像と音声を送るだけでなく、テレビのリモコンの操作情報をソース側へ渡すこともしてくれるそうで、kodiも対応しています。kodiのメニューの、

システム > 設定 > システム > 入力デバイス > 周辺機器

で有効化します。

ただし、操作できる機能はテレビにより異なるようで、うちのSHARP製では、方向キー、戻るキーくらいしか効きませんでした。これでも最低限の操作は可能です。

他の選択肢として、Androidアプリのリモコンがあります。いくつか試した中ではYasteが完璧です。スマホやタブレットから完璧に操作できます。テレビリモコンと違ってLAN越しですが遅延は全く気になりません。テレビリモコンでは機能しなかったホームボタンやコンテキストメニュー表示なども機能します。さらに検索などの文字入力が、kodiのソフトキーボードでは英語のみなのですが、リモコンから日本語を送信できます。

◆YouTubeが見られる

kodiには非常に多数のアドオンが用意されています。kodiにレポジトリを登録し、インターネットからダウンロードしてインストールします。その中に、YouTubeを視聴できるアドオンがあったので試してみました。いちいちPCを起動しなくてもテレビでYouTubeが見られれば便利そうです。

ビデオのアドオンからYouTubeを選択してインストールするだけ利用可能になりました。サムネイル表示はかなりもっさりしています。また、前述のとおり検索に日本語を使うにはアプリリモコンを使うしかないです。ただ、一度検索した語句はメニューに登録されるので次回は入力不要です。

◆kodiから普通のアプリケーションを起動できないか

kodiの裏ではLinuxが走っているわけですから、Webブラウザを起動してリモコン操作できれば、テレビでgoogle検索できて便利です。ですが、Xは起動していないし、リモコンでマウスポインタが動かせるか、などそもそもできるかどうかわかりません。

調べると、汎用ラウンチャとして Advanced Launcher なるアドオンがあります。いろいろ試していますが、未だアプリケーションの起動に成功していません。あらかじめXを起動しておいて、Xauth許可やディスプレイ設定などして…など試行錯誤中です。

アドオンやkodiの設定は pythonやxmlで記述されているようで、学習すればカスタマイズは比較的容易かもしれません。

ラズパイ2試食レポ[9]: ブリッジにしてみた [Raspberry Pi]

自宅リビングのテレビには有線LANポートが付いていますが、今は繋いでいません。マニュアルを見ると、地デジ番組で双方向通信する際に使用するようです。よく「dボタンを押して参加」のような番組がありますが、確かに過去に「ネットに繋がっていないと応募できません」と言っていた番組があったような気がします。

繋いでいないのは、リビングに有線LANが来ていないからです。我が家では2FにNuroひかりのモデム?が置いてあって、そいつが唯一の有線HUB兼無線親機です。

ラズパイには有線LANポートがあり、今はUSBに無線LANアダプタを付けているので、ラズパイをブリッジにしてテレビをネットに繋げられるのでは? と思いました。やってみましょう。

◆その前にSDカード延命作戦

フラッシュは書き換え回数が有限ですので、Linuxのようにいろいろなファイルを書き込むOSを連続運転しては、SDカードがわりと短期間で使用不能になると思います。

そこで、スワップファイル無効、一時ファイル置き場をRAM(tmpfs)にする、などの措置で、SDカードへの書き込みを減らします。

kimura@pc-links.comさんの「Raspberry Pi でRAMディスクを使う」の通りやればできますので、ここでは詳細省略します。

◆ブリッジ作成

参考にさせて頂いたのは、tenforwardさんの「Raspberry Pi を無線 LAN アクセスポイントに」です。こちらを始め、いくつかのサイトでは無線LANアクセスポイント化する話が多いですが、今回やるのはその手前の有線と無線をブリッジするところまでです。

  1. bridge-utilsのインストール: ブリッジを作るだけならこれは必須ではないようです。ブリッジデバイスの確認に使うbrctlコマンドをインストールするだけです。
    pi@raspberrypi ~ $ sudo apt-get install bridge-utils
  2. /etc/network/interfacesの書き換え: 下記を追記。
    auto br0
    iface br0 inet static
      address 192.168.1.10
      netmask 255.255.255.0
      gateway 192.168.1.1
    bridge_ports wlan0 eth0
  3. 確認: 下記のようにブリッジが形成されています。この状態でテレビとラズパイを有線LANで接続し、テレビ側の設定でIPアドレス自動取得できましたので、ブリッジできていると思います。

ifconfig.png

うまくいったのですが、いくつか疑問が残っています。

  1. 自宅で固定IPアドレスの設定などしたことがないので、てっきりDHCPが動いていると思っているのですが、編集前の/etc/network/interfacesでは、eth0もwlan0もmanualとなっていました。アドレスをどこで指定しているのでしょうか。
  2. また、最初は「iface br0 inet dhcp」と書いたら、起動時に「DHCPできません」的なエラーが出てネットワークデバイスがすべてdisableになってしまいました。上記のようにstaticにしたら大丈夫でした。

ラズパイ2試食レポ[8]: 目覚まし時計をつくってみた [Raspberry Pi]

目覚まし時計を作ってみました。
仕様は以下です。

  • 時刻をAquesTalkPiでしゃべらせる。
  • cronを使って、定時に時刻をしゃべる。
  • cronだけでは起きない場合、任意にしゃべらせる。

◆ntpの設定

その前に、時刻は正確でなくては、ということでntpを設定します。ntpdはインストール済みで動作もしていますが、正しいサーバに設定しなおします。


pi@raspberrypi ~ $ sudo vi /etc/ntp.conf

「server」で始まる行をコメントアウトして、以下を追加します。


pool ntp.nict.jp iburst

ntpdを再起動します。


pi@raspberrypi ~ $ sudo service ntp restart

サーバとの同期状態を確認します。


pi@raspberrypi ~ $ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+ntp-b2.nict.go. .NICT. 1 u 97 128 377 7.093 0.824 0.144
*ntp-a2.nict.go. .NICT. 1 u 46 128 377 7.125 0.556 0.324
+ntp-a3.nict.go. .NICT. 1 u 97 128 377 6.607 0.820 0.316
-ntp-b3.nict.go. .NICT. 1 u 120 128 377 7.110 0.326 0.479

一番左に「*」が付いているサーバと同期していることを示しています。


◆cronで動かす

cronで起動するスクリプトcron_time.shは以下のようにしました。


#!/bin/sh
# cron_time.sh

daytime=`date "+%-B %-d日 %-A %-H時 %-M分"`
/usr/local/bin/atalk "おはようございます。${daytime}です。"
/usr/local/bin/atalk "天気予報です。`/usr/local/sh/tenki.py`"
/usr/local/bin/atalk "${daytime}です。"

時刻の後に天気もしゃべります。
これを、以下のようにcrontabで設定しました。


30,35,45 06 * * 1-5 /usr/local/sh/cron_time.sh

月-金の 6:30~6:45まで5分毎3回実行します。しつこいですね。


◆好きな時に好きな言葉をしゃべらせる

これでも起きないときのために、任意の言葉を好きなタイミングでしゃべらせるようにします。

ここでは、UDP通信を待ち受けるプログラムを常駐させて、スマホなどからしゃべる文字列を送りつけることで実現しました。

常駐プログラムは以下です。


//
// udp_talk
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define BUF_SIZE 1024
#define PORT_NUM 12345

void run_comm(char *buf, int len){
char str[BUF_SIZE];

strcpy(str, "/usr/local/bin/atalk ");
strncat(str, buf, len);
//printf("%s\n", str);
system(str);
}

int main(){
int sock = 0;
int len = 0;
int loop = 1; // 1=forever
struct sockaddr_in addr;
socklen_t addrlen;

char buf[BUF_SIZE];

// create socket
sock = socket(AF_INET, SOCK_DGRAM, 0);
if ( sock < 0 ) {
exit(-1);
}

// set address and port
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT_NUM);
addr.sin_addr.s_addr = INADDR_ANY;

// bind
if ( bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0 ) {
perror("bind");
fprintf(stderr, "port %d is already used.\n", PORT_NUM);
return(-1);
}

// clear buf
memset(buf, 0, sizeof(buf));

// recv
while ( loop ) {
addrlen = sizeof(struct sockaddr_in);
len = recvfrom(sock, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, &addrlen);
if ( len < 0 ) {
perror("recv");
break;
}

//printf("%s\n", buf);
run_comm(buf, len);

if( strncmp(buf, "quit\n", 5) == 0 ) {
loop = 0;
}

memset(buf, 0, len);
}

close(sock);

return 0;
}

UDP通信では特にパケットなど規定せず、送られてきたデータを単純にAquesTalkPiに渡すだけです。処理時間もそれほど掛かりませんし、不特定多数のクライアントを想定しなくても良いのでforkはしていません。
送る側はUDPで送れれば何でも良いので、スマホアプリの「UDP Tester」などが利用できます。いくつかの文字列をプリセットしておいて選択できるようなアプリを自分で作ってもいいですね。

準備OKです。が、スピーカーがない…。

【2015/05/19追記】 100均のスピーカーを繋げてみました。「音は大きくなりません」と明記してあるものです。ラズパイ本体のボリュームを最大にすると、近くに置いてあれば部屋の中なら普通に聞こえるレベルです。でも目覚ましにするにはあきらかに力不足でした。

【2015/05/25追記】 同じく100均のアンプを買ってみました。ちょっとボリュームを上げるだけで十分な音量になります。このままでも実用可能ですが、別途電池が必要なのがちょっと癪に障ります。中のICは1.8~15Vくらいで動作可能なようなので、たとえばラズパイのGPIO出力を電源とすれば、鳴らすときだけ3.3V供給とかできそうです。電流足りないかな?

P_20150523_143157.jpg


ラズパイ2試食レポ[7]: しゃべらせてみる [Raspberry Pi]

ラズパイ関連のサイトを拝見すると、しゃべらせている先人が多くいますので、やってみましょう。
手持ちにスピーカーが無いので、イヤホンジャックにイヤホンをつないでテストしました。

◆音声出力制御
音声はオーディオ端子とHDMI端子の2系統に出力でき、それを切り替えるには以下のようにします。最後の数字が 1 がオーディオ端子、2 がHDMI端子、0 が自動判別です。


pi@raspberrypi ~ $ amixer cset numid=3 1

ボリュームは以下で調整。


pi@raspberrypi ~ $ amixer set PCM 20%

◆しゃべるひと
OpenJTalk、AquesTalkPiの2つが主なものらしいです。後者は商用だが個人・非営利利用ならライセンス料はかからないです。
どちらもしっかりしゃべるますが、なめらかなのはやはり後者でしょうか。
AquesTalkPiはこちら(http://www.a-quest.com/products/aquestalkpi.html)からダウンロードし、解凍するだけ。バイナリと辞書フォルダを同じ場所に置きます。
以下のように使います。


pi@raspberrypi ~ $ ./AquesTalkPi しゃべらせたい言葉 | aplay

ただし、このままだと、AquesTalkPiがエラーを起こした場合などに aplay がノイズを出力するので、以下のようなスクリプトをかますとよいらしいです。Nosさんのサイト(http://d.hatena.ne.jp/Nos/20150218/1424217597)より拝借しました。


#!/bin/bash
aquestalkpi=/home/pi/build/aquestalkpi/AquesTalkPi
var=`$aquestalkpi "$@" | base64; echo ":${PIPESTATUS[0]}"`
ret=(${var##*:})
data=${var%:*}
if [ $ret -eq 0 ]; then
echo $data | base64 --decode --ignore-garbage | aplay -q
else
echo $data | base64 --decode --ignore-garbage
exit $ret
fi

AquesTalkPiへのパスは適宜変更してください。これを atalk と名づけて


pi@raspberrypi ~ $ atalk -g 15 しゃべらせたい日本語

と使います。オプションはそのままAquesTalkPiへ渡ります。-g はボリューム指定(100がMax)。

◆何をしゃべらせる?
時報や天気をしゃべらせる例が多いようです。目覚まし時計代わりによいかもしれません。dateコマンドで日本語の時報テキストを作ってatalkに渡すだけでできますね。cronに仕込めば目覚まし時計になります。


pi@raspberrypi ~ $ atalk -g 20 "`date "+%B %d日 %A %H時 %M分"`です。"

上記のNosさんのサイトには天気をしゃべらせるpythonスクリプトの例があり面白いです。


ラズパイ2試食レポ[6]: シャットダウンボタン作ってみた [Raspberry Pi]

シャットダウンボタンを作られた先人も非常に多数おられます。いろいろ参考にしながら私なりにまとめました。


もともとラズパイに電源ボタンがない、サーバー的に使用したいのでラズパイ単体で電源を落としたい、などのニーズがあります。ここでは、以下の方針(仕様)で作っていきます。


  • GPIOにプッシュスイッチをつけて、長押しでshutdownが走るようにする。
  • 長押し期間中は、Power LEDを点滅させる。shutdownが走り出したら点灯に戻す。
  • ポーリングではなく割り込みにする。
  • 汎用的なCで実装する。

◆GPIO


GPIOを制御するにはいろいろな手段があるようです。もっとも簡便なのは、sysfsを使用したものです。GPIO4をHIGHにする例です。

pi@raspberrypi ~ $ echo 4 > /sys/class/gpio/export  # gpio4を有効化
pi@raspberrypi ~ $ echo out > /sys/class/gpio/gpio4/direction # 出力に設定
pi@raspberrypi ~ $ echo 1 > /sys/class/gpio/gpio4/value # Highを出力

pythonでも当然できますが、ここでは省略します。

Cでは、wiringPiというライブラリを使うのがよいようです。apt-getできないので、以下のように導入します。

pi@raspberrypi ~ $ git clone git://git.drogon.net/wiringPi
pi@raspberrypi ~ $ cd wiringPi
pi@raspberrypi ~/wiringPi $ ./build

/usr/local/bin/gpioというコマンドラインから使えるコマンドも導入されます。

pi@raspberrypi ~ $ gpio -g mode 4 in   # gpio4を入力モード
pi@raspberrypi ~ $ gpio -g mode 4 up   # gpio4をプルアップ
pi@raspberrypi ~ $ gpio -g read 4     # gpio4を読む
1                     # 1=HIGH

実際にCから使う例は後ほど。

◆LEDの制御

ラズパイにはPower LED(赤色)とACT LED(緑色)が搭載されていますが、これが制御可能とのこと。任意のGPIO端子の状態に連動させることもできるそうなので、プログラムの動作確認などにも使えそうです。

GPIOと同様、sysfsから制御できます。ACT LEDがled0、Power LEDがled1です。

pi@raspberrypi ~/c $ cat /sys/class/leds/led0/trigger
none [mmc0] timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on input
pi@raspberrypi ~/c $ cat /sys/class/leds/led1/trigger
none mmc0 timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on [input]

led0ではmmc0すなわちSDカードアクセスで点灯、led1では、inputすなわち電源ラインで点灯するモードになっています。これを切り替えることができます。heartbeatにすると、「チカチカ…チカチカ…」と点滅します。

pi@raspberrypi ~/c $ sudo su
pi@raspberrypi ~/c # echo heartbeat > /sys/class/leds/led1/trigger

◆シャットダウンプログラム

ピンヘッダの#7(GPIO4)と#9(GND)の間にプッシュスイッチを接続します。

P_20150508_143849.jpg

GPIO4は入力モードにしてプルアップします。スイッチオフではHIGH、スイッチオンではLOWになります。

以下がCで書いたシャットダウンプログラムです。

//
// shutdown_sw
//

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <wiringPi.h>

#define GPIO4 4
#define WAIT_SEC 5
#define BUFFER_MAX 10

// set power led
int setPowerLed(char *mode) {
int fd;
char buffer[BUFFER_MAX];
ssize_t bytes_written;

fd = open("/sys/class/leds/led1/trigger", O_WRONLY);
if (fd == -1) {
fprintf(stderr, "Faild to open led1 trigger\n");
return(-1);
}
bytes_written = snprintf(buffer, BUFFER_MAX, "%s", mode);
write(fd, buffer, bytes_written);
close(fd);
return(0);
}

// callback function for interrupt
// 1st, PowerLED blinging for WAIT_SEC second,
// then, PowerLED on, goto shutdown.
void callback_go(void) {
int i;
int ret = 0;

usleep(30000); // for chattering
if (digitalRead(GPIO4) == LOW) {
// wait for WAIT_SEC
for (i = WAIT_SEC; i >= 0; i--) {
if (digitalRead(GPIO4) == LOW) {
setPowerLed("heartbeat");
sleep(1);
} else {
setPowerLed("input");
break;
}
}
if (i < 0) {
setPowerLed("input");
// exec shutdown
system("/sbin/shutdown -h now");
}
}
}

// main routin
int main(void) {
int ret = 0;

// initialize wiringPi
if ( wiringPiSetupGpio() == -1 ) return 1;

// set gpio4 pin to input mode & pullup
pinMode(GPIO4, INPUT);
pullUpDnControl(GPIO4, PUD_UP);

// set interrupt
wiringPiISR(GPIO4, INT_EDGE_FALLING, callback_go);

// wait for interrupt
for (;;) {
sleep(100000);
}

return 0;
}

mainルーチンは、GPIOの設定後、長いスリープを行う無限ループで割り込みを待ちます。単なるポーリングより圧倒的にCPUにやさしいです。

スイッチが押されてGPIO4が立ち下がると、割り込みが掛かり、callback_goが実行されます。チャタリングを避けるため30ms後に再度レベルを確認しています。

毎秒レベルを確認し、長押しの途中でボタンが離された場合にはシャットダウンせずに割り込み待ちに戻ります。

ボタンが押された状態ではPower LEDを点滅します。5秒間押されたままであれば shutdownを実行します。

このプログラムは常駐する必要があるので、/etc/rc.localの最後に追加します。

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

# Shutdown SW
if [ -f /usr/local/bin/shutdown_sw ]; then
su -c /usr/local/bin/shutdown_sw &
fi

exit 0

再起動して、ps -ef すると実行されていることが確認できます。


ラズパイ2試食レポ[5]: 起動しない? [Raspberry Pi]

さて、わりとたびたび起動しないことがあります。

起動しない、というのは、microUSBに電源をつないで、起動し始めるのですが、流れるbootメッセージを見ていると、明らかに通常時とは異なり、「panic」の文字や、CPUが停止しただの、USBデバイスがわからんだの、を延々と繰り返します。

当初は、SDカードのファイルシステムが壊れたのだと思い、フォーマットからやり直していたのですが、あるとき、単に起動しなおしたり、挿しなおしてからの起動で、普通に起動する場合があることに気づきました。

少しgoogle先生に尋ねてみると、似たような事象に遭遇している先人おられ、その方の見解は「SDカードの相性」。海外サイトにもラズパイでの各種SDカード動作実績一覧などがあり、うまく動かないSDカードもあるようでした。

で、試食レポ[1]で紹介したSDカードは、動作する実績もしない実績もあり、微妙なものでした。amazonでのお勧め妄信はいかん、ということです。

どうやら、ラズパイ取扱店が薦めているSDカードを買うのがよろしいようです。

私はまだだましだまし使っています。

【2015/05/19追記】ついに起動しなくなり、SDカードを買いなおしました。まだ日は浅いですが、今のところ問題なし。試食レポ[1]に追記していますのでご参照ください。


ラズパイ2試食レポ[4]: ファイル共有とプリントサーバ [Raspberry Pi]

◆ファイル共有(samba)


ラズパイのSDカード内のフォルダに、Windowsマシンからアクセスできるようにsambaを導入します。

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install samba

/home/pi/sharedというディレクトリを作成し、ここを共有します。

pi@raspberrypi ~ $ mkdir shared
pi@raspberrypi ~ $ chmod 777 shared

/etc/samba/smb.confの末尾に以下を追加します。

[shared]
path = /home/pi/shared
guest ok = Yes
read only = No

「sudo service samba restart」でsambaを再起動します。

Windowsマシンからアクセスできることを確認しました。

samba1.png


◆プリントサーバ(CUPS)

うちのプリンタは、Canon PIXUS MP470というUSBでWindowsマシンに繋げているインクジェットです。CUPSでラズパイをプリントサーバにすることで、WindowsマシンとUSB直結する必要性がなくなります。また、Androidデバイスからも印刷できるようにしたいです。

以下のようにインストールします。

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install cups

リモートのWindowsマシンから設定できるように、/etc/cups/cupsd.confを以下のように修正します。

Listen 631
Listen /var/run/cups/cups.sock
(中略)
# Restrict access to the server...
<Location />
Order allow,deny
Allow from @LOCAL
</Location>

# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow from @LOCAL
</Location>

「sudo service cups restart」で再起動します。

次に、ユーザpiをlpadminグループに追加します。

pi@raspberrypi ~ $ sudo usermod -a pi -G lpadmin

これでリモートからCUPSの設定が可能になりました。

Windowsマシンのブラウザから、「http://raspberrypi:631」にアクセスすると、CUPS設定画面が表示されます。

設定手順は以下です。プリンタは先に接続して電源を入れておきます。

  1. 「管理」→「プリンターの追加」
  2. ユーザ名を聞かれるので、piとパスワードを入力。
  3. 接続しているローカルプリンタが表示されるので選択。
  4. モデル一覧から該当する機種を選択します。私の場合、PIXUS MP470はPIXMA MP470が相当するようなのでそれを選択しました。

以上で完了。テストページ印刷もうまくいきました。

Windowsマシンの設定は、普通のネットワークプリンタの設定と同じです。ネットワークから「RASPBWRRYPI上」というプリンタが見つかるはずです。

Androidからの印刷ですが、googleクラウドプリントを使う方法などが各種サイトで紹介されています。もっとシンプルにCUPSのクライアントになれるアプリはないか、と探してみると、以下の2つが見つかりました。

  • JfCupsPrint
  • Let's Print Droid

いずれも同等の機能、使用感です。

私の場合、PDFファイルは印刷できるものの図が崩れ、TEXTファイルは印刷できませんでした。ただし、これはいずれもCUPS側の問題と思われます。PDFの場合は上記2つのアプリいずれも同じように図が崩れたので、CUPS側のドライバの問題と推測します。TEXTの場合は、CUPSが「/usr/lib/cups/filter/texttopdf faild」というエラーをログに吐きます。少し調べたのですが未解決です。


ラズパイ2試食レポ[3]: ネットワークの設定 [Raspberry Pi]

◆無線LANをつなぐ

有線LANをつないだ状態でOSをインストールするところまで来ました。ログイン後、Xを起動し、ブラウザでgoogleなどへアクセスできます。

この状態で無線LANを設定します。使用した無線LANアダプタは以下です。

小型USB Wireless LAN Adapter、802.11b/g/n  ReUdo    ¥ 702

これは、Realtek RTL8188CUS チップセットを使用したもので、ラズパイでの使用実績が報告されていたのと、よく見かけるバッファローさんのアダプタは消費電力が大きいとのことだったので、こちらを選択しました。

  1. 有線LANをつないだ状態で、無線LANアダプタをUSBへ挿します。
  2. Xの左上メニューのPreferenceからWifi Setupを選択。
    1. Scanボタンを押してアクセスポイントを一覧させ、使用するアクセスポイントをダブルクリック。
    2. PSK欄に入力してAddボタンを押す。
    3. Current Statusタブに戻って、Connectボタンを押す。
  3. 有線LANを引っこ抜いて、ターミナルからifconfigすると、wlan0というインタフェースにIPアドレスが割り振られていることがわかります。ブラウザでアクセスできるようになるのは数分後でした(理由不明)。

以上です。たぶんこれが一番簡単なやり方です。/etc/network/interfacesなどの設定ファイルを直接書き換える方法や、固定IPにする方法など、より複雑な方法は、別途詳しく解説してあるサイトをご参照ください。

◆SSH

まずは基本のSSHを設定します。

raspi-configを起動(sudoしてね)します。「8. Advanced Option」から「SSH」を選んで有効化し、再起動。これだけ。

私の場合、WindowsマシンにCygwinが入れてあるので、「ssh pi@192.168.1.6」でログインできました。

Androidデバイスからは、ConnectBot、JuiceSSHといったアプリでログインできます。

◆ホスト名によるアクセス

SSHする際にIPアドレスを指定するのは面倒ですし、DHCP環境ではIPアドレスを調べる必要もあります。そこでホスト名でアクセスできるようにするには、Zeroconfという仕組みを使うそうです。その実装であるavahi-daemonをインストールします。


pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install avahi-daemon

これだけで次回電源投入時にもちゃんと動作するようです。

Windows側にも手当てが必要で、 Zeroconfの実装であるBonjour Print Service for Windowsをインストールします。

インストール時にはraspberrypiというホスト名になっています。これで、「ssh pi@raspberrypi.local」のように指定できるようになりました。

◆VNC

Xの画面を共有するVNCを導入します。ラズパイ上でtightvncserverというVNC Serverを動かし、WindowsマシンやAndroidデバイスでVNC Viewerを動かします。


pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install tightvncserver
pi@raspberrypi ~ $ vncserver :1 -geometry 1024x768 -depth 24

3行目のコマンドで起動しています。初回起動時にパスワードが設定されます。

ラズパイ起動時に自動的にVNC Serverを起動するには、init.dに登録してやる必要があります。

以下のスクリプトを /etc/init.d に vncboot という名前で作成します。


#! /bin/sh
# /etc/init.d/vncboot
USER=pi
HOME=/home/pi
export USER HOME

case "$1" in
start)
echo "Starting VNC Server"
su $USER -c '/usr/bin/vncserver :1 -geometry 1440x900 -depth 24'
;;
stop)
echo "Stopping VNC Server"
su $USER -c '/usr/bin/vncserver -kill :1'
;;
*)
echo "Usage: /etc/init.d/vncboot {start|stop}"
exit 1
;;
esac

exit 0

その後、以下のように設定します。


pi@raspberrypi ~ $ sudo chmod 755 /etc/init.d/vnvboot
pi@raspberrypi ~ $ sudo update-rc.d vncboot defaults

再起動後、「ps -ef | grep tightvnc | grep -v grep」で起動が確認できます。また「netstat -nlt」で5901ポートをLISTENしているのがわかります。

Windowsでは、RealVNC Viewerを使います。起動するとホスト名を聞かれるので、「raspberrypi.local::5901」のようにポート番号をつけて設定します。上で設定したパスワードを設定すれば接続できます。

AndroidでもVNC Viewerがあり、同様に簡単に接続できるようになります。


前の10件 | - Raspberry Pi ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。