Raspberry Pi同士でファイルの送受信
この記事は変デジ開発室の記事から移行したものです。
複数のRaspberry Pi同士でファイルを送受信したくなるようなプログラムを作りたくなるときありますよね?そんなとき1からソフトをつくると大変ですが、Raspberry PiはLinuxなのでLinuxで使われている仕組みを使えば簡単にソフトをやりとりすることができます。
今回は、簡単な例として2台のRaspberry Piでファイルの送受信を行う方法について説明します。これを応用すればRaspberry PiとPC、3台以上のRaspberry Piでのファイル送受信もできるようになります。
セットアップ
2台のRaspberry Piを同一ネットワーク上に配置します。Raspberry Piに関しては、以下などを参考に基本的なセットアップはすましておきましょう。
Raspberry Pi 3にRaspbian Stretch/Jessieをセットアップする方法
ここでは仮にそれぞれのhostnameを karaage00
karaage01
という名前にしたとして説明します。同一ネットワーク上にいるPCから接続確認しましょう。例えばLinuxかMacだったら、以下コマンドで確認できます。
$ ping karaage00.local
$ ping karaage01.local
vsftpdセットアップ
ファイルのやりとりはftpという仕組みを使用します。まずは1台のRaspberry Piにvsftpd
というソフトを以下コマンドでインストールします。
$ sudo apt-get install -y vsftpd
ただ、このままではファイルをvsftpdが入ったRaspberry Piからダウンロードはできるのですが、アップロードできないので、以下コマンドで/etc/vsftpd.conf
を編集します。
$ sudo vim /etc/vsftpd.conf
以下のように変更します。
# write_enable=YES
を以下に変更
write_enable=YES
設定を有効にするためにvsftpdを以下コマンドで再起動します。
$ sudo systemctl restart vsftpd.service
ここではvsftpd
がインストールされたRaspberry Piをkaraage00
、もう一台をkaraage01
とします。
ファイル送受信確認
ダウンロード
あらかじめkaraage00
の ホームディレクトリ直下(/home/pi)にtest.jpg
というファイルを置いておきます。
karaage01
の方にdownload.sh
というファイルを以下コマンドで作成します。
$ vim download.sh
download.sh
の中身は以下をコピペしてください。
# !/bin/bash
ftp -n karaage00.local << _EOD
user pi raspberry
passive
binary
get test.jpg
bye
_EOD
あとは、以下で実行権限を設定します。
$ chmod 755 download.sh
以下コマンドを実行すると、karaage00
のtest.jpg
がkaraage01
にコピーされます。
./download.sh
アップロード
逆にkaraage00
にファイルを送信したい場合は、karaage01
のホームディレクトリ直下にテスト用のtest2.jpg
というファイルを用意して、download.sh
というファイルの代わりに以下のようなupload.sh
というファイルを用意して、同じ要領で送信してやればOKです。
# !/bin/bash
ftp -n karaage01.local << _EOD
user pi raspberry
passive
binary
put test2.jpg
bye
_EOD
簡単ですね。