まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:raspberrypi

久しぶりのラズベリーパイネタです。

これまであまり意識することなかったんですが、ラズパイ(Raspbian) をデフォルトのまま使っている時のスワップサイズって 100MB しかないんですね。。
2019011001


ラズパイのメインメモリは 1GB 固定です。サーバー用途メインで、あまり重い作業をしなければこれで足りるのかもしれませんが、デスクトップ用途で使ってブラウザでタブをたくさん開いて・・・という使い方をしていると、結構な確率でメモリ不足になると思います。 というわけで、スワップファイル容量を変更する手順を調べたので以下に紹介します。

Raspbian の場合、スワップファイル容量は /etc/dphys-swapfile というテキストファイルで管理されています。スワップファイル容量を変更するにはこのファイルをテキストエディタで開いて、CONF_SWAPSIZE という変数の値を(メガバイト単位で)指定します。例えば以下の例では 2GB に指定しています:
CONF_SWAPFILE=2048

ただし、2GB 以上の値を指定する場合は同ファイル内にある CONF_MAXSWAP の値も変更する必要があります(32 bit カーネルを考慮しているせいか、この値を変更せずに CONF_SWAPFILE の値だけを 2048 より大きな値に変更してもスワップファイルサイズは 2048 に設定されてしまうようです)。例えば 4GB に設定する場合は以下のようにします:
CONF_SWAPFILE=4096
CONF_MAXSWAP=4096

設定変更後に以下のコマンドで dphys-swapfile を再起動すると、スワップファイルのサイズが変更されます:
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl start dphys-swapfile

2019011002


当たり前ですがスワップファイルはマイクロ SD カード内に作られるため、マイクロ SD カードの容量とも相談して設定する必要があります。またあまり頻繁にスワップが発生するような使い方だと、ただでさえストレージとしては比較的寿命の短いマイクロ SD カードの劣化を意識する必要が出てくるかもしれません。

その場合はラズパイに USB メモリを挿してマウントし、上記の /etc/dphys-swapfile ファイル内の CONF_SWAPFILE でスワップファイルを USB メモリ内に作成するようにしてマイクロ SD カードから退避させる、という方法もあるようです(未確認)。


アマゾンで PC とラズベリーパイをシリアル接続する USB ケーブルを購入しました:
Raspberry Pi ラズベリーパイ用の USB-TTLシリアルコンソールのUSB変換COMケーブルモジュールのケーブル


これ、Windows ではデバイスドライバも提供されていて、Teraterm などでシリアル接続できることがよく知られています。では Ubuntu (16.04) で同様のことができるのか? ということに挑戦してみました。結論としては特別にデバイスドライバを用意することもなく、アクセスすることができました。以下、その手順です。


まずはラズベリーパイの設定(raspi-config)でシリアル接続を有効にします。raspi-config で Interface - Serial を選択します:
2018081701


「はい」を選んでシリアル接続を有効にします:
2018081702


次にラズベリーパイと USB シリアルケーブルとを接続します。USB シリアルケーブルの黒(GND)をラズパイの6番ピン、白(UART TXD(14))を8番ピン、緑(UART RXD(15))を10番ピンにそれぞれ接続します。赤は結線の必要がないので宙ぶらりんのままです:
IMG_2932


次に Ubuntu 側の準備です。実は特別にデバイスドライバを準備することもなく、そのまま認識されます。が、ただ認識しただけでは通信はできないため、そのための準備が必要です。

まず、今回のシリアル通信には cu コマンドを使います。なので、まずは cu をインストールします:
$ sudo apt-get install cu

次にシリアルポートの確認と設定を行います。Ubuntu の USB ポートに USB シリアルケーブルを接続し、次のコマンドを入力して、ちゃんと認識できているかどうかを確認します:
$ ls -l /dev/serial/by-id/

USB シリアルケーブルが正しく認識できていると /dev/ttyUSB0 といった感じで最後に 0(ゼロ)が付いたデバイスとして認識されます。今回は /dev/ttyUSB0 として認識されていると仮定して以下の説明を続けます:
20180814a


/dev/ttyUSB0 の権限を変更します:
$ sudo chmod 666 /dev/ttyUSB0

ここまでの手順で準備が完了しました。最後に cu コマンドで目的のデバイスに接続します。その際にボーレートを 115200 bps に指定して接続します:
$ sudo cu -s 115200 -l /dev/ttyUSB0

成功するとこんな感じでラズパイのログインプロンプトが現れ、ログインできます:
20180814


