見出し画像

(超初心者向け)ラズパイでPythonを動かす!

はじめに

超初心者向けとは書いてありますが、おそらくこの記事を読んでくれる方の多くはLinuxかPythonに元々興味を持たれていて、今回初めてどちらかを学ぼうという方だと思います。

僕もラズパイでマイクラサーバーを建てたり、SMBサーバー、syslogサーバーを建てることからLinuxを学びました。最近はConohaVPSで作業をすることが多いです。
そして今回、ツイッターの自動化をしたいと思いPythonを学び始めたのですがラズパイで実行するに当たって少し手こずった点があるのでまとめたいと思います。

記事作成日→2021/11/17

環境

Windows10 Pro 64bit

RaspberryPi 4(SDカードは家にあった32GBのもの。メーカー不明)

この記事で最低限使うもの

RaspberryPi
ラズパイの電源(モデルに対応したもの)
32GBのSDカード
WindowsOSのパソコン
USBキーボード
モニター

*ラズパイのモデルは4以降がおすすめです。1Gbpsの通信ができるので後ほど拡張しやすくなると思います。また、SDカードですが32GBより大きいものを使ってもあまり意味がありません。なので32GBのものを用意しましょう。詳しいことは専用の記事をお読みください。

RaspberryPiを起動しよう!

ラズパイの電源はまだ刺さないでください。最初にmicroSDカードにOSを入れます。

パソコンに「Rasberry Pi Imager」をインストールしてください。

終わったらimagerを起動します。

スクリーンショット 2021-11-17 213908

こんな画面が出てきましたね。

そうしたらmicroSDをパソコンに刺します。認識されたら、Storageの項目で刺したSDカードを選択してください。

次にOperating Systemを選択していきます。クリックすると色々な項目が出てくると思いますが、今回は「Rasberry Pi OS(other)→Rasberry Pi OD Lite(32-bit)」を選択していきます。

スクリーンショット 2021-11-17 214248

この画像の上にあるOSですね。

ストレージとOSの選択ができたら一番右のWRITEが白くなるのでクリックして書きこみます。

continueと表示され、終わったことを確認したらパソコンからSDカードを取り出します。

次はラズパイ周りを整えます

ラズパイにキーボードを差し、モニターと接続します。LANケーブルもさしておきます(wifiでの接続もできますが、少し複雑になってしまうのでここではイーサネットを使うことを前提とします)。起動後につないでも良いのですが、僕の場合たまに映像出力がされないことがあったので先につないでしまいます。

そしてSDカードを挿入します。

全てが完了したら電源をラズパイにつないでください。なにやら赤いランプが点いていると思います。これはラズパイに電力が正しく供給されていることを示します。

緑のランプも点滅していると思いますが、これはラズパイが正しく起動できている証です。仮に赤いランプは付いているのに緑のランプが点かない場合はOSが正しくインストールされていないなどの問題が考えられます。

初期設定

次に進みます。

モニターがカラフルになった後、文字が一気に流れ始めると思います。しばらく放置していてください。

raspberrypi login:

と最後の行に表示されたら操作ができます。

この真っ黒な画面にコマンドを入力して操作していくのが基本的なやり方です。マイクラでコマンドを打ち込むのと似ています。

まずはログインからしていきます。ラズパイには初期の設定としてpiというユーザーが設定されているのでひとまずこのユーザーとしてログインします。

raspberrypi login: pi
Password:

loginにはpiと入力し、Passwordにはraspberryと打ち込みます。おそらく、パスワードの欄には入力しても何も表示されないとは思いますが、これはセキュリティを高めるために打ち込んだパスワードは表示されない仕様になっているので、気にせず打ち込んでenterを押します。

すると

pi@raspberrypi:~ $

と表示されると思います。これでコマンドを入力し操作できる状態になります。

まずはラズパイのsshを有効化しましょう。こうすることによってラズパイにつないだキーボードからではなく、パソコンからの操作ができます。

pi@raspberrypi:~ $ sudo raspi-config

と入力してください。きっと青い画面が出てくると思います。キーボードの矢印で項目を移動でき、enterで選択できます。

「Interface Options→SSH」

と移動し選択します。なにやら警告っぽいものが出ますが構わず有効化してください。

取り合えずこれでSSHは使えるようになりました。他にもLocalisation Optionsで時間の設定などを行えます。もしPythonで定期的にプログラムを実行する場合、時間指定をしても初期設定ではイギリスの時間で実行されてしまうので、変更したい場合は変更しましょう。

