78

この記事は最終更新日から3年以上が経過しています。

@mascii

Raspberry Piの無線LANをmicroSDで簡単に設定するためのツールを作った

以前に書いたRaspberry Piの無線LANをmicroSDで設定するという記事では、RaspbianのOSイメージが書き込まれたmicroSDにあらかじめwpa_supplicant.confというファイルを作成しておくことで、無線LANの設定ができることをご紹介しましたが、ブラウザ上でSSIDとパスフレーズを入力するだけで簡単にwpa_supplicant.confを作成できるツールを作成しましたので、紹介します。
wpa-supplicant-conf-tool.png

動作環境(確認済み)

  • Raspberry Pi Zero W
    • Raspbian Stretch Lite 2017-09-07
      • イメージをMicroSDに書き込んだ直後の状態
  • PC(macOS Sierra)
    • Google Chrome
    • Firefox
    • Safari
  • PC(Windows 10)
    • Internet Explorer 11
    • Edge

Raspberry Piの内蔵の無線LAN機能では2.4GHz帯のアクセスポイントのみ利用できます。
ルーターのデフォルトの設定では、2.4GHz帯のアクセスポイントのSSIDにはgやGといった文字が含まれていることが多いです。

使用方法

wpa_supplicant.confというファイルをmicroSDのルートディレクトリに作成していきます。
このファイルをmicroSDのルートディレクトリに作成すると、Raspberry Pi起動時に自動でRaspbian上の/etc/wpa_supplicant/wpa_supplicant.confを上書きするようになっています(microSDのルートディレクトリに作成したファイルは削除されます)。

https://mascii.github.io/wpa-supplicant-conf-tool/にアクセスし、Raspbianで利用したいSSIDとPassphrase(WPAキー)を追加していきます。
WPAキーが設定されていないアクセスポイントにも対応しておりますが、自己責任でお願いします。

wpa-supplicant-conf-tool.gif

Raspbianで利用したいSSIDとPassphrase(WPAキー)を追加し終えたら、「wpa_supplicant.conf作成」ボタンをクリック(またはIE11,Edge以外のブラウザの場合、右クリック > 保存)し、Raspbianイメージが書き込まれたmicroSDにwpa_supplicant.confというファイル名で保存します。
ご一緒にいかがですか?的な感じで、「ssh.txt作成」ボタンで空のssh.txtも作成できます。これを一度Raspbianイメージが書き込まれたmicroSDに保存しておかないとSSH接続ができませんので、ぜひご利用ください。

これら一連の操作は全てブラウザ上のJavaScriptで処理されていますので、サーバーへSSIDやパスフレーズが送信されるといったことはありません。

また、このツールで作成されるwpa_supplicant.confのPSKは平文ではなく、SSIDとパスフレーズの組をハッシュ化した256bitのキーを用いております。

wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="test"
    psk=899f089ca767f38265424c83ce83193ab145571c0a71e1aca4487d615c411f34
}
network={
    ssid="test2"
    key_mgmt=NONE
}

SSH接続をする

macOSでZeroconf(Bonjour)を利用するケースを、Raspberry Piの無線LANをmicroSDで設定するで紹介しております

ツールを作った理由

Vue.js + webpackで何か実用性もあるMVP(Minimum Viable Product)を作ってみたかったことと、以前に書いたRaspberry Piの無線LANをmicroSDで設定するという記事の手順をもっと簡単にできそうだと感じていたからです。

npmパッケージのpbkdf2 crypto-jsをimportして使うことでパスフレーズのハッシュ化ができること、ブラウザ上のJavaScriptで指定したファイル名・内容のファイルをダウンロードできることがわかり、Vue.jsで作られたToDoアプリを参考にすれば実用性もあるツールが作れそうだ、と思いました。
そして急遽、We Are JavaScripters! @11th【休日もくもく会】という勉強会に申し込んで、もくもくと作ってみることにしました。
家でまったりしているよりも集中でき、普段からVue.js使っている方からアドバイスいただけたりするので、休日のもくもく会はとても良い感じでした。

今回作成したツールのビルド前のソースコードはこちらで公開しています:
https://github.com/mascii/vue-wpa-supplicant-conf

