OSMタイルサーバーにしたラズパイをWi-Fiのアクセスポイントにしてみる(改)


create_apのプロジェクトはメンテ停止のようですね(This project is no longer maintained.)。

方針転換して改めてアクセスポイントを2通りの方法で設定してみます。

まぁ以前のバージョンは結構不安定だったということもあるのですが…。

 


インターネット環境がない、あるいはインターネットに接続できない端末から、Wi-Fi接続で地図をブラウズしてみましょう。

スマホならすでにGoogle Mapsという便利な環境があるので問題なしですが、Wi-FiとGPSしかないタブレットなどは?近くにインターネットにつながるアクセスポイントが無い場合は?(だいぶ極端な想定ですが)

タイルサーバーにしたラズパイで現在地を確認してみましょう。

こんな感じです。

端末をダイレクトにラズパイ(タイルサーバー)に接続してブラウズしてみます。

 


ラズパイをタイルサーバーにするのはこのページこのページ参照

なおラズパイをアクセスポイントにする場合、起動時外部ストレージがUSBポートに挿入されていると起動が止まってしまうことがあります(なぜ?USBストレージに何かを見に行ってる?原因は分かりません)。

タイルデータは起動用MicroSDに保存するようにしておきます(レベル18のデータは大きすぎるので今回は省略しておきます)。

/var/lib/mod_tile/ajt/0 1 2 3 …. 17

パーミッション設定

 


アクセスポイント設定

このページなどでWi-Fiを設定していたような場合、netplanのWi-Fi設定を削除しておきます。

cd /etc/netplan
sudo nano 99-network-config.yaml
wifisの記述部部分を削除

以下のファイルも削除しておきます。
sudo rm /var/run/wpa_supplicant/wlan0

① wpa_supplicantを使ってみます

 

以下のような設定値を追記。

<SSID>と<パスワード>は任意に設定してください。

例:SSID->raspiap、パスワードー>ap123456

 

ctrl_interface=/var/run/wpa_supplicant
network={
ssid=”<SSID>”
mode=2
key_mgmt=WPA-PSK
psk=”<パスワード>”
frequency=2437
}

 

 

DHCPサーバのインストールと起動

 

以下のような設定値にします。デフォルトからは、authoritativeのコメントアウトの解除とsubnetの追記でいけると思います。

 

default-lease-time 600;
max-lease-time 7200;

ddns-update-style none;
authoritative;

subnet 192.168.12.0 netmask 255.255.255.0 {
range 192.168.12.10 192.168.12.100;
option routers 192.168.12.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.0.0.1;
}

 

以下を起動します。

 

ラズパイを再起動

再起動後、テストしてみます。

こういう感じになります。

端末からの接続の待ち受け。

 

端末側では一応アクセスポイント(例:raspiap)が見えていると思います。
ただ、アドレスを振り出せないので、SSHで接続しようとしても
connect failed: EHOSTUNREACH(no route to host)
みたいなエラーになります。

 

ブート時の自動起動の設定をしておきます。

以下を記述

auto wlan0
iface wlan0 inet static
netmask 255.255.255.0
broadcast 192.168.12.255
address 192.168.12.1
wpa-conf  /etc/wpa_supplicant/wpa_supplicant.conf

 

isc-dhcp-serverを編集

INTERFACESv4=”wlan0″

 

自動起動するようにします。

 

ラズパイ再起動

 

② hostapdを使ってみます

DHCPサーバの起動

 

default-lease-time 600;
max-lease-time 7200;

ddns-update-style none;
authoritative;

subnet 192.168.12.0 netmask 255.255.255.0 {
range 192.168.12.10 192.168.12.100;
option routers 192.168.12.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.0.0.1;
}

 

 

hostapdインストール

 

設定

auto wlan0
iface wlan0 inet static
netmask 255.255.255.0
broadcast 192.168.12.255
address 192.168.12.1

 

DAEMON_CONF=”/etc/hostapd/hostapd.conf”

hostapd.confを作成しておきます。

hostapd.confを設定

