teensy4.1完全に理解した

#　はじめに
最近teensy4.1というマイコンに出会ったので，teensy4.1の開発のための環境構築について書いてみたいと思います．

# teensy 4.1とは
ARM Cortex-M7の高機能・低価格マイコンです．スペックを一部抜粋
- クロック周波数600MHz
- Eathernet 10/100 Mbit
- USB device 480 Mbit/sec & USB host 480 Mbit/sec
- 55 digital input/output pins, 35 PWM output pins
- 18 analog input pins
- 8 serial, 3 SPI, 3 I2C ports 
- etc ...

詳しいスペックは公式サイトを参照して下さい．
https://www.pjrc.com/store/teensy41.html

注目すべきはその速度，600MHz．Arduino UNOは16MHzですから，断然早いですね．またESP32よりも120MHz早いです．ただ，ESP32は2コアありますから，処理内容次第でTeensyよりも早いでしょう．
35のPWMピンと18のアナログピンがあり(重複)，センサーもサーボモータもブイブイ言わせれます．
価格も4千円でスイッチサイエンスなどで購入できるお手ごろさです．
https://www.switch-science.com/catalog/6377/

# 環境構築
TeensyはArduino IDEで書き込みができます．全てのマイコンはArduinoで始まりArduinoで終わるんですね（謎）．nrf52840もarduino-cli使ってファーム書いてる今日この頃．．な筆者です(書き込みはUF2ブート)．
また，PlatformIOでも書き込みが出来ますので，こちらにも取り組みました．
僕はノートPCにUbuntu20.04を使っているので本記事はLinuxを対象とします．とはいえ，基本的に設定方法は公式を参照すれば大丈夫だと思います．

## Arduino IDEでの設定(Linux)
### Arduinoのインストール
次の記事を参考にしました．
https://qiita.com/ma2shita/items/927aa9e55962b4137518

### Teensyduinoのインストール
Linuxはruleファイルを置いておく必要があります．[公式サイト](https://www.pjrc.com/teensy/td_download.html
)から「Other Files」の項目にある「Linux udev rules」をダウンロードします．自分は適当にクリックしたらブラウザに表示されてしまったので，全選択してコピーし，nanoで開いてShift+Ctr+Vで貼り付け
て保存しました↓

```shell
$ cd /etc/udev/rules.d/
$ sudo nano 00-teensy.rules
```

次に「Teensyduino Files」をダウンロードしてきます．僕はLinux Installer (X86 64 bit)を選びました．
ダウンロードされたディレクトリに移動し，下記コマンドを入力してインストーラーを起動します．

```shell
$ chmod 755 TeensyduinoInstall.linux64
$ ./TeensyduinoInstall.linux64
```

このようなものが表示されればOKです．
![Screenshot from 2021-12-07 22-12-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891293/40aac31a-8d24-0773-4c0a-390f6b6201fe.png)

「Next」を押すと，udev ruluesがあるか判断され，所定の場所にrulesファイルがあれば問題なく顔文字で笑ってくれます
![Screenshot from 2021-12-07 22-15-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891293/536b91b8-29c2-2b8e-0136-49d612fb97eb.png)

ここから「Next」を押すとArduinoをインストールしているディレクトリを選択する必要があるのですが，ここでつまずきました．
なぜなら僕はArduinoを~/.local/shareに置いてあり，TeensyduinoのGUIでは隠しファイルとなって選択が出来ませんでした．どうすりゃええねん，とググったところ，どうやらコマンドオプションがあるようで，--dirでディレクトリを指定できました．GUIはキャンセルし，下記コマンドをターミナルに打つことで無事設定できました．めでたしめでたし．
これでteensyduinoの設定は終わりです．

```sh:ディレクトリの選択
$ ./TeensyduinoInstall.linux64 --dir=/home/Nobu/.local/share/arduino-1.8.15
```

## PlatformIOでの設定
Arduino IDEは補完機能がないので，人間には優しくありません（言い過ぎたごめん）．
補完機能がついているVSCodeで書きたいです．
VSCodeでマイコンのファームを書く場合，PlatformIOが便利です．PlatformIOでTeensy4.1のファームを書き込んでみましょう．

とは言ったものの，実は特にやることはなく，プロジェクトを作成する際にBoadをTeensy4.1で選べば良いだけです．なお，Teensyduinoはインストールしておく必要があり，Arduinoの設定方法で問題ありません．特にPlatformIOのディレクトリを選ぶ必要はなさそうです．

![Screenshot from 2021-12-07 22-42-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891293/5723dcb8-51e7-176b-789e-c113688a3471.png)

ただ，ここではまりポイントが一つありました．
普通にアップロードを押すとTeensyduinoのGUIが立ち上がり書き込みを行うのですが，なぜかうまく行かず，下記エラーがでます．

```
uploading .pio/build/teensy41/firmware.hex
Opening Teensy Loader...
Teensy Loader could not find the file firmware
quitscons: *** [upload] Error 1
```
どうやらTeensy Loaderがファームウェアのファイルを見つけれないようです．Pathが通ってないのか，なんなのか
ただ，調べてみるとCLIでのアップロードもあるようで，
https://docs.platformio.org/en/latest/boards/teensy/teensy40.html
結局，プロジェクトのplatformio.iniファイルでupload_protocolをCLIにすると無事にアップロードができました．

```ini:platformio.ini
[env:teensy41]
platform = teensy
board = teensy41
framework = arduino
upload_protocol = teensy-cli
```

この時の動作確認はビルドインのオレンジLEDを点滅させるプログラムにしました．参考までに

```cpp:main.cpp
#include <Arduino.h>

void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13,LOW);
  delay(1000);
}
```

micro-rosを入れて動作させることも行ないましたが，長くなるのでまた別の記事に書きます．