Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PlatformIO で シュッと Arduino 開発を高速化しよう Speed up your Arduino development with PlatformIO!

PlatformIO で シュッと Arduino 開発を高速化しよう Speed up your Arduino development with PlatformIO!

内容には動画が埋め込まれています。動画を再生するにはこちら→https://docs.google.com/presentation/d/e/2PACX-1vQCn-ntZLAU5FgdFp0nmC2Fn2PmQ1wjaFv3IQ16WNdsSFLCis7rM0FrtMSLTQteqRdj5CKpFz3agZEw/pub?start=false&loop=false&delayms=3000

近年 Arduino を使った IoT 機器の開発が電子工作でもよく行われるようになりました。
かつての組み込みソフトウェアの開発では、マイコンベンダーが提供する IDE を使用するのが当たり前でした。
現在は、PlatformIO を使うことによって、組み込みソフトウェアの開発をシュッっと行ことができます。
PlatformIO は、 VS Code の拡張機能として、環境構築からビルド、アップロード、デバッグまでの一連のワークフローを提供してくれます。

本セッションでは、Arduino 開発で PlatformIO を使う場合、PlatformIO が何を担ってくれるのかを解説しながら、実際に VS Code でどのように開発ができるのかを説明していきます。
「環境の構築」「ビルドとマイコンの書き込み」「ユニットテスト」「デバッグ実行」について、扱う予定です。
既存のサーバソフトウェアの開発と大きく変わらないことがおわかりいただけると思います。

なお、本講演のスピーカーは、組み込み機器を専門にしたエンジニアではなく、電子工作を楽しむホビーユーザです。

74th(Atsushi Morimoto)

November 20, 2021
Tweet

More Decks by 74th(Atsushi Morimoto)

Other Decks in Technology

