mbed-wifi-exampleを動かしてみた

本記事は、同様の新しい記事があります。
新しい記事はこちらです。

MbedプラットフォームはAZ3166に対応しているみたいですが、

MxChip Board Support - Question | Mbed

情報が全然見当たらない。orz

GitHubにMXCHIPがサンプルを公開していたので、、、これが動くか(動かせるか)試してみました。

github.com

1回目

README.mdを参考に、mbed-cliでimportします。

C:\mbed>mbed import https://github.com/MXCHIP/mbed-wifi-example
[mbed] Importing program "mbed-wifi-example" from "https://github.com/MXCHIP/mbed-wifi-example" at latest revision in the current branch
[mbed] Adding library "emw10xx-driver" from "https://github.com/MXCHIP/mbed-emw10xx-driver" at rev #254df6a98312
[mbed] Adding library "mbed-os" from "https://github.com/MXCHIP/mbed-os" at rev #c1a665816660

C:\mbed>

何事も無く終了。

続いて、コンパイルします。

C:\mbed>cd mbed-wifi-example

C:\mbed\mbed-wifi-example>mbed compile -m AZ3166 -t GCC_ARM
Building project mbed-wifi-example (AZ3166, GCC_ARM)
Scan: .
Scan: FEATURE_BLE
Scan: FEATURE_COMMON_PAL
Scan: FEATURE_LWIP
Scan: FEATURE_UVISOR
Scan: FEATURE_ETHERNET_HOST
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 [  0.3%]: iperf_cli.c
[Warning] cpu.h@21,0: "BYTE_ORDER" redefined
[Error] sockets.h@317,8: redefinition of 'struct timeval'
[Error] mico_socket.h@165,5: conflicting types for 'select'
[ERROR] In file included from ./emw10xx-driver/mico/net/LwIP/lwip-sys/arch/cc.h:21:0,
                 from ./emw10xx-driver/mico/net/LwIP/lwip-ver1.4.0.rc1/src/include/lwip/arch.h:43,
                 from ./emw10xx-driver/mico/net/LwIP/lwip-ver1.4.0.rc1/src/include/lwip/debug.h:35,
                 from ./emw10xx-driver/mico/net/LwIP/lwip-ver1.4.0.rc1/src/include/lwip/opt.h:46,
                 from ./emw10xx-driver/mico/net/LwIP/lwip-ver1.4.0.rc1/src/include/lwip/sockets.h:37,
                 from ./emw10xx-driver/mico/include/mico_socket.h:21,
                 from ./emw10xx-driver/mico/include/mico.h:38,
                 from .\app\iperf\iperf_cli.c:17:
...

struct timevalを再定義してエラー...。

2回目

ソースを見たところ、LWIP_TIMEVAL_PRIVATEマクロで定義するかしないか指定できるようになっていました。

mbed_app.jsonmacrosに下記を追加して、再コンパイルします。

    "LWIP_TIMEVAL_PRIVATE=0"
C:\mbed\mbed-wifi-example>mbed compile -m AZ3166 -t GCC_ARM
Building project mbed-wifi-example (AZ3166, GCC_ARM)
...
+-----------------------+--------+-------+-------+
| Module                |  .text | .data |  .bss |
+-----------------------+--------+-------+-------+
| Fill                  |    406 |    15 |   132 |
| Misc                  | 158909 |  2824 | 51169 |
| drivers               |   2607 |     4 |   164 |
| features/filesystem   |    627 |     0 |     0 |
| features/netsocket    |   3922 |    85 |    60 |
| hal                   |    536 |     0 |     8 |
| platform              |   1927 |     4 |   297 |
| rtos                  |    213 |     4 |     4 |
| rtos/rtx              |   8079 |    20 |  6874 |
| targets/TARGET_MXCHIP |   2578 |     4 |     0 |
| targets/TARGET_STM    |  21876 |     0 |  1424 |
| Subtotals             | 201680 |  2960 | 60132 |
+-----------------------+--------+-------+-------+
Allocated Heap: unknown
Allocated Stack: unknown
Total Static RAM memory (data + bss): 63092 bytes
Total RAM memory (data + bss + heap + stack): 63092 bytes
Total Flash memory (text + data + misc): 204640 bytes

Image: .\BUILD\AZ3166\GCC_ARM\mbed-wifi-example.bin

C:\mbed\mbed-wifi-example>

Warningはいくつか出ましたが、とりあえずコンパイル通りました。やった!

3回目

このサンプル、複数のサンプルが同封されていて、main()で呼び出す部分を変更して切り替える作りになっていました。

どれにしようかな、、、

一番単純そうなmbed_wifiを動かすことにします。

int main( void )
{
   RUN_APPLICATION( mbed_wifi );
    return 0;
}

mbed_wifiは、Wi-FiアクセスポイントのSSIDとパスワードが必要なので、mbed_app.jsonwifi-ssidwifi-passwordに書いておきます。

    "config": {
      "wifi-ssid": {
        "help": "WiFi SSID",
        "value": "\"aterm-3b8988-g\""
      },
        "wifi-password": {
            "help": "WiFi Password",
            "value": "\"p@ssw0rd\""
        }
    }

で、コンパイルを。

C:\mbed\mbed-wifi-example>mbed compile -m AZ3166 -t GCC_ARM

実行

コンパイルで出来上がった.binファイルをAZ3166ドライブへコピーすれば、実行されます。

C:\mbed\mbed-wifi-example>copy .\BUILD\AZ3166\GCC_ARM\mbed-wifi-example.bin d:\
        1 個のファイルをコピーしました。

C:\mbed\mbed-wifi-example>

実行結果はこちら。

WiFi example

Scan:
[493][SYSTEM: .\emw10xx-driver\mico\system\system_misc.c: 230] Kernel version: 31620002.049
[501][SYSTEM: .\emw10xx-driver\mico\system\system_misc.c: 233] MiCO version: 3.0.0
[508][SYSTEM: .\emw10xx-driver\mico\system\system_misc.c: 235] Wi-Fi driver version wl0: Sep 10 2014 11:28:46 version 5.90.230.10 , mac C8:93:46:84:19:CC
Network: aterm-3b8988-g secured: WPA2 BSSID: 1C:B1:7F:bf:61:ce RSSI: -63 Ch: 5
1 networks available.

Connecting...
[9332][SYSTEM: .\emw10xx-driver\mico\system\system_misc.c:  73] Station up
Success

MAC: c8:93:46:84:19:cc
IP: 192.168.0.6
Netmask: 255.255.255.0
Gateway: 192.168.0.1
RSSI: -56

Sending HTTP request to www.arm.com...
sent 38 [GET / HTTP/1.1]
recv 64 [HTTP/1.1 301 Moved Permanently]

Done
[9733][SYSTEM: .\emw10xx-driver\mico\system\system_misc.c:  77] Station down

まとめ

  • mbed-wifi-example、少し手を加えればコンパイル、実行できる。
  • mbed-osはMXCHIPがforkしたものを使っている。AZ3166は本家にマージされていない。
  • ネットワークドライバはmbed-emw10xx-driverの、ほぼ最新を使っている。OwnerはMXCHIP。