Visual Studio CodeでArduino

Arduino IDEはなにかと不便なのでVisual Studio Code (VSCode) を使ってArduinoの開発をするメモ。

VSCodeArduino IDEをインストール

当然ながら、まずVSCodeをインストールしておくこと。また、VSCodeArduinoの開発をするといっても、内部ではArduino IDEのツールチェインを利用するので、Arduino IDEはインストールしておくこと。これらについては説明を省く。

VSCodeArduino拡張機能をインストール

Extensions(拡張機能) にて「Arduino」で検索し、MicrosoftArduino (vsciot-vscode.vscode-arduino) をインストールする。

f:id:licheng:20190820182218p:plain

コマンドの実行方法

F1 または Ctrl+Shift+P でコマンドパレットを開き、「Arduino」と入力するとコマンドが一覧表示されるので、そこから選択する。

f:id:licheng:20190820184247p:plain

サンプルスケッチを開く

コマンドパレットで「Arduino: Examples」を選択するとサンプルスケッチを選択するタブが開く。どれか一つを選択すると、Arduino/generated_examplesフォルダにそのサンプルスケッチがコピーされ(←ここポイント!)、新しいウィンドウのVSCodeで開かれる。

f:id:licheng:20190823171716p:plain

スケッチを新規作成 / スケッチを開く

スケッチを新規作成または既存のスケッチを開くには、メニューの File > Open Folder でスケッチのフォルダを開く。ファイルを新規作成するにはメニューの FIle > New File または Explolerビューの New Fileボタンをクリック。

f:id:licheng:20190824121516p:plain

ボード選択

コマンドパレットで「Arduino: Board Config」を選択するとボード選択のタブが開く。ここでボードを選択すると、スケッチのフォルダの下の .vscode/arduino.json ファイルに設定が保存される。(←ここポイント!) Arduino IDEとちがってスケッチごとに設定が保存されるのが便利である。

f:id:licheng:20190823174551p:plain

ボードによってはより詳細な選択が必要なものもあるが、この画面で設定できる。

f:id:licheng:20190824122237p:plain

シリアルポート選択

コマンドパレットで「Arduino: Select Serial Port」を選択するとシリアルポート選択のタブが開く。ボード選択と同様に、ここでの設定は .vscode/arduino.json ファイルに保存される。

f:id:licheng:20190825001112p:plain

ビルド出力先の設定

ビルド結果の出力先のパスを設定する。これを設定しないと毎回フルビルドすることになり時間がかかる。スケッチのフォルダにある .vscode/arduino.json ファイルを開き、
"output": "../build" などと追記する。カンマに注意すること。するとビルド時にはスケッチのフォルダの下のbuildフォルダに出力され、以後は差分ビルドとなる。

ただし、スケッチのフォルダ自身やそのサブフォルダは指定しないこと。その場合、正しく機能しないおそれがある。(←ここポイント) やや不便であるが、公式のREADMEに書かれている仕様である。

{
    "sketch": "Blink.ino",
    "port": "COM7",
    "board": "arduino:avr:pro",
    "configuration": "cpu=8MHzatmega328",
    "output": "../build"
}

検証 / 書き込む

コマンドパレットで「Arduino: Verify」を選択すると、スケッチが検証(ビルド)される。この操作にはショートカットキー Ctrl+Alt+R が割り当てられている。ビルド結果のメッセージは下段にビューが開いて表示される。

また、コマンドパレットで「Arduino: Upload」を選択すると、スケッチがビルドされArduinoボードにアップロード(書き込み)される。この操作にはショートカットキー Crtl+Alt+U が割り当てられている。

f:id:licheng:20190825001736p:plain:w700

シリアルモニタ

コマンドパレットで「Arduino: Change Board Rate」を選択すると、シリアルポートのボーレートを設定できる。

f:id:licheng:20190824132042p:plain

そして、コマンドパレットで「Arduino: Open Serial Monitor」を選択すると、シリアルモニタが下段に表示される。

f:id:licheng:20190825003125p:plain:w700

SW4STM32のデバッガ設定の注意点 (リセットモード)

System Workbench for STM32 (SW4STM32) でハマったのでメモ。

ST-Linkをマイコンボードに接続してデバッグしようと思ったら、下記のようなエラーが発生した。

Error: timed out while waiting for target halted 

