WROOM-02(3)-通信体系

前回、WROOM-02(ESP8266デバイス)を使う為に、Arduino IDEのセットアップをしました。

今回、WROOM-02を使用して、無線通信を行おうと思うのですが、通信体系について考えておこうと思います。

主要な通信体系は大きくわけて下記の3つ考えれられます。
①WROOM-02を親機と考えたPCとWROOM-02の通信
②PCを親機と考えたPCとWROOM-02の通信
③PCとWROOM-02の間に無線ルーターを挟んだPCとWROOM-02の通信
他にもあると思いますが、主要なものはこの3つかなと思われます。

まずは、①のWROOM-02を親機と考えたPCとWROOM-02の通信を行おうと思います。
①のWROOM-02を親機と考えたPCとWROOM-02の通信をする為のコードは下記のようになります。
※注意:下記のコードをesp8266に書き込むと、ATコマンドは使用できなくなります。


/* Create a WiFi access point and provide a web server on it. */

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

/* Set these to your desired credentials. */
const char *ssid = "ESPap";
const char *password = "thereisnospoon";

ESP8266WebServer server(80);

/* Just a little test message.  Go to http://192.168.4.1 in a web browser
 * connected to this access point to see it.
 */
void handleRoot() {
	server.send(200, "text/html", "<h1>You are connected</h1>");
}

void setup() {
	delay(1000);
	Serial.begin(115200);
	Serial.println();
	Serial.print("Configuring access point...");
	/* You can remove the password parameter if you want the AP to be open. */
	WiFi.softAP(ssid, password);

	IPAddress myIP = WiFi.softAPIP();
	Serial.print("AP IP address: ");
	Serial.println(myIP);
	server.on("/", handleRoot);
	server.begin();
	Serial.println("HTTP server started");
}

void loop() {
	server.handleClient();
}

スケッチ-マイコンボードに書き込むを実行して、esp8266に上記コードを書き込みます。
この時、FLASHボタンを書き込み開始から完了まで押していて下さい。
押していないと書き込みは失敗します。

書き込みが完了しましたら、TeraTermを実行して、動作を確認します。
ボーレートは115200bpsに設定します。
WROOM-02のRESETボタンを押すと下記のような画面が表示されます。

次に、SSIDがESPapのアクセスポイントに接続します。
パスワードは上記コードより、thereisnospoonです。

接続が完了したら、ブラウザにアドレス欄にhttp://192.168.4.1を入力します。
入力すると下記のような画面が表示されます。

これで動作確認完了です。
①のWROOM-02を親機と考えたPCとWROOM-02の通信ができました。

WROOM-02(2)-Arduino開発環境設定

前回、WROOM-02を調査した結果、arduinoデバイスとして使用できる事がわかりました。
それでは、Arduinoデバイスとして使用する為に、Aruduinoの開発環境をインストールします。
下記サイトより、Arduino IDEをダウンロードしてインストールします。
https://www.arduino.cc/en/main/software

インストールが完了したら、Arduino IDEを起動して、ESP8266デバイスを使用する為の開発環境の設定を行います。
※前回も説明しましたが、WROOM-02はESP8266を搭載したモジュールとなります。

まずは、ファイル-環境設定の追加のボードマネージャーのURLに、下記のURLコードを入力して、OKボタンを押します。
http://arduino.esp8266.com/stable/package_esp8266com_index.json

次に、ツール-ボードのボードマネージャーを選択します。
ボードマネージャーを一番下までスクロールすると、esp8266 by esp8266 communityというボードマネージャーがあるので、インストールします。

これで、Arduino IDEで、ESP8266デバイスを使用する為の準備完了です。

ファイルースケッチ例の中を見てみると、esp8266を使用したスケッチ例もインストールされています。
これを参考にして、WiFIを使用した通信を行ってみたいと思います。

WROOM-02(1)-無線モジュールを調査