そうしたら矢印キーの「→」を押し、finishを選択してください。

次にSSH接続するためにラズパイのIPアドレスを確認します。アドレスという通り、ネットワークに接続している機器にはネットワーク上ので住所が割り当てられます。それがIPアドレスです。

ネットワークと言っても家の中のネットワーク(ローカルネットワーク)での住所なので、外でその接続しようとしても不可能です。後ほど外でも接続できる方法をご紹介しますのでお待ちください。

pi@raspberrypi:~ $ ifconfig

と入力してください

スクリーンショット 2021-11-17 221520

おそらくこのような画面が出てくると思います。

必要な情報はeth0にあるinet 192.168.3.3という部分です。この部分は人によって変わってくるのでご自身のものを覚えておいてください。

もうひとつ必要な情報としてデフォルトゲートウェイのIPアドレスが必要です。おそらく多くの方が192.168.1.1などの192.168.〇.1だとは思います。知っている方は次に各項目を飛ばしてください。しかし分からない場合はこのまま読み進めてください。

デフォルトゲートウェイ

次にパソコン(windows)でコマンドプロンプトを開いてください。そこに

arp -a

と入力してください。するとインターネット アドレス 物理アドレスという項目が出て下にいろいろなIPアドレスが並んでいると思います。

これらの内「動的」となっているipアドレスをgooglechromeなどの検索エンジンに入力し検索します。

ほとんどの場合拒否されるとは思いますが、ユーザーやパスワードの入力画面が出るものがあると思います。それがおそらくデフォルトゲートウェイのIPアドレスです。複数のルーターをつないでいる方はいくつかユーザーやパスワードの入力画面が表示されるものがあると思うのですが、人によってさまざまなので詳しくは別の記事を読むか、とりあえず192.168.〇.1となっているものを覚えて次に進んでください。

SSHでパソコンから操作しよう!

おそらく、ラズパイでの操作はこのようなサイトからのコピペができないので不便だと思います。

なので先にパソコンから遠隔操作できるようにします。

Cygwin64 Terminal」というソフトをパソコンにインストールしてください。

終わったらソフトを起動してください。

スクリーンショット 2021-11-18 163601_LI

緑で消してあるところに(パソコンのユーザー名)@(パソコンの名前)という表示がされていると思います。

このCygwin64はwindows上でラズパイと同じようにコマンド操作できるソフトです。

なので$の右側にコマンドを打ち込んで操作ができます。ssh接続でラズパイを操作するにはまず

$ ssh pi@(ラズパイのIPアドレス)

と打ち込みます。(例→$ssh pi@192.168.3.3)

ポート番号の指定など細かいこともできますが、デフォルトではこれで十分です。

すると、起動したときと同じようにユーザー名とパスワードを求められるので入力しログインします。

IPアドレスの固定

ここまでお疲れさまです。しかしここで注意することがあります。

IPアドレスはその時の状態によって変わってしまいます。つまり、ラズパイを再起動したら別のIPアドレスが割り当てられてしまい、次にパソコンから接続しようと思ってもつながらなくなってしまうことがあります。

なので再起動してもIPアドレスが変わらないようにラズパイの設定でIPアドレスが変わらないようにします。

pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf

と打ち込んでください。

nanoはファイルを編集するコマンドで、「メモ帳」のような役割をします。なので右側の「/etc/dhcpcd.confというファイルを編集します」という意味のコマンドになります。nanoの代わりにviを使う方もいますがnanoのほうが直感的に操作できるのでおすすめです。

コマンドを打ち込んだ後になにやら入力するよう言われるかもしれませんが、それはラズパイのパスワードを入力すればいいです。

元々sudoは管理者権限で実行という意味なので、セキュリティ上パスワードの確認は必要なことなのです。

スクリーンショット 2021-11-18 164821

するとこんな画面が出てくると思います。

この一番下に、

interface eth0
static ip_address=192.168.3.3/24
static routers=192.168.3.1
static domain_name_servers=8.8.8.8

このような項目を入力します。カーソルの移動は矢印キーで行えます。一番下の行は今は必要ないので入れなくても構いません。

static ip_addressには固定したいラズパイのIPアドレスを入力し、static routersには先ほど調べたデフォルトゲートウェイのIPアドレスを入力してください。

これが終わったらctrl+Oを押した後enterを押して内容を保存し、ctrl+Xで元の画面に戻ってください。