どうも SWCLK と SWDIO だけを接続して RESET を接続してなかったのが原因のようだ。この場合、Debug Configuration の Debugger の設定で「Reset Mode」が「Connect under reset」になっていると上記のエラーが発生する。RESETが接続されてない場合は「Software system reset」を選択しなければならない。

f:id:licheng:20190820212255p:plain:w600

参考ページ

github.com

秀丸おじさんのVSCode入門

※この記事はかなり偏った思想にもとづいて書かれています。

20年以上も秀丸を使い続けてきたおじさんだけど、ついにVSCodeへの移行をはじめている。VSCodeはたしかにすごく便利なのだけど、長年秀丸を使ってきた者にとっては痒いところが多々あるのも事実。とうわけで、「秀丸で重要なあの機能はVSCodeではどう実現するか」を見ていく。

なお、秀丸おじさんが使うプログラミング言語はすなわちC/C++である(断定)。よって、VSCodeC/C++拡張機能がインストールされていることは前提とする。また、秀丸からの移行の話なのでプラットフォームはあくまでWindowsを前提とする。MacとかLinuxとかは関係ないので触れない。

アウトライン表示

関数とかの一覧を表示する機能。秀丸で最も大事な機能の一つだと思ってる。VSCodeもバージョン1.25で、よくIDEにあるようなアウトライン表示が可能になった。しかしこれに関しては、秀丸の方が見やすいし使い勝手が良いと思ってる。関数単位のコピー/切り取り/貼り付け、行番号表示などはVSCodeではできない。まあでも見た目に関しては慣れの問題のような気もするし、あまり細かいことにこだわっても仕方ない。

秀丸

f:id:licheng:20190816152544p:plain:w600

VSCode

f:id:licheng:20190816152600p:plain:w600

マクロ

秀丸といえば秀丸マクロというくらい有名な機能。だが、筆者はあまり使わない。非常に強力な機能だが、コーディングにそれほど重要とは思わないし、コーディングに特化したテキストエディタであるVSCodeに求めるのはすこし筋違いな気がする。そもそも秀丸でおこなっている全ての作業をVSCodeへ移行する必要はないのだし、秀丸が得意とするテキスト加工処理には今後も秀丸を使えばよい。

grepのタブを全て閉じる」のような便利マクロは重宝しているが、この種のものはVSCodeでは拡張機能で提供されるべきだし、なんなら自作することもできる。作ったことないからしらんけど。

検索/置換

検索に関しては、秀丸と同様に Ctrl+F で検索文字列を入力して F3 / Shift+F3 で検索できる。検索文字列の強調表示もされるし、大文字/小文字の区別も、単語の検索も、正規表現も指定できる。まず不満はない。強いて言うなら検索がファイル末尾から先頭に勝手にループしてしまうのは好きではないが、「i of n」のカウント表示があるのでまあ許せる。

f:id:licheng:20190819150547p:plain

置換に関しては、秀丸とは少し操作が異なるが、Ctrl+H で検索文字列、置換文字列を入力して、Ctrl+Shift+1 で置換、Ctrl+Alt+Enter で全置換、F3 / Shift+F3 で置換せずに検索ができる。あとは検索と同様。慣れれば全く問題ないだろう。

grep/grepして置換

grep秀丸の重要な機能である。VSCodeでは、Open Folder でフォルダを開いておいて、Ctrl+Shift+f で検索結果の一覧表示ができる。また Ctrl+Shift+h では検索結果の一覧から置換ができる。検索結果はサイドバーに表示される。いちいち新規タブが作られる秀丸よりこの点は便利である。 いっぽうで検索対象のフォルダ、ファイルの指定はVSCodeでは「file to include」「file to exclude」でいちおう可能ではあるが、秀丸のほうがずっと便利である。

f:id:licheng:20190819150620p:plain

ただし、VSCodeでは関数や変数などの定義箇所、宣言箇所、参照箇所を表示する「Go to Definition」「Peek Definition」「Go to Declaration」「Peek Declaration」「Find All References」「Peek References」といった機能があるため、単純な文字列検索よりもむしろこれらの機能を活用すべきである。というか、こういうコーディングに特化した機能こそVSCodeの真骨頂であって、それを使わないならVSCodeを使う意味がない。

f:id:licheng:20190819150637p:plain