無線でアナログ情報を取得したいので、マイコンで制御できる無線を調べていると、WROOM-02にたどり着きました。

RS232通信で、無線の設定をするようです。
早速、試してみました。

試したのは下記の2つの製品です。

ESPr Developer(ESP-WROOM-02開発ボード)

新品価格
¥2,160から
(2017/5/7 10:27時点)

[スイッチサイエンス] ESP-WROOM-02ピッチ変換済みモジュール《T型》

新品価格
¥909から
(2017/5/7 10:29時点)

ESP-WROOM-02ピッチ変換済みモジュールは、価格は安いですが、RS232レベル変換モジュールや抵抗などを用意する必要がありますので、少々手間がかかります。

ESP-WROOM-02開発ボードは、RS232レベル変換モジュールや抵抗などが搭載されているので、価格はESP-WROOM-02ピッチ変換済みモジュールと比べて、価格は高いですが、USBケーブルと繋げるだけで使用できます。
まず、試してみたい方には、ESP-WROOM-02開発ボードのほうが便利なので、今回は、ESP-WROOM-02開発ボードを使用指していこうと思います。

それでは、早速、ESP-WROOM-02開発ボードとPCをUSBケーブルで接続します。
すると、ドライバーのインストールが始まりますので、インストールが完了するまで待ちます。

インストールが完了したら、TeraTermを立ち上げて、動作を確認します。
TeraTermを実行したら、設定-シリアルポートよりボーレートを115200bpsに設定します。
次に、設定-端末より送信の改行コードをCR+LFに設定します。
開発ボードのリセットボードを押すと下記のようなメッセージが表示されます。

readyと表示されればOKです。

wroom-02はATコマンドと呼ばれるものが、使用できます。
例えば、ATと送信すると、OKと返信が返ってきます。

このATコマンドを使用する事で、wroom-02の設定ができます。

ここでふと疑問に思うことがありました。
ATコマンドが使用できるということは、マイコンのようなものが搭載されているのでは?
ちょっと調べてみると下記のことがわかりました。
wroom-02はESP8266を搭載したモジュールです。
では、ESP8266なにかと言いますと、マイコンを搭載したWiFiモジュールのようです。
さらに、Arduinoデバイスとしても使用することが可能なようです!
すばらしいですねー。
Arduinoデバイスを使用してみたいと思ってもいたので、Arduinoデバイスとして使用して、WiFiを使用してみようと思います。

Wireshark(1)-Wiresharkとは?-

Wiresharkは、LANアナライザの一つです。

LANアナライザは、ネットワークを流れるレイヤ1の
搬送信号を取得します。これをパケットキャプチャと呼びます。
この搬送信号を「0」や「1」のデータ信号に変換して、
パケットのデータ単位にします。このように取得した
パケットのデータを画面上に表示する事ができるツールが
LANアナライザです。
*「レイヤー1」とは、OSI参照モデルの階層の「物理層」

WiresharkはオープンソースのLANアナライザです。
無償で利用する事ができます。Wiresharkは
以下のような事を実施する事が可能です。
(a).ネットワークに流れているパケットの取得
(b).パケットの内容の表示
(c).パケットの解析

Wiresharkを使用するにあったて、必要なものは
以下のようになります。*有線LAN環境
(a).パソコン(OSはWindows、LinuxどちらでもOK)
(b).Wireshark(LANアナライザ)
(c).ルーター

Wiresharkが動作しているPC以外の
無線環境のパケットを取得して、解析するには、
以下のようなものも必要なります。
Windowsの場合は、AirPcapという市販品が必要そうです。

【正規品】AirPcap Tx  2.4GHz対応USB無線LANプロトコルアナライザ

Linuxの場合は、モニターモードでパケットが取得可能な
無線子機が必要です。無線LAN解析と何か似ているような。

実際に試してみる際は、自分の管理している
ネットワークで試してください。
法律に違反する場合があります。

PCを無線ルーター化(4)(ipforward編)

