Arduino UnoとVSCodeとPlatformIO IDEを使ってATTiny13Aにプログラムを書き込む(Lチカ)

初投稿です，至らない点があると思いますがよろしくお願いします．
Qiita記事のうまい書き方があればご指南ください．

想定環境はMac，VSCode，PlatformIO IDEです．

# 0. はじめに
面倒な方は読み飛ばして[1. 環境構築](#1-環境構築)へ飛んでください．
VSCodeもPlatformIO IDEも導入済みだよって人は[2. へ](#2-arduino-uno-と-attiny13a側の準備)

ATTiny13Aみたいな超小さなマイコンにプログラムを書き込みたい！
そう思う頃が誰にでもあると思います．

しかし，Google先生に聞いてみると，書き込みにはArduinoをライタにするといいよ！
そのためにはArduino IDEを使って〜〜〜みたいなお話になります．
<h3>いやだ</h3>

たぶんある程度プログラムを書いたことがある人はこう考えます．

**Arduino IDE じゃなくて 自分の使ってるエディタで作業したい！**

僕の場合は VSCode を使っているので コーディングからなにからなにまで VSCode で完結させたいわけです．

VSCode では PlatformIO 用の拡張 PlatformIO IDE が存在し，これを使うことでArduinoにプログラムを書き込むことができます．M5Stackとかでも書き込めますね．

これを利用しない手はありません．ATTinyにだって書き込めるはず．

# 1. PC側の環境構築
## 1.1 VSCode をインストールする
そのへんの解説記事を参考にVSCodeを導入します(丸投げ)

## 1.2 PlatformIO IDE を導入する
拡張機能検索でPlatformIOと入力したら一番上に出てくると思います．
<img width="1222" alt="スクリーンショット 2018-08-26 23.02.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/284136/2e9560e9-b337-866f-f524-761ee90f00eb.png">

# 2. Arduino Uno と ATTiny13A側の準備
## 2.1 Arduino Uno を ATTiny のライタに改造する①
まず，Arduino IDEを起動します．
**使うのは1度だけ**な上，**プログラムは書かない**ので**Arduino IDEを使ってもいい**のです．

起動したら以下のようにして，ArduinoをArduinoISPとして利用するためのスケッチ例を読み込みます．
<img width="704" alt="スクリーンショット 2018-08-26 23.11.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/284136/b5e99344-613b-8bc8-fc0f-f4427f82b0fd.png">

このスケッチをArduino Unoに書き込みましょう．

## 2.2 Arduino Uno を ATTiny のライタに改造する②
配線を行います．
ついでにLチカ用の配線もしてしまいましょう．

ATTiny13A のピンアサインはこうなっているみたいです．

<img width="589" alt="スクリーンショット 2018-08-26 23.33.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/284136/4b9792a2-1225-1737-1f2f-7c6b6a56f532.png">

[データシート](http://www.mouser.com/ds/2/268/doc8126-1066157.pdf)からパクってきました．

もしかすると手元にあるATTiny13Aと微妙に模様みたいなやつの位置が違うかもしれません．
左上に丸い穴が開いているように見ればこの図と同じようになります．

こんな感じ
![a3j-f5E2.jpg](https://qiita-image-store.s3.amazonaws.com/0/284136/2bb2b49c-6c28-b353-9c78-026d08dd04f9.jpeg)


というわけで以下のように配線します．

<img width="905" alt="スクリーンショット 2018-08-26 23.32.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/284136/4692321e-b957-13d4-6387-144d4edd15f0.png">


これでATTiny13Aにプログラムを書き込む準備(とLチカさせる準備)ができました！

# 3. プログラムを書き込む

# 3.1 プロジェクト(スケッチ？)の作成

1. \+ New Project を選択
<img width="868" alt="スクリーンショット 2018-08-27 0.01.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/284136/66d268b0-ac83-e02c-afcf-ad940c171ca2.png">

2. プロジェクト設定
以下のように Board に Generic ATTiny13 (Atmel)  を選択します．
FrameworkはArduino，Nameはお好きにどうぞ．
<img width="618" alt="スクリーンショット 2018-08-27 0.04.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/284136/a6aded29-5126-4b85-dc13-7d652167f299.png">

# 3.2 プログラミング

Lチカ用のプログラムを書き込みます．
この記事ではLチカを目標としていますので，Arduinoのライブラリを使用しています．
本当は`#include <avr/io.h>`とかしたほうがいいと思います．

```cpp
#include <Arduino.h>

#define LED 3

void setup()
{
    pinMode(LED, OUTPUT);
}

void loop()
{
    digitalWrite(LED, HIGH);
    /*
        1000 / 9.6 = 104.166...
    */
    delay(104);
    digitalWrite(LED, LOW);
    delay(104);
}
```

注意点として，ATTiny13Aはデフォルトで9.6MHzで動作するという点があります．
そのため，1秒ごとに点いて，消えてを繰り返したい場合は1000[msec]を9.6で割った値にしなければなりません．(小数点以下を切り捨てているので厳密には1秒にはなりませんね)

# 3.3 platformio.ini を編集
これをやらないと詰みます．
おそらくここで詰まった人が結構いるのではないでしょうか？

[ここ](http://docs.platformio.org/en/latest/platforms/atmelavr.html)に設定方法が書いてあります．
これを参考に以下のように設定しましょう．

最初から書き込まれてるやつは消していいです．

```
[env:attiny13]
platform = atmelavr
board = attiny13
framework = arduino
upload_protocol = stk500v1
upload_flags =
    -P$UPLOAD_PORT
    -b$UPLOAD_SPEED

; ****を適切な値に書き換えましょう
upload_port = /dev/tty.usbmodem****
upload_speed = 19200
```

`upload_port`についてですが，ここにArduinoが刺さっているポートを指定します．
調べ方なのですが，端末などで`ls -l /dev/tty.*`とやればいいと思います．

**と思ったのですが**

どうやら`upload_port`は指定しなくてもいいっぽいですね．
もし，指定せずに書き込めなかった場合は試してみてください．

# 3.4 書き込み
VSCodeの左下のツールバーにある
<img width="317" alt="スクリーンショット 2018-08-27 0.24.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/284136/bfd5a0cc-fdc3-ae38-a6a6-06a112637d73.png">
これをクリックしましょう．
もしくは，`F1`キーで出現するやつにuploadって入力して出てくるやつでもいいと思います．
ターミナル派の人は`pio run -t upload`です．

VSCode内のTerminalに <font color=lawngreen >SUCCESS</font> って出たら成功していると思います．

# 3.5 やったぜ。

![5zMHgSxk.jpg](https://qiita-image-store.s3.amazonaws.com/0/284136/bf89dbb5-6306-968c-25d7-d39eb41f2c4b.jpeg)

青いLEDとレッドクリアなブレッドボードがかっこいいですね．


以上となります．