GWだし、ESP8266関係の記事をまとめながら、IoT framework作ってみる

# Overview

* 1000円ほどで手に入るArduino互換で、WiFi込のESP8266を搭載したボードにまつわる記事のまとめです。

* GWだし、ESP8266関係の記事をまとめながら、IoT framework作ってみる。
(下にgithubのリンクあります)
以下を実装し、追加・公開しました。
  * I2C driver, sensor framework, BMP180/DHT11 driver
  * Software PWM
  * Servo control framework and SG90D Servo driver
  * OTA (Over-the-air) firmware update (ボタンを一定時間押すと一定時間OTAが可能に)
  * UPnP/SSDP (Alexa連携などに役に立つ)


## ESP8266概略

| Spec | Detail |
|:---|:---|
| CPU | Tensilica L106 32bit MCU at up-to 160MHz |
| ExtIF | UARTx2 / SDIO / I2C / SPI / I2S (most of pins are MUXed) |
| VCC | 3.0 - 3.6V |
| Current | Average : 80mA |
| Package | QFN32 (5mm x 5mm) |
| WiFi | 2.4GHz (8021.11 b/g/n/e/i) |
| External Flash | Theoretically up to 16MB (WiFi OTA is available if the size is over than equal to 1MB ) |

安価ながら512KB以上Flash ROM(SPI-NOR)を搭載しているので、単体で、WiFi, TCP/IP, Web等実装ができ、非常に便利です。

## Pin configuration

ESP8266のpinが、各販売されているモジュールのpinとしてどのように対応しているのかをまとめています。

| Pin# | Pin Name | Description | Typical config | WROOM02 | ESP |
| :--- | :--- | :--- | :--- | :--- | :--- |
| 1 / 30 | VDDA | Analog Power 3.0V-3.6V | VDDA | 1: 3V3 | 9: VCC |
| 2 | LNA | RF Antenna IF | LNA |  | |
| 3 / 4 | VDD3P3 | Amplifier Power 3.0V-3.6V | VDD3P3 | 1: 3V3 | 9: VCC |
| 5 | VDD_RTC | NC (1.1V) | VDD_RTC |  | |
| 6 | TOUT | ADC (0-1.0V) | ADC | 14: TOUT | 15: ADC |
| 7 | CHIP_PU | Chip Enable High:On / Low : Deep Sleep | Pull up | 2: EN | 14: EN |
| 8 | XPD_DCDC | GPIO16 / wake up-able from sleep (need to be connected to EXT_RSTB) | WAKE# | 15: IO16 | 13: GPIO16 |
| 9 | MTMS | GPIO14 / HSPI_CLK　 / I2C_SCL / PWM2 / I2SI_WS | I2C_SCL | 3: IO14/I2C_SCL | 12: GPIO14/I2C_SCL |
| 10 | MTDI | GPIO12 / HSPI_MISO / PWM0 / I2SI_DATA | GPIO12 / PWM0 | 4: IO12 | 10: GPIO12 | 11: GPIO12 |
| 11 / 17  | VDDPST | Digital I/O (1.8-3.3V) | VDDPST | 1: 3V3 | 9: VCC |
| 12 | MTCK | GPIO13 / HSPI_MOSI / UART0_CTS / I2SI_BCK| GPIO13 | 5: GPIO13 | 10:GPIO13 |
| 13 | MTDO | BOOTMODE / GPIO15 / HSPI_CS / UART0_RTS  / PWM1 / I2SO_BCK | BOOTMODE | 6: IO15/BOOOTMODE | 7: GPIO15/BOOTMODE |
| 14 | GPIO2 | BOOTMODE / GPIO2 / I2C_SDA / UART1_TX (UART TX for flash programming/IrTX) / I2SO_WS| BOOTMODE / I2C_SDA | 7:IO2/I2C_SDA | 6:GPIO2/I2C_SDA |
| 15 | GPIO0 | BOOTMODE / GPIO0 / SPI_CS2 | BOOTMODE / GPIO0 | 8: IO0/BOOTMODE | 5: GPIO0 |
| 16 | GPIO4 | GPIO4 / PWM3 | GPIO4 / PWM3 | 9: GPIO4 / PWM3 | 4: GPIO4 | |
| 18 | SDIO_DATA_2 | GPIO9 / SD_D2 / SPIHD / HSPIHD | GPIO9 | | |
| 19 | SDIO_DATA_3 | GPIO10 / SD_D3 / SPIWP / HSPIHD | GPIO10 | | |
| 20 | SDIO_CMD | GPIO11 / SD_CMD / SPI_CS0 | GPIO11 | | |
| 21 | SDIO_CLK | GPIO6 / SD_CLK / SPI_MSIO | GPIO6 | | |
| 22 | SDIO_DATA_0 | GPIO7 / SD_D0 / SPI_MSIO | GPIO7 | | |
| 23 | SDIO_DATA_1 | GPIO8 / SD_D1 / SPI_MOSI / UART1_RX | GPIO8 | | |
| 24 | GPIO5 | GPIO5 / IrRX | GPIO5 | 12:IO5 | 3: GPIO5 |
| 25 | U0RXD | GPIO3 / UART0_RX (flash programming) / I2SO_DATA | UART0_RX | 10: RXD | 2: RXD0 |
| 26 | U0TXD | GPIO1 / UART0_TX (flash programming) / SPI_CSI1 | UART0_TX | 11: TXD | 1: TXD0 |
| 27 | XTAL_OUT | Crystal Oscillator output | XTAL_OUT | | |
| 28 | XTAL_IN | Crystal Oscillator input | XTAL_IN | | |
| 29 | VDDD | Digital Power 3.0V-3.6V | VDDD | 1:3V3 | 9: VCC |
| 31 | RES12K | needs to have 12kΩ pull down | RES12K | | |
| 32 | EXT_RSTB | External reset signal (low voltage : active) | EXT_RSTB | 13: RST | 16: RST |