モニタがないとか、無線LAN がないとか、無線 LAN の環境が普段と違う時(の無線 LAN の設定を変えたい時)でもラズパイを使えて、とても便利な接続方法です。アナログ最強!

 

自宅で動かし続けているラズベリーパイの単体での無停止連続稼働時間が 500 日を超えました:
20171230
(↑ 2017/12/30 時点で 530 日)

無停止で稼働し続けることそれ自体に価値があるとは思っていないのですが、このラズパイからは CPU 温度と CPU 負荷率を1秒ごとに IBM Cloud の Watson IoT Platform に送信し続けており、ずっと記録を残しています(その手順はこちら)。そのデータ元がこのラズベリーパイなので、もう2年近くもデータを連続送信できていることになります。

一方で、「ラズベリーパイは不安定」、「無停止連続稼働にはむかない」という印象を持っている人も少なくないと思います。というわけで自分がこの無停止稼働環境をどうやって運用しているか、(個人的な見解ですが)もしかしたらヒントになりそうな部分を2つ紹介します。

(1) ラズベリーパイ2

使っているモデルはラズベリーパイ「2」です。「3」や「zero」ではありません。個人的には2が一番安定していると思っています。zeroは論外として(苦笑)、3はスペックこそ2よりも上がっていますが、電源供給が不安定という(個人的な)印象です。確かに安定して電源を供給できるケーブルがあれば安定しているのでしょうが、この「安定して電源を供給できるケーブル」を見つけるのがなかなかに難しく、苦労している人も多いと思っています。その点で2はまず問題なく安定した電源供給ができると思っています。実際、自分はラズパイ3も2台持っているのですが、電源供給でかなり苦労しています。

ここまで聞いて「でも2だと標準機能だけでは無線 LAN が使えないからなあ・・」と思った方、次を参照ください。


(2) ネットワークは LAN ケーブル

ラズベリーパイに限りませんが、安定稼働させようとする場合、有線 LAN を使うべきだと思っています。あとトラブル発生時の原因箇所切り分けや、対処に必要な手続きも無線 LAN の方が複雑です。



まとめると「ラズパイ2を使って電源を、そして有線 LAN でネットワークをそれぞれ安定させる」のが鍵ではないかな、と思っています。 が、実際の所はどうなんでしょう?ただラズパイを安定して連続稼働させることに苦労されている方がいたら参考にしてみてください。


ラズベリーパイ(以下「ラズパイ」)は普通にセットアップすると DHCP でセットアップされます。特にラズパイ3では標準で無線LANが使えるので、「無線LANでDHCP」を使う状態でセットアップされるケースが多くなると思います。

ある程度ラズパイを使い続けていると、SSH でリモートアクセスできるようにもして、その結果 DHCP ではなく固定アドレスで使いたくなることがあります。 

無線 LAN が利用できているのでネットワークそのものの設定は有効になっているのですが、DHCP を固定アドレス運用に変える機会があったので、その方法を紹介します。


答は /etc/dhcpcd.conf ファイルに以下の内容を追加する、です:
  :
  :

# 以下をファイルの最後に追加 interface wlan0 static ip_address=192.168.0.10/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1

※ IP アドレス 192.168.0.10/24 、デフォルトゲートウェイ 192.168.0.1、DNS サーバー 192.168.0.1 で設定した場合の内容です。


この変更をした上でラズパイを再起動すると、設定した固定アドレスで起動します。

先日の Maker Fair Tokyo 2017 でラズパイ用の小型 TFT モニタを購入しました:


Raspberry Pi2 / Pi3用タッチスクリーンTFTモニタセット(3.5インチ)



ラズパイ用のモニタにはメーカーやサイズで色々な種類がありますが、僕が購入したのは Physical Computing Lab という会社から提供されている、3.5 インチモニタ(上図)でした。


ラズパイの用途にもよるとは思うのですが、自分の場合はある程度のセットアップをした後は「リモートからアクセスして開発環境として使う」ことが多いです。それができる環境が1万円弱で揃うってすごい時代になったものです。

なお、今までにラズパイで色々やってきた記録はこちらを参照ください:
http://dotnsf.blog.jp/tag/raspberrypi


さてラズパイに直付けモニタは必要か?というと、上でも触れましたが「ある程度のセットアップが済んでいれば」必要ないと思っています。ラズパイが起動して、ネットワークに繋がっていて、IP アドレスが分かっていればリモートから SSH や VNC などでログインして使えばいいわけです。

