Leafony Basic Kit 2 のSTM32 でLチカに挑戦！

## いきなりスタートアップガイドを無視する

~~Webエンジニアです。~~ 説明書を読まないオッサンです。

[Leafony Basic Kit 2](https://shop.leafony.com/collections/products/products/basic-kit-2) というものを入手しました。
使ったことないので、Lチカでもやってみようと思います。

### Lチカとは!?

LEDを点けたり消したりを繰り返し行いチカチカさせることを **Lチカ** と言います。
マイコンのプログラミングにおける `hello world` のようなものです。

Qiitaでも、いろんな Lチカ記事がありますね！
この記事も仲間入りだー！

https://qiita.com/search?q=Lチカ&sort=&stocked=&page=2

### Basic Kit 2 に入っているもの

> 開封後すぐに写真を撮ればよかったのですが、雑にバラしたら訳が分からなくなりました。
> どう仕舞うのが正解なんだ!? わからん

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/14fdaf5c-726a-92b1-ecd3-540eaf97d127.jpeg)

Basic Kit 2の内訳は下記の通りです。（ネジとかナットとかそういうの除く）

情報： https://shop.leafony.com/collections/products/products/basic-kit-2 

|モジュール名|説明|
|:---|:---|
|AC02 BLE Sugar|BLE通信モジュール|
|AIO1 4-Sensors|センサーモジュール|
|AP01 AVR MCU|AVRモジュール|
|AP03 STM32 MCU|STM32L4モジュール|
|AV01 CR2032|CR2032電池モジュール|
|AX02 29pin|IO外だし用モジュール|
|AZ01 USB|USBシリアル通信モジュール|

### 公式のスタートアップはIoT    

Leafony Basic Kit 2 の スタートアップガイドは下記にあります。

