最低限のものでラズパイをセットアップする

ラズパイのインストール手順が簡単になっていて感動した。けれど、その後のセットアップにディスプレイやキーボードを用意したりと手間な記事を多くみかけるので、どうにか最小構成でインストールからセットアップまでを完結できないかと思い、記事を残すことにした。

PCとラズパイはハブにつないで終わり。基本的にSSHでログインして最低限の設定をして、VNC越しにMacbookからラズパイを操作するという流れ。外部ディスプレイなしでGUIで遊べる。

VNCMacbookからラズパイにアクセス

今回、以下のAnkerのハブとEthernetアダプターを使用した。

Anker PowerExpand Direct 7-in-2 USB-C PD メディア ハブwww.ankerjapan.com

Anker PowerExpand USB-C & 2.5Gbps イーサネットアダプタ | アダプタの製品情報 – Anker Japan公式サイト

このハブだけで、ラズパイの OS イメージを SD カードに書き込み、Type-Aの USB ポートからラズパイの充電ができる。ただ Ethernet は別に必要なので、アダプターを介してハブの Type-C ポートに接続するけど。ちょっと値段が高いので、ラズパイのためだけに買うのは悩むけど、Macbook の常備アイテムとしても有用なので、買って損はしないと思う。

 

インストール手順

まず、Macbookでラズパイのイメージ書き込み用ソフトをつかって、SDカードにイメージを書き込む。ここで書き込む前に、SSHを有効にしておくこと。ほかはデフォルトのままでOK。

ネットワーク設定

ラズパイからインターネットに出るためには、Mac側でインターネット共有が必要。下図のとおり、設定/共有画面を開き、「共有する接続経路」を WiFi に、「相手のコンピュータでのポート」を USB 10/100/1000 LAN にして、「インターネット共有」を選択。なお、USB 10/100/1000 LAN は今回使用したAnkerのEthernetアダプタの名前なので、違うものを使用した場合、適宜読み替えてほしい。

Mac側のネットワーク共有設定

あと、Macbook側でDHCPをマニュアルで設定する。下図のように今回は 192.168.3.1 として、家のルーターのアドレスと被らないようにした。

DHCPの設定

これでラズパイはMacbookWifiを介してインターネットに出られる。

 

VNCサーバーを起動

電源をいれたら数分待ってラズパイの起動を待つ。インストール時にSSHを有効にしているので、ラズパイが起動すればSSHサーバーが起動してログインできる状態になる。早速、ターミナルを開き以下のコマンドでSSHログインする。

$ssh pi@raspberrypi.local

もしログインできなければ、ネットワークの設定に問題があるので間違いがないか確認してほしい。

VNCでログインする前に、ラズパイのIPアドレスを ifconfig で調べておく。今回 192.168.3.4というアドレスだった。ちゃんとMacbookで設定したDHCPのアドレスの範囲にいることが確認できる。

ラズパイのIPアドレスを調べる

詳細は以下の公式を参考。

www.raspberrypi.com

 

VNCのインストールができてVNCサーバーが起動すれば、Macbook側にクライアントソフトをダウンロードする。今回サーバーに合わせてRealVNCをつかう。クライアントソフトに、先述したラズパイのIPアドレスを入力して、ユーザー名とパスワードを答えると、以下のようにログインができる。

VNC接続した様子

 

とりあえずこれでGUI越しに遊べるようになった。

これから後の流れは各人でそれぞれだと思うけど、パッと思いつくのは以下のとおり。

  1. ラズパイをスタンドアロンで動かす
  2. カメラを繋いで定点観測する
  3. ディスプレイを繋いでデジタルサイネージをつくる
  4. GPIOで遊ぶ

やはりラズパイは小さいので持ち運びが楽なので、適当なポータブルバッテリーで駆動させて、無線LANの子機を挿せば独立して動かすことができる。ラズパイがスタンドアロンになれば、どこか興味のあるモノや場所をカメラで撮影することができるし、ディスプレイを繋げれば展示場に置いてある広告ディスプレイも作れたりする。

あとはGPIOで遊ぶという流れも。ラズパイはモーターやセンサーを簡単に繋ぐことができるので、いろいろ可能性が広がる。しかもマイコンとは違ってOSが載っているので、カメラで画像処理した結果をトリガーにして、何かを動かすとかができるので、可能性は大きい。

というわけでどんどん遊びましょう。

