[lang:ja] ODIN-W2 を Windows10で使ってみる(ubuntu環境でWiFiテストまで)

ODIN-W2(Wifi 2.4G,5G/ BT / BLT)のモジュールの mbed 対応が mbed os 5.2 のリリースとともに発表されました。 ここでは、用意されているWiFiのテストコードまで実施してみたいと思います。実際に実行することは下記です。

  1. Windows10 Ubuntu 環境でのmbed-CLI 環境の構築 ..興味本位でできるかどうか試してみます。当然、普通のWindows環境でも、Mac環境でも、Linux環境でも、ODIN-W2を使用することは可能と思われます。
  2. ODIN-W2 コードのCompile (まずはLチカ) ..(blinkyコード実行、ファームのアップデートが必要で躓きました。)
  3. ODIN-W2 Wifi コードのテスト ..(wifiコード実行、最新のコードだと compile できず躓きました。)

参考にさせていただいたページはこちら

1. Windows10 Ubuntu 環境でのmbed-CLI 環境の構築

ここでは下記の確認~インストールを実施します。

  • 1-1. Windows10 Ubuntu 環境構築条件の確認
  • 1-2. Windows10 Ubuntu 環境インストール
  • 1-3. mbed-CLI 環境のインストール

1-1. Windows10 Ubuntu 環境構築条件の確認

対応OS:Windows10 64bit (32bitのマシンは64bitへの入れ替えが必要です)

今回使用したマシンは下記です。

  • モデル名 INSPIRON1510
  • エディション Windows 10 Home 64bit
  • バージョン 1607
  • OSビルド 14393.223
  • プロセッサ Intel(R)Core(TM)i3 CPU M330@2.13GHz
  • 実装RAM 4.00GB(3.80GB使用可能)

OSはHOME でも問題なく Build できました。

1-2. Windows10 Ubuntu 環境インストール

windows10 で bash を使う。がよくまとまっているので、それに従ってインストールしてください。

  • 下記のように最新の状態にアップデートしておきましょう。

sudo apt-get update
sudo apt-get upgrade

1-3. mbed-CLI 環境のインストール

  • python のインストール python 2.7 系と python のパッケージ管理システムの pip をインストール。

$ sudo apt-get install python2.7 python-pip
  • mbed-cli を pip でインストール。

$ sudo pip install mbed-cli
  • mercurial と git のインストール

$ sudo apt-get install mercurial git
  • 組み込み用 ARM GCC のインストール

$ sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded <- これがないと最新のバージョンになりません。
$ sudo apt-get update
$ sudo apt-get -f install gcc-arm-none-eabi

Linux と本当に同じですね。バージョンを確認しておきましょう。

$ python --version
Python 2.7.6
$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)
$ mbed --version
0.9.10
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2.ODIN-W2 コードのCompile (まずはLチカ)

ここでは、おなじみのLチカコードをblinkyコードを実行してみます。 サンプルのインポート ~ compile ~ 書き込み ~ 実行 までです。

2-1. Lチカコードをインポート

下記のようにLチカコードをインポートします。

$ mbed import mbed-os-example-blinky
$ cd mbed-os-example-blinky
$ sudo pip install -r mbed-os/requirements.txt
  • ARM_GCC のパスを設定する。mbed_settings.py を編集

# GCC ARM
#GCC_ARM_PATH = ""
GCC_ARM_PATH = "/usr/bin" <--- 追加

2-2. Lチカコードをコンパイル

いよいよcompile します。

$ sudo mbed compile -t GCC_ARM -m UBLOX_EVK_ODIN_W2
[mbed] Auto-installing missing Python modules...
Building project mbed-os-example-blinky (UBLOX_EVK_ODIN_W2, GCC_ARM)
Scan: .

..........................中略.................................

Link: mbed-os-example-blinky
Elf2Bin: mbed-os-example-blinky
+-----------------------+-------+-------+-------+
| Module                | .text | .data |  .bss |
+-----------------------+-------+-------+-------+
| Fill                  |    73 |     0 |     5 |
| Misc                  | 21070 |  2180 |   100 |
| features/FEATURE_LWIP |    44 |     0 | 12536 |
| hal                   |   538 |     0 |     8 |
| platform              |  1004 |     4 |   269 |
| rtos                  |    38 |     4 |     4 |
| rtos/rtx              |  6089 |    20 |  6870 |
| targets/TARGET_STM    |  6670 |     4 |   752 |
| Subtotals             | 35526 |  2212 | 20544 |
+-----------------------+-------+-------+-------+
Allocated Heap: unknown
Allocated Stack: unknown
Total Static RAM memory (data + bss): 22756 bytes
Total RAM memory (data + bss + heap + stack): 22756 bytes
Total Flash memory (text + data + misc): 37738 bytes
Object file test_env.o is not unique! It could be made from: ./mbed-os/features/frameworks/greentea-client/source/test_env.cpp /mnt/c/Users/hiroa/mbed-os-example-blinky/mbed-os/features/unsupported/tests/mbed/env/test_env.cpp
Image: ./BUILD/UBLOX_EVK_ODIN_W2/GCC_ARM/mbed-os-example-blinky.bin

