ArduBlock は Arduino IDE で使えるブロック開発環境プラグイン。
Javaで記述される。これのビルドの記事を以前書いたが
「ArduBlock のビルド」
https://qiita.com/nanbuwks/items/dde4270eade41f8b75ec
古くなったので、いまどきのやりかたでビルド環境を試してみる。
Docker で Ubuntu22.04 をロードし、そこで作成してみます。
なお、Docker使わない場合でもこの記事の方法をなぞればビルドできるはず。
( 2022/11/17追記: Docker 使わない Ubuntu20.04 環境で同じ流れでビルド成功しました )
環境
- 母艦 Ubuntu 22.04
- Docker version 20.10.17, build 100c701 で Ubuntu22.04 コンテナ稼働
- コンテナ中:
- Ubuntu22.04
- openjdk 11.0.17 2022-10-18
- Ardublock
Docker でコンテナを用意
Docker は以下のようにしてインストールしています。
「Ubuntu20.04 に Docker を導入する (Also Ubuntu 22.04)」
https://qiita.com/nanbuwks/items/0ba1d13b3cd27e5c6426
ubuntu22.04 のイメージを用います。
$ docker pull ubuntu:22.04
母艦の /home/nanbuwks/Downloads/ardublock をコンテナ中の /mnt で見えるようにします。
$ docker run -v /home/nanbuwks/Downloads/ardublock:/mnt -it -d --name ardublock2204 ubuntu:22.04
実行
$ docker exec -it ardublock2204 /bin/bash
必要なソフトウェアをインストール
# apt update
# apt install tzdata
タイムゾーンを設定しておきます。
# apt install maven git
インストールされたバージョンを調べる
# mvn --version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "5.15.0-52-generic", arch: "amd64", family: "unix"
# java --version
openjdk 11.0.17 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)
Ardublock をクローン
作業場所を作り、移動します。
# cd /mnt
# mkdir ardublock_work_20221113
# cd ardublock_work_20221113/
レポジトリをダウンロード
# git clone https://github.com/taweili/ardublock.git
# cd ardublock
openblock をインストールする
# ./install_openblocks
としてインストールしておきます。
ドキュメント
ArduBlock
======
ArduBlock is a Block Programming Language for Arduino. The language and functions model closely to [Arduino Language Reference](http://arduino.cc/en/Reference/HomePage)
Installation
----
The project is managed by Maven. After checking out the source for the first time, one should run the following to install Arduino's pde.jar into the local repository.
$ mvn validate
Usage
----
$ mvn exec:java -Dexec.mainClass="com.ardublock.Main"
Development
----
Change the /src/main/resources/com/ardublock/block/ardublock_def.xml to add new blocks to ArduBlock
$ mvn clean package
$ mvn compile exec:java -Dexec.mainClass="com.ardublock.Main"
The Visual Block environment should show up. Happy Hacking! ;)
Deploy
----
Edit code of ardublock
$ mvn clean package
copy the target/ardublock-all.jar to Arduino\tools\ArduBlockTool\tool
とあります。
これに従い、まず以下のコマンドを実行しておきます。
# mvn validate
pom.xml を編集
# mvn compile
すると、
[ERROR] error: Source option 5 is no longer supported. Use 6 or later.
[ERROR] error: Target option 1.5 is no longer supported. Use 1.6 or later.
と出るので
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
の1.5 を 1.6に変更しておきます。
ソースの変更
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[18,6] error: unmappable character (0xE9) for encoding UTF-8
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[18,10] error: unmappable character (0xE9) for encoding UTF-8
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[18,27] error: unmappable character (0xE8) for encoding UTF-8
と出るので、該当のlcdkeypad.javaを見てみます。
// r�cup�ration des param�tres du module, ici le message plac� en rang 0
// on �crit donc le code � g�n�rer
TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0, "lcd.print( ", " );\n");
// cr�ation du texte de code correspondant
translator.addHeaderFile("LiquidCrystal.h");
このコメント中に文字コードがヘンなキャラクタが入っているので、該当コメント行を消しておきます。
(2023/03/31追記)
該当箇所は vim で見ると読めました。フランス語だったようです。
// récupération des paramètres du module, ici le message placé en rang 0
// on écrit donc le code à générer
TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0, "lcd.print( ", " );\n");
// création du texte de code correspondant
以下のように差し替えることにしました。
// retrieve the parameters of the module, here the message placed in row 0
// write the code to generate
TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0, "lcd.print( ", " );\n");
// create the corresponding code text
再度 pom.xml の編集
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[18,6] error: unmappable character (0xE9) for encoding UTF-8
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[18,10] error: unmappable character (0xE9) for encoding UTF-8
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[18,27] error: unmappable character (0xE8) for encoding UTF-8
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[18,63] error: unmappable character (0xE9) for encoding UTF-8
[ERROR] /mnt/ardublock_work_20221113/ardublock/src/main/java/com/ardublock/translator/block/dfrobot/lcdkeypad.java:[19,8] error: unmappable character (0xE9) for encoding UTF-8
と出るので、
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
および
<repository>
<id>central</id>
<url>http://repo1.maven.org/maven2</url>
</repository>
の5箇所の http を https に変更します。
ビルドする
コンパイルが通るようになったので、
# mvn package
とすると target/ardublock-all.jar が生成されるので、母艦で実行します。
$ java -jar ardublock-all.jar
成功しました。
トラブルシューティング
[ERROR] Failed to execute goal on project ardublock: Could not resolve dependencies for project org.ardublock:ardublock:jar:0.1.0-SNAPSHOT: Could not find artifact arduino:arduino-core:jar:1.8.5 in central (https://repo1.maven.org/maven2) -> [Help 1]
が出るときは、mvn validate
を行う。