この設定を有効化するにはラズパイの再起動が必要です。何かファイルを変更した後に有効化するため再起動することは多くあるので覚えておきましょう。

pi@raspberrypi:~ $ sudo reboot

これを打った後、何もせずに再起動するのを待ちましょう。

少し(大体1分くらい)待ったら、再びパソコンからラズパイに接続します。

セキュリティを高めよう!

この項目は必ずしも必要ではありませんが、ラズパイをデフォルトのユーザーのまま使うことはセキュリティ上良くありません。

NASAもネットワークに接続された一台のラズパイからハッキングされたことがあるので、心配な人はやっておくとよいと思います。

まず、piのユーザー名とパスワードを変更します。これはこちらの記事のほうが分かりやすいと思うのでこちらを参考にやってみてください。

これだけでも大分改善されましたが、もしラズパイをグローバルネットワーク上に公開するならこれだけでは不十分かもしれません。

公開鍵と秘密鍵というのも作っておくと安心です。これだけでも別の記事になってしまうのでここに僕が参考にした記事を置いておきます。

また、余分な話ですが、ポート開放をいずれしたくなる時期が来ると思います。このとき、ポート開放は慎重に行ってください。

元々Linuxはオンラインでの活動に強いOSなのですが、やはり対策をしないと攻撃されてしまう心配があります。ファイアーウォールや別にウィルス対策を導入しておくと安心かもしれません。

ngrokを導入しよう!

この項目も必ず必要というわけではありませんが、外出中にラズパイを操作したいと思うことがあるかもしれません。

そういったとき、今の設定のままではできないのでngrokというサービスを使います。

自宅のルーターの設定を変えることで外からつながるようにはなりますが、ドメインの購入などお金がかかるのでまだ何をするか分からない時期はngrokで代用するのが良いと思います。

また、ngrokでラズパイをグローバルに公開するときは前の項目で紹介した記事を参考にしてパスワードだけでも変えることをお勧めします。

$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip

でngrokのzipファイルを取得します。もしできなければngrokのダウンロードページでLinux ARM版のURLを確認し、wgetの後に入れてください。

$ sudo unzip ngrok-stable-linux-arm.zip -d /usr/local/bin

次に上のコマンドを打ってzipファイルを展開してください。-dの後は解凍するディレクトリを示しています。

$ ngrok version

全て終わったらこのコマンドを打ってngrokのバージョンが表示されることを確認してください。表示されたら正しくインストールできています。

ここでngrokの公式サイトよりサインインして、authtokenを入手してください。しなくてもngrokは使えますが、時間で接続を切られてしまいます。「Getting starting→Setup & Installation」の項目で確認できます。

確認出来たら、下のコマンドを打ってください。

$ ngrok authtoken XXXXXXXXXXXXXXXXXXXXX

Xの部分は先ほど入手したauthtokenをそのまま入れてください。

これでようやくngrokが使えるようになりました。使い方は簡単で、パソコンからではなく直接ラズパイに以下のコマンドをいれてください。

$ ngrok tcp 22 -region=ap 

SSHで使う22番ポートをアジアサーバーで解放するというコマンドです。-regionの右側を変えることでサーバーの場所を変えられますが、日本に住んでいるならアジアサーバーのほうが応答が早いです。

他にも、アドレスを固定したりできるみたいですが僕はやっていません。

すると

スクリーンショット 2021-11-18 184811

こんな画面が出てくると思います。

ここで使う情報はForwardingしかありませんので、ここだけ何かにメモしてください。外出先でラズパイにつなぐには

$ ssh pi@X.tcp.ap.ngrok.io -p XXXXX

と打てばよいです。Xの部分は各自の与えられたものを使用してください。-pの後ろのXはポート番号です。Forwardingの~ngrok.io:XXXXXとなっているXの部分を使ってください。

Pythonを使いやすくする

ここまでお疲れさまです。ラズパイにはもともとPythonを実行する環境が整っていますが、使用するバージョンを変えるのがデフォルトでは面倒なのでpyenvを使います。

$ sudo apt install git

でgithubをインストールします。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ exec $SHELL
$ sudo reboot

このコマンドはこのサイトを引用させていただいております。これでgithubが利用できるようになります。元のサイトではライブラリのインストール方法も書かれているので詳しくはそちらでお願いします。

再起動が終わったら

$ pyenv install X.X.X

で必要なpythonのバージョンをインストールしてください。Xには使いたいバージョンを入れてください。

