MATLAB Support Package for Raspberry Pi Hardwareを使用することで、MATLABからRaspberry Piを動かすことができます。 リモートでRaspberry Pi上のコマンドを実行できるほか、その結果をMATLAB上に表示することもできます。 echoコマンドを実行することで、Hello Worldを表示させてみます。
実行環境
筆者の実行環境は次の通りです。
Raspberry Pi
- Raspberry Pi 3 Model B
- これ以外でも動くと思う
- 3 B+ はまだMATLABが対応していないかも
- Raspbian stretch (9.4)
- 出版社/メーカー: Raspberry Pi
- メディア: Tools & Hardware
- この商品を含むブログを見る
パソコン
- MacBook Pro Mid 2017 15"
- macOS High Sierra 10.13.5
- Amazonベーシック USB3.1タイプC - イーサネットアダプター
Amazonベーシック USB3.1タイプC - イーサネットアダプター Mac/PC両対応 ブラック
- 出版社/メーカー: AmazonBasics
- メディア: Personal Computers
- この商品を含むブログ (1件) を見る
MATLAB
- MATLAB R2018a
- MATLAB Support Package for Raspberry Pi Hardware
- その他たくさんのパッケージ
- 筆者の環境ではあらかじめたくさんのパッケージがインストールされているため、必要性がわからない
注意点
以下はRaspberry Pi 3を無線LANでインターネットに接続しながら、実行している。 無線LANを接続していない場合、インストールなどで止まってしまうかも(とくに確認していない)。その場合はインターネットに接続されたネットワーク上にパソコンとRaspberry Piを接続する必要がある。
1. 物理的に接続
LANケーブル(ストレートケーブルでOK)でRaspberry Piとパソコンを直接接続する。
2. IPアドレスを確認
Raspberry Pi上のターミナル(LXTerminal)でIPアドレスを確認
($は打つ必要が無い)
$ ifconfig
すると、以下のような文字列が一気に出てくる。
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx broadcast xxx.xxx.xxx.xxx (省略) lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 (省略) wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 (省略)
この中のeth0の項目にある、inet以降の数字列(xxx.xxx.xxx.xxxのようなドットで区切られた数値4つ)が有線LAN(Ethernet)のIPアドレス。 これを以降で使用する。 netmask(サブネットマスク)やbroadcast(ブロードキャストアドレス)は今回は必要ではない。
3. 通信の確認
パソコンのコマンドプロンプト(Windows)orターミナル(mac or Linux)でpingを飛ばす。
($は打つ必要が無い)
$ ping xxx.xxx.xxx.xxx
成功すると、
$ ping xxx.xxx.xxx.xxx 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=64 time=0.396 ms (Macの場合の成功例: これが1秒毎に出てくる。)
永久に出続けてしまうときは、Ctrl+Cを押すと止まる 。
失敗すると、
$ ping xxx.xxx.xxx.xxx Request timeout for icmp_seq 0 (Macの場合の失敗例: これが1秒毎に出てくる。)
永久に出続けてしまうときは、Ctrl+Cを押すと止まる 。
4. SSH接続の確認
先ほどと同じくターミナルで以下を打つ。 ($は打つ必要が無い)
$ ssh pi@xxx.xxx.xxx.xxx
と入力する。 もしも、途中
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established. ECDSA key fingerprint is (中略). Are you sure you want to continue connecting (yes/no)?
などと聞かれたら、
yes
と入力してエンター。
その後
pi@xxx.xxx.xxx.xxx's password:
とパスワード入力を求められるので、パスワードを入力してエンターを押す。
pi@raspberrypi:~ $
(上記の「raspberrypi」はRaspberry Piのホスト名なので変更している可能性がある) などと出てきたら、SSH接続成功。 SSH接続に成功すると、パソコンからRaspberry Pi上のターミナルを遠隔操作している状態になる。たとえば ($は打つ必要が無い)
$ ls
と入力すると、Raspberry Pi上のカレントディレクトリ内のファイルを確認することができる。 また、 ($は打つ必要が無い)
$ reboot
と入力すると、Raspberry Piを再起動できる。
SSH接続を終了するときには
$ exit
と入力すればよい。
5. MATLABと接続する
MATLABのコマンドウィンドウで以下のコマンドを打つ。 (>>は打たなくてよい)
>> rpi = raspi('xxx.xxx.xxx.xxx', 'pi', 'raspberry');
xxx.xxx.xxx.xxxはIPアドレス pi はRaspbianのユーザ名(初期設定はpi) raspberry はRaspbianのパスワード(初期設定はraspberry)
すると1分程度経過した後に
### Updating Raspberry Pi I/O server... ### Connecting to board... ### Connected to xxx.xxx.xxx.xxx... ### Installing nanomsg Library (this might take a while)... ### Creating server folder... ### Transferring source files... ### Building MATLAB I/O server... ### Launching MATLAB I/O server... >>
と出てくる
6. Hello Worldする
以下をMATLABのコマンドウインドウに打つ。
(>>は打たなくてよい)
>> system(rpi, 'echo Hello, World!' )
すると、
ans =
'Hello, World!
'
>>
と出るはず。 このansはRaspberry Pi上でechoコマンドを実行した結果が返ってきている。 これでHello, Worldできた。
終わったら、
>> clear rpi
と打つことで接続を終了できる。
- 失敗するときは
7. mファイルでHello Worldする
MATLABのエディターで以下を打つ。
clear rpi %念のためrpiを削除 rpi = raspi('xxx.xxx.xxx.xxx', 'pi', 'raspberry'); %接続を開始 system(rpi, 'echo Hello, World!' ) %echoコマンドを実行させる clear rpi %rpiを削除して、接続を終了
それを"helloworld.m"のなどの名前で保存する。
そして実行すると、コマンドウインドウに、
ans =
'Hello, World!
'
>>
と出てくる。
8. 簡単な計算をして、計算結果を見る。
同じくmファイルを作成
clear rpi %念のためrpiを削除 rpi = raspi('xxx.xxx.xxx.xxx', 'pi', 'raspberry'); %接続を開始 n = 20; %ループ回数 sum = 0; %合計を格納 %計算ループ for i = 1:n sum = sum + i; %加算 system(rpi, [ 'echo "i=' , num2str(i) , ', sum=' , num2str(sum) ,'"'] ) %echoコマンドで途中経過を出力 end system(rpi, [ 'echo "sum(1:n)= ',num2str(sum) , '"' ] ) %echoコマンドで計算結果を表示 clear rpi %rpiを削除して、接続を終了
実行すると、たくさんの途中経過の出力の後に、
ans = 'sum(1:n)=210 '
と出るはず。
9. Lチカする
同じくmファイルを作成
clear rpi %念のためrpiを削除 rpi = raspi('xxx.xxx.xxx.xxx', 'pi', 'raspberry'); %接続を開始 led = rpi.AvailableLEDs{1}; %Lチカループ for i = 1:10 %10回繰り返す writeLED(rpi, led, 0); %LEDをオフ pause(0.5); %0.5[sec]の待機 writeLED(rpi, led, 1); %LEDをオン pause(0.5); %0.5[sec]の待機 end system(rpi, 'echo "mmc0" | sudo tee /sys/class/leds/led0/trigger'); %LEDの制御を解放 clear rpi %rpiを削除して、接続を終了
実行すると、Raspberry Pi本体にある緑色のLEDが0.5秒間隔で点滅する。
参考
Create connection to Raspberry Pi hardware - MATLAB raspi - MathWorks 日本