残念ながら、C/C++拡張機能には今どきのIDEによくある「変数名・関数名の変更」のような機能はまだないと思われる。ニーズはあるはずなので今後に期待。(VSCodeC/C++書く人少ないのかな?)

矩形選択

矩形編集も秀丸で重宝する機能である。頻繁に使うものではないが無いと困る。秀丸では、Ctrlを押しながらの範囲選択で矩形の範囲を選択でき、矩形の切り取り・コピー・貼り付けができる。これができるエディタは案外少ないが、VSCodeでも Ctrl+Shift+Alt+矢印キー あるいは Shift+Alt+マウス操作 で矩形選択ができる。少々操作しにくいキーバインドだがまあ慣れれば大丈夫だろうし、なんならキーバインドをカスタマイズしてもよい(後述)。秀丸と同様に、複数行選択状態からの複数行同時入力もできる。こちらもちょっと勝手は違うが慣れの問題だろう。

ウィンドウ上下分割 / 横に並べる・縦に並べる / タブの分離

行数の長いファイルの場合、一つのファイルの複数個所を別ペインで編集したいことがある。秀丸では「ウィンドウ上下分割」を使う。VSCodeでは View > Editor Layout > Split Down を使うと良いだろう。この機能に適当にキーバインド(後述)をしておくと便利である。ちなみに、左右分割するボタンなら右上に用意されている。

f:id:licheng:20190819150700p:plain

複数のファイルを横に/縦に並べて見比べながら編集したいこともある。秀丸なら「縦に並べる」「横に並べる」を使う。VSCodeではView > Editor Layout > Two Rows ないし Two Columns を使う。

秀丸ではタブをウィンドウの外にドラッグ&ドロップすることで「タブの分離」ができる。これはVisual Studioでもできるし、Chromeなどのブラウザでもできることなのだが、VSCodeではできない。まあ、Ctrl+Shift+N (または File > New Window) で新しいウィンドウを開いてからそちらにタブをドラッグ&ドロップすればいいからそれほど不便はない。

常に手前に表示

秀丸はウィンドウを他のアプリより「常に手前に表示」することができる。例えばブラウザやPDFやOfficeなどの他アプリから文字列を拾いながら編集するときに便利である。しかしまあ、Windowsアプリとしてかなり変則的な機能なので、VSCodeではできないといって非難するのはどうかと思う。近ごろは横長の大画面のモニタが普及したし、マルチモニタとかも普通だし。でもノートPCだけで作業する場合はこれができないと地味に不便なときもあるのよね…

対応する括弧への移動

秀丸ではCtrl+Kで対応する括弧に移動することができる。VSCodeでは Ctrl+Shift+\ である。\ は本来はバックスラッシュであるが、日本語キーボードでは円記号となる。

指定行へ移動 / マーク / 最後に編集した所

行番号を指定して移動するのは、VSCodeでも秀丸とまったく同じく、Ctrl+Gでできる。

秀丸には「マーク」という機能があり、行に印をつけておいて移動することができる。VSCodeでは拡張機能「Bookmarks」を利用すればこれと同様のことができる。Ctrl+Alt+K でブックマークの設定・解除、Ctrl+Alt+L で次のブックマークへ移動、Ctrl+Alt+J で前のブックマークへ移動ができる。またブックマーク一覧はサイドバーに表示させることもできる。

f:id:licheng:20190819150724p:plain:w600

最後に編集した位置に移動するには、秀丸では Ctrl+L であるがVSCodeでは Ctrl+K Ctrl+Q である。

空白文字の表示

秀丸では空白文字は種類(半角スペース、タブ、全角スペース)を区別して明示的に表示させないとなにか気持ちが悪い。VSCodeでは Settings の Render Whitespaceで設定できる。全角スペースは表示されないが、まあそれほど問題はないだろう。そもそもモダンなエディタで空白文字を表示させるのはなにかダサい感じもする。これはかなり気持ちの問題である。ただ、言うまでもないが半角スペースとタブが混在したコードは環境によって表示が崩れる可能性があるので注意すべきである。

ソフトタブとハードタブ / タブの桁数

インデントにソフトタブ(半角スペース文字)を使うかハードタブ(タブ文字)を使うかの設定は、VSCodeでは Settings の Insert Spaces でできる。ここにチェックをつけるとソフトタブになる。また、タブの桁数は Settings の Tab Size で設定できる。ただし、これらの設定は Settings の Detect Indentation にチェックがついている場合には、ファイルを開いたときに自動検出された設定に上書きされる。

