ワークショップ「スマホで自由自在に操作できるIoTミニ四駆を作ろう！」に参加できなかったので、自分で作ってみた(前編)


[前回](http://qiita.com/snumano/items/140e70abe5521fce18da)、Arduinoに接続したUSBケーブルを介して、有線でミニ四駆を操作しました。
今回は、ArduinoとUSBケーブルをESP8266に置き換えて無線(Wifi)で操作できるようにします。[Blynk](http://www.blynk.cc/)を使って、スマホで操作できるようにします。

# 部品調達

前回、購入したESP8266を使用します。

また、ESP8266を使うにあたり下記を使用しています。

## USBシリアル変換アダプター

[USBシリアル変換アダプター (FTDI FT232RL) Arduino mini等接続用](http://www.amazon.co.jp/dp/B0117SST42) 420円

##　3.3Vレギュレータ

[低損失三端子レギュレーター　３．３Ｖ５００ｍＡ　ＴＡ４８Ｍ０３３Ｆ（Ｓ　Ｑ）](http://akizukidenshi.com/catalog/g/gI-00538/) 100円

# 配線

* ESP8266とサーボとモータを接続。
* ESP8266の電源は、FTDI FT232RLから3.3Vレギュレータを介して共有。
* サーボの電源は、Arduino UNOの5Vを共有。
* モータは乾電池から共有。

![miniyonku.png](https://qiita-image-store.s3.amazonaws.com/0/4779/a18a7a7f-cc2f-6173-26a9-ed1a7a859ae4.png "miniyonku.png")

[公開いただいている回路図](https://github.com/cerevo/techblog-ESP8266-4th/blob/master/DRV8830M-W_LAN_WS_V04.PDF)をみると、コンデンサを使って電源周りをまとめています。手元にコンデンサがないので、今回はとりあえず、これでいくことにします。

# Blynk

DMM.makeのワークショップでは、javascriptでスマホの操作パネルを作っていましたが、自分で作る自信がなかったのでどうしようかなと思っていると、ちょうどいいアプリを見つけました。

* [Blynk](http://www.blynk.cc/)

操作するモジュールとして、ボタンやスライダー等があります。

![IMG_5549.png](https://qiita-image-store.s3.amazonaws.com/0/4779/6527ab10-d9c1-4b9d-7b4e-11e5f597d76e.png "IMG_5549.png") ![IMG_5551.png](https://qiita-image-store.s3.amazonaws.com/0/4779/11506acc-2198-3732-cfea-2db4497b0ab5.png "IMG_5551.png")


今回は、ジョイスティックを使います。

![IMG_5555.png](https://qiita-image-store.s3.amazonaws.com/0/4779/a6f6be26-9150-a262-b17e-c4e8c2f4789b.png "IMG_5555.png") ![IMG_5556.png](https://qiita-image-store.s3.amazonaws.com/0/4779/c1d0c827-f1c4-2046-d0d4-ae9fb844637a.png "IMG_5556.png")

# ESP8266スケッチ

Blinkをメインに使用するようにしましたが、前後の動作が不自然。一度、前後進したら5秒程進み続ける。
Blynk側では、入力された値(Param)を確認するだけで、モータの動作はloop内でやった方が、こまかく動作ができるのかも。。。

```
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
Servo myservo;
char auth[] = ""; # Blynkアプリで生成されるAUTH TOKENを入力

void setup()
{
  Serial.begin(9600);
  Serial.println("start!");
  Blynk.begin(auth, "<SSID>", "<PW>");
  myservo.attach(16);  # IO16に接続

  pinMode(12, OUTPUT);  # IO12に接続
  pinMode(13, OUTPUT);  # IO13に接続
}

BLYNK_WRITE(V0)
{
  myservo.write((180 * (255 - param.asInt())) / 255);
  
  Serial.print("X:");
  Serial.println(param.asInt());
  Serial.println((180 * param.asInt()) / 255);
}

BLYNK_WRITE(V1)
{
  if (param.asInt() > 135){  
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);
  }
  else if (param.asInt() < 70){
    digitalWrite(12, LOW);
    digitalWrite(13, HIGH);
  }
  else if (param.asInt() == 126) {
    digitalWrite(12, HIGH);
    digitalWrite(13, HIGH);
  }
  
  Serial.print("Y:");
  Serial.println(param.asInt());
}

void loop()
{
  Blynk.run();
}

```

# 動作

[![ミニ四駆+ESP8266](http://img.youtube.com/vi/3mgbUKp9bIk/0.jpg)](http://www.youtube.com/watch?v=3mgbUKp9bIk)


# まとめ

* 前篇、後編と分かれましたが、DMM.makeのワークショップの内容を、公開されている情報を参考に自作してみました。
* 回路は手元にある部品を元に作成しましたが、前後の動きに不自然な部分が残りました。公開された[回路図](https://github.com/cerevo/techblog-ESP8266-4th/blob/master/DRV8830M-W_LAN_WS_V04.PDF)を参考に、回路図の勉強をしたいと思います。電源の安定共有が課題です。
* 操作パネルはBlynkを使いましたが、自分でJavaScriptで作るよりははるかに簡単に、短時間で動くものをつくる事ができました。