互いに無線通信する作品を創りたい！〜ラジコンを作るにはどのマイコンを選べば良いのか〜

最近はアート作品にもArduinoが使われたりと，プログラミングをするのはもはやエンジニアだけではなくなっていますが，電子工作初心者が無線通信を扱った作品を作りたい場合，どのマイコンボードを選べばいいのかまとめてみました．例として，ラジコンカーを作ることを想定してみます．

# ラジコンに必要なもの
- 送信機（リモコン）
    - インターフェース（ボタン，傾きセンサ等人が操作するもの）
    - 無線送信機能
- 受信機（車）
    - 無線受信機能
    - モータードライバ

とりあえずラジコンの基本的な部分はすぐに作ってしまって，その上でじっくり動作を工夫したいという場合を想定して，なるべく簡単に以上の機能を実現したいとします．そこで以下を重視して，各マイコンを比較してみます．

- センサとの連携性
- 無線通信の容易さ
- モーター動作の容易さ

ついでに，ラジコンは基本1対1通信ですが，

- 多対多通信

についても比較してみます．

# 定番のArduino単体では無線通信できない
Arduinoは，オープンソースで開発されており，ハードウェアやソフトウェアの土台が既に作られているため，おかげで簡単なプログラムを即書いて実行することができるようになりました．
便利なライブラリも多く公開されているため，他のICやセンサー等のパーツとの連携も容易にできることが多いです．
ただ，定番のArduino UNOなど単体では無線通信機能はないので，無線通信モジュールを外付けするなどする必要があります．
例としては，

- ＲＮ－４２使用　Ｂｌｕｅｔｏｏｔｈ無線モジュール評価キット

などが秋月電子通商にも売られています．通販では安い無線モジュールも売られていますが，技適マークの有無を確認して，電波法に違反しないようにしましょう…

またArduinoでモーターを動かしたいとき，Arduinoから直接流せる電流は小さいため，トランジスタやモータードライバICを介して接続する必要があります．モータードライバICの定番として，TA7291Pがあります．このICを使えば，モーターの回転，逆回転，ストップ，ブレーキを制御することができます．

ということでArduino単体では，

- センサとの連携性…◎（ライブラリが豊富）
- 無線通信の容易さ…△（無線モジュールを外付け）
- モーター動作の容易さ…△（モータードライバを外付け）
- 多対多通信…△（無線モジュールによる）

# プログラミング不要で無線通信できるTWELITE
TWELITEはモノワイヤレス株式会社の無線マイコンです．
特徴は，出荷時既に[超簡単！標準アプリ（App_Twelite）](https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/index.html)が書き込まれており，２個用意するとすぐに双方向の無線通信を行えることです．以下の入出力がデフォルトで用意されています．

- デジタルIO×4本
- アナログ（PWM）×4本
- I2C×1対
- UART×1対

TWELITEなら，プログラミング不要で，もともと有線でもこれらの入出力をそのまま無線に置き換え可能です．

