Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

タクシー車内の機器(システム構成の一例) 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.

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

目次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

Slide 6

Slide 6 text

目次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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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.

Slide 9

Slide 9 text

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/

Slide 10

Slide 10 text

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().

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

パルスオキシメーター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

Slide 14

Slide 14 text

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/

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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.

Slide 17

Slide 17 text

目次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

Slide 18

Slide 18 text

PlatformIOとはWhat is PlatformIO?

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

目次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

Slide 21

Slide 21 text

目次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

Slide 22

Slide 22 text

Platform IOのインストール Installing PlatformIO

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

アップロードUpload  

Slide 29

Slide 29 text

目次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

Slide 30

Slide 30 text

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/

Slide 31

Slide 31 text

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/

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

目次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

Slide 35

Slide 35 text

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/

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

WiFiへの接続Connecting WiFi  

Slide 39

Slide 39 text

Slackへの送信Send to Slack  

Slide 40

Slide 40 text

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.

Slide 41

Slide 41 text

目次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

Slide 42

Slide 42 text

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/

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

デバッグ実行できると言っても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

Slide 45

Slide 45 text

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)

Slide 46

Slide 46 text

目次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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

私はほとんど活用できていない…… 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

Slide 51

Slide 51 text

目次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

Slide 52

Slide 52 text

まとめ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!