f:id:licheng:20190819150759p:plain:w600

タブ/空白の変換、文字種の変換

すべてのインデントを半角スペースまたはタブ文字に変換するには、VSCodeでは F1 → Convert Indentation to Spaces または Convert Indentation to Tabs を実行する。F1を押したあとで「indent」と入力すると候補が出るのでそこから選べばよい。

大文字⇔小文字変換は、F1 → Transform to Uppercase または Transform to Lowercase を実行する。F1を押してから「transform」と入力すると候補が出るのでそこから選べばよいが、まあ滅多に使わない機能だと思う。

全角英数字⇔半角英数字の変換は、拡張機能「Convert Width」を使えばできるらしいが、まあそんなのはVSCodeでやるべきことではないと個人的には思う。そもそも今どき全角英数字なんて使ってるのは秋月電子くらいである。半角カナは言うに及ばず。

エンコード・改行コードの種類

VSCodeの文字エンコードはデフォルトでUTF-8となっており、シフトJISのファイルを開くと文字化けする。いいかげんシフトJIS滅べと思ってるので、これはこれで良いと思う。エンコードの自動検出をしたければ、Settings で Auto Guess Encoding にチェックを入れればよい。また、どうしてもデフォルトのエンコードUTF-8以外にしたければ、Settings で Encoding の設定をすればよいが、まあUTF-8を使うべきだろう。

文字化けして開かれたファイルをエンコードを指定して開き直すには、下段に「UTF-8」などと表示されている部分をクリックして「Reopen with Encoding」でエンコードを選択する。

また、現在開いているファイルをエンコードを変換して保存するには、おなじく下段に「UTF-8」などと表示されている部分をクリックして「Save with Encoding」でエンコードを選択する。同様に「CRLF」などと表示されている部分をクリックして改行コードを選択すれば改行コードの変換もできる。

f:id:licheng:20190819150835p:plain

キーバインドのカスタマイズ

VSCodeでは、キーバインドは F1 → Open Keyboard Shortcuts から設定できる。

VSCodeキーバインドには、2ストロークのものや3つ以上のキーを同時に押すものも多くあり、少しおぼえにくく打ちにくい。そこでよく使う機能で不便と感じるキーバインドは適当にカスタマイズしてしまえばよい。秀丸使いなら秀丸キーバインドに合わせるのもよいだろう。ただし、VSCodeのデフォルトのキーバインドにはCtrl+Kからはじまる2ストロークのものがあるので、Ctrl+K に Go to Bracket (対応する括弧へ移動)を割り当ててしまうとこれらのキーバインドが無効になってしまう。

また、キーバインドをやたらめったにカスタマイズするのは個人的にはあまり好きではない。デフォルトのキーバインドに慣れることができるならそれに越したことはないと思う。

まとめ

要するに、秀丸(古典的なテキストエディタ)からVSCode(モダンなコードエディタ)への乗り換えというのは、テキスト編集機能に頼ったコーディングからコード編集機能に頼ったコーディングに頭を切り替えることだと思う。そして純粋なテキスト編集機能においては今でも秀丸のほうが優れているし、そういう用途には今後も秀丸を使えばいい。

ラズパイのユーザ名/パスワード変更

手順をメモする。

(1) piユーザでログイン

仮ユーザ(tmp)を作成し、sudoグループに追加し、パスワードを設定する。

sudo useradd -M tmp
sudo gpasswd -a tmp sudo
sudo passwd tmp
exit

(2) tmpユーザでログイン

piユーザのユーザ名(ここではnewnameとする)に変更し、ホームディレクトリを変更し、グループ名(ここではnewnameとする)も変更する。

sudo usermod -l newname pi
sudo usermod -d /home/newname -m newname
sudo groupmod -n newname pi
exit

(3) 新ユーザ名でログイン(パスワードはraspberryのまま)

仮ユーザ(tmp)を削除し、新ユーザのパスワードを変更する。

sudo userdel tmp
sudo passwd newname
exit

参考にした記事

jyn.jp

ArduinoやラズパイでEtherCAT

ArduinoやラズパイでカジュアルにEtherCATを組むまとめ。

EtherCATマスターとEtherCATスレーブ

