masato-ka's diary

日々思ったこととか、やったことの備忘録。

WioLTEをVSCode(PlatformIO)で開発する

この記事について

  • 追記 20180317 Wio LTEArduino coreライブラリを現時点最新の1.1.3に変更しました。

この記事ではSeeed社から発売されているWio LTEをVisualStudio CodeにインストールしたPlatformIO環境で開発する方法を紹介します。PlatformIOの対応プラットフォームにWioLTEがなかったためビルドスクリプトと設定情報を用意しました。

Wio LTEについて

Wio LTEはSeeed社から発売されているLTE SIMが刺さるCortex-M4(STM32F407)の開発ボードです。I2CやUART, デジタル、アナログI/OをGrove端子で提供しています。また、Arduino互換ボードを謳い開発にはArduino IDEを使います。他のArduinoとほぼ違いなく開発ができます。その他にはEspruinoというJavaScriptで開発を行うフレームワークを使う方法もあります。GitHubリポジトリにはmbed対応のリポジトリもあるようです。   Arduinoのライブラリなどをそのまま流用したいという理由から、Arduino IDEでの開発を選択するとArduino IDEを使うことになります。しかし、Arduino IDEはビルドとバイナリの転送ができるメモ帳と言っても過言ではない使い勝手の悪さです。「()」やダブルコーテーションの入力補助やコードのサジェッションを受けることができません。また、Gitなどの構成管理ツールと言った他の開発ツールとのインテグレーションが気軽にできません。高機能なエディタやターミナルのツールを駆使することになります。  そこで今回はPlatformIOを使いVSCodeでWIo LTEの開発を行っていきます。

PlatformIO

 PlatformIOはPythonで書かれた組み込み向けの開発ツールです。ArduinoだけでなくMbedやネイティブな環境での開発をサポートしています。開発ボード(CPU)-フレームワークの関係を管理し、そのためのツールとインストールとビルド転送をラップしているイメージです。

platformio.org

 PlatformIOは前述のようにPythonで書かれており、コマンドラインで実行します。しかし、VSCodeAtomエディタにPlatformIO IDEというプラグンが用意されており各エディタにインテグレーションすることができます。  PlatformIOは前述のように開発ボードの種類(CPU)-フレームワークの関係を管理しています。逆に言うと開発ボードに対応した定義がなければPlatformIO上で開発することができません。現在対応しているプラットフォームはPlatformIOのコマンドから調べることができます。現在のところWio LTEはPlatformIOに登録されていません。またSTM32F4とArduinoフレームワークで開発を行うプラットフォームを試してみましたが、ビルドがうまくいきませんでした。そこで、Wio LTEのプラットフォーム定義を作成する必要があります。

プラットフォームを定義する

PlatformIOで独自にプラットフォームの定義を行う場合、大きく、以下の3つが必要になります。

  1. platoform.json
  2. board.json
  3. ビルドスクリプト

詳細は以下のドキュメントを参考にしていください。  Custom Development Platform — PlatformIO 3.5.3a3 documentation

platform.jsonはプラットフォームの基本的な定義を記載します。一番重要なのはどの開発ツールを利用するのか、どこからダウンロードするかです。ここでいう開発ツールは開発のためのフレームワークコンパイルや実行ファイルを作るためのビルドツール、開発ボードへ実行ファイルを転送するアップロードです。

それぞれ以下のように設定しています。

 名前 説明
oolchain-gccarmnoneeabi ARMのコンパイラリンカなどのビルドツール
framework-Seeed_STM32F4 Wio LTE用のArduinoフレームワーク Seeed社のリポジトリに公開されているものにPlatformIO用のJSONファイルを追加
tool-stm32duino DFUのアップロードツール

board.jsonは対象のボードのコンパイルオプションやCPUの設定を記載します。ビルドスクリプトから参照してい利用します。ビルドスクリプトはSConsというPython製のビルドツールを使って記載します。Makefileの置き換えとして開発されたようです。ビルドスクリプトにはコンパイル、リンクのためパスのしていや各種フラグの設定を行います。また、アップロード方法についても定義しておきます。

今回作成したプラットフォームの定義は以下のリポジトリに置いています。

github.com

利用方法

  1. PlatformIOのインストール

以下のページを参考にVSCodeへPlatformIO IDE Pluginをインストールしてください。

PlatformIO IDE for VSCode — PlatformIO 3.5.3a3 documentation

  1. Wio LTEプラットフォームの設定

以下のようにプラットホーム定義をcloneします。clone先のリポジトリはPlatformIOのホームディレクトリ配下にあるplatformsディレクトリです。macOSの場合はホームディレクトリ配下の.platformsの中になります。Windowsの場合はおそらくユーザディレクトリ配下の.platforms以下となります。

> cd $USER_HOME/.platformio/platforms
> git clone https://github.com/masato-ka/platform-wiolte.git

また、WioLTEforArduinoライブラリをlibフォルダにクローンします。

>cd $USER_HOME/.platformio/lib
>git clone https://github.com/SeeedJP/WioLTEforArduino

上記実行後VSCodeを再起動します。

  1. プロジェクトの作成

VSCodeを立ち上げるとPlatformIOのホーム画面が立ち上がるようになります。ホーム画面にある 「New Project」を選択後、Wio LTEArduinoを選択しFinishを押下します。

f:id:masato-ka:20180122221455p:plain

その後、プロジェクトが作成され、後はArduino IDEと同様にコードを書いてビルド後アップロードします。VSCodeの下側にビルドボタンとアップロードボタン、シリアルモニタのボタンが表示されるはずです。またアップロード時にはWio LTEをDFUモードにしてください。コードを書くとこのようにサジェッションが出てきます。

f:id:masato-ka:20180122221901p:plain

まとめ

簡単に書いてますが、ビルドスクリプトを作成するのに手間取りました。もしよければ使っていただけると嬉しいです。OSX環境しか試してませんが、他の環境でももれなく動くはずです。不具合があれば報告していただければ可能な範囲で対応します。公式で対応されるのが待たれます。PlatformIO本体への登録ってどうやるんだろうな。。。 また今回の内容をLTにまとめて2/6のSORACOM UG LT大会で話せればと思っています。(抽選に当たってと仕事が片付けば。。。)