Transcript

  1. PlatformIO でシュッと
    Arduino 開発を高速化しよう
    Speed up your Arduino development with PlatformIO!
    Atsushi Morimoto @74th
    VS Code Conference Japan 2021

    View Slide

  2. Atsushi Morimoto @74th
    ● Mobility Technologies所属
    Working at Mobility Technologies, Co., Ltd.
    ● AIよりのサーバサイドエンジニア
    Server-side engineer for AI product
    タクシー乗務員支援サービスを開発
    I'm developing taxi crew support service.
    ● 著書 books
    技術書典3~11参加
    published at Japanese tech fun book markets "Gijutsushoten(TechBookFest)”
    Visual Studio Code Practical Guide
    © Mobility Technologies Co., Ltd.

    View Slide

  3. タクシー車内の機器(システム構成の一例)
    Taxi equipment i(an example)
    宣伝/ Mobility Technologies では車載IoT開発をやってます
    We are developing in-vehicle IoT
    3
    Wi-Fi
    Direct
    Taxi Meter
    Mobile Printer
    後部座席タブレット
    Backseat tablet
    乗務員端末
    Tablet for a driver
    決済機
    online payment
    外部デバイス
    Other Devices
    車両信号
    Connecting to
    vehicle
    DRIVE CHART
    (Intelligent Drive Recorder)
    BLEロガー
    BLE logger
    位置情報収集基盤
    Vehicle Locations
    Collection System
    4G
    © Mobility Technologies Co., Ltd.

    View Slide

  4. 今日は仕事とは別の電子工作 IoT のお話
    Today, I'm going to talk about DIY IoT

    View Slide

  5. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  6. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  7. Arduino UNO, Nano, Mini
    (ATMega 328P)
    Pro Micro
    (ATMega 32u4)
    DigiSpark
    (ATTiny 85)
    Arduino Nano Every
    (ATMega 4809)
    M5Stack Core2, Stick C
    (ESP32) ESP32 DevKit C STM32
    Raspberry Pi
    PICO

    View Slide

  8. Arduinoとは how about Arduino
    ● ワンボードマイコンを簡単に開発できるフレームワーク
    A framework for easy development of one-board microcontrollers.
    ○ マイコンの差分を吸収して、マイコンの知識がなくても簡単に実装できる
    Absorbs the differences in microcontrollers and it is easy to implement even without knowledge
    of microcontrollers.
    ● USBで繋ぐだけでプログラムの書き換えができる
    The program can be rewritten just by connecting it via USB.
    ○ 市販のはそれができるブートローダーが書き込まれている
    Arduino microcontrollers on the market have a bootloader.
    ● 1ファイルのソースコードで完結するので、コピペで動く
    A single file of source code is all that is needed, so you can work it with just copy and paste.
    ● 開発環境もArduino IDEでワンストップ
    The Arduino IDE is also a one-stop development environment.
    ● オープンソースハードウェアとして、入手しやすい
    As open source hardware, it is easy to obtain.

    View Slide

  9. Arduino で動くコードCode that works on Arduino
    ジョイスティックモジュール
    Joystick Module
    850円
    https://akizukidenshi.com/catalog/g/gM-08763/
    Raspberry Pi PICO
    550円
    https://www.marutsu.co.jp/pc/i/2194960/

    View Slide

  10. Arduino で動くコード
    Code that works on Arduino
    setup()で、各PINの役割を設定
    Set up the role of each PINs in setup().
    ジョイスティックのアナログ値読み取り
    Joystick analog value reading
    LEDをON/OFFする
    Controlling LEDs
    シリアル出力
    Console output
    実処理はloop()に記述
    The actual process is
    described in loop().

    View Slide

  11. View Slide

  12. 今まで趣味で作ったものの紹介
    the things I have made as a hobby

    View Slide

  13. パルスオキシメーターPulse oximeter
    (M5 Stick C)
    ※医療機器にはなりません This is not a medical device.
    https://attosci.hatenablog.com/entry/index.php/2020/04/26/m5stackc-pulseoximeter/
    M5Stack用心拍センサユニットHeart
    Rate Unit for M5 Stack
    1,310円
    https://www.switch-science.com/catalog/5695/
    M5 Stick C
    2,398円
    https://www.switch-science.com/catalog/6350/
    EOLですが、後継商品 M5 Stick C Plusがあります
    EOL, but there is a successor product, M5 Stick C Plus

    View Slide

  14. WiFi 空気品質モニターAir Quality Monitor
    (ESP32)
    https://github.com/74th/esp32-air-quality-monitor
    CCS811搭載 空気品質センサモジュール
    Air Quality Breakout - CCS811
    2,828円
    https://www.switch-science.com/catalog/3298/
    ESP32-WROOM-32E 開発ボードDev Board
    730円
    https://akizukidenshi.com/catalog/g/gK-16108/
    I2C接続キャラクタLCDモジュール
    I2C Connection Character LCD Module
    550円
    https://akizukidenshi.com/catalog/g/gK-08896/

    View Slide

  15. Bluetoothキーボード電卓
    BLE Keyboard Calculator
    (ESP32)
    Sparrow24 BLE Calculator
    (自作キーボードキット DIY Keyboard Kit)
    9,000円
    https://74th.booth.pm/items/3338904

    View Slide

  16. Arduino IDEで辛いところThe hard part of Arduino IDE
    ● コード補完が効かないCode completion doesn't work..
    ● 1ファイルで完結して、ライブラリに分割しにくい
    Complete in one file and difficult to split into libraries.
    ● Unit TestとかできないCannot do Unit Test
    ● デバッグ実行できないCannot run in debugger.
    ※Eclipse Theta(VS Code OSSのfork)ベースのArduino IDE 2.0(現在ベータ)で
    コード補完、デバッグ実行はできるようになります
    With Arduino IDE 2.0 (currently in beta) based on Eclipse Theta (fork of VS Code OSS)
    code completion and running in debugger will be available.

    View Slide

  17. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  18. PlatformIOとはWhat is PlatformIO?

    View Slide

  19. PlatformIOとはWhat is PlatformIO?
    ● VS Codeの拡張機能として提供
    Provided as an extension to VS Code.
    ● プラットフォームを選ぶだけで、
    マイコン開発に必要なソフトウェアを自動インストール
    The software required for microcontroller development can be installed automatically by only selecting a platform.
    ● コード補完が効くCode completion
    (C++)
    ● ライブラリの自動インストール(とそのコード補完)
    Automatic installation of libraries (and their code completion).
    ● デバッグ実行Debug run
    ● Unit Test
    ● 静的解析Static analysis

    View Slide

  20. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  21. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  22. Platform IOのインストール Installing PlatformIO

    View Slide

  23. Platform IOのホーム画面を開くGo to PlatformIO Home

    View Slide

  24. Project Wizardから目的のマイコンボードを選択
    Select your microcontroller board from the Project Wizard.

    View Slide

  25. 利用するフレームワークを選択Select the framework

    View Slide

  26. ←コード
    main code
    ←ライブラリ
    Libraries
    ←設定ファイル
    settings
    platformio.iniに
    先程選択した結果が格納されている
    The selected contents are stored in
    platformio.ini.

    View Slide

  27. あらゆる操作はステータスバーにAll operations are in the status bar
    ビルド
    build
    アップロード
    (書き込み)
    upload(burn)
    シリアル出力
    Serial outputs

    View Slide

  28. アップロードUpload
     

    View Slide

  29. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  30. RGB LEDを追加Add RGB LED
    RGB LEDには共通仕様があり、
    NeoPixel というライブラリで
    動かせる
    Some RGB LEDs can be used with the NeoPixel library.
    マイコン内蔵RGBLEDモジュール(WS2812)
    RGB LED module with built-in microcontroller
    70円
    https://akizukidenshi.com/catalog/g/gM-08414/

    View Slide

  31. RGB LEDを追加Add RGB LED
    RGB LEDには共通仕様があり、
    NeoPixel というライブラリで
    動かせる
    Some RGB LEDs can be used with the NeoPixel library.
    マイコン内蔵RGBLEDモジュール(WS2812)
    RGB LED module with built-in microcontroller
    70円
    https://akizukidenshi.com/catalog/g/gM-08414/

    View Slide

  32. ライブラリNeoPixelの追加 Add NeoPixel Library

    View Slide

  33. RGB LEDの実装
    Programing RGB LED
    アナログ値をRGBに変換して表示
    Using analog values as colors

    View Slide

  34. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  35. ESP32マイコン
    ● WiFi、Bluetooth搭載
    Equipped with WiFI and Bluetooth.
    ● マイコンが技適取得済み
    Microcontroller has been approved for Japanese wireless
    regulations “Giteki”.
    ● 安いLow cost
    ○ 公式開発ボード OfficialDevBoard 1,230円
    ○ 秋月の開発ボード 730円
    Akidsuki Dev Board
    ※Akidsuki is the most famous shop
    for DIY electronic parts
    ○ マイコン単体 microcontroller 360円
    ● 市場在庫潤沢(電子工作用途、2021/11現在)
    Sufficient market stock (as of Nov. 2021 for DIY Electronics)
    ● 発売元がArduino対応を提供
    officially Arduino support
    ● MicroPythonも公式サポート
    MicroPython is also supported
    ● 2コア 2 cores 公式開発ボード https://akizukidenshi.com/catalog/g/gM-15673/
    秋月の開発ボード https://akizukidenshi.com/catalog/g/gK-16108/
    マイコン単体 https://akizukidenshi.com/catalog/g/gM-15675/

    View Slide

  36. ESP32に載せ替え、Slack通知
    Replaced by ESP32 for Slack notification

    View Slide

  37. ESP32開発へスイッチSwitch to ESP32 development

    View Slide

  38. WiFiへの接続Connecting WiFi
     

    View Slide

  39. Slackへの送信Send to Slack
     

    View Slide

  40. ESP32へのアップロード
    Upload to ESP32
    Connectingが表示されてから
    BOOTを押しながらENを押す
    After Connecting is displayed, hold down BOOT and press EN.
    アップロード後
    ENでリセットして始動
    After uploading, press EN to reset and start.

    View Slide

  41. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  42. ESP32をデバッグ実行しよう
    Let's run ESP32 in debugger
    ESP32はJTAGという規格に対応
    ESP32 supports JTAG for debugging
    FT232HLで、安価に、
    デバッガとして使える
    The FT232HL can be used as an inexpensive JTAG debugger.
    デバッグ時の設定は
    vscode/launch.json ではなく
    platformio.ini に記述
    The configuration for debugging is not in vscode/launch.json,
    but in platformio.ini
    FT232HL ハイスピードUSBシリアル変換モジュール
    FT232HL High speed USB Serial Converter Module
    1,200円
    https://akizukidenshi.com/catalog/g/gK-06503/

    View Slide

  43. ESP32へのPlatformIOでのデバッグ実行Run ESP32 in debugging with PlatformIO

    View Slide

  44. デバッグ実行できると言ってもDebugging difficulties
    ● ファームウェアのサイズ増大Increased size of firmware.
    ● かなり遅くて繰り返し実行しづらいIt is too slow to run repeatedly.
    ● GPIOポートが兼用で、特定GPIOが使えなくなる
    Some GPIO ports are used for debugging.
    ● ツールが必要Required additional tools
    ○ Raspberry PI Pico : Picoprobe
    (※PlatformIO非対応 PlatformIO does not supported)
    ○ ESP32 : JTAG
    (※M5Stackは必要ポートが空いていないので不可)
    M5Stack can't be debugged because the required port is not available.
    ○ STM32 : J-Link
    ○ ATMega328P : debugWire
    ○ ATMega4048 : EDBG

    View Slide

  45. VS Codeでのマイコンのデバッグの詳しい仕方は
    For a detailed explanation of running microcontrollers in debugger with VS Code, see this (but Japanese only).
    https://74th.booth.pm/items/3338895
    Advanced debugging with VS Code 2nd Edition
    (Japanese book)

    View Slide

  46. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  47. Unit TestをしようLet's start Unit Testing
    ● マイコン上でUnit Testが実行できるUnit Test can be run on a microcontroller.
    ○ Unity Test Framework
    ● PC上でも実行できるCan be run on a PC
    ● テスト対象は lib/ ディレクトリ下のライブラリ
    The test targets are libraries under the lib/ directory

    View Slide

  48. Unit Testのためのソースコードの構成Structure of the source code for the Unit Test
    テストコード
    test code
    テスト対象コード
    codes to be tested
    Switch by build flag

    View Slide

  49. ビルドフラグで切り替えSwitch by build flag

    View Slide

  50. 私はほとんど活用できていない…… I have barely scratched the surface
    ● ArduinoFake.h で Arduino.h のカバーが不十分
    I think that ArduinoFake.h is inadequate to cover the scope of Arduino.h.
    ○ ESP32専用ライブラリはない(WiFi.hとか)
    No ESP32-specific library (like WiFi.h)
    ● マイコンへの入力がない範囲しか検証できない
    I can only verify tests that have no input to the microcontroller.
    ○ ボタンが押されているかとか、アナログ入力とか分岐できない
    Can not test branching for button presses, analog inputs, etc.
    ● Arduinoに依存しないコードのテストであれば、
    PlatformIOで実行する必要はない。
    I thought that if the test does not depend on Arduino, it does not need to test on PlatformIO.
    ● デバッグ実行できない
    Cannot run in debugger

    View Slide

  51. 目次Agenda
    ● Arduino と、私の Arduino 歴Arduino and my Arduino history
    ● PlatformIO とは What is PlatformIO?
    ● PlarformIOを使った開発Development with PlarformIO
    ○ Raspberry Pi PICO を開発開始!Started developing with Raspberry Pi PICO!
    ○ RGB LEDのライブラリを追加!Added RGB LED library!
    ○ ESP32 でIoTアプリに変更!Change to an IoT app with ESP32!
    ○ ESP32 をデバッグ実行!Run ESP32 in debugger!
    ○ Unit TestやってみようLet's try Unit Test!
    ● まとめSummary

    View Slide

  52. まとめSummary
    ● Arduinoで、マイコン開発を簡単に
    Arduino makes microcontroller development easy.
    ● PlatformIO で、シュッと開発
    Speed up your development with PlatformIO.
    ○ 環境構築 Building the environment
    ○ ライブラリの管理と、インストール
    Library management and installtion
    ○ デバッグ実行Run in debugger
    ○ Unit Test
    ● Raspberry Pi PICOも良いけど、
    ネットに繋ぎたくなったら ESP32 !
    Raspberry Pi PICO is good, but if you want to connect to the internet,
    ESP32 is better!
    ArduinoとPlatformIOでIoTを楽しもう!
    Let's enjoy IoT with Arduino and PlatformIO!

    View Slide