PCを無線ルーター化(1)~(3)で

無線アクセスポイントの構築~ipのわりふりを

取り組んできました。

PCを無線ルーター化(1),(3)でお話しましたが、

PCを無線ルーター化には、下記の3点の

導入・設定が必要です。

導入・設定したもの
(1)hostapdの導入
(2)isc-dhcp-serverの導入
(3)ipforwardの設定(ufwから設定)

今回は、(3)ipforwardの設定を行い、

インターネットなどのネットワークに

繋げれるようしていきます。

まずは、IPフォワーディングを有効にします。

sudo gedit /etc/default/ufw
下記の内容に変更します。
DEFAULT_FORWARD_POLICY=”ACCEPT”

sudo gedit /etc/ufw/sysctl.conf
下記の内容に変更します。
net/ipv4/ip_forward=1

hostapd、isc-dhcp-serverで構築された
無線アクセスポイントから外部(eth0)に
アクセスできるように設定を行います。
※今回、無線子機をアクセスポイントとして、
 無線子機とは別途LANケーブル(eth0)を
 PCに繋げてあります。
sudo gedit /etc/ufw/before.rules
先頭に以下の記述を追加します。
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.110.0/24 -o eth0 -j MASQUERADE
# don’t delete the ‘COMMIT’ line or these nat table rules won’t be processed
COMMIT

ufwの再起動を行います。
sudo ufw disable && sudo ufw enable

これで、PCの無線アクセスポイント化(無線ルーター化)の
構築は完了です。

PCを無線ルーター化(3)(dhcp-server編)

PCを無線ルーター化(1)でお話しましたが、

PCを無線ルーター化には、下記の3点の

導入・設定が必要です。

導入・設定したもの
(1)hostapdの導入
(2)isc-dhcp-serverの導入
(3)ipforwardの設定(ufwから設定)

今回からはisc-dhcp-serverの

導入・設定に取り組んでいこうと思います。

(2)isc-dhcp-serverの導入

まずは、isc-dhcp-serverをインストールする前に、
ネットワークの設定をします。
sudo gedit /etc/network/interfaces
下記の内容を追記します。
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.110.1
netmask 255.255.255.0

続いて、isc-dhcp-serverをインストールします。
sudo apt-get install isc-dhcp-server

isc-dhcp-serverの設定ファイルを変更します。
sudo gedit /etc/dhcp/dhcpd.conf
下記の内容をコメント化します。
#option domain-name “example.org”;
#option domain-name-servers ns1.example.org, ns2.example.org;
下記の内容を追記します。
authoritative;
subnet 192.168.110.0 netmask 255.255.255.0 {
range 192.168.110.100 192.168.110.199;
option broadcast-address 192.168.110.255;
default-lease-time 600;
max-lease-time 7200;
option routers 192.168.110.1;
option domain-name “local”;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}

DHCPサーバの起動設定をします。
sudo gedit /etc/default/isc-dhcp-server
下記内容に変更します。
INTERFACES=”wlan0″

DHCPサーバを起動します。
sudo service isc-dhcp-server start
(終了はstop、再起動は、restart)

この状態で、hostapdを起動してみて下さい。

hostapdで無線アクセスポイントが構築され、

isc-dhcp-serverによって、IPアドレスを

わりふる事ができているかと思います。今回の例では、

192.168.110.100~192.168.110.199の

IPアドレスがわりふられると思います。

PCを無線ルーター化(2)(hostapd編)

PCの無線ルータ化 hostapd編の続きです。

前回の内容はコチラから参照できます。

前回、hostapdの動作確認を実施しましたが、

私の場合、残念ながらエラーが発生しました。

その際に実施した対処方法は次の2点になります。

(1)無線機器のソフトブロックの無効化
(2)無線子機の無効化

(1)無線機器のソフトブロックの無効化

まずは、WiFiをOFFの状態にします。
sudo nmcli nm wifi off