## Boot Mode

| Mode | GPIO0 | GPIO2 | GPIO15 |
| :--- | :--- | :--- | :--- |
| UART Download | Low | High | Low |
| Normal (Run) | High | High | Low |


# 入手系

* ESP8266ボード
 * ESP8266は多数ありますが、技適を通っているESP-WROOM-02が買いたいところです。スイッチサイエンスなどでも購入できます。
 * http://www.amazon.co.jp/s/ref=nb_sb_noss?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Daps&field-keywords=ESP-WROOM-02&rh=i%3Aaps%2Ck%3AESP-WROOM-02
* 3.3Vレギュレーター
  * 最大500mA弱利用するようなので、USB-UARTのdiode dropperでは電力不足で不安定になる報告が相次いでいます. 
  * http://www.amazon.co.jp/s/ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Daps&field-keywords=%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3+%E9%9B%BB%E6%BA%90&rh=i%3Aaps%2Ck%3A%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3+%E9%9B%BB%E6%BA%90
* USB-UART board
  * ESP8266とは3.3Vしか利用できないので、3.3V TX/RXができるものを.
  * http://www.amazon.co.jp/s/ref=nb_sb_noss?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Daps&field-keywords=USB+UART+3.3V


# 開発環境系

ESP8266ではarduinoを開発環境に利用することができます。ここに、ESP8266のボードサポートを追加する手順が必要です。

* arduino page : https://www.arduino.cc/en/Main/Software
* arduinoの開発環境にESP8266のボードサポートを追加 : https://github.com/esp8266/Arduino/blob/master/README.md