問題になるのは「ある程度のセットアップを済ます前」です。例えばラズパイが起動して、ネットワークに接続されていても、その IP アドレスがわからないと外部からは接続できません。(MAC アドレス等を使って)外部から IP アドレスを調べる方法がないわけではないのですが、手っ取り早いのは HDMI ケーブルとキーボード&マウスを繋げて、画面で確認する方法です。つまり「モニターが必要なくなる段階になるまでにはキーボードだけでなく、HDMI モニタとケーブルが必要」なのです。キーボードはともかく、モニターを持ち歩くのは厳しい。このジレンマをなんとかしたくて、ラズパイ一体型の小型モニタを購入してみました。

やりたいことは上記のようにセットアップの最終段階、つまり「起動後の IP アドレスの確認」です。この目的のためであれば Window システムを使った GUI である必要はなく(むしろ画面が小さくて使いにくいので GUI でないほうがよく)、CUI(キャラクター端末インターフェース)で起動できれば充分です。というわけで、あまり事例のないキャラクター端末としての小型モニタ利用の手順を、(あらかじめ用意された OS イメージではなく)自分の利用中の Raspbian 環境で使う前提でまとめました。


まず普通にラズパイをセットアップします。使っているイメージは Raspbian Jessie の最新版で、マイクロ SD カードも自分で用意したもので構いません。この時点で HDMI を使っていてもいなくても構いません(IP アドレスが固定なら SSH でも構いません)。また TFT モニタはこの時点でラズパイに取り付けておきます(まだ何も写りません)。

まずラズパイでも他のシステムでも構いませんが、以下のページにアクセスして画面下のほうにある「ドライバー一式」という所で、最新版ドライバーのファイル名を確認してください。2017/Aug/08 時点では LCD-show-160811.tar.gz が最新でした:
http://store.techshare.jp/html/page147.html

2017080801


このファイルをモニタをセットアップしたいラズパイにダウンロードします。あらためてラズパイにログインし、以下のコマンドを実行してドライバーをダウンロードします(ファイル名は上記で確認した最新版ファイルの名前を指定してください、GUI であればブラウザから直接ダウンロードも可能です):
$ wget http://techshare.co.jp/raspiosimage/LCD-show-160811.tar.gz

ダウンロードが完了したらファイルを展開します:
$ tar xzvf LCD-show-160811.tar.gz

LCD-show というフォルダが作られ、その中にドライバファイル一式が入ります。最終的な目標は「キャラクター端末としてモニタを利用する」ことなので、まずこの時点でラズパイを CUI モードに変更します(GUI でモニタを使いたい場合はこの時点でラズパイを GUI モードに変更します)。画面モードを切り替える場合は raspi-config コマンドで変更します:
$ sudo raspi-config

最初にメニュー3番目の "Boot Options" を選択します:
2017080801


次の画面で一番上の "Desktop / CLI" を選択します:
2017080802


次の画面で変更したいモードを選択します。今回は CUI モードで、ログインプロンプトを出した状態で起動したいので、一番上の "Console" を選択します(変更した場合はここでラズパイを再起動します):
2017080803



再起動後、改めてラズパイにログインし、ダウンロードしたドライバを読み込ませた状態で HDMI モードで再起動します(LCD-hdmi コマンド実行後に自動的に再起動します):
$ cd LCD-show
$ sudo ./LCD-hdmi

何度か再起動を繰り返してここまできました。最後にラズパイを TFT モニタモードに切り替えます。改めてラズパイにログイン後、モニタのサイズに合わせて LCDxx-show コマンドを実行します(以下の例は 3.5 インチモニタ用):
$ cd LCD-show
$ sudo ./LCD35-show

このコマンドが成功すると、ラズパイに接続された TFT モニタに CUI コンソールが表示されるようになります。キーボードが接続されていればコマンドを入力してその結果を確認することも可能になりました:
2017080800


TFT モニタ(の解像度)がもう少し大きいものであれば話は違ってくると思いますが、この 3.5 インチはラズパイとほぼ同じサイズで、一体感があります。一方で、このサイズのモニタだと GUI で使うこと自体に無理があると感じています。 そうなると今回紹介したように CUI で使うのが現実的かな、と考えています。

で、CUI で使うための手順紹介をあまり見かけなかったので、自分でやって紹介してみた、というのが今回のブログエントリを書いた経緯でした。 同じように考えている皆さんの参考になれば。


このページのトップヘ