ブログ

Armadillo-X1, Armadillo-IoT G3: ArmadilloをWi-Fiアクセスポイントに設定し、ESP32のGPIOを制御する方法

at_do.phanngoc
2019年2月21日 18時21分

このブログでは、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をアクセスポイントとして使う