出来上がった ./BUILD/UBLOX_EVK_ODIN_W2/GCC_ARM/mbed-os-example-blinky.bin を EVK-ODIN-W2 に書き込めば..... 書き込めないよ!

2-3. EVK-ODIN-W2 上のデバグ用チップのファームのアップデート

windows10 で書き込めるようにするには、ファームのバージョンアップが必要でした。 http:www.st.com/ja/development-tools/st-link-v2.htmlから STSW-LINK007をダウンロードし、ファームをバージョンアップしてください。 http:www.st.com/ja/development-tools/st-link-v2.html STSW-LINK007 が firm ですが、STSW-LINK009 のドライバーのインストールを先に済ませる必要があります。 アップデートの様子は下記です。

/media/uploads/H_Okoshi/firm_update_2.png

2-4. bin ファイルを転送しLチカ

出来上がった ./BUILD/UBLOX_EVK_ODIN_W2/GCC_ARM/mbed-os-example-blinky.bin を エキスプローラでmbedで見えているディスクに置いてあげれば、書き込み、実行されます。

Windows10 Ubuntu 環境でEVK-ODIN-W2 のLチカまでできましたね。 次はいよいよ Wifi のテストに挑戦です。

3.ODIN-W2 Wifi コードのテスト

ここでは、Wifiテスト用に用意されている(wifiコードを実行してみます。 サンプルのインポート ~ compile ~ 書き込み ~ 実行 までです。

3-1. Wifi テストコードをインポート

Lチカと同じように、Wifiテストコードをインポートします。

mbed import mbed-os-example-wifi
cd mbed-os-example-wifi

3-2. Wifi環境に合わせて設定ファイルを修正

  • mbed_app.json ファイルの下記の部分を自分の環境に合わせて変更

    "config": {
        "wifi-ssid": {
            "help": "WiFi SSID",
            "value": "\"SSID\""     ←修正
        },
        "wifi-password": {
            "help": "WiFi Password",
            "value": "\"Password\""  ←修正
        }
    },

3-3. Wifiテストコードをコンパイル

Lチカと同じようにコンパイルします。

$ sudo mbed compile -t GCC_ARM -m UBLOX_EVK_ODIN_W2
[mbed] Auto-installing missing Python modules...
Building project mbed-os-example-blinky (UBLOX_EVK_ODIN_W2, GCC_ARM)
Scan: .

Compile [100.0%]: test_env.cpp
Link: mbed-os-example-wifi
./mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a(OdinWiFiInterface.o):(.rodata._ZTV17OdinWiFiInterface+0x30): undefined reference to `NetworkInterface::gethostbyname(char const*, SocketAddress*)'
collect2: error: ld returned 1 exit status
[ERROR] ./mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a(OdinWiFiInterface.o):(.rodata._ZTV17OdinWiFiInterface+0x30): undefined reference to `NetworkInterface::gethostbyname(char const*, SocketAddress*)'
collect2: error: ld returned 1 exit status

[mbed] ERROR: "python" returned error code 1.
[mbed] ERROR: Command "python -u /mnt/c/Users/hiroa/mbed-os-example-wifi/mbed-os/tools/make.py -t GCC_ARM -m UBLOX_EVK_ODIN_W2 --source . --build ./BUILD/UBLOX_EVK_ODIN_W2/GCC_ARM" in "/mnt/c/Users/hiroa/mbed-os-example-wifi"

コンパイルできないよ。なんで?

3-4. mbed-os コードを古いバージョンに戻す。

git checkout で mbed-os のバージョンを遡ってみました。大体7日前。

$ cd mbed-os
$ git checkout 4198222c54fa9c127f7e9252a7ae576ddedc5551
$ cd .. 

hiroa@HIJIRI:/mnt/c/Users/hiroa/mbed-os-example-wifi$ sudo mbed compile -t GCC_ARM -m UBLOX_EVK_ODIN_W2
[mbed] Auto-installing missing Python modules...
Building project mbed-os-example-wifi (UBLOX_EVK_ODIN_W2, GCC_ARM)
Scan: .
Scan: FEATURE_BLE
Scan: FEATURE_COMMON_PAL
Scan: FEATURE_LWIP
Scan: FEATURE_UVISOR
Scan: FEATURE_LOWPAN_BORDER_ROUTER
Scan: FEATURE_LOWPAN_HOST
Scan: FEATURE_LOWPAN_ROUTER
Scan: FEATURE_NANOSTACK
Scan: FEATURE_NANOSTACK_FULL
Scan: FEATURE_THREAD_BORDER_ROUTER
Scan: FEATURE_THREAD_END_DEVICE
Scan: FEATURE_THREAD_ROUTER
Scan: FEATURE_STORAGE
Scan: mbed
Scan: env
Compile [ 32.7%]: ATParser.cpp
...中略...
Compile [100.0%]: test_env.cpp
Link: mbed-os-example-wifi
Elf2Bin: mbed-os-example-wifi
+-----------------------+--------+-------+-------+
| Module                |  .text | .data |  .bss |
+-----------------------+--------+-------+-------+
| Fill                  |    344 |     8 |    69 |
| Misc                  | 221595 |  2320 | 17059 |
| drivers               |    537 |     0 |     0 |
| events                |     64 |     0 |     0 |
| events/equeue         |   1252 |     0 |    61 |
| features/FEATURE_LWIP |  34788 |    87 | 46796 |
| features/mbedtls      |  21111 |     0 |  8748 |
| features/netsocket    |   4847 |    85 |    60 |
| hal                   |    520 |     0 |     8 |
| platform              |   1407 |     4 |   269 |
| rtos                  |    213 |     4 |     4 |
| rtos/rtx              |   7365 |    20 |  6870 |
| targets/TARGET_STM    |  13489 |     4 |   808 |
| Subtotals             | 307532 |  2532 | 80752 |
+-----------------------+--------+-------+-------+
Allocated Heap: unknown
Allocated Stack: unknown
Total Static RAM memory (data + bss): 83284 bytes
Total RAM memory (data + bss + heap + stack): 83284 bytes
Total Flash memory (text + data + misc): 310064 bytes

Object file test_env.o is not unique! It could be made from: ./mbed-os/features/frameworks/greentea-client/source/test_env.cpp /mnt/c/Users/hiroa/mbed-os-example-wifi/mbed-os/features/unsupported/tests/mbed/env/test_env.cpp
Image: ./BUILD/UBLOX_EVK_ODIN_W2/GCC_ARM/mbed-os-example-wifi.bin

3-5.wifi テストコードを書き込んで実行

mbed に書き込んで実行すると下記のようになります。 Wifiをスキャンして、接続して、httpプロトコルで www.arm.com にアクセスしてテキストを拾ってきてます。

WiFi example

Scan:
Network: xxxxxx_xxxxX0-X secured: WEP BSSID: 8C:4C:DC:2c:5b:c7 RSSI: -81 Ch: 1
Network: XxxXxxx00000 secured: WPA2 BSSID: 0:A0:B0:f9:5f:4c RSSI: -62 Ch: 4
Network: XxxXxxx00000 secured: WPA2 BSSID: 0:A0:B0:f9:5f:4c RSSI: -62 Ch: 4
Network: Xxxx00000 secured: WEP BSSID: 2:A0:B0:f9:5f:4c RSSI: -61 Ch: 4
Network: Xxxx00000 secured: WEP BSSID: 2:A0:B0:f9:5f:4c RSSI: -60 Ch: 4
Network: XxxXxxx00000 secured: WPA2 BSSID: 0:A0:B0:f9:5f:4c RSSI: -57 Ch: 4
Network: XxxXxxx00000 secured: WPA2 BSSID: 0:A0:B0:f9:5f:4c RSSI: -62 Ch: 4
Network: Xxxx00000 secured: WEP BSSID: 2:A0:B0:f9:5f:4c RSSI: -61 Ch: 4
Network: XxxXxxx00000 secured: WPA2 BSSID: 0:A0:B0:f9:5f:4c RSSI: -61 Ch: 4
Network: XX0000-0000-xx secured: WPA/WPA2 BSSID: A4:C7:DE:59:38:d4 RSSI: -85 Ch: 6
Network: Xxxxxxx-X-00X0 secured: WPA/WPA2 BSSID: 74:3:BD:92:83:a8 RSSI: -79 Ch: 11
Network: Xxxxxxx-X-00X0 secured: WPA/WPA2 BSSID: 74:3:BD:92:83:a8 RSSI: -76 Ch: 11
Network: Xxxxxxx-X-00X0 secured: WPA/WPA2 BSSID: 74:3:BD:92:83:a8 RSSI: -78 Ch: 11
Network: Xxxxxxx-X-00X0 secured: WPA/WPA2 BSSID: 74:3:BD:92:83:a8 RSSI: -79 Ch: 11
Network: Xxxxxxx-X-00X08 secured: WPA/WPA2 BSSID: 74:3:BD:92:83:a8 RSSI: -78 Ch: 11
15 networks available.

Connecting...
Success

MAC: d4:ca:6e:70:6e:dd
IP: 192.168.0.4
Netmask: 255.255.255.0
Gateway: 192.168.0.1
RSSI: -63

Sending HTTP request to www.arm.com...
sent 38 [GET / HTTP/1.1]
recv 64 [HTTP/1.1 200 OK]

Done

これでWifi のテストまで Windows10 のUbuntu 環境で、できました。それなりに躓きましたね。

以上、2016年11月3日現在の状況でした。

#ところで初めて書いてみたのですが、行番号をつけないで、code のように表示させるにはどうやるんでしょうか?


Please log in to post comments.