interface=wlan0
hw_mode=g
channel=1
auth_algs=1
wpa=2 
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ssid=<SSID>
wpa_passphrase=<パスワード>

 

hostapdを再起動

 

ラズパイを再起動

 

 


タブレット側

設定ー>Wi-Fiー>現在のネットワークをraspiapに変更

例えばこんな画面です。

新しいアクセスポイントに変更します。

 

SSHで接続するとこんな感じです。

 


タイルサーバーからの地図配信を確認してみる

このページこのページでタイルサーバーを作った際、確認用のlf.htmlファイルを作成しましたが、そこではLeafletライブラリ等をWebサイトから読み込む仕様になっていました。

今回のアクセスポイント化でインターネットを使って外部にアクセスすることはできません(NATの設定が必要)。

なのでライブラリ等はローカルに持っておく必要があります。

最小限のスタイルシートやJavaScriptライブラリなどLeaflet一式をzip化しました。ダウンロードして解凍後SAMBAなどで

/var/www/htmlにコピーします。

cssとjs、imagesの3つのフォルダーのパーミッションを変更しておきます。

 

【lf.html】

注:
attributionに記述している©は大事です。OpenStreetMapのデータを使っている上でのルールでありマナーですので必ず表示しておいてください。

 

アクセスしてみます。

http://192.168.12.1/lf.html

こういうふうに表示されればOK。

 


現在地表示のWebサービスを作ってみる

GPSが実装されているタブレット端末等が前提です。

lf.htmlにgeolocationを記述する場合

これで現在地を測位して表示しますが、ブラウザーなどで表示しようとしてもhttpでアクセスすると現在地情報の利用は許可されません。

現在、たいていのブラウザーはhttpsでアクセスする必要があります。

タブレット等の端末側では事前に「設定」で位置情報利用を許可しておきます。

次いでラズパイ側でApacheでSSL通信を使えるようにします。

SSLモジュールとバーチャルホストを有効化しておきます。

nmapで通信ポートの確認

443ポートがオープンされています。

これで、サンプルのSSL証明書でSSL通信が可能になっています。

geolocationでGPSの値を取得して地図に表示するhtmlファイルです。

【lf.html】

以下にアクセス

https://192,168.12.1/lf.html

サンプルSSLなのでこんなメッセージが出ます。

問題ないのでアクセスしてください。

許可してください。

このボタンをクリック(タップ)すれば、測位が開始されます。

上記のコードでは3秒のインターバルで測位され、タイムアウトは1分です。

測位が完了すると、その場所に移動して、赤い十字が表示されます。

 


ラズパイ・タイルサーバーをポータブルにする

ラズパイは3B/B+なら5V/2.4Aくらいで動作します。

モバイルバッテリならこの程度の出力を持つものは結構安く手に入ります。

こんな構成でいけます。



なお、本当にラズパイが起動しているかどうかは、端末側のWi-Fi設定でraspiap(アクセスポイント)が見えているかどうかで判断できます。

見えていなければ再起動してお待ちください。


タイルデータをMicroSDに持っている場合は問題ないですが、なんか理由があってMicroSDは最小構成の16GBでタイルデータを外部ストレージに持たせた場合はどうでしょう?

起動時にUSBメモリーを挿したままだと、起動が止まってしまうことがあります(原因は?ですが)。
起動後に挿入するにしても、タブレットからSSHで接続してマウントするのも面倒です。
ここはひとつ、起動後にUSBストレージを挿入したら自動で検知して、マウント実行し、抜いたらアンマウントするように設定してみます。

ラズパイ起動後にUSBストレージを挿入したら自動で検知して、マウントする

 

そもそもタイルサーバーって何?

シングルボードコンピューターにOpenStreetMapのタイルサーバーを立ててみる

 


端末にGPSがない!場合は?

ラズパイにGPS(モジュールは2000~3000円から組立済みの製品で7000円くらい)


端末はなんでもいいの?

中古のSIMなしスマホやタブレットでやってみましたが、問題なしでした。

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*