RaspberryPiとMacをLANケーブルで繋げて開発準備
https://gyazo.com/2516eec63cde25a81de4f3ccb9752b36
目次
はじめに
仕組みの説明
準備
Mac側設定
RaspberryPi側設定
ローカルIPアドレスの固定
導通確認
インターネット共有設定
まとめ
hr.icon
はじめに
本記事ではLANケーブルでRaspberryPiとMacをSocket通信で繋げて開発を便利に進めるようにするのが目的です。
RaspberryPiにセンサーを繋げてその値をMac側で使いたい!とかRaspberryPiの中のプログラムをできる限り楽に開発したいとかそういう趣旨です。
この記事はRaspberryPiやMacに限らずWindowsとMacとか別機器にも使えるので目的に合えば便利です!
ネットワークについて説明が不十分であったり間違いがある場合があるので予めご了承ください。
hr.icon
仕組みの説明
それぞれの端末間でネットワークを立てるといった方がわかりやすいかもしれません。
今回はLANケーブルを使っていますが実はWi-Fiでも同じ様にローカルIPを指定すれば同じ様なことができます。
192.168.0.1が家のルータとしてゲーム機とか便利なアレクサくんとかテレビとかWi-Fiにつながるものはそれぞれ192.168.0.2 192.168.0.3 192.168.0.10とかが設定されています。
そのローカルのIPどうしで通信させるのが今回の使う技術です。
おおよそイメージを掴むとしたら
A君とB君がいるとしてそれぞれの家がIPアドレス(住所)でA君の家から郵便でB君の家に手紙を届けるイメージです
こういう例え話でなんかもっといいものがあればいいんですが...
192.168.2.1:これが今回ホスト端末にするMACに設定するローカルIPアドレス
192.168.2.2:RaspberryPiに設定するローカルIP
この二つのアドレスを使って通信を行うという感じです
hr.icon
準備
当記事で使用しているもの
RaspberryPi4:Ubuntu Server 22.04.4 LTS
MacBook Air M1(2020)
適当なLANケーブル CAT6Aとか
MacにLANケーブルがさせなかったのでType-C←→LANのハブ
hr.icon
Mac側設定
IP設定 設定→ネットワーク→Raspberry Piと接続しているLANデバイスを選択→右上の詳細ボタン→TCP/IP→IPv4の構成→手動に切り替える→IPアドレスを(192.168.2.1)に設定する→OKで確定させる
これでローカルIPのMac側の固定と構成が完了
https://gyazo.com/db6c76b0333ae11aecf875cc0277c980https://gyazo.com/ff394ceb98c177bd455636a4e450a6bc
hr.icon
RaspberryPi側設定
この時点でRasberryPiはIPアドレスを固定してないので特定すればIP指定でもいいですが、.localの方が楽なのでそっちで接続してみます
MacからRaspberryPiへ接続します]
Macのターミナルから
$ ssh ユーザ名@ホスト名.local
参考例:
$ ssh dclab@dclab.local
でMacからRaspberryPiのUbuntuへリモート接続します。ここから先は基本的にMacから作業を行います。
https://gyazo.com/1445db0f077b3777a7212ba68644c6e1
yesで開始してください。
パスワードの入力が求められるので Raspberry Pi側のパスワードを入力してください
https://gyazo.com/a56ebe4ffd1b744be82896de87dcb18a
Mac側でこのターミナルの画面になれば接続完了です。
https://gyazo.com/1ae3ab5d47c79f1cc317446ceedb2dde
もしssh接続で以下のようなエラーが出た場合の対策を記します。
code:error
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
このエラーは前に同じユーザ名@ホスト名にアクセスしたことがあるが、リモート先コンピュータが初期化されたりして前のコンピュータとは異なる場合に出るものです。
$ ssh-keygen -R ホスト名
例:今回の場合は
$ ssh-keygen -R dclab.local
でリセットをかけてもう一度sshコマンドをやってみてください。
hr.icon
ローカルIPアドレスの固定
Mac端末からリモート接続ができたら、ソケット通信を行うためにローカルIPアドレスを固定していきます。
住所を固定しないと変わったりするのでそれの防止です!
毎回変わっちゃうことはないけど、いちいち調べなくていいので楽だね
あとこれをしないとPythonのスクリプトとかでソケット通信でMacにセンサーの値とか送る時とか必要なのでやっていく
Ubuntuのネットワーク設定のファイルがある場所は
~/etc/netplan/にあります。
その中にネットワークの設定をyaml形式で記述することで固定ができます。
defaultにあるファイルは触らずに新規で設定ファイルを記述していきます。※以下に注意あり
$ sudo nano /etc/netplan/lan-connect.yaml
で開きましょう
code:lan-connect.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.2.2/24
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
routes:
- to: default
via: 192.168.2.1
書き込めたら、
saveしたいときはcontrol+x→y→return →return
saveしないときは、上の手順のyをnでキャンセル
ネットワーク設定の適用は
$ sudo netplan apply
パーミッションのWARNINGが出たらchmodで設定
$ sudo chmod 600 /etc/netplan/lan-connect.yaml
もしWARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.が出たら
$ sudo apt install openvswitch-switch
でインストールしてください。
それ以外のWARNINGが出たらその都度設定ファイルを見直してみてください。
エラー文を見ればおおよそ分かりますが、インデントとか重要なので手書きするとよく引っかかります。
もし
設定してあげると
$ ssh ユーザ名@ホスト名.local
じゃなくても
$ ssh ユーザ名@192.168.2.2
例:
$ ssh dclab@192.168.2.2
でも接続できるよ!
この固定したローカルIPでソケット通信とかで使える様になるよ!
hr.icon
導通確認
RaspberryPiでこのコマンドをうって繋がってるか確認する!
$ ping 192.168.2.1
192.168.2.1これはMacに設定しているローカルIPアドレス
$ ping 8.8.8.8
とかで正常に通信できることが確認できたらOK
逆にMac側でも
$ ping 192.168.2.2
これで双方に通信できていれば完璧!
注意
この記事を参考にWindowsで同じ様な通信を行う場合ファイアーウォールというセキュリティ的には大事だけどポートとか通すの忘れて弾かれているなんてこともあるので注意です。
もし正常にうまくいかない場合は、
$ sudo shutdown -r now
で再起動してください
もう一度確認してください
eth0はRaspberry Piのイーサネットの物理デバイス名なので、もし異なる場合は
$ ip addr
で名前を確認すればいいと思います。
https://gyazo.com/be7ae8a1c4e829a436831474faee64c7
注意
Defaultの場合50-cloud-init.yaml(場合によっては変化する)というファイルがありますが、OS自体がネットワークに合わせて書き込んで一時的に設定できても、環境が変わると変化し固定設定がなくなるという理由で、新規で別ファイルに記述します。
netplanの仕様として設定ファイルが複数あったとしてもアルファベット順に管理されており、読み込みがあとの方が適用されるようです。また、複数の設定内容があっても重複しなければ両方適用されるみたいです。今回の場合lan-connect.yamlの名前はちゃんと認識されるようです。任意の名前をつけたい場合はアルファベット順さえ気をつければ大丈夫です!
hr.icon
インターネット共有設定
構成したネットワークをWi-Fi→Mac→Raspberry Piのような経路でネットワークを接続する。
いわゆるMacはWi-Fiのブリッジをしているイメージ
設定→一般→共有→インターネット共有→iボタン→
共有する接続経路→Macがネット接続してる端末 EthernetかWi-Fiだと思う
共有先のデバイスはRaspberryPi on Ubuntuと繋がってるLANのデバイスの事
https://gyazo.com/62025def7c9cf7a410a92fe7bcd50a79https://gyazo.com/96715ea75697c498922e1ad0828224aehttps://gyazo.com/f9fda887410ee82730804376963eb48a
これやるとRaspberryPi側で複数ネットワークを設定しなくてもRaspberryPiがライブラリをインストールできる様になるのでちょっとした楽
注意としては回線が細くなるからめっちゃ重たいファイルとかやるならやっぱり普通に接続した方がいいかも...
ただ、室外とかWi-Fi環境がなかったり普段開発している場所じゃないところで改めてネットワークを設定するのもめんどくさいし公共の場ならセキュリティ的によろしくないので、スマホのテザリングでこれらを解決できるのはとても利点
hr.icon
まとめ
今回ちょっと便利な小技というか、ちょっと開発したりコンテンツのインタラクティブな要素をつける時センサーとか必ず使うのでこういう知識はあるとたまに使えます。
私自身もこのLANケーブルで接続して別々のPCで処理を分けて重たくなったりするのを避けたりすることができてるので割とありがたい技です。
まぁ、制作で重たくなるのはどうしようもないこともありますが問題の後回しって場合もあるのでそこら辺はしっかり考えないとですね。
この記事を読んでいただきありがとうございました!これからもちょっとした技術の積み重ねで成長していきたいと思います。
リンク
hr.icon
筆者:的場 漱誠 (X21086)
メールアドレス:suinfo.dev@suinfocus.com