サクッと、サイトを立ち上げた。

前回の更新からおよそ 10 年が経ち、自分を取り巻く環境はすっかり変わった。とある大学で博士号をとったあとは、田舎の研究所で研究員をしていた。そして流行り病が蔓延するなか、子供が生まれ、今は在宅でソフトウェアエンジニアをしている。この 10 年の出来事をブログに書くほど暇ではないけど、家族3人でのんびり暮らしている。

 

とりあえず何を書こうかなと思い、インターネットに活動の拠点を作ることにしたので、それを書くことにした。拠点をつくる理由などはまた今度の機会ということで。

 

ところで、Google Cloud Platform (GCP)をつかうと、サーバーの立ち上げや DNS 登録などを簡単に済ませることができる。今回はこれをつかってサイトをサクッと公開してみた。

ドメインの購入

haykusho.life を買った。最近、sonohen.life というサイトを知り、lifeドメインはいいなと思い、買ってみた。とりあえず検索して最初に出てきた、お名前.comで 1 年間登録してみたら全体で 1078 円。

ドメイン名..................:hyakusho.life
.life 1年登録×1.........:\190
Whois情報公開代行×1..:\0
Whois情報公開代行メール転送プション×1:\330
ドメインプロテクション×1:\1,078

初年度の登録料は 190 円と安いけれど、次年度は 4,345 円になるので、格段に安いわけではない。それに、お名前.comの管理画面にログインすると、毎回登録更新の画面に遷移したり、メールでいろいろな営業のメールが届くので、あまり良い印象を持っていない。(来年はどこか別の場所で買おうかなと思っている。移行手続きがめんどくさそうな匂いがするけど。)

 

GCPでサーバーの用意

今回、サーバーやDNS周辺の設定は GCPgoogle cloud platform)で済ませた。とりあえず、無料枠で最小限のVMで走らせてみた。すぐWebブラウザ上で端末にSSHログインできるのが嬉しい。また、GCPでは Cloud DNS というサービスがあり、そこに個人ドメインを簡単に登録できた。

 

無料のSSL証明書でサイトを公開

最近だと https で公開するのがデフォルトなので、SSL認証を準備することにする。お名前.com で変えばよいのだけど、1年間で 24,000 円だったので、自分で用意することにした。例えば有名どころだと Let's Encrypt で無料のSSL証明書を発行してもらえる。一見怪しい名前だけど、mozila や cisco などがスポーンサーになっているので信用できそう。なお、証明書は3ヶ月しかないので、都度更新しないといけないことに注意。とはいえ、Certbotをサーバーで動かせば簡単。

 

Certbotインストール手順は公式がわかりやすい。今回は Debian10 の nginx でホスティングしたので、それ用の手順をみた。基本的に指示通りにコマンドを打てばCertbotが証明書をもらってきてくれて、ちゃんと https で公開できるようになった。

hyakusho.life

Arduinoで温度を測ってみた

温度センサーはLM35CAZを使った。
配線はこんなかんじ。

スケッチはこれ。

/* 
  LM35CAZを用いた温度測定(_℃〜_℃)
  シリアルモニターとLCDに表示
*/
#include <LiquidCrystal.h>
#define A_inPin 0      //A0ピンに温度センサーの出力を入れる
float A_val;        // アナログ入力値(0〜203)
float tempC = 0;    // 摂氏値( ℃ )
float temp;          //
int   i;            // 
float sum;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //おまじない程度
void setup(){
  Serial.begin(9600);
  Serial.println("start"); 
  pinMode(A_inPin,INPUT); 
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("temp");
  lcd.setCursor(13, 0);
  lcd.print("deg");
}

void loop(){
  A_val = analogRead(A_inPin);  //arduinoは1ミリ秒間に1000回データ取得できる
  //較正する。(1℃=100mVに対応)
  tempC = (( 5 * A_val) / 1024) * 100;
  sum=0;
  for (i=0;i<=50;i++){
    sum = sum + tempC;
    delay(2); //50<1000*2でないとだめ?
  }
  temp = sum/50; 
  //LCDに表示
  lcd.setCursor(7, 0);
  lcd.print(temp);
  //シリアルに表示
  Serial.println(temp);
  delay(500);  //0.5秒後にデータ取得
}

出力はこんな感じ。

start
29.38
28.89
28.89
28.89
28.89
28.89


あとでまた書き直します・・