このブログでは、Armadillo IoTゲートウェイ G3(以下Armadillo)をWi-Fiのアクセスポイントとする方法について解説します。
Wi-Fiのアクセスポイントを構築するための方法として、hostapdとDNSMasqを利用したソフトウェアアクセスポイント(SoftAP)の構築手順について記載しています。
さらに、Espressif Systemsのマイクロコントローラ「ESP32」と、ESP32の無線モジュールである「ESP-WROOM-32」を使用してArmadilloに接続し、GPIOを制御するシミュレーションを行います。
1.hostapdの設定
インストール
[armadillo ~]# apt-get update
[armadillo ~]# apt-get install hostapd
hostapdの動作確認
hostapdの動作確認を行うため、テスト用のhostapd設定ファイルを作成します。
hostapd_test.confを作成し、以下の設定を記入してください。
[armadillo ~]# vi hostapd_test.conf
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=atmark-test
channel=10
#
作成したテストファイルを、以下のコマンドで実行してください。
[armadillo ~]# hostapd hostapd_test.conf
手元のスマートフォンやパソコンなどで設定したアクセスポイント(この場合はatmark-test)を確認することができます。
アクセスポイントが確認できるまで、Ctrl+cなどでプロセスを終了しないでください。
SoftAPの構築
SoftAPを構築するため、hostapdの設定ファイルを編集します。
hostapdの設定ファイルは、/etc/hostapd/hostapd.confです。
以下に従い、設定ファイルを変更してください。
[armadillo ~]# vi /etc/hostapd/hostapd.conf
interface=wlan0 ❶
driver=nl80211 ❷
ssid=atmark-test ❸
hw_mode=g ❹
channel=10 ❺
ieee80211n=1 ❻
wpa=2 ❼
wpa_passphrase=atmark32 ❽
wpa_key mgmt=wpa-psk ❾
rsn_pairwise=ccmp ❿
❶ネットワークインターフェースを指定します。
❷デバイスドライバを指定します。
❸ESSIDの”atmark-test”を指定しています。
❹動作モードを指定します。ここではIEEE802.11gを示す“g”(2.4GHz)を指定しています。
❺チャンネル”10”を指定しています。1~13チャンネルを使用可能です。
❻IEEE80211nの有効/無効を指定しています。ここでは有効を示す“1”を指定しています。
❼WPAの有効/無効を指定しています。“1”~wpaのみ、 “2”~wpa2のみ、“3”~両方
❽PSKを指定します。ここでは“atmark32”を指定しています。
❾鍵管理アルゴリズムを指定します。
❿WPA2の鍵暗号化方式を指定します。
次に、/etc/default/hostapdを編集し、設定ファイルのディレクトリを指定してください。
[armadillo ~]# vi /etc/default/hostapd
DAEMON_CONF=“/etc/hostapd/hostapd.conf”
以下のコマンドを実行することで、カーネルの起動時に設定が有効になります。
[armadillo ~]# update-rc.d hostapd enable
2.DHCPサーバー設定
アクセスポイントとなったArmadilloから、各クライアントにIPアドレスを自動的に割り当てるためには、DHCPサーバーを設定する必要があります。
DHCPサーバーの設定に、DNSMasqを使用します。以下のコマンドでDNSMasqをインストールしてください。
[armadillo ~]# apt-get update
[armadillo ~]# apt-get install dnsmasq
DNSMasqの設定ファイルであるdnsmasq.confを以下のように変更してください。
[armadillo ~]# vi /etc/dnsmasq.conf
…
#Interface to blink to
interface=wlan0
…
#Specify starting range, end range, lease time
dhcp-range=172.16.57.2, 172.16.57.10, 12h
設定を適用するため、以下のコマンドを実行しDNSMasqを再起動してください。
[armadillo ~]# /etc/init/dnsmasq restart
デバイスのMACアドレスに固定のIPアドレスを割り当てたい場合は、/etc/dmsmasq.confを編集し、以下のように項目を追加してください。
dhcp-host=24:0A:C4:08:F8:EC,172.16.57.5
編集後、以下の手順に従いネットワークを再起動することで、設定が反映されます。
[armadillo ~]# ip link set wlan0 down
[armadillo ~]# ip addr flush dev wlan0
[armadillo ~]# ip link set wlan0 up
[armadillo ~]# ip link wlan0 up
[armadillo ~]# ip addr add 172.16.57.1/24 dev wlan0
次に、wlan0のIPアドレスを確認してください。
[armadillo ~]# ip addr show dev wlan0
下記のような出力が得られていれば、アクセスポイントの構築に成功しています。
10: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 44:c3:06:30:c3:59 brd ff:ff:ff:ff:ff:ff
inet 172.16.57.1/24 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::46c3:6ff:fe30:c359/64 scope link
valid_lft forever preferred_lft forever
アクセスポイントを起動させるには、以下のコマンドを実行します。
[armadillo ~]# service hostapd start
アクセスポイントを終了させるときは、以下のコマンドを実行してください。
[armadillo ~]# service hostapd stop
3.ESP32をクライアントとしてArmadilloに接続する
ここまでの作業で、ArmadilloをWi-Fiアクセスポイントとして設定することができました。
ここからは、Espressif Systemsのマイクロコントローラ「ESP32」と、ESP32の無線モジュールである「ESP-WROOM-32」を使用してArmadilloに接続し、GPIOを制御するシミュレーションを行います。
次のような配線を作り、ESP32の電源を投入してください。
ESP32のファームウェアを書き換える
ESP32のファームウェアは、以下を使用してください。
ESP32 ファームウェア
ファームウェアの書き込み方法は、Write binary data to flashを参照してください。
このファームウェアには、あらかじめ以下のアクセスポイントのSSID及びパスワードが設定されています。
SSID:dotest32
Password:atmark32
Armadilloで構築するアクセスポイントも、同様に設定してください。
ESP32をArmadilloに接続する
ESP32のファームウェアを書き換えると、自動で設定したアクセスポイントに接続されます。
接続に成功した場合、ESP32のシリアルからは以下のようなメッセージが出力されます。
Serial port:
Connecting...
Connecting...
Connected
* Host Info:
** SSID: dotest32
** RSSI: -14 (dBm)
** Channel: 10
* Client Info:
** MAC Address: 24:0A:C4:08:F8:EC
** IP Address: 172.16.57.3
ESP32が接続されているかどうかを確認するには、Armadilloで以下のコマンドを実行し、接続されているデバイスの一覧を確認してください。
[armadillo ~]# arp -a -i wlan0
ESP32が正しく接続されていれば、以下のような結果が確認できるはずです。
?(172.16.57.5) at 24:0a:c4:08:f8:ec [ether] on wlan0
?(172.16.57.3) at a0:28:ed:81:22:f0 [ether] on wlan0
?(172.16.57.9) at 20:91:48:c9:b7:64 [ether] on wlan0
デバイスのMACアドレスと、デバイスに割り当てられたIPアドレスが確認できます。
ESP32のGPIOを制御する
以下は、curlでHTTPリクエストを送り、ESP32のGPIOを制御する例です。
[armadillo ~]# curl -d ‘{“LEDstatus”:1}’-H “Content-Type:application/json” -X POST 172.16.57.3/
このリクエストを送信すると、ESP32のLEDが点灯し、以下のようなメッセージがESP32から返されます。
200 OK
LED status: ON
以下は、今回送信したリクエストの解説です。
{"LEDstatus":x} | JSON フォーマット x=1: LED オン, x=0: LED オフ |
172.16.57.3 | クライアントIPアドレス |
また、以下のようなメッセージが表示されたら、jsonのフォーマットとパラメータが正しいか確認してください。
400 Bad Request, 404 Not Found, curl: (7) Failed to connect to 172.16.57.x port 80: No route to host
4.最後に
このブログでは、ArmadilloでWi-Fiのアクセスポイントを構築しました。
今回ご紹介した方法の他にも、Armadilloの有線LANやLTEとネットワークブリッジを作成し、ネットワークに接続したり、クラウドにデータをアップロードしたりすることが可能です。
参考:
Armadillo-X1 製品マニュアル:無線LANアクセスポイントを構築する
Armadillo-300をアクセスポイントとして使う