diff --git a/m5latest.sh b/m5latest.sh new file mode 100755 index 0000000..f2cdedb --- /dev/null +++ b/m5latest.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "h" ] ; then + echo "Usage: m5latest.sh [y] [y/n]" + echo " 第一引数の y : ビルド完了まで待ち、ダウンロード後に自動で書込みを行います。" + echo " 第二引数の y/n : シリアルモニタを開く場合はyを指定してください。" + echo "例: m5latest.sh y y # ビルド完了まで待ち、書込みを行い、シリアルモニタを開く。" + exit +fi + +# ダウンロードURL +URL="https://lattr.istlab.info/ino_download_latest" +URL_SHOW="https://lattr.istlab.info/ino_show_latest" + + +## あなたの情報 https://lattr.istlab.info/dashboard に書かれていますので設定してください。 +# (例) +# MYUID="1234" +# LOGIN="23a5000" +MYUID="0" +LOGIN="23a0000" +if [ ${MYUID} -eq 0 ] ; then + echo "m5latest.sh をつかうには、20行目付近に、あなたの情報(MYUID と LOGIN)を書き込んでください。" + echo "あなたの情報は https://lattr.istlab.info/dashboard に書かれています。" + read -p "あなたの情報を確認するため、ブラウザを開きますか?(y/n): " yn + if [ $yn = "y" ]; then + url=https://lattr.istlab.info/dashboard + unameOut="$(uname -s)" + case "${unameOut}" in + Darwin*) + # macOS の場合 + open "$url" + ;; + MINGW*|MSYS*|CYGWIN*) + # Windows (Git Bash, MSYS, Cygwin) の場合 + cmd.exe /C start "$url" + ;; + *) + echo "このOSでは自動でブラウザを開けません。URL: $url" + ;; + esac + fi + echo "一旦終了します。vi m5latest.sh で、MYUID と LOGIN を書き込んでください。" + exit +fi + + +# echo connecting to ${URL} +info=`curl -s -X POST -d "uid=${MYUID}&login=${LOGIN}" ${URL_SHOW}` +echo "------------------------------" +echo ${info} +# もし、infoにhash:p1 が含まれていたら、注意喚起する +if [[ $info =~ hash:p1 ]]; then + echo "注:Plus2(黄色)ではなく、Plus(オレンジ色)用のプログラムです。" + board="plus" +else + board="plus2" +fi +echo "------------------------------" + +# POSTリクエストを送信し、レスポンスコードを取得 +RESPONSE_CODE=$(curl -o latest.bin -s -w "%{http_code}" -X POST -d "uid=${MYUID}&login=${LOGIN}" ${URL}) + +if [ "$RESPONSE_CODE" -ne 200 ]; then + echo "エラー: レスポンスコード $RESPONSE_CODE が返されました。" + if [ "$RESPONSE_CODE" -eq 403 ]; then + echo "ユーザIDとログインIDが間違っています。" + exit + fi +fi +# レスポンスコードが404でない場合、メッセージを表示 +if [ "$RESPONSE_CODE" -eq 404 ]; then + echo "まだビルド(コンパイル)が終わっていません。" + if [ "$1" == "y" ]; then + while true ; do + sleep 5 + RESPONSE_CODE=$(curl -o latest.bin -s -w "%{http_code}" -X POST -d "uid=${MYUID}&login=${LOGIN}" ${URL}) + if [ "$RESPONSE_CODE" -eq 200 ]; then + break + fi + echo -n "." + done + fi +fi +if [ "$RESPONSE_CODE" -eq 200 ]; then + echo "ダウンロード成功: (レスポンスコード $RESPONSE_CODE)" + curl -o latest.partitions.bin -s -X POST -d "uid=${MYUID}&login=${LOGIN}&type=partitions" ${URL} + curl -o latest.bootloader.bin -s -X POST -d "uid=${MYUID}&login=${LOGIN}&type=bootloader" ${URL} + # 書き込みを行う + serials=`arduino-cli board list | grep USB | awk '{print $1}'` + seriallist=($serials) + if [ "$1" == "y" ]; then + yn='y' + else + read -p "書き込みを行いますか?(y/n): " yn + fi + if [ $yn = "y" ]; then + if [ -z "${serials}" ]; then + echo "デバイスがみつかりませんでした。" + sleep 2 + echo "デバイスを接続しているのに認識しないときは、ドライバを入れてください。" + sleep 2 + echo "https://ftdichip.com/drivers/vcp-drivers/ → Click here to download の hereをおす。ZIP解凍して実行。" + exit + fi + for ser in ${seriallist[@]} ; do + echo ${ser} + arduino-cli upload --fqbn esp32:esp32:m5stack_stickc_${board} -p ${ser} --input-file latest.bin + done + fi + # 接続デバイスが1つのみの場合、シリアルモニタを開くか確認 + if [[ "${#seriallist[@]}" -eq 1 ]]; then + if [ -z "$2" ]; then + read -p "シリアルモニタを開きますか?(y/n): " yn + else + yn=$2 + fi + if [ $yn = "y" ]; then + echo "終了するときはCtrl+Cを押してください。" + arduino-cli monitor -p ${seriallist[0]} --config 115200 + fi + fi +fi