皆さん、こんにちは株式会社虹賢舎の川島 賢です。
今日は、Raspberry PiをWifi AP(アクセスポイント)にする方法を共有したいと思います。
ハードウェアとOSの準備
もしまだRaspberry Piのインストールが完了していない場合は、下記の記事を参照してください。
必要なもの
- 動くRaspberry Pi(SDカード、電源、無線アダプター、ケースなど、起動できる状態にしておく)
- LANケーブル(インタネットに接続する)
- USB-シリアルケーブル(無線が作動しない段階でデバッグ用)
Raspberry Pi 2の場合、下記の写真のように、USBのWifiモジュールが必要です。(赤いケースの上に乗っているもの、USBに刺しているのは、マイクです。関係ないです。)
Raspberry Pi 3の場合は、内蔵されていますから、外付けは不要です。
ソフトウェアの準備と設定
gistはこちらです。
https://gist.github.com/Lewiscowles1986/fecd4de0b45b2029c390
日本語のコメントは、私が勉強のために追加したものです、ご参考になれば嬉しいです。
もちろん、すでに他の用途のために、ネットワーク関係の設定がある場合は、関連する設定ファイルのバックアップをとった方がオススメです。
下記のスクリプトを実行した場合、その前のネットワーク関係の設定の一部が上書きされたり、改変されたりすることがありますので、ご注意ください。
私の場合は、クリーンなOSから実行して、問題なく、アクセスポイントが現れまして、アクセスもできました!
#!/bin/bash # # This version uses September 2017 august stretch image, please use this image # # このスクリプトを使うときは、下記のように使う。 # sudo rPi3-ap-setup.sh password wifiapname # ======================================================= # ルート権限かどうか調べる # 数値1 -ne 数値2 : -ne は比較演算子 数値1と数値2が等しくなければ真 not equal # [と]の周りはスペースがないとエラーになる! if [ "$EUID" -ne 0 ] # $EUID==0の場合は、ルートだと then echo "Must be root" exit fi # $#シェルスクリプトに渡された引数の個数 # 数値1 -lt 数値2 : 数値1が数値2より小さければ真 less than if [[ $# -lt 1 ]]; # 引数の数が1より小さければ、「パースワードを設定してくださいね」とメッセージを出す。 then echo "You need to pass a password!" echo "Usage:" echo "sudo $0 yourChosenPassword [apName]" exit fi # アクセスポイントのパスワードを1番目の引数から設定する APPASS="$1" # アクセスポイントのSSIDをデフォルトでrPi3に設定する APSSID="rPi3" # もし引数の数が2だったら、2番目の引数をアクセスポイントのSSIDとして設定する。 if [[ $# -eq 2 ]]; then APSSID=$2 fi # hostapdを一回削除する # yはapt-getに質問されたら、yesと答えるという意味 # qqは静かに、処理する、メッセージを極力出さないようにという意味 apt-get remove --purge hostapd -yqq apt-get update -yqq apt-get upgrade -yqq # # hostapdとdnsmasqをインストールする # hostapdはRaspberryPiに限らず、アクセスポイントにするDaemonのこと # dnsmasqは軽量なDNSサーバとDHCPサーバ apt-get install hostapd dnsmasq -yqq # ヒアドキュメント:複数行の文字列を簡潔に記述するための機能 # EOFの文字が出現するまでの複数行を/etc/dnsmasq.confに追加してね! cat > /etc/dnsmasq.conf <<EOF interface=wlan0 dhcp-range=10.0.0.2,10.0.0.5,255.255.255.0,12h EOF # 上と同様に、/etc/hostapd/hostapd.confに複数行を追加する cat > /etc/hostapd/hostapd.conf <<EOF # 無線LANを使う interface=wlan0 # 動作モード(使用する帯域)を指定する。 hw_mode=g # チャネルを指定する channel=10 # auth_algs=1 # WPA2を使用する wpa=2 # 鍵管理アルゴリズムとしてWPA-PSKを使用する wpa_key_mgmt=WPA-PSK # wpa_pairwise=CCMP # RSN / WPAの共有鍵暗号化方式としてCCMPを使用する rsn_pairwise=CCMP # 上で設定したパスワード wpa_passphrase=$APPASS # 上で設定したアクセスポイントのSSID ssid=$APSSID # IEEE 802.11n を有効にする ieee80211n=1 #既定の WMM パラメータ(IEEE 802.11 draft; 11-03-0504-03-000e): wmm_enabled=1 # ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] EOF # sed 編集するコマンド # -i 入力ファイルの上書き # s 置換 # s/置換条件/置換文字/ 置換条件を置換文字に変換する。最後にgを付けた場合は置換条件に当てはまるすべての文字列が置換される # allow-hotplug wlan0 を削除する sed -i -- 's/allow-hotplug wlan0//g' /etc/network/interfaces # iface wlan0 inet manualを削除する sed -i -- 's/iface wlan0 inet manual//g' /etc/network/interfaces # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf を削除する sed -i -- 's/ wpa-conf \/etc\/wpa_supplicant\/wpa_supplicant.conf//g' /etc/network/interfaces # #DAEMON_CONF="" を DAEMON_CONF="/etc/hostapd/hostapd.conf" に変更する sed -i -- 's/#DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/g' /etc/default/hostapd # 上は色々削除したので、ここで必要な複数行を追加する cat >> /etc/network/interfaces <<EOF # Added by rPi Access Point Setup allow-hotplug wlan0 # アクセスの固定IPを設定する iface wlan0 inet static address 10.0.0.1 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255 EOF # /etc/dhcpcd.conf に denyinterfaces wlan0 を追加する。 >> が重要、上書きではなく追加する! echo "denyinterfaces wlan0" >> /etc/dhcpcd.conf # サービスを自動起動に設定する systemctl enable hostapd systemctl enable dnsmasq # サービスを起動させる sudo service hostapd start sudo service dnsmasq start # 完了メッセージを表示する echo "All done! Please reboot"
いかがですか?
これで、一通り、Raspberry Piでアクセスポイント(Access Point)の設定の流れを把握しましたでしょうか。
上の内容がご参考になれば幸いです!
無事再起動すれば、Wifiアクセスポイントが現れるはずです!
- 将来の発展系としては、Access PointになっているRaspberry Piにウェブサーバーを立ち上げて、そうすると、ブラウザーから、Raspberry Piを制御することができます。
- あるいは、RaspberryPiにウェブサーバーを立ち上げて、RaspberryPiに接続しているセンサーなどの情報をWebに表示する
- Raspberry Piにカメラをつければ、監視カメラにもなります。
様々な応用ができますね。
何かフィードバックがあれば、Twitterの方にでもメッセージ等をいただければ嬉しいです!
最近、これを組み立てました!こちらの記事にまとめました。しかし、組み立てるだけで、少し物足りない感じがします。もうちょっと色々、自分で機能拡張をしたいですね。 https://t.co/7dNJ9JE6cY
— kawashimaken (@kawashimaken1) 2018年3月29日
おまけ
インストール後、アクセスポイントを停止したい場合、下記のコマンドを実行してください。
sudo update-rc.d hostpad disable sudo update-rc.d dnsmasq disable
アクセスポイントを再開させるには、下記のコマンドを実行してください。
sudo update-rc.d hostpad enable sudo update-rc.d dnsmasq enable
[amazonjs asin=”B0718T232Z” locale=”JP” title=”HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード”]