arduino互換ボードをplatform ioで使ってみた

# はじめに

amazonで購入した[Arduino Nano 互換ボード](https://www.amazon.co.jp/gp/product/B072F5NS4X/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1)をplatform ioで動かしてみました．

![Screenshot from 2023-02-15 02-11-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/3d7ffc37-a345-ca51-859a-30fb870fb915.png)

# PC&ソフトウェア 環境 

ubuntu20.04
PlatformIO Core, version 6.1.5

# 内容

- install
```
sudo apt install python3-pip
sudo pip3 install -U platformio
```

下記内容を実施することで使用できます．

- ワークスペースの作成

```bash
mkdir ws
platformio init --board=uno
```

- プログラムの作成


`vim ./src/main.cpp`

```main.cpp
/*
ピンリスト
0 TX
1 RX
2
3 pwm
4 
5 pwm
6 pwm
7
8
9 pwm
10 pwm
11 pwm
12
13
14 A0
15 A1
16 A2
17 A3
18 A4
19 A5
*/

#include <Arduino.h>
#define LED_PIN 13
void setup() {
    pinMode(LED_PIN, OUTPUT);
    Serial.begin(9600);
}
void loop() {
    Serial.println("Hello Arduino");
    digitalWrite(LED_PIN, HIGH); delay(1000);
    digitalWrite(LED_PIN, LOW);  delay(1000);
}
```

- build & upload

```bash
pio run -t upload
```

![IMG_7360_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/8d442d7f-44d0-7300-826f-ceba7488ac27.gif)

動いた!

# 参考

https://blog.emattsan.org/entry/2017/12/31/094954

# 追記 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/5cd336bb-bc47-0434-945b-eab9f1ba9fd7.png)

https://www.amazon.co.jp/gp/product/B0C3YZZ3D8/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&th=1

こちらのarduino nano互換ボードだとboard名の指定がunoだと失敗.

https://asukiaaa.blogspot.com/2017/07/platformio.html

ワークスペース作成時

```
pio init --board nanoatmega328
```

build設定ファイルは以下のようにきさい

```ini:platformio.ini
[env:nanoatmega328]
platform = atmelavr
board = nanoatmega328
framework = arduino
```

# CH340

type cのarduinoはCH340 usb serialデバイス基板があり,ubuntu22.04で認識するためには,下記コマンドを実行する必要があった.

```
sudo apt remove brltty
sudo udevadm control --reload
```

参考: https://qiita.com/74th/items/f46bccd67b2ed6fc867f


# serialデバッグ

```
pio device monitor -b 115200
pio device monitor -b 9600
```

# エラー & 修正方法

## デバイスが認識しない or upload時にrulesのインストールを求められる.

- rulesインストールの警告
```
Warning! Please install `99-platformio-udev.rules`. 
More details: https://docs.platformio.org/en/latest/core/installation/udev-rules.html
```
- 対策

警告のurlにある説明を実行.

rulesのインストール
```
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
```
 udevをrestart
```
sudo service udev restart
```

## デバイスは認識するが,書き込みに失敗する

下記警告が出て、書き込めない
```
Uploading .pio/build/uno/firmware.hex
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
```

boardに`uno`を指定した場合,追記で記載している`nanoatmega328`をboardに指定して試す.