2019年8月31日土曜日

PlatformIO Core で Marlin 1.1.9 コンパイル

はじめに

Arduino IDE ではなく、PlatformIO Core を使って 3D プリンターのファームウェア Marlin をコンパイルしてみました。

自宅の 3D プリンターは Alunar M508 です。この 3D プリンター用に修正した Marlin 1.1.9 ソースコードは Arduino IDE ではすんなりコンパイルできたのですが、PlatformIO では更に一か所修正しないといけなかったのでブログ記事にしました。

なお、PlatfromIO Core なので全てコマンドラインでの操作です。

環境

  • Ubuntu 18.04.3 (Windows10 WSL)
  • 3D プリンター Alunar M508
  • Marlin 1.1.9

PlatformIO Core インストール

Python3 のバージョン確認

$ python3 --version
Python 3.6.8

Python 3.6 で pipenv プロジェクト作成

$ mkdir myproject/
$ cd myproject/
$ pipenv --python 3.6

PlatformIO Core インストール

$ pipenv install platformio

プロジェクトの virtualenv をアクティベート

$ pipenv shell

PlatformIO のバージョン確認

$ platformio --version
PlatformIO, version 4.0.3

以降、全てアクティベートした virtualenv で実行しました。

自宅の 3D プリンター Alunar M508 用の Marlin 1.1.9 をダウンロード

自宅の 3D プリンター Alunar M508 用に修正した Marlin 1.1.9 は以前のブログ 「 3D プリンター Alunar M508 の Marlin を 1.1.9 にバージョンアップするためにソースコードを修正 」 に書いた通りで、このソースコードを GitHub からダウンロードしました。

$ wget https://github.com/nezuppo/Marlin-for-my-alunar-m508/archive/1.1.9r1.tar.gz
$ tar xvzf 1.1.9r1.tar.gz

Alunar M508 用の Marlin 1.1.9 ソースコードディレクトリができました。

$ ls -lad Marlin-for-my-alunar-m508-1.1.9r1/
drwxrwxr-x 1 worker worker 4096 Aug 16 15:19 Marlin-for-my-alunar-m508-1.1.9r1/

ソースコードディレクトリ に移動

$ cd Marlin-for-my-alunar-m508-1.1.9r1/

以降、このディレクトリで作業しました。

ディレクトリの中を確認しました。

$ ls -la
total 132
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 .
drwxrwxrwx 1 worker worker  4096 Aug 31 20:46 ..
-rw-rw-r-- 1 worker worker   347 Aug 16 15:19 .gitattributes
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 .github
-rwxrwxr-x 1 worker worker  1958 Aug 16 15:19 .gitignore
-rw-rw-r-- 1 worker worker 14163 Aug 16 15:19 .travis.yml
-rw-rw-r-- 1 worker worker 35144 Aug 16 15:19 LICENSE
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 Marlin
-rw-rw-r-- 1 worker worker  8539 Aug 16 15:19 README.md
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 buildroot
-rw-rw-r-- 1 worker worker  4130 Aug 16 15:19 platformio.ini
-rw-rw-r-- 1 worker worker 10974 Aug 16 15:19 process-palette.json
  • PlatformIO 用の設定ファイル platformio.ini もありました。

PlatformIO 用の環境名確認

本家 Marlin のドキュメント 「 Installing Marlin (CLI) 」 を参考にしました。

自宅の Alunar M508 のマザーボードは MKS_BASE で、Marlin/Configuration.h でも定義してます。

$ grep '#define MOTHERBOARD' Marlin/Configuration.h
  #define MOTHERBOARD BOARD_MKS_BASE

Marlin/pins.h の MKS_BASE の該当箇所確認

$ cat Marlin/pins.h
... snip ...
#elif MB(MKS_BASE)
  #include "pins_MKS_BASE.h"          // ATmega1280, ATmega2560                     env:megaatmega1280 env:megaatmega2560
... snip ...

env:megaatmega1280 env:megaatmega2560 となっているので、環境名は megaatmega1280 か megaatmega2560 のどちらかなのですが、Arduino ID でコンパイルした時はプロセッサを ATmega2560 (Mega 2560) にしてうまくいったので、PlatformIO 用の環境名は megaatmega2560 でよさそうです。

Marlin を PlatformIO でコンパイル (まずはエラーになるところを確認)

カレントディレクトリは platformio.ini があるディレクトリです。