まず前提として、

  • EtherCATマスターはふつうのEthernetのハードウェアでOK。ただし、Ethernetの生パケットを操作できる必要がある。(TCP/IPUDP/IPしか扱えないモジュールやライブラリは不可)
  • EtherCATスレーブは専用ハードウェアが必要。また、当然ながらEhernetコネクタはINとOUTの2口が必要。

f:id:licheng:20190811163758p:plain:w600

EtherCATスレーブ : EasyCAT + Arduino Uno

EtherCATスレーブは専用ハードを必要とするので、選択肢が限られる。カジュアルに使えて、比較的入手しやすく、1万円以下で買えるものというと、今のところEasyCATくらいしかないと思われる。(※ArtifactNoiseさんのこちらにも期待!)

EasyCATはイタリアのAB&T社の製品群で、以下がラインナップされている。

今回は、EasyCAT Shield for Arduinoを使用し、Arduino Unoと組み合わせる。購入は、今のところAB&T社の直販サイトから買うしかない。支払いはPayPalで可能。1個50ユーロで、送料が42ユーロするので、2個買うと142ユーロ。

f:id:licheng:20190811194257j:plain:w500

実験用プログラム

この実験用プログラムは、AB&T社のEasyCATライブラリに依存している。EasyCATライブラリは製品ページからダウンロードできる。このプログラムを書き込んだArduino UnoにEasyCATを取り付け、下記のように実験用のサーボとボリュームを接続する。

  • ポート3にサーボを接続
  • ポートA0にボリュームを接続

EtherCATマスター(1) : Rasoberry Pi

もっとも気軽に試せるEtherCATマスターはSOEMだろう。SOEMはオープンソースのEtherCATマスターで、WindowsMac OSLinux上で動作できる。もちろん、Rasoberry Piでも動作する。今回はRasoberry Pi 3Bを使用したが、もっと古い世代のRasoberry Piでもたぶん動作するだろう。Linuxカーネルをリアルタイム化しなければEtherCAT本来のご利益であるリアルタイム性は期待できないが、まあ素の(非リアルタイムカーネルの)Raspbianでも学習用途、実験用途には使えるし、割り切って使う分には使い道はあるだろう。

f:id:licheng:20190811174117j:plain:w500

実験用プログラム

【ソース】

【手順】

  • ラズパイの任意のディレクトリ(ここでは~/とする)に上記のSOEMをクローンまたはダウンロードする。
  • ~/SOEM/test/linux/の下に上記のeasycat_test.zipを展開する。
  • ~/SOEM/CMakeLists.txt の最後を下記のように編集する。
if(BUILD_TESTS) 
  add_subdirectory(test/linux/slaveinfo)
  add_subdirectory(test/linux/eepromtool)
  add_subdirectory(test/linux/simple_test)
  add_subdirectory(test/linux/easycat_test)  # ←この行を追加
endif()
  • 以下のコマンドを実行してテストプログラムをビルドする。
cd ~/SOEM
mkdir build
cd build
cmake ..
make
  • 前述のEtherCATスレーブ(EasyCAT + Arduino Uno)2台をラズパイに数珠つなぎに接続する。
  • ラズパイ側から見て1台目のスレーブにボリューム、2台目のスレーブにサーボを取り付ける。
  • 以下のコマンドを実行してテストプログラムを実行する。
cd ~/SOEM/build/test/linux/easycat_test
sudo ./easycat_test eth0
  • 1台目のスレーブのボリュームを回すと、2台目のスレーブのサーボがそれに応じて動く。


EtherCATマスター(2) : Ethernet Shield 2 + Arduino DUE

前述のSOEMをArduinoで使えるようにC++クラスにラップしたライブラリ SOEM4Arduino を作成した。

github.com

SOEMはスレーブを管理するためにメモリを大量に使うのでArduino UnoやArduino Megaでは動作させるのは現実的でない。いまのところ、Arduino Dueで動作確認できている。それでもオリジナルのSOEMに比べると管理テーブルのサイズを大幅にシュリンクしている。

EthernetコントローラにはWIZnet社製W5500を搭載したEthernet Shield 2を使用する。

f:id:licheng:20190811173944j:plain:w500

実験用プログラム

【ソース】

