Edited at

複数のRaspberry Pi同士でファイルを送受信する方法


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

 以下コマンドを実行すると、karaage00test.jpgkaraage01にコピーされます。

./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

 簡単ですね。


関連記事

Raspberry Piで作ったもの・やったことまとめ

Raspberry PiとArduino間でUSB経由のシリアル通信