$ ls -la
total 132
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 .
drwxrwxrwx 1 worker worker  4096 Aug 31 20:46 ..
-rw-rw-r-- 1 worker worker   347 Aug 16 15:19 .gitattributes
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 .github
-rwxrwxr-x 1 worker worker  1958 Aug 16 15:19 .gitignore
-rw-rw-r-- 1 worker worker 14163 Aug 16 15:19 .travis.yml
-rw-rw-r-- 1 worker worker 35144 Aug 16 15:19 LICENSE
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 Marlin
-rw-rw-r-- 1 worker worker  8539 Aug 16 15:19 README.md
drwxrwxr-x 1 worker worker  4096 Aug 16 15:19 buildroot
-rw-rw-r-- 1 worker worker  4130 Aug 16 15:19 platformio.ini
-rw-rw-r-- 1 worker worker 10974 Aug 16 15:19 process-palette.json

環境名に megaatmega2560 を指定してコンパイルしたら以下のようにエラーになりました。

$ platformio run -e megaatmega2560
... snip ...
Marlin/ultralcd_impl_HD44780.h:194:29: fatal error: LiquidCrystal.h: No such file or directory

***********************************************************************
* Looking for LiquidCrystal.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:LiquidCrystal.h"
* Web  > https://platformio.org/lib/search?query=header:LiquidCrystal.h
*
***********************************************************************
... snip ...

Marlin/ultralcd_impl_HD44780.h の 194行目で LiquidCrystal.h が無いって怒ってました。

書かれている通りに ライブラリのレジストリを確認して LiquidCrystal.h の依存関係を確認してみました。

$ platformio lib search "header:LiquidCrystal.h"
$ platformio lib search "header:LiquidCrystal.h"
Found 2 libraries:

LiquidCrystal
=============
#ID: 136
LiquidCrystal Library is faster and extensable, compatible with the original LiquidCrystal library

Keywords: lcd, hd44780
Compatible frameworks: Arduino
Compatible platforms: Atmel AVR, Espressif 32, Espressif 8266
Authors: F Malpartida

LiquidCrystal
=============
#ID: 887
Allows communication with alphanumerical liquid crystal displays (LCDs).

Keywords: display
Compatible frameworks: Arduino
Compatible platforms: Atmel AVR, Atmel SAM, Espressif 32, Espressif 8266, Intel ARC32, Microchip PIC32, Nordic nRF51, Nordic nRF52, ST STM32, Teensy, TI MSP430
Authors: Arduino, Adafruit

LiquidCrystal.h は LiquidCrystal ライブラリに含まれているようです。 ただし同名のライブラリが二つ (ID:136 と ID:887) があるようで、どちらが正解なのかわかりませんでした。

ソースコードを修正して再度コンパイル

適当にググるとこのエラーの場合は platformio.ini を以下のように修正すると良いと書かれていました。

$ diff -u platformio.ini{.org,}
--- platformio.ini.org  2019-08-31 21:42:42.054394900 +0900
+++ platformio.ini      2019-08-31 21:43:28.900397600 +0900
@@ -28,7 +28,7 @@
   -ggdb
 lib_deps =
   https://github.com/MarlinFirmware/U8glib-HAL/archive/dev.zip
-  LiquidCrystal_I2C@1.1.2
+  LiquidCrystal@1.3.4
   TMC2130Stepper
   https://github.com/teemuatlut/TMC2208Stepper/archive/v0.1.1.zip
   Adafruit NeoPixel@1.1.3

GitHub 上の本家 Marlin の bugfix-2.0.x ブランチ (2aef83ddcdd3317c3191e79c3be3fc06969f7768) の platformio.ini 」 もこれになっているので良さそうです。

上に書いたとおり、エラーが出た LiquidCrystal.h は LiquidCrystal ライブラリに含まれている点も合致します。

この platformio.ini で再度コンパイル

$ platformio run -e megaatmega2560
... snip ...
Building .pioenvs/megaatmega2560/firmware.hex
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [=====     ]  49.5% (used 4053 bytes from 8192 bytes)
PROGRAM: [====      ]  41.5% (used 105502 bytes from 253952 bytes)
============================================ [SUCCESS] Took 135.49 seconds ============================================

Environment           Status    Duration
--------------------  --------  ------------
megaatmega2560        SUCCESS   00:02:15.491
... snip ...

無事コンパイルできました。

メッセージに出ている通り、Alunar M508 の Marlin ファームウェア書き換えのための新しいイメージが以下のように出来ていました。

$ ls -la .pioenvs/megaatmega2560/firmware.hex
-rw-rw-rw- 1 worker worker 296769 Aug 31 21:57 .pioenvs/megaatmega2560/firmware.hex

参考

Alunar M508 の Marlin ファームウェア書き換えは Raspberry Pi で以下のようにやりました。

$ avrdude -p m2560 -c avrispmkII -P /dev/ttyACM0 -D -U flash:w:/some/where/firmware.hex:i

参考にしたサイト

0 件のコメント:

コメントを投稿