- [Basic Kit 2 スタートガイド](https://docs.leafony.com/docs/getting-started/basic2/)

しかしこれ、Basic Kit 2 に入ってる 大量の基板をつなげて、 **IoTを試す** という内容です。    
これはマイコン買って最初にやることじゃない！と思う Lチカ信者なので、とりあえずスタートアップガイドはスルーすることにしました。

## なぜかめんどくさい方のLチカへとつき進む！ Arduinoの準備

Lチカに必要なのは、電源と、マイコンと、そしてLEDです。センサーとか電池とかは使いません。

### AVR使えば簡単
実は、Leafony Basic Kit 2を使ったLチカで一番簡単なのは、AP01 AVR MCU を利用することです。AP01 AVR MCU にはLEDが内蔵されていますので、本記事のようなめんどくさい手順は不要です。 公式ページにも [AVR を使ったLチカの手順](https://docs.leafony.com/docs/examples/beginner/1_p/basic/blink/) が紹介されています。

実は後で STM32 を使って別のことがやりたいのですが、AP03 STM32 MCU の方にはLEDが内蔵されていないようなので、LEDを別に用意することにしました。 本記事では AP03 STM32 MCU を使ったLチカを紹介します。

> 全国1000万のLチカファンの皆様も、LEDを持ってるはずですので問題ないでしょう！
> STM32の方はなんでLEDつけなかったのか？

### だが今回は STM32の方を使う

というわけで、環境構築を始めます。

Mac / Windows などのPCと、Arduino IDEを準備します。
筆者は下記環境で確認しました。

- Macbook Air 2021 / OS Ver. 12.6
- [Arduino IDE Ver.1.8.19](https://www.arduino.cc/en/software)

Arduino IDEは既にインストールされているものとして話をすすめます。
最初にSTM32用のボードを追加します。
Leafonyのサイトに説明がありました。

- [STM32 MCU の Arduino IDE 設定](https://docs.leafony.com/docs/environment/stm32/arduino_ide/)

まず `Arduino` > `Preferences` > `追加のボードマネージャのURL` に下記URLを入れて、ボードマネージャーから追加のボード「`Leafony STM32`」をインストールします。

https://github.com/Leafony/BoardManagerFiles/raw/master/Leafony_STM32/package_leafony_stm_index.json

ボードの設定はこんな感じ

![setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/b3724ef7-7b49-b61e-8d9f-92819a7f8664.png)

Lチカだけですので、プログラム（スケッチ）は下記で良いでしょう。

```blink.ino
#define LED_PIN 13

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

void loop() {
  digitalWrite(LED_PIN,HIGH);
  delay(1000);
  digitalWrite(LED_PIN,LOW);
  delay(1000);
}
```

ここまで出来たら、先にLeafonyを組み立てます。

## Lチカ用に Basic Kit 2 を組み変える！

ソフトウエアの準備ができたので（と思っていた。実はできていなかった。その話は後で）、STM32 を使った Lチカ用に Basic Kit 2 を組み変えます。

> Basic Kit 2 では、複数のボードが既にスタックされてネジ留めされた状態で箱に入っていましたが、冒頭で紹介したように、開封後何も考えずにいきなり分解したため、どのような状態だったか？ 覚えていません。 ようするに、それらの中から下記のように一部のボードを使います。

準備するものは下記の通り

**Basic Kit 2に含まれているもの**
- AX02 29pin
- AZ01 USB
- AP03 STM32 MCU
- ネジ（Basic Kit 2に最初から入ってた2本）
- ナット（CR2032のボードに付いてたやつを分解して拝借）
- ドライバー（Basic Kit 2に最初から入ってる）

**別に準備するもの**
- LED（色はお好みで。今回抵抗つけないので壊れてもいいやつ）
- ポリイミドのテープ（AX02 29PINの下にLEDの足が出て下の基板とショートしたら泣くので保護用）
- ハサミ（ポリイミドのテープをカットする用）
- USBケーブル（USB-Type microB と PC側のコネクタに合わせたケーブル。USB-Type Aだと最近のMacに刺せないので Type Cへの変換が必要です）

![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/49bc9a25-3bfb-679c-2807-4c3f986b01d2.jpeg)

Leafony は下記の順序でスタックします。

|重ね順（上から）|部品名|説明|
|:---:|:---|:---|
|1|AX02 29pin|IO外だし用モジュール→ここに頑張ってLEDを繋ぐ|
|2|AZ01 USB|USBシリアル通信モジュール→STM32書き込み用兼電源|
|3|AP03 STM32 MCU|STM32L4モジュール→ここにLチカのプログラムを書く|

ネジとドライバで組み立てたくなりますが、先にやることがあります。

### 1. AZ01 USB をポリイミドテープで絶縁する

ボードを重ねる前に、一番上の  AZo1 USBをポリイミドテープで絶縁します。    
その上に重ねる AX02 29pin にLEDを直接刺す（ハンダづけはしない）予定なのですが、LEDの足が下に重ねる AZ01 ボードに貫通・接触してショートなどの事故を防ぐために絶縁性能のあるテープでガードしよう、というわけです。

![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/14dc6e1f-dd9e-db36-ccd1-d1cdb7ffb96d.jpeg)

このように巻いてから、

![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/f9761342-8fdb-8ad8-a5ba-0fdae128f37b.jpeg)

ハサミではみ出したテープをカットして整えればOK。

### 2. ボードを重ねてネジ止めする

それではボードを重ねます。

上から AX02 29pin → AZ01 USB → AP03 STM32 MCU の順番です。

![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/f7e83c86-cd25-2795-5e78-76ae8f3618e6.jpeg)

重ねてから、

![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/1a893833-bd48-ba26-6aeb-a7256d3ff091.jpeg)

ネジ止めします。

### 3. LEDを雑に繋ぐ

リードの付いたLEDの足を少し広げます。

![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/7631535f-bdf0-eb77-d289-11804f221522.jpeg)

LEDを AX02 29pin のスルーホール部分に下図のように刺します。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/db7d5cad-0a0c-9e2b-56f0-5905dc36068b.png)

今回のLチカ用のスケッチでは、`LED_PIN` に `13` を指定しました。
`GPIO13`は、Leafony BUSの `F21` ピンになります。こちら側に LEDの `+` （アノード）側を刺します。
もう一箇所、`GND` 側に LEDの `-`（カソード）側を刺して完成です。

本来抵抗経由で繋ぐのが正しいですが、壊れても良いLEDを繋ぐということでこれでOKにしています。（雑！）

## Leafony に Lチカコードを書き込む！

いよいよ、PCとLeafonyをUSBケーブルで接続してシリアルポートでArduino で Lチカをアップロードしてみましょう。

最初にLeafony の一番下にスタックした AP03 STM32 MCU のスライドスイッチを操作します。
スライドスイッチをUSBケーブルと逆の方向にスライドさせると赤いLEDが点灯します。

![9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/17269381-0c20-20e7-d8cb-bfec111da23f.jpeg)

この状態で Arduino の `ツール` > `シリアルポート` を見ると、シリアルポートが見えるはずです。

![serial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/ab441a97-dc5c-ba86-cb4e-808046dc438f.png)

この状態で、`Arduinoの準備` の最後のArduinoの画面でArduinoの「マイコンボードへ書き込む」ボタンをクリックします。    
うまくいくと、ここでビルドが始まり、ビルドが成功して書き込み完了！となるのですが、いくつかエラーが出ました。

### エラー1. prebuild.sh permission denied

![err1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/e1bb105f-2b91-76d4-2a35-3fc194f2cb74.png)

なんか、prebuild.sh に実行権限がなさそうな感じです。慌てず権限を付けましょう。

```
cd {prebuild.shがあるdir}
chmod +x ./prebuild.sh
```

これで治りました。

### エラー2. STM32_Programmer_CLI not found

![err2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/573f4d08-24a6-f31b-4e87-774c9334fd1a.png)

[STM32 MCU の Arduino IDE 設定](https://docs.leafony.com/docs/environment/stm32/arduino_ide/) に、なんか入れろと書いてあったけど、Arduino のボードマネージャからビルド環境入るの普通だよね。と思ってたので無視してました。入らないのかよ！

というわけで、仕方なく入れることに（まー、ちゃんと説明読んでれば先に入れてるわけですが）

結構めんどくさいです。

- https://www.stmcu.jp/design/sw_dev/pc_soft/58442/ からお使いのPC/OSに合わせたものをダウンロードする。このページにたどり着く前に、STMicroelectronics のID / Password でログインが必要。アカウントが無い人はアカウントを登録するところから。

- Macなので `2.11.0 (Mac)` をダウンロード。解凍すると、いかにもアプリケーションみたいな`SetupSTM32CubeProgrammer-2.11.0` と書いたアイコンが出てきてダブルクリックで実行しそうになるけど、ダブルクリックしても実行されない。STMいつものお約束。STMが作るソフトのMac用インストーラーはだいたいこうなってる。慌てず `SetupSTM32CubeProgrammer-2.11.0` を「パッケージの内容を表示」で開いて、`Contents/MacOs/` の下の `SetupSTM32CubeProgrammer-2_11_0_macos` がインストーラの本体なので、これを コンソールから実行する。

- この後、MacOS 12.6 だとセキュリティのエラー（ブロック）が出まくり、なかなかインストーラ画面に辿り着けない。エラーが出る都度 `システム環境設定` > `セキュリティとプライバシー` の `ダウンロードしたアプリケーションの実行許可` からブロック解除しまくる。数えてないけど インストーラー表示にたどりつくまでに、30回くらいやった気がする。Lチカへの道は意外に遠い！（このあと、1世代古いOS 11.6 でやってみたら、セキュリティエラーにならずあっさり インストーラー画面が表示される。MacOS新しくなるたびに使いにくくなるなぁ！というのは別の話なので置いとく）

- インスローラー画面に辿り着けたら、あとは普通にインストールするだけ。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/b6337ab5-1f95-80c3-8c57-dc0e4c80786c.png)

### 気を取り直して再度トライ！

STM32 Cube Programmer のインストールが無事終わったら、Arduino から もう一度「マイコンボードへ書き込む」を実行すると、ようやくビルドと書き込みに成功します。

下記画面が出たら、書き込み成功！

![success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/720dfe24-74f3-0ab4-c5cc-d6c39b305c05.png)

その後、AP03 STM32 MCU のスライドスイッチを USBケーブル側にスライドさせて（赤いLEDが消える）、リセットスイッチ（スライドスイッチの反対側にあるスイッチ）を押すと、Lチカが始まります！

![blink.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31758/7e0cd84b-b58b-cdf1-8f27-8466e7e0c2d2.gif)

## まとめ

[Leafony Basic Kit 2](https://shop.leafony.com/collections/products/products/basic-kit-2) の AP03 STM32 MCU で Lチカする方法を紹介しました。
- AP01 AVR MCU の方を使えばLEDを頑張ってつなげなくても良い
- AP03 STM32 MCU の方でLチカしようとすると、LEDを追加する必要があるので、 AX02 29pin を使ってLEDを挿す。その際 　AZ01 USB を　ポリイミドテープで保護し 上から`AX02` > `AZ01` > `AP03` の順で3段重ねにする
- Arduinoで AP03 STM32 MCU を利用する際には下記設定を行う
    - ボードマネージャーから追加ボード設定 （[preferencesに設定するURL](https://github.com/Leafony/BoardManagerFiles/raw/master/Leafony_STM32/package_leafony_stm_index.json)）
    - STM32 Cube Programmer のインストール
    - `chmod +x ./prebuild.sh` （エラーになった場合）

## 参考（リンク集）

- [Leafony Basic Kit 2 販売サイト](https://shop.leafony.com/collections/products/products/basic-kit-2)
- [Basic Kit 2 スタートガイド](https://docs.leafony.com/docs/getting-started/basic2/)
- [STM32 MCU の Arduino IDE 設定](https://docs.leafony.com/docs/environment/stm32/arduino_ide/)
- [AP03 STM32 MCU 技術情報](https://docs.leafony.com/docs/leaf/processor/ap03/)
- [AX02 29pin 技術情報（スルーホールへのPIN配置など）](https://docs.leafony.com/docs/leaf/extension/ax02/)