Wio LTEではJavaScriptが標準なのか（そんなことない）？

SORACOM / Seeed共催の[Wio LTE ユーザーイベント](https://blog.soracom.jp/blog/2017/12/07/wiolte-user-event-report/)に参加して、とても刺激を受けたので早速購入して試してみました。

# 購入してみる

センサはいろいろ身の回りに転がっている環境なので、SORACOMご推薦の[Grove IoT スターターキット for SORACOM](https://soracom.jp/products/#grovestarter_kit)ではなく単体の[Wio LTE JP Version](https://soracom.jp/products/wio_lte/)をSORACOMコンソールから購入しました。12月13日に注文し、15日に到着。

![IMG_6142.jpg](https://qiita-image-store.s3.amazonaws.com/0/18746/0c1dbaf5-022c-67e7-3b5e-fb19634fcba9.jpeg)

IoT「あるある」のひとつなのですが、マイコンボードは意外と電気を食います。普段はちゃんと動いているようでも、電力が必要な動作（通信とか）を行った瞬間に誤動作したりリセットされたりしてしまうトラブルに遭遇された方も多いでしょう。そんなクレームがあったのか、動作確認用の太いUSBケーブルが試供品として付属していました。

# 接続してみる

何はともあれ、まずは接続してシリアルコンソールに接続してみます。
```
$screen /dev/tty.usbmodem+++++ 115200
```
新品のボードなので何も表示されないかと思いきや……

![スクリーンショット 2017-12-16 12-16 9.44.47.png](https://qiita-image-store.s3.amazonaws.com/0/18746/1b7e94c5-801d-53af-bf6d-7cab131d8966.png)

なんと[Espruino](https://www.espruino.com/)が起動してきました。「[Wio LTEをJavaScriptで開発する](https://qiita.com/jksoft/items/8bc68921de823fb35c01)」で紹介されているJavaScript開発環境ですね。Wio LTE公式の開発環境はArduinoだと聞いていたので驚きです。

もしかすると開発用に使われていたボードなのかもしれませんね。これも何かのお導き、という訳で、まずはEspruinoを触ってみることにしました。

# 環境構築してみる

上の記事でも紹介されているとおり、Espuinoの開発環境はChromeブラウザ上の機能拡張として動作するWeb IDEです。設定画面から通信速度を115,200bpsにセットし、接続ボタンを押してからWio LTEが繋がっているポートを接続すると準備完了です。

![スクリーンショット 2017-12-16 12-16 10.23.02.png](https://qiita-image-store.s3.amazonaws.com/0/18746/6bd4dded-fc6d-095e-1d9a-48c1a9e72672.png)

バージョンが1v93.3171となっており、ちょっと古そうです。しかも[公式ブログ](http://forum.espruino.com/conversations/309728/)によれば、EspruinoでWio LTEが正式にサポートされたのは次のバージョンである1v94からのようです。

そこでファームウェアのアップデートを試みたのですが、

![スクリーンショット 2017-12-16 12-16 10.32.54.png](https://qiita-image-store.s3.amazonaws.com/0/18746/5f1ea144-a54b-b090-2d0e-d1fe05b3a9e5.png)

表示される対応ボードリストにはWio LTEがありません。[ダウンロードページ](http://www.espruino.com/Download)から最新版(1v95)のZipファイルを入手、解凍すると中からWio LTE向けのファームウェア（espruino_1v95_Wio_LTE.bin）が出てきました。これを設定画面の「Advanced Firmware Update」から書き込んでみます。

![スクリーンショット 2017-12-16 12-16 17.12.51-2.png](https://qiita-image-store.s3.amazonaws.com/0/18746/f22ead2b-0784-777d-7025-c551b3d3b6c0.png)

またもや問題発生です。通常モードでは見えていたWio LTEが、DFUモードに切り替えると見えなくなってしまいました。これ自体は、Wio LTEでは正常な動作のようなのですが、Web IDEはシリアルポート経由でファームウェアを書き込むつもりなので先に進めません。

## 答えはdfu-util

その答えは[Seeed社のサイト](http://wiki.seeed.cc/Wio_LTE_Cat.1/)にありました。DFUモードのWio LTEにファームウェアを書き込むには[dfu-util](http://dfu-util.sourceforge.net/)を使う必要があるようです。MacPorts使いの方であれば

```
# sudo port install dfu-util
<snip>
$ dfu-util --version
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
```
としてdfu-utilをインストールした後、ファームウェアを書き込んでやります。

```
$ dfu-util -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D espruino_1v95_Wio_LTE.bin
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Downloading to address = 0x08000000, size = 304140
Download        [=========================] 100%       304140 bytes
Download done.
File downloaded successfully
```
無事成功したようです。RESETボタンを押して通常モードに復帰してからWeb IDEを起動し、接続してみたところ...

![スクリーンショット 2017-12-17 12-17 7.24.06.png](https://qiita-image-store.s3.amazonaws.com/0/18746/77aff249-0581-3e1c-98ce-b03afef8628f.png)
 
ファームウェアが1v95にアップデートされてひと安心、と思ったのもつかの間、今度はエラーメッセージが延々と出続けています。一瞬「えー……」と思ったのですが、これは正常な動作ですね。Wio LTEにはLED1に相当する機能がないため、

```
Uncaught ReferenceError: "LED1" is not defined
 at line 2 col 7
  LED1.write(on);
      ^
in function called from system
```
LED1が定義されておらず、Writeできないのは当然なのでした。代わりにオンボードのフルカラーLEDを光らせてみます。コマンドラインから下記の通りコードを入力してやると

```
WioLTE.setLEDPower(true);
WioLTE.LED(255,0,0);
```
![IMG_6146.jpg](https://qiita-image-store.s3.amazonaws.com/0/18746/4c7769dc-5c0b-7f1d-0468-bcc349b07272.jpeg)

見事に光りました。まぶしい！！！

# さて、次は

~~ユーザーイベントで頂いた[ジェスチャーセンサ](http://wiki.seeed.cc/Grove-Gesture_v1.0/)の利用例が見当たらないようなので、ちょっと試してみようかと思います。~~

~~データシートを見たら、ジェスチャーセンサは5Vデバイスでした。Wio LTEのI2Cポートは3V3なので使えませんね、残念！~~

2017年12月28日追記：[3.3Vで動作確認](https://qiita.com/akira-tt/items/f7a76c8e41b741791844)して記事を投稿しました。ご参照あれ