- [TWELITE-トワイライトの始め方](https://mono-wireless.com/jp/products/starter/index.html)

そして，TWELITEは通信距離が長いことも特徴で，環境に大きく左右されますが，数百m, 理想的には1kmほど届くこともあるようです．

- [通信距離について](https://mono-wireless.com/jp/products/overview/range.html)

さらに，多対多通信もそのまま数を増やせば簡単にでき，[設定変更（インタラクティブ）モード](https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/interactive.html)によって周波数チャネルとアプリケーションID，論理デバイスIDを設定することもできます．その上[シリアル通信アプリ（App_Uart）](https://mono-wireless.com/jp/products/TWE-APPS/App_Uart/index.html)を使えば，「実用上台数制限のない３２ビットの拡張アドレスによる送受信が可能」だそうです！

TWELITE自体にプログラムを書き込むこともでき，ソフトウエア開発環境として[TWELITE SDK](https://mono-wireless.com/jp/products/TWE-NET/TWESDK.html)が用意されていますが，C言語での開発で，Arduinoよりハードルは高めです．

ということで，TWELITEについては，

- センサとの連携性…△（Arduinoとの連携がおすすめ）
- 無線通信の容易さ…◎（プログラミング不要！）
- モーター動作の容易さ…△（モータードライバを外付け）
- 多対多通信…◎（プログラミング不要，PCに繋いで設定変更のみでも可能）

# Wi-Fi&BLE搭載，Arduinoでも開発可能なESP32
ESP32はEspressif社による，Wi-Fi, Bluetooth Low Energy通信機能搭載で，Arduino IDEでも開発可能なマイコンです．普通のArduinoに比べれば処理能力もかなり優れているにも関わらず，Arduinoと同じ感覚で手軽に開発を始めることが可能です．Wi-Fi, BLE通信を使用した処理も簡単に記述することができるよう，ライブラリも盛んに更新されています．

- [Arduino core for ESP32 WiFi chip](https://github.com/espressif/arduino-esp32)

ＥＳＰ３２－ＤｅｖＫｉｔＣのような，ESP32マイコンを搭載したボードを，秋月電子通商などで入手することができます．

- センサとの連携性…○（Arduinoライブラリの豊富さには劣る）
- 無線通信の容易さ…○（サンプルプログラムはインターネット上にも多い）
- モーター動作の容易さ…△（モータードライバを外付け）
- 多対多通信…△（BLEのアドバタイズ等方法はあるがまだやや難しい）

## コンパクトにまとめられたM5Stack
M5Stackは深セン発で，ESP32マイコンを搭載し，SDカードスロットやバッテリー，ボタンやディスプレイまで搭載して5cm四方のケースにコンパクトにまとめられたモジュールです．
通信の容易さ自体はESP32と同じですが，バッテリーやディスプレイ等の周辺部品が元から搭載されているのは，デバッグにも便利です．
GROVE端子が搭載されているので，GROVE - I2C モータードライバを使えばモーターの使用は楽かもしれません．

# ブロックで簡単プログラミング，多対多通信できるmicro:bit
micro:bitは，イギリスの公共放送局BBCが開発したボードで，教育用とされていますが，秋月電子通商でも手に入れることができます．
子どもたちへのプログラミング教育を重視してか，視覚的に分かりやすくプログラミングできる，ブロックプログラミングがメインとなっています．
ブロックプログラミングでもBluetooth無線通信を利用することができ，micro:bit同士の通信は画面上でブロックを組み合せるだけで，非常に簡単に，Bluetoothによる多対多通信を実現することができます．
[SparkFun moto:bit](https://www.switch-science.com/catalog/3382/)のような拡張ボードを使えば，モーターとの接続も楽になります．また，JavaScriptやMicroPythonによる開発もできます．

- センサとの連携性…○（加速度，コンパス，光，温度センサは搭載）
- 無線通信の容易さ…◎（ブロックプログラミングで可能！）
- モーター動作の容易さ…○（専用モータードライバあり）
- 多対多通信…◎（ブロックプログラミングで可能！）

# スマホから簡単に操作できるobniz
[obniz（オブナイズ）](https://obniz.io/ja/)は日本のCambrianRobotics社が開発したマイコンボードで，Wi-Fiに接続してインターネット経由で操作します．JavaScriptやPython, ブロックプログラミングで記述することができます．

「最大1Aまで利用でき，5v/3v切り替えやオープンドレインも利用できる12のIO」が搭載されているため，モータードライバ不要で，ハードウェアは非常にシンプルに，多機能なラジコンを作ることもできます．

スマートフォンやPCのブラウザ上でJavaScriptから操作できるので，スマートフォンの加速度センサやカメラと組み合せることもできますし，[TensorFlow.js](https://www.tensorflow.org/js)を使った機械学習とも相性が良いです．

- センサとの連携性…◎（各種センサを直接接続可能，公式ライブラリが豊富）
- 無線通信の容易さ…◎（インターネット経由の操作前提）
- モーター動作の容易さ…◎（モータードライバ内蔵）
- 多対多通信…◎（固有のIDを指定して操作可能，BLE通信も可能）

# シングルボードコンピューターRaspberry Pi
Raspberry PiはARMプロセッサを搭載したシングルボードコンピューターで，イギリスのラズベリーパイ財団によって開発されています．これは上に挙げたボードとは異なり，オペレーティングシステムを使用してより複雑な動作を並行することができます．
Raspberry Pi用のOSとして広く使われているものにRaspbianがありますが，OSのセットアップ，ディスプレイまたはPCとの接続等，セットアップにはやや時間がかかります．
しかし，OSはLinuxベースで，Pythonなどの通常コンピュータで使われるプログラミング言語は大抵使用できますし，TensorFlowのような機械学習もボード上で動かすことができます．

- センサとの連携性…○
- 無線通信の容易さ…○（WebIOPiを使えば同じネットワーク上からGPIOを操作可能，セットアップは必要）
- モーター動作の容易さ…△（モータードライバ外付け）
- 多対多通信…○（Linuxとして）

# GPSとハイレゾ対応Spresense (おまけ)
[Spresense](https://developer.sony.com/ja/develop/spresense/)はソニーが開発しているマイコンボードで，みちびきに対応したGPSやハイレゾリューションオーディオ機能，マルチコアプロセッサを備えながら，低消費電力なのが売りのボードです．Arduino IDEで開発することができます．
ただこれ単体では無線通信機能を備えておらず，[SPRESENSE用Wi-Fi add-onボード](https://www.switch-science.com/catalog/4042/)等を外付けする必要があります．

カメラやマイクとの接続が簡単で，[Neural Network Console](https://dl.sony.com/ja/)で学習したモデルを組み込み，推論を行うことができます．

GPSや高度な音声処理を備えたラジコンも手軽に作ることができます．ドローン等作例があるようです．


# まとめ
単純にラジコンを作るだけならいろいろな方法がありますが，その後どんな方向への発展を見据えるかによって，適したマイコンは絞られてくると思います．

ラジコンを作るという目的で今回重視した4つの指標で見れば，特にobnizが向いていると言えそうです．

- 既存のGPIOを迅速に無線化したい…TWELITE
- Arduinoのソフトウェア資産を継承してWi-Fi, BLEを追加したい…ESP32
    - コンパクトにまとめたい…M5Stack
- 多対多通信を見据える
    - 近距離無線通信…micro:bit
    - インターネットを通じた遠距離通信…obniz
- スマホやPCと通信したい…obniz
- 機械学習とハードウェアを連携したい
    - 学習済みモデルをボード上で推論…Spresense
    - TensorFlow.jsやその他…obniz
- インターネット上で遠隔操作したい…obniz
- GPSや音声処理性能が大事…Spresense

# 部品の入手方法

ここで挙げたものはほとんど，秋葉原の秋月電子通商で手に入ります．
M5StackやSpresenseは，通販のスイッチサイエンス等で手に入ります．