> 1. Install Arduino 1.6.8 from the Arduino website.
> 2. Start Arduino and open Preferences window.
> 3. Enter http://arduino.esp8266.com/stable/package_esp8266com_index.json into Additional Board Manager URLs field. You can add multiple URLs, separating them with commas.
> 4. Open Boards Manager from Tools > Board menu and install esp8266 platform (and don't forget to select your ESP8266 board from Tools > Board menu after installation).

ご参考:
* 開発環境構築に関するqiita記事: http://qiita.com/azusa9/items/264165005aefaa3e8d7d

# UARTドライバに関して

ESP8266にはUARTがあるので、開発をするには、Mac/Windows/UbuntuなどでUARTを使えるようにする必要があります。3.3VのTX/RXです。

安価なUSB-UARTはたいてい以下を使っています。

* FTDI : http://www.ftdichip.com/Products/ICs/FT232R.htm
* Prolific : http://www.prolific.com.tw/JP/ShowProduct.aspx?p_id=223&pcid=126
* CP210x : http://jp.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

最初に、TX/RXをループして、動作確認をすると良いでしょう。
また、I/Oが3.3Vであることをテスターなどで確認しましょう。

# ボードの設計

ボードがあっても電源をつなぐこと、プログラミングのために、UARTをつなぐことが必要です。
(ひとたび焼ければ、1MB以上のexternal SPI-Flashがある場合は、[WiFiによるOTA](https://github.com/esp8266/Arduino/blob/master/doc/ota_updates/readme.md)も可能のようです)

* ESP8266EX datasheet
 * http://bbs.espressif.com/viewtopic.php?f=21&t=412&p=1545#p1545
 * [0A-ESP8266EX__Datasheet__EN_V1.0_20160422.pdf](http://bbs.espressif.com/download/file.php?id=1374)


# boardの動作確認

ESPのモジュールは出荷時にATコマンドでWiFiを使うためのファームウェアが焼かれており、動作確認ができます。

| Mode | GPIO0 | GPIO2 | GPIO15 |
| :--- | :--- | :--- | :--- |
| Normal (Run) | High | High | Low |

に設定して起動させると、

```
$ ls -l /dev/tty*
..snip..
/dev/tty.SLAB_USBtoUART
..snip..
$ screen /dev/tty.SLAB_USBtoUART 115200
```

1. Check point : ```Ready``` の文字が見えますか？
2. ```AT``` のあとに、CTRL+Mを押し、CTRL+Jを押して、 ```OK``` と帰ってくるか?

> 参考 : [getting-started-with-the-esp8266](http://www.esp8266.com/wiki/doku.php?id=getting-started-with-the-esp8266)

のようにして、確認ができます。

最初に、VCC/GND/EN/TX/RX/BOOT PIN周りの配線をこれで確認しておくことにより、今後のソフト開発で何が問題なのかに悩まなくて済むようになります。

## 参考 : Mac の screen の　終了のさせ方

> screen の画面で control + a を押して、次に k を押し、Really kill this window [y/n] と表示されるので、 y

# 初期ファームウェアのBackup

## Install esptool

https://github.com/themadinventor/esptool/

```
$ cd ~/arduino_apps
$ git clone https://github.com/themadinventor/esptool/
$ cd esptool
$ sudo python setup.py install
```

## backup

UART download mode (GPIO0:Low, GPIO2:High, GPIO15:Low)にします。

| Mode | GPIO0 | GPIO2 | GPIO15 |
| :--- | :--- | :--- | :--- |
| UART Download | Low | High | Low |

> CSP210xとの接続では、USB-UART側で、DTS->RTSへjumperを飛ばしてあげないと、esptool.pyがfailになりました。

```
$ ls -l /dev/tty* -l
..snip..
/dev/tty.SLAB_USBtoUART
..snip..
$ esptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 read_flash 0x00000 0x3DFFF bkup-app.bin
$ esptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 read_flash 0x3E000 0x3FFFF bkup-otakey.bin
$ esptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 read_flash 0x40000 0x7BFFF bkup-irom0text.bin
$ esptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 read_flash 0x7E000 0x7FFFF bkup-remain.bin
```

１コマンドごとにreset入れないとうまく動かなかったですので、面倒であれば、
```
$ esptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 read_flash 0x00000 0x7FFFF bkup-512K.bin
```
で一気にやるのも吉かもしれません。

### 秋月WROOM-02 には 1MB (8MBit) のものもあるようです

```
load 0x40100000, len 1396, room 16 
tail 4
chksum 0x89
load 0x3ffe8000, len 776, room 4 
tail 4
chksum 0xe8
load 0x3ffe8308, len 540, room 4 
tail 8
chksum 0xc0
csum 0xc0

2nd boot I�%=5
                SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

d��+խ�-+PUUP�
```
のように、起動時に出るので、4MBではないものもあるみたいですね。

としたときは、bkupするのは、8Mbitのエリアなので、

```
$ esptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 read_flash 0x00000 0xFFFFF bkup-1024K.bin
```

Restoreするときは、

```
sptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 write_flash --flash_mode=qio --flash_size=8m 0x00000 bkup-1024k.bin 
```

> memoryマップ 参考 : http://www.electrodragon.com/w/Category:ESP8266_Firmware_and_SDK

# Arduinoでのライブラリのインポート方法

1. スケッチ → ライブラリをインクルード → ZIP形式のライブラリをインストール
2. スケッチ → ライブラリをインクルード → インクルードしたライブラリを選択 (自動的に#include <>してくれます)

## PaulStoffregen さん の Time

```
$ git clone https://github.com/PaulStoffregen/Time.git Time
$ cd Time
$ git archive HEAD --output=../Time.zip
```

## exabugs さん　の NTP

```
$ git clone https://github.com/exabugs/sketchLibraryNTP NTP
$ cd NTP
$ git archive HEAD --output=../NTP.zip
```

# Arduino configuration

* Arduino/Preferences
  * Additional board manager URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json

* Tool
 * MCU board : Generic ESP8266 Module
 * Flash Mode : DIO (default)
 * Flash Frequency : 40MHz (default)
 * CPU Frequency : 80MHz (default)
 * Flash Size : 512k (64K SPIFFS) (default)
 * Debug port : disabled (default)
 * Debug level : nothing (default)
 * Reset Method : ck (default)
 * Upload Speed : 115200 (default)


# GW中にあーだーこーだー書いた（ている）結果

https://github.com/hidenorly/esp8266_IoT

* GPIO configuration
* LooperThreadTicker / LooperThreadManager
  * Tickerはtimer contextなので、http通信とか失敗するので、looper threadに乗り換えが必要なので、それを手軽にやるためのclass.
* WiFiClientStatusTracker
* NtpStatusTracker
* WiFi SSID/Password through Web browser
* I2C driver
* Sensor framework
  * Pressure Sensor
  * Temperature Sensor
  * Humidity Sensor
  * BMP180 sensor driver
  * DHT11 sensor driver
* Servo framework
    * SG90D Servo Driver
* Software PWM (for Servo)
* OTA (Over-the-air) firmware update
  * ボタンを一定時間押すと一定時間OTAが可能に
* UPnP/SSDP
 * Alexa連携などに役に立つ

など。。。

## arudiono memo

* C++で実装されている
* main()の代わりに、setup()とloop()が与えられている。

```
void main()
{
  init();
  setup();
  for(;;){
    loop();
  }
}
```

が与えられているイメージ.

* こうなっているので、RTOSでよくあるloopの最後にWFI (Wait For Interrupt)を使い、消費電力を削減する仕組みにはなっていない。
 * 割り込みコンテキストと、上記のループのコンテキストは、当たり前だが意識する必要がある。
 * 割り込みコンテキスト(例えばtimer(Ticker))では、TCP/IP通信などは利用できない
* arduinoでは、projectをスケッチと呼ぶ。
  * 新規で作成すると、そのフォルダーとファイル名が同じものが作成される
  * 右上のtabに追加で、.cppと.hを追加でき、普通の作成が可能となる。
* 設定で外部エディタを使うを選択すると、sublime text2などを使うことができるが、arudionoはread only modeになり、結構使いづらくなる。
* ライブラリーは、zipで固めておき、include zip libraryで取り込みが可能
* ESP8266はgithubで公開されているarudino向けのboard support packageを追加することで利用可能となる
  * このBSPには、ESP8266で使える便利なライブラリーがたくさん入っている。
    * WiFi, EEPROM, i2c, SPI-NORで使える簡易ファイルシステム, timer(Ticker)など
    * WiFi shieldと同じAPIも用意されているがESP8266専用のIFもある。
```

# Forum

http://bbs.espressif.com/

# Appendix

* [espressif on github](https://github.com/espressif)
    * [ESP8266_RTOS_SDK](https://github.com/espressif/ESP8266_RTOS_SDK)
    * [ESP8266_MP3_DECODER](https://github.com/espressif/ESP8266_MP3_DECODER)
    * [ESP32_RTOS_SDK](https://github.com/espressif/ESP32_RTOS_SDK)
    * [ESP8266_IOT_PLATFORM](https://github.com/espressif/ESP8266_IOT_PLATFORM)
* [Platform IO](http://docs.platformio.org/en/latest/platforms/espressif.html)
* [ESP8266 Arduino Core](https://github.com/esp8266/Arduino)

* ハードウェア
 * [ESP8266 > 内部プルダウン / プルアップ > INPUT_PULLUPは動く / INPUT_PULLDOWNは動かない](http://qiita.com/7of9/items/eba2093d8a089d325339)
 * [ESP-WROOM-02で抵抗けちって動かなかった件](http://qiita.com/shibatchii/items/930fcd90fded76866483)
 * [ESP8266 > fritzingのパーツ > ESP-WROOM-02相当はない?](http://qiita.com/7of9/items/7b0c4a1267325b6d69ed)
 * [ちょと裏技っぽいけど、ESP8266 でAD変換やる方法](http://qiita.com/azusa9/items/26e74e4e0d5773ce9c41)
 * [秋月電子の「Ｗｉ－Ｆｉモジュール　ＥＳＰ－ＷＲＯＯＭ－０２　ＤＩＰ化キット」を使った開発環境の構築](http://qiita.com/juosugi/items/66f25cc60734d17bc7f0#_reference-653594ab00ddb101da66)
 * レベルコンバーター
    * [5V系・3.3V系信号レベル変換](http://www.cepstrum.co.jp/hobby/5v33v/5v33v.html)
    * [異なる電圧レベル間でI2C](http://blogs.yahoo.co.jp/gomisai/14177916.html)
    * [異なる電圧レベル間でI2C　その２](http://blogs.yahoo.co.jp/gomisai/24363625.html)
    * [I2Cバスのレベルシフト](http://sh7045.cocolog-nifty.com/blog/2011/11/i2c-a39f.html)
 * [LM317T](http://www15.plala.or.jp/gundog/homepage/densi/lm317/v/lm317v.html)

* 焼きこみ
 * [ESP8266 > Link > FTDI Auto Program](http://qiita.com/7of9/items/1587f78a43237d8f4708)
 * [ESP8266 への転送速度を3倍にして快適な開発生活をおくる](http://qiita.com/hotchpotch/items/ba7df839ce31547d4281)
 * [I/O電圧が3.3VのUSB/TTLシリアル変換アダプタ](http://qiita.com/mayfair/items/9682e4b37bbe78800d51)

* WiFi
 * [技適済み格安高性能Wi-FiモジュールESP8266 コピペでWiFi接続出来るArduinoIDE用ソースコードとその解説](http://qiita.com/azusa9/items/7f78069cb09872cf6cbf)
 * [ESP8266 (ESP-WROOM-02) でWi-Fi使用時のSSID/パスワードをブラウザで設定できるように](http://qiita.com/exabugs/items/2f67ae363a1387c8967c)
 * [ESP-WROOM-02でWi-Fiのアクセスポイントをスキャンする](http://qiita.com/umi_kappa/items/366e1ab937ae98b14eba)

* HTTP / network
 * [ESP-WROOM-02 Arduino互換ボードでサクッとHTTP通信できたよ](http://qiita.com/umi_kappa/items/c3c929c6f42c5bdf3143)
 * [ESP-WROOM-02 > UDP > echo server](http://qiita.com/7of9/items/88965408c5b6c416e03a)
 * [ESP8266のNodeMcuでiFttt](http://qiita.com/sushisushiBoo/items/306f94e74a28d286b067)

* System
 * Filesystem
        * [SPI Filesystem](https://github.com/esp8266/Arduino/blob/master/doc/filesystem.md#seek)
        * [Filesystem on SPI-NOR Flash](https://www.mgo-tec.com/spiffs-filesystem-uploader01-html)
        * [ESP8266 > SPIFFS.open()成功](http://qiita.com/7of9/items/58e73312a37ca51e7e00)
 * [ESP8266 (ESP-WROOM-02) で消費電力を抑えるには (スリープモードまとめ)](http://qiita.com/exabugs/items/9edf9e2ba8f69800e4c5)
 * [ESP8266 (ESP-WROOM-02) でNTP(時刻合わせ)をするライブラリ。(Timeライブラリと連携して)](http://qiita.com/exabugs/items/b1b7430d185b268a1abf)
 * [ESP8266 (ESP-WROOM-02) の便利ライブラリまとめ (Ticker編)](http://qiita.com/exabugs/items/34aab51eb2d35207629b)

* ほかを駆動
 * [ESP8266で遠隔操作のエアコンリモコンを作って、実用できるか試す（安定稼働）](http://qiita.com/kiyopikko/items/d7254db83ad070600650)
 * [ESP8266 > リレータッチボードの使用](http://qiita.com/7of9/items/9184a14182235d5feb96)

* センサー
 * [ESP-WROOM-02でI2Cセンサーを使用する](http://todotani.cocolog-nifty.com/blog/2015/10/esp-wroom-02i2c.html)
    * [ESP8266 と I2C](https://macsbug.wordpress.com/2015/10/23/esp8266-%E3%81%A8-i2c/)
    * [BMP180 data sheet](https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf)
    * [MPU-6000/MPU6050 data sheet](https://github.com/TheOS1/ESP8266/raw/master/Drivers/Lua%20Drivers/MPU6050/Docs/Register%20Map%20and%20Descriptions-MPU-6000A_V.4.pdf)
    * [DHT11 data sheet](http://akizukidenshi.com/download/ds/aosong/DHT11.pdf)
        * [Arduino library for DHT11DHT22, etc Temp & Humidity Sensors](https://github.com/adafruit/DHT-sensor-library)
        * [ESP8266 - Driver for the temperature and humidity sensor DHT11 and DHT22](https://github.com/CHERTS/esp8266-dht11_22)
        * [Library for Dallas/Maxim 1-Wire Chips](https://github.com/PaulStoffregen/OneWire)
        * [温湿度センサDHT11をRaspberry Piに繋いでシリアル入力を学ぶ](http://dolls.orz.hm/?p=9000)
        * [温湿度センサ DHT11を試す。](http://isa.asablo.jp/blog/2015/01/29/7557787)
 * [An Arduino library for the digital light sensor breakout boards containing the BH1750FVI IC](https://github.com/claws/BH1750)
 * [ESP-WROOM-02 Arduino互換ボードと焦電センサーで動体を検知する](http://qiita.com/umi_kappa/items/c4df607cc25c346df44e)
 * [ESP-WROOM-02 Arduino互換ボードで温湿度センサーを使う](http://qiita.com/umi_kappa/items/95ef40c930ef6b9bfed0)
 * [ESP8266 (ESP-WROOM-02) でセンサーを扱う](http://qiita.com/exabugs/items/9ca4093813db71278b39)
 * [ESP-WROOM-02開発ボードで15分で家の温度・湿度・気圧モニタシステムを作る](http://qiita.com/tittea/items/fab4671304bf3001efbd)
 * [Milkcocoaと複数のESP8266と温度センサでIoTしてみた。](http://qiita.com/wamisnet/items/f3d63be2044672b661a1)
 * [ESP-WROOM-02にカメラモジュールを繋いでネットワークカメラを作る](http://qiita.com/binzume/items/e301c12b7ec1486d7c42)

* Raspberry Pi連携
 * [初心者向けESP-WROOM-02解説その1: ラズパイを母艦にする](http://qiita.com/erukiti/items/2eb5c6b02bed3b382bd9)

* Tips
 * [Arduino IDE > 外部エディタを使用する > Sublime Text使用など](http://qiita.com/7of9/items/b9612b2073a978bdfbe9)
 * [ESP8266(ESP-WROOM-02)のチョイはまり回避のためのTips集](http://qiita.com/azusa9/items/fe20794aa858a73fd97b)

* ほか
 * [これからの回路図は Upverter で書くことにしよう](http://qiita.com/exabugs/items/a8b3b399160cdd5ee47a)  
 * [upverter](https://upverter.com)
 * トランジスタ
        * [トランジスタのスイッチング回路](http://startelc.com/elc/elc_3_7Tr2sw.html)
        * [トランジスタをマイコン出力のスイッチとして使う方法（１／２）](http://www.geocities.jp/zattouka/GarageHouse/micon/circuit/TR.htm)
 * リレー
        * [SRD-05VDC-SL-C-Datasheet](http://www.datasheet-pdf.com/PDF/SRD-05VDC-SL-C-Datasheet-Songle-720556)
        * [Single 5V Relay Board, 3-pin Interface, 10A @ 125V AC / 28V DC](http://microcontrollershop.com/product_info.php?products_id=5919)
        * [srd-05vdc-sl-c datasheet](http://www.datasheetcafe.com/srd-05vdc-sl-c-datasheet-pdf/)
        * [srd-05vdc-sl-cについて](http://www.kayaba.org/pd/srd-05vdc-sl-c/)

* サーボ関係
 * [ESP8266 (ESP-WROOM-02) でサーボを制御する](http://qiita.com/exabugs/items/1c454d3d31d7561dcdd0)
 * [SG90D servo specification](http://www.servodatabase.com/servo/towerpro/sg90d)
 * [SG90 servo specification](http://akizukidenshi.com/download/ds/towerpro/SG90.pdf)
 * [Arduinoでサーボ制御](http://kousaku-kousaku.blogspot.jp/2008/06/arduino.html)
 * [その９ Arduinoでサーボモータをキュイキュイ動かす！](http://marupeke296.com/EL_Ard_No9_ServoMotor.html)
 * [【RaspberryPi】サーボをAdafruit製モータドライバーを使ってI2Cで制御](http://sabo.hatenablog.com/entry/2015/03/28/212604)
 * [ESP8266-BLADE](http://www.microfan.jp/esp8266/esp8266-blade)
 * [adafruit/Adafruit-PWM-Servo-Driver-Library](https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library)
 * [歩行ロボットをつくるにはまずこれ！【サーボ編２】](http://www.isopro91.com/entry/2014/10/21/arduino/servo/robot)