(2017/10/07追記)
Vue.jsの代わりにReactを用いたバージョンを作ってみました。
Vue.jsからReactに変更するにあたり、まずESLintの設定とwebpackの設定を行う必要がありましたが、Vue.js版での経験のおかげで直ぐに設定できました。
React版を作っているときはひたすらESLintに怒られ続けたものの、Vue.jsで書いていたときには気づけなかったこともあり、とても良い勉強になりました。
また、Vue.jsのv-bindv-forの便利さや、コードのシンプルさにも気付かされました。

React版のビルド前のソースコードはこちらで公開しています:
https://github.com/mascii/react-wpa-supplicant-conf

(2017/11/27追記)
webpackでビルドしたJavaScript, CSSをHTMLファイルに埋め込むようにしたため、HTMLファイル単体をダウンロードしておくだけでローカル(インターネットに繋がらない環境)で利用できるツールになりました。
wpa_supplicant.conf作成_html_file.png

詳しくはこちらの別記事を参照してください:
JavaScript, CSS, 画像ファイルをHTMLに自動で埋め込む方法

(2018/02/24追記)
Vue.jsより軽量なHyperappに変更し、ファイルサイズが62KBほど削減しました。

詳しくはこちらの別記事を参照してください:
Hyperapp, React, Vue.jsで同じサンプルアプリを作ってサイズを比較してみた

LT発表

この設定ツールについて、IoT縛りの勉強会! IoTLT vol.33 @ LINEで「あなたのお家に眠るラズパイを救出したい」(スライド)というタイトルで発表いたしました。
slide_0.jpg

Raspberry Piをヘッドレス(ディスプレイ、キーボード、マウスなし)で利用するための手順を、OSイメージ書き込みにEtcher、無線LAN設定に本ページで紹介した設定ツール、SSH接続の際にZeroconfを用いる方法で、初心者の方々に向けて紹介いたしました。

参考サイト

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
mascii
JavaScript, RaspberryPi, Arduino, ESP32の記事が多めです。大学院での専攻はグラフ理論でした。 Zenn: https://zenn.dev/mascii
visasq
ビザスクは「知見と、挑戦をつなぐ」をミッションに、世界で1番のナレッジプラットフォームをつくっています。 様々なニーズにつなぐことで、実際に経験したことで得られた知識や意見を、知見として価値最大化します。組織、世代、地域を超えて、知見を集めつなぐことで、世界中のイノベーションに貢献します。

コメント

はじめまして、いつも楽しくみさせてもらっています。
質問なのですがこちらのツールを使って例えばセキュリティのない無料wifiにも適応できるのでしょうか?
よろしくお願いいたします。

0

@raspberrylovetanaka さん

WPA2による認証がない無料WiFiについてのご質問かと思いますが、自動で認証画面が表示される仕組み(Captive Portal)がないものであれば利用できるのではないかと思います。

WPAキーが設定されていないアクセスポイントにも対応しておりますが、自己責任でお願いします。

1

返信ありがとうございます、その場合仕組みとしてはSSIDだけを入力してパスワードは空白で試してみるといった感じで大丈夫でしょうか?

0

@raspberrylovetanaka さん

Captive Portal の有無はスマホまたはPCで接続してみることでわかるのではないかと思います

  • Captive Portal がない場合
    • SSIDだけを入力してパスワードは空白で試してみる感じです
  • Captive Portal がある場合
    • (僕も試したことがないので、うまく行くかわかりませんが、以下で繋がるかもしれません)
    • RaspbianはLiteではないGUIがあるものを利用する
      • ディスプレイ、マウス、キーボードが必要です
    • SSIDだけを入力してパスワードは空白で本記事の内容を試す
    • GUI上でブラウザを用いて認証する
      • おそらく、付属ブラウザでhttpのページ(http://www.yahoo.co.jp/ とか)を開こうとすると認証ページが開けるかと
1

丁寧に解説してくださって大変感謝しています。
上記に記載されていることを試してみたいと思います。
Captive Portal という単語も今回初めて知りましたし、他に解説の記事もとても分かりやすいおかげで色々問題を解決することができました。
今後も記事の更新楽しみにしています。
ありがとうございました。

1
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
祝 Azure Static Web Apps GA!Static Web Apps のあなたの「いち推し」ポイント、教えてください
~
Docker上のみでシステムを作るときの構成
~