次に、無線子機の状態を確認します。
sudo rfkill list
すると、下記のような情報が表示されます。
0: phy0: Wireless LAN
Soft blocked: yes
Hard blocked: no

Soft blocked: yesとなっているので、
このブロックをアンブロックします。
sudo rfkill unblock wifi

また、無線子機の状態を確認してみましょう。
sudo rfkill list
すると、下記のような情報に変更されていればOKです。
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no

※Soft blocked: yesは、無線子機が
ディアクティベートされている状態
(再アクティベートできる状態)です。

(2)無線子機の無効化

NetworkManagerで無線子機を管理しないように
設定します。
sudo gedit /etc/NetworkManager/Networkmanager.conf

ファイルが開かれるのの下記の2行を追加して下さい
[Keyfile]
unmanaged-devices=mac:**:**:**:**:**:**
※「*」の部分は、無線子機のMACアドレスを入力して下さい)

PCを再起動させて、hostapdを実行してみます。
sudo hostapd /etc/hostapd/hostapd.conf

下記のようなメッセージが出てきたので、正しく
動作したかと思われます。
Configuration file: /etc/hostapd/hostapd.conf
nl80211:・・・・省略・・・・・
Using interface wlan0 ・・・・省略・・・・・
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED

次回は、DHCPサーバーのセットアップです。

PCを無線ルーター化(1)(hostapd編)

PCの無線ルータ化をしようと思います。

OS:ubuntu14.04
無線子機①:BUFFALO WLI-UC-GNM
無線子機②:BUFFALO WLI-UC-G301N
※2種類の無線子機で試してみました。

導入・設定したもの
(1)hostapdの導入
(2)isc-dhcp-serverの導入
(3)ipforwardの設定(ufwから設定)

(1)hostapdの導入

まずは、hostapdのインストールします。
sudo apt-get install hostapd

hostapdの最新版をダウンロードします。
(hostapdのバージョンが古い為です。)
wget http://w1.fi/releases/hostapd-2.4.tar.gz
(ホームページを開いてダウンロードしても構いません)

hostapd‐2.4.tar.gzを回答します。
tar xvf hostapd-2.4.tar.gz
(圧縮ファイルの中身はコンパイル前のデータになるので、
コンパイルをする必要があります)

コンパイルに必要な環境をインストールします。
sudo apt-get libnl-genl-3-dev libssl-dev

hostapdの最新版をコンパイルします。
cd hostapd-2.4/hostapd
cp defconfig .config
echo CONFIG_LIBNL32=y >> .config
make

コンパイルして作成した実行ファイルを
古い実行ファイルと置き換えます。
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.org
(古い実行ファイルの名称を変えてバックアップとして
保存しておきます。)
sudo mv hostapd /usr/sbin/

hostapd設定ファイルの内容を変更します。
sudo gedit /etc/hostapd/hostapd.conf
テキストエディタが開かれるので、
例えば下記のように設定します。
interface=wlan0
driver=nl80211
ssid=net
hw_mode=g
channel=11
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=hoge
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
※下記にサンプルファイルも存在します。
/usr/share/doc/hostapd/examples/hostapd.conf.gz
※zcatを使用してサンプルファイルを出力する事も可能です。
sudo zcat /usr/・・省略・・/hostapd.conf.gz > hostapd.conf

ここまでくると、動作確認ができます。
hostapdを実行してみます。
sudo hostapd /etc/hostapd/hostapd.conf
下記のようなメッセージが出てきたら正しく設定できていると
思います。
Configuration file: /etc/hostapd/hostapd.conf
nl80211:・・・・省略・・・・・
Using interface wlan0 ・・・・省略・・・・・
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED

残念ながら、私の場合は、この時点で上記のようなメッセージは
表示されませんでした。下記のようなエラーが発生しました。
Configuration file: /etc/hostapd/hostapd.conf
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started

エラーに対しての対処方法は次回報告します。


WiMAXとPCのセットならGMOとくとくBB>>