#!/bin/bash # test -z $TTY && TTY="/dev/ttyUSB0" test -z $IP && IP="192.168.30.212" test -z $VER && VER="0.1-dev" BUILD="$(git rev-parse --short HEAD)-$(date '+%Y%m%d%H%M%S')" ACLI="$HOME/.local/bin/arduino-cli" ACLI_CMD="$ACLI --config-file arduino-cli.yml" function help() { echo "$0 [setup|build|upload|webupload|monitor]" echo "setup: setup build environment, download arduino-cli, install all dependencies for arduino ide" echo "build: build firmware binary. will be saved into build/" echo "upload: upload firmware by serial connection $TTY" echo "webupload: upload firmware with webupload to $IP" echo "monitor: serial monitor $TTY" exit 1 } function check_acli() { if [ ! -x $ACLI ] then echo "$ACLI does not exist nor is executable. Please run '$0 setup' first" exit 1 fi } test -z $1 && help case $1 in s|setup) ACLI_DIR="$(dirname $ACLI)" declare -a LIBS=( "Adafruit SSD1306" "Adafruit BME280 Library" "ArduinoJson" "NTPClient" "Time" ) echo ":: Setting up build environment for CanGrow Firmware." echo " This will download the binary for arduino-cli and install" echo " the packages for the arduino ide from the debian repository." echo " !! This script is meant to be executed on a Debian stable (bookworm) system !!" echo "" echo ":: Press Enter to continue" read echo "" echo ":: Installing Arduino IDE packages with apt, please enter sudo password:" sudo apt update sudo apt install arduino python3 wget curl xxd echo ":: Ensure directory ${ACLI_DIR} is present" test -d ${ACLI_DIR} || mkdir -p ${ACLI_DIR} echo ":: Please ensure ${ACLI_DIR} is in your \$PATH, I wont do it." echo "" echo ":: Downloading arduino-cli 1.0.0 into ${ACLI_DIR}/" wget -O - "https://github.com/arduino/arduino-cli/releases/download/v1.0.0/arduino-cli_1.0.0_Linux_64bit.tar.gz" | tar -C ${ACLI_DIR} -zxvf - arduino-cli chmod +x ${ACLI} echo "" echo ":: Installing ESP8266 core for Arduino" ${ACLI_CMD} core install esp8266:esp8266 echo ":: Installing Arduino libraries" for lib in ${!LIBS[@]} do echo " - ${LIBS[$lib]}" done for lib in ${!LIBS[@]} do ${ACLI_CMD} lib install "${LIBS[$lib]}" done echo "" echo ":: Setup build environment done! You can now build the firmware" echo " with: $0 build" ;; b|build) check_acli echo ":: Building firmware $VER $BUILD, target dir: $(pwd)/build/" test -d build || mkdir build echo "/* CanGrow_Version.h gets generated from cangrow.sh */ const char* CanGrowVer = \"${VER}\"; const char* CanGrowBuild = \"${BUILD}\"; " > Arduino/CanGrow/CanGrow_Version.h ${ACLI_CMD} --no-color compile -b esp8266:esp8266:d1_mini_clone "Arduino/CanGrow/CanGrow.ino" --output-dir build/ || exit 1 cp build/CanGrow.ino.bin build/CanGrow_v${VER}_${BUILD}.bin ;; u|upload) check_acli echo ":: Uploading to $TTY" ${ACLI_CMD} --no-color compile -v -b esp8266:esp8266:d1_mini_clone -u -p $TTY "Arduino/CanGrow/CanGrow.ino" ;; w|webupload) echo ":: Uploading to $IP" curl -v http://$IP/system/applyUpdate -X POST -H 'Content-Type: multipart/form-data' -F "firmware=@$(pwd)/build/CanGrow.ino.bin" echo ;; m|mon|monitor) check_acli echo ":: Open serial monitor $TTY" ${ACLI_CMD} monitor -c baudrate=115200 -p $TTY ;; *) help ;; esac