【手順】

  • Ethernet Shield 2を取り付けたArduino DUEに上記のプログラムを書き込み、マスターとする。
  • EtherCATスレーブ(EasyCAT + Arduino Uno)2台を数珠つなぎにマスターに接続する。
  • マスター側から見て1台目のスレーブにボリューム、2台目のスレーブにサーボを取り付ける。
  • スレーブ2台およびマスターに電源を投入する。
  • 2秒ほど待つとスレーブのLANコネクタのLEDが点滅しはじめる。
  • 1台目のスレーブのボリュームを回すと、2台目のスレーブのサーボがそれに応じて動く。


EtherCATマスター(3) : GR-SAKURA

前述のSOEM4ArduinoはGR-SAKURAでも動作する。GR-SAKURAはルネサスRX63Nマイコンを搭載したArduino Unoフォームファクタマイコンボードであり、Arduino IDEから派生したIDE for GRで開発できる。また、RX63NマイコンEthernetコントローラを内蔵しており、GR-SAKURAはEthernetコネクタを搭載している。つまりシールド基板なしでEtherCATマスターになれる。

ただし、SOEM4ArduinoをGR-SAKURAで動作させる場合には既知の不具合があり、受信の応答性が悪い。パケットを受信するのに8msecもかかってしまう。また、起動後3秒以上待ってからSOEMの初期化をする必要がある。これらについては現在調査中である。 (2020/01/23 バグ修正)

f:id:licheng:20190811174033j:plain:w500

実験用プログラム

前述のEthernet Shield 2 + Arduino DUEの場合と同じプログラムが動作する。ただし、上記の不具合により、電源投入後10秒ほど待たないと、サーボの追従動作が始まらない。

NeoPixel Ringでイヤリング

NeoPixel Ring (12連フルカラーシリアルLED)でイヤリングを作ってみました。点灯パターンは青と白を基調として「ゆらゆら」「ぐるぐる」「ちかちか」の3パターンを繰り返します。

f:id:licheng:20190810152859j:plain:w500

かなり重いので耳掛け式(イヤーフック)です。ピアスではありません。

f:id:licheng:20190608172150j:plain:w500

マイコンと電池はフェルトのふさふさの中に仕込んでます。

f:id:licheng:20190608122308j:plain:w500

材料

作り方

イヤーフックの作り方

ホームセンターで売ってる直径2mm真鍮の棒を曲げて作ります。といっても、真鍮は固いので簡単には曲がりません。そこで焼きなましをします。ガスバーナー(イワタニのクッキングバーナーなどでOK)で真鍮の棒を赤くなるまで熱してから水につけて冷します。すると軟らかくなります。表面が変色するので目の細かい紙やすりや研磨剤で磨きます。あとは適当に耳の形に合わせて曲げ、紐を通すための丸いカンを作ります。

f:id:licheng:20190602153757j:plain:w500

フェルトのふさふさ(タッセル)の作り方

「フェルト タッセル 作り方」でググってください。ただし、3線のケーブルを芯として、ふさふさの中にマイコンと電池を仕込めるように少し工夫します。また、ケーブルはループエンドを通してからNeoPixel Ringに接続します。

f:id:licheng:20190810005100j:plain:w600

NeoPixel Ringをレジンでドーナツ状に

NeoPixel Ringに少しずつビーズをまぶしながらUVレジンで固め、ドーナツ状にしていきます。UVレジンは高価なのでかさ増しのためグルーガンを併用しました。3Dプリンタでドーナツ状の型を作って型取りすればもっときれいにできるかも。

配線

f:id:licheng:20190810005134j:plain:w600

ソフト

Arduinoのスケッチ一式を下記にアップしました。

このスケッチはAdafruit社のNeoPixelライブラリに依存しています。
github.com

MbedからLPCXpressoへのエクスポート

やりたいこと

Mbedのオンラインコンパイラで作成したLPCマイコンのプロジェクトをエクスポートしてLPCXpressoにインポートしたい。

以前はエクスポート時の選択肢にLPCXpressoがあったのだけど、今はなくなっている。代替手段を見つけるのに手間取ったのでメモする。結論だけ知りたい方はこちら

失敗その1:MCUXpresso向けにエクスポートする

現在は、エクスポート時の選択肢の中にLPCXpressoの代わりにMCUXpressoがある。MCUXpressoはLPCXpressoの後継となるIDEである。なのでMCUXpresso向けにエクスポートして、MCUXpressoにインポートするのが正解のはずである。しかしこれはうまくいかない。

