はじめに
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 件のコメント:
コメントを投稿