コマンドラインでネットから ino ファイルをダウンロードして置換して Arduino ボードに書き込みをします。
まずは前提条件として、arduino-cli のインストールが必要になります。
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh ;
sudo cp ~/bin/arduino-cli /usr/local/bin/arduino-cli ;
次に php などからも arduino の USB シリアルポートにアクセスができるように権限を変更します。
sudo chmod 777 /dev/ttyUSB0 ;
アップロード用の置換前の arduino のスケッチファイル。LED が 0.1秒ごとにチカチカします。
led_100.ino
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}
これを 3秒ごとにチカチカするようにPHPで変更してコマンドラインでアップロードをします。
index.php
<?php
$url_ino = "led_100.ino"; // or http://hogehoge.github/hoge.ino
$replace_from = array("100");
$replace_to = array("3000");
//system( "ls /dev/ttyUSB*");
$project_name = basename($url_ino, ".ino");
$project_name_ino = "{$project_name}/{$project_name}.ino";
//
@chmod( $project_name , 0777 );
@mkdir( $project_name );
@chmod( $project_name , 0777 );
$page_ino = file_get_contents( $url_ino );
$page_ino_replaced = str_replace( $replace_from , $replace_to , $page_ino );
//
@chmod( $project_name_ino , 0777 );
file_put_contents( $project_name_ino , $page_ino_replaced );
@chmod( $project_name_ino , 0777 );
// sudo cp ~/bin/arduino-cli /usr/local/bin/arduino-cli
// sudo chmod 777 /dev/ttyUSB0
# compile and update
$cmd_compile = "arduino-cli compile --fqbn arduino:avr:nano {$project_name_ino}";
system( $cmd_compile );
$cmd_upload = "arduino-cli upload -p /dev/ttyUSB0 -b arduino:avr:nano:cpu=atmega328old {$project_name}";
system( $cmd_upload );
実行
php index.php
これで、本来は 0.1秒ごとのチカチカが 3秒ごとのチカチカになっているかと思います。
応用例としては、複数のボードのIPアドレスやMacアドレスの管理、UUIDの指定ができます。
どうしても静的なプロジェクトファイルになりがちなinoファイルを動的に書き換えられるようになるかと思います。
Arduino ってどういうのを書き込んだか忘れるので githubでソースコード、PHP とデータベースで固有番号を付与して管理してもよいでしょう。