I'm Tomuを動かしてみる（USBメモリにしてみる）

本文は[I'm Tomu](https://tomu.im/)の*Mac上*で開発環境のインストールと、サンプルコードのコンパイル、コンパイルしたソフトウェアをTomuに転送して実行してみます。

詳しくは[公式のサンプル](https://tomu.im/samples)を参照してみてください。

I'm Tomuとは
--

[Tomu](https://tomu.im/)はUSBポートに差し込めるARMマイコンを搭載した極小のボードです。
2つのボタンと2つのLEDが乗っています。

[スイッチサイエンスで購入する](https://www.switch-science.com/catalog/5254/)ことができます。

![IMG_4653.jpg](https://qiita-image-store.s3.amazonaws.com/0/67657/7cb97b74-6cde-0627-f37e-3e3ba69d10dc.jpeg)

### スペック

* CPU: Silicon Labs Happy Gecko EFM32HG309 25MHz ARM Cortex-M0+
* RAM: 8 KB
* ストレージ: 64 KB フラッシュ

開発環境のインストール
--

### XCodeのインストール

App Storeから[XCode](https://itunes.apple.com/jp/app/xcode/id497799835?mt=12)をインストールしてください。

#### XCodeとは

XCodeはMacやiPhoneのアプリを開発するための統合開発環境です。
TomuではこのXCodeに入っているツールのうち一部を使用するため、XCodeのインストールが必要です。

### Command-line toolsのインストール

XCodeがインストールできたらXCodeを起動し、上部メニューから`XCode → Open Developer Tool → More Developer Tools...`を選択してください。
ブラウザで[developer.apple.com](https://developer.apple.com/)が開かれるのでログインし、Command Line Toolsをダウンロードしてください。
ダウンロードしたdmgを開き、中のpkgファイルをダブルクリックするとインストールが始まるので、指示に従ってインストールを進めてください。

TomuではこのCommand-line toolsに入っているツールのうち一部を使用するため、Command-line toolsインストールが必要です。

### Homebrewのインストール

`アプリケーション → ユーティリティ → ターミナル`を起動し、下記の内容を貼り付けてエンターを押してください。[Homebrew](https://brew.sh/index_ja)がインストールされます。

```console
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

<img width="505" src="https://qiita-image-store.s3.amazonaws.com/0/67657/49828665-baad-2bda-983d-ddd3bfb0df6c.png" style="text-align:center;"/>

#### Homebrewとは

Homebrewはmac用のソフトウェア管理ツール（パッケージマネージャ）です。
パッケージマネージャは、ソフトウェアのインストール・アップグレード・アンインストールをするためのソフトです。
特にソフトウェア開発やサーバを立てるためのソフトの管理に優れています。
TomuではいくつかのツールをHomebrew経由でインストールするため、Homebrewのインストールが必要です。

### dfu-utilのインストール

ターミナルに下記のコマンドを入力しエンターを押してください。[dfu-util](http://dfu-util.sourceforge.net/)がインストールされます。

```console
brew install dfu-util
```

上記のコマンドで、Homebrew経由でdfu-utilをインストールされます。

#### dfu-utilとは

（ざっくりいうと）作成したソフトウェアをMac（PC）からTomuに転送するためのツールです。

（もうちょっとくわしくいうと）USBデバイスのファームウェアを書き換えるための規格がDFUです。TomuはこのDFUをサポートしており、DFUプロトコルで作成したソフトウェアを転送することができます。dfu-utilはMac（PC）からUSBデバイスに作成したソフトウェアを転送するためのツールです。

### GNU Arm Embedded Toolchainのインストール

ターミナルに下記のコマンドを入力しエンターを押してください。[GNU Arm Embedded Toolchain](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/)がインストールされます。

```console
brew cask install gcc-arm-embedded
```
[公式のサンプル](https://tomu.im/samples)では[GNU Arm Embedded Toolchainのサイトよりダウンロード](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads)するように書かれていますが、Homebrew経由でインストールする方が楽なので、ここではHomebrew経由でインストールしています。

### クイックスタートサンプルのダウンロード

[I'm TomuのクイックスタートサンプルのGithubサイト](https://github.com/im-tomu/tomu-quickstart)からソースコードをダウンロードします。

<img width="1061" alt="Screen_Shot_2018-12-13_at_21_08_38.png" src="https://qiita-image-store.s3.amazonaws.com/0/67657/f159cb03-3cff-93ef-a930-3abebbe771e8.png">

ダウンロードしたzipファイルを展開し、展開してできたフォルダ`tomu-quickstart-master`をとりあえずデスクトップに移動します。

動かしてみる
--

いくつかあるサンプルのうち、TomuをUSBメモリにするサンプルを実行してみましょう。

### クイックスタートサンプルのダウンロード

ターミナルに下記のコマンドを入力し、`tomu-quickstart-master`のディレクトリに移動します。

```console
cd ~/Desktop/tomu-quickstart-master
```

ターミナルに下記のコマンドを入力し、`usb-msc`のディレクトリに移動します。

```console
cd usb-msc
```

ターミナルに下記のコマンドを入力します。
このコマンドを入力することで、ソースコードからソフトウェアが作成されます（コンパイル）。

```console
make
```

Finder（Windowsの場合はエクスプローラ）でtomu-quickstart-master/usb-mscのディレクトリをみてみると、`usb-msc.bin, usb-msc.dfu,  usb-msc.elf`のファイルが作られているのが分かります。
このうち`usb-msc.dfu`がTomuに転送するソフトウェアです。

USBにTomuを刺します。そうするとTomuの赤と緑のLEDが交互に光ります。
赤と緑のLEDが交互に光っているのはブートローダーモード（Bootloader mode）と呼ばれ、ソフトウェアの転送を待っている状態です。

![ブートローダモード](https://tomu.im/img/toboot-mode.gif)
https://tomu.im より引用

Tomuがブートローダーモードの状態で、ターミナルに下記のコマンドを入力します。
下記のコマンドを入力すると、usb-msc.dfuがTomuに転送されます。

```
dfu-util --download usb-msc.dfu
```

転送が終わるとTomuが自動で再起動し、Mac（PC）からは約500KBのUSBメモリとして認識されます。

TomuをUSBから抜いてもう一度刺すと、dfu-utilで転送したソフトウェアが実行されず、ブートローダーモードに戻るようです。
（どこかのピンをショートさせるとUSBに刺したときに転送したソフトウェアが実行されるようになるっぽいけど、未確認。）

Tomuを触ってみて
--

### よいところ：PCとTomuがあればOK

チップにソフトウェアを書き込む専用のライターも必要ないし、開発のためのコンパイラやツールも全て無料なので、USBポートのあるPCとTomuだけあればOK。
開発のためのPCもWindows、Mac、Linuxに対応しており環境を選ばない。

### よいところ：最小のハードウェア

ARM CPUとLED、いくつかの抵抗とコンデンサのみで構成されていて、複雑なところがない。
回路図が読めない私でもTomuの回路図なら理解できる（気がする）。

### よいところ：すべてオープン

回路図（デザインデータ）、部品リスト（BOM）、ブートローダのソース等全てがオープン。
構成も複雑じゃないので、ハードからソフトまで全部を理解しようと思えば理解できそう（ARMやUSBの知識は必要そうだけれど）。

### よいところ：安そう

部品原価が2USD台（もしかしたら2USD未満かも）くらいかと思うので、将来性のある価格とはいえそう。

### ネットを絡めた複雑なことをするのはハードルが高そう

「ツイートされたらLEDを光らせる」みたいなことをしようとすると「ツイッターのAPIを定期的に読み込んで解析するPCプログラミングの知識」「PCとTomu間でデータを転送するためのUSBの知識」「Tomu（ARM CPU）のプログラミング知識」あたりが必要でハードルは低く無さそう。

ちなみに、Raspberry Piで同じことをするなら「ツイッターのAPIを定期的に読み込んで解析するPCプログラミングの知識」だけで済む（はず）ので、そういうことがしたいならRaspberry Piの方がおすすめ。

### ハードウェアや組み込みプログラミングの教材としての可能性

ハードウェアが複雑ではないし、ソフトウェアも無料でオープンなので、ハードウェアや組み込みプログラミングの初歩的な教材としての可能性は大きそう。
コンパイラもGCCなので標準的なC言語が書けるし。

大学や組み込みの研修で「ツイートされたらTomuのLEDを光らせる」という課題をやってみるのも面白そうかも。