MCUXpressoを選んでエクスポートを実行すると、「少しお待ちください…」のままいつまでたってもエクスポートが完了できないのである。これはまあ、失敗というより不具合だろう。

f:id:licheng:20190808213050p:plain

f:id:licheng:20190808213105p:plain

失敗その2:Make-GCC-ARM向けにエクスポートする

エクスポート時の選択肢で「Make-GCC-ARM」を選んでMakefileプロジェクトとしてエクスポートし、LPCXpressoにMakefileプロジェクトとしてインポートすることを試みた。インポートじたいは成功した。しかしLPCXpressoでビルドしようとすると「Program "make" not found」というエラーになる。Windows環境ではmakeがないためだ。そこでWindows版のGNU Makeをインストールしてみたが、こんどはビルド途中でなんか「No such file or directory」でエラーになる。どうもこの方法はスジが悪そうなのでここで断念。

失敗その3:Mbed CLIを使う

別のアプローチとして、Mbed CLIを試してみた。Mbed CLIとはMbedのオフライン開発のためのコマンドラインツールである。まずはこれをインストールした。Mbed CLIを使ってMbedのプロジェクトをローカルにダウンロードするには、プロジェクトをパブリッシュし、Mbed CLIの mbed import コマンドでそのURLを指定する。

しかし、これがやたら時間がかかる。ただのLチカのプロジェクトをダウンロードしたら2ギガバイト以上もあった。フォルダの中身を見てみたら、ありとあらゆるターゲットのためのありとあらゆるファイルが含まれていた。もうね、アホかと。

しかもその挙句、mbed compileコマンドでビルドを試みると、「mbed.h が見つからない」などというエラーが発生するのである。mbed exportコマンドでMCUXpresso向けにエクスポートし、MCUXpressoにインポートすることも試してみた。インポートじたいは成功したが、やはりビルドは失敗。心が折れたのでここで断念。

結論:GNU ARM Eclipse向けにエクスポートする

LPCXpressoにGNU ARM Eclipseプラグインをインストールし、MbedからGNU ARM Eclipse向けにエクスポートしたプロジェクトをLPCXpressoにインポートする。このやり方で成功した。おそらく、MCUXpressoなど他のEclipseIDEでも同じやり方ができると思われる。

手順(1) Mbed CLIのインストール (2019/08/19 追記)

Mbed CLIのインストールをインストールしておく。下記サイトからインストーラをダウンロードしてインストールする。
github.com

手順(2) GNU MCU Eclipse Windows Build Toolsのインストール (2019/08/21 追記)

GNU MCU Eclipse Windows Build Toolsを下記サイトからダウンロードし、zipを展開して中のbinフォルダを適当な場所に配置する。また、そのパスを環境変数PATHに追加しておく。
github.com

手順(3) GNU ARM Eclipseプラグインのインストール

LPCXpressoにGNU ARM Eclipseプラグインをインストールしておく。メニューの 「Help」>「Install New Software」で「Add」をクリックして、下記のように入力する。

f:id:licheng:20190809092957p:plain:w500

すると、「GNU ARM C/C++ Cross Development Tools」という項目が表示されるので、これを選択してインストールする。

f:id:licheng:20190809094919p:plain:w600

手順(4) GNU ARM Eclipse向けにエクスポート

Mbedのオンラインコンパイラでプロジェクトを選択して、右クリックメニューから「プログラムのエクスポート」を選択する。するとターゲットとツールチェインを選択するダイアログが出るので、ツールチェインの選択肢から「GNU ARM Eclipse」を選択して、エクスポートする。するとローカルにzipファイルがダウンロードされる。

f:id:licheng:20190809104425p:plain

手順(5) LPCXpressoにインポート

LPCXpressoのQuickstart Panelで「Import project(s)」を選択する。「Project Archive(zip)」の欄で、手順(2)でダウンロードしたzipファイルを選択し、インポートする。

手順(6) ビルドとデバッグ

プロジェクトの「Properties」の「C/C++ Build」の「MCU settings」で、ターゲットのMCUを選択しておく。この設定をしないと、デバッグ時に「No MCU associated with this project.」というエラーが出る。あとはLPCXpressoの通常どおりの操作でビルドとデバッグができる。

f:id:licheng:20190809113949p:plain:w600