もしデフォルトで使いたいpythonのバージョンを変えたい場合は

$ pyenv global X.X.X

でバージョンを変更してください。

Pythonを使う

パソコンで何か.pyファイルを用意してそれをラズパイに移すことで実行することもできますが、手順が複雑になるので今回はラズパイ上でプログラムを作ってしまいます。今回は有名なHelloWorldをプリントするという単純なもので解説します。

$ nano /home/pi/HelloWorld.py

というファイルを作ってください。piの部分は各自のユーザーネームに変更してください。またHelloWorld.pyも各自で作りたいプログラムに適した名前にしてください。先ほどnanoはメモ帳みたいなものだと言いましたが、このように新しいファイルを作ることもできます。

Linuxではディレクトリは/で区切られます。そのため、このコマンドはホームディレクトリにあるpiディレクトリの中にHelloWorld.pyというファイルを作るという意味になります。

作ったファイルに、

print("HelloWorld")

と打ち込み先ほどと同じようにctrl+Oで保存してctrl+Xで元の画面に戻ってください。

そうしたら

$ python /home/pi/HelloWorld.py

で実際にプログラムを実行してみてください。画面にHelloWorldと表示されるはずです。

このようにすれば複雑なプログラムでも同じように実行できます。

ただ、おそらくプログラムは何度も書き換えることが多いと思うので、今いるディレクトリを/home/piに変えてしまうことで実行するときのコマンドを打つ手間を減らせます。

Linuxはこのコマンドで操作しているときにも自分が今どのディレクトリにいるかが決まっています。Windowsで言うとエクスプローラーでどこかのフォルダに常にいる状態になります。現在はエクスプローラーを開いてCドライブを開いた直後のような状態です。なので自分のホームディレクトリに移動して操作しやすいようにします。

$ cd /home/pi

とコマンドを打つと今いるディレクトリを/(一番上のディレクトリ)から/home/piに移動できます。

そうすると

$ python HelloWorld.py

と打つだけで実行できます。なのでどれだけ奥まった場所にプログラムを保存しようと、cdコマンドを使うだけで簡単にリトライできる環境を作れます。元のディレクトリ(デフォルトの一番上にあるディレクトリ)に戻りたいときは、

$ cd /

と打つだけです。

ディレクトリの移動はLinuxをいじっていると良くするので、覚えておくといいかもしれません。

オマケ

ここで今回書きたかったことはすべて書き終わっているのですが、ここから先どうやって拡張していくかの方針的なものを残そうかと思います。

「cron」で自動化する

cronというものを使うことで定期的にプログラムを実行したり、コマンドを実行できたりします。

例えばラズパイのバックアップを自動でとったり、自動でアップデート、アップグレードできるようになります。

また、IoTでも、定期的に湿度や温度を集計してグラフにしたり、部屋のエアコンを自動で点けたり消したりなどいろいろできます。

何かのサーバーにする

せっかくラズパイを持っているのですから何か有効活用したいと思います。

そこで、ラズパイでWEBサーバーを立てるなど何かのサーバーを立てるとよいかもしれません。

もちろん本格的な業務には向きませんが、趣味で作る程度ならば消費電力も少ないですし実験的に建てたり消したりできるので便利です。

ノートパソコンをサーバーにする方もいるようですが、バッテリーを抜いておくなど正しい利用をしないと家が火事になるなど悲惨なことになります。

その点ラズパイならそのような心配もあまりありません。

SMBサーバーにすることで、オンラインストレージ化することもできます。

電子工作

cronの項目でも書きましたが、ラズパイはIoTの制作にうってつけの機械です。

秋葉原などで電子工作キットのようなものも売っています。簡単なものでも完成したときの喜びはやはり嬉しいものがあります。

せっかくPythonもラズパイも始めたのですから、手を付けてみるもはアリだと思います。

終わりに

ここまで読んでいただきありがとうございます。

僕もまだいろいろと学び始めたばかりで分からないことが多く、自分の中で情報が整理できなくなったので今回このような形でまとめました。

おそらく専門の方がみたら色々指摘したくなる内容だとは思いますが、初心者の視点で書いているので間違っている個所や分かりにくい箇所があれば教えて頂けたら幸いです。

確認できましたら修正いたします。

また、何かの記事を書こうとは思います。ですが、大学受験があるのでしばらく更新が止まると思います。

この記事が気に入ったらサポートをしてみませんか?