ソース公開するArduinoプログラムに秘密情報を埋め込む

aoirint/RoomSystemSensorESP32: ESP32とFirebaseを使った部屋センシング・オンライン化 クライアントの開発中に Arduinoプログラム(.ino)にWiFiパスワード・APIキーなどの秘密情報を埋め込む必要が出てきた。 ここでは、Arduino IDEの主要機能を持つCLIソフトウェアarduino-cliを使う。 arduino/arduino-cli: Arduino command line interface arduino-cliの使い方については、別記事参照。 arduino-cliの使い方 - えやみぐさ 秘密情報の埋め込み 秘密情報の埋め込みには、以下のようなシェルスクリプトcompile.shを作成するのが楽でよい。 DEFINES=の部分の-Dから=までの文字列が定数名、=の右辺が定数値として 定義された状態でソースコードがコンパイルされる。 ここでは同ディレクトリの.envファイルを読み込んで使用する。 .envファイルのフォーマットはよくあるものと同じで、 改行で区切られ、#から始まる行を無視するKEY=VALUE形式のテキストファイル。 ボードへの書き込みには以下のupload.shのようなスクリプトを使うとよい。 screenコマンドをラップするスクリプトserialmon.shもおいておく。 compile.sh #!/bin/bash set -eu if [ -f .env ]; then echo "Found .env file." export $(cat .env | sed 's/#.*//g' | xargs) fi # ESP32-DevKitC FQBN="esp32:esp32:esp32" # Arduino UNO # FQBN="arduino:avr:uno" DEFINES="-DSECRET_WIFI_SSID=$WIFI_SSID" DEFINES="${DEFINES} -DSECRET_WIFI_PW=$WIFI_PW" DEFINES="${DEFINES} -DSECRET_FIREBASE_HOST=$FIREBASE_HOST" DEFINES="${DEFINES} -DSECRET_FIREBASE_AUTH=$FIREBASE_AUTH" SKETCH="$(basename $PWD).ino" arduino-cli compile \ -b "$FQBN" \ --build-properties \ "build.defines=${DEFINES}" \ "$SKETCH" "$@" プログラム側では以下のようにする。#xはコメントではないので注意(文字列リテラルとして展開するマクロ)。 ...

2020年11月9日 · aoirint

arduino-cliの使い方

$ arduino-cli version arduino-cli Version: 0.13.0 Commit: 693a045 インストール Installation - Arduino CLI arduino/arduino-cli Arduino CLIの公式ドキュメントに従ってインストールする。後述するscreenコマンドも合わせてインストールする。 arduino-cliはDockerイメージも配布されているのでお好みで。 curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=~/.local/bin sh echo "export PATH=\"\$PATH:\$HOME/.local/bin\"" >> ~/.bashrc source ~/.bashrc sudo apt install screen プラットフォーム一覧を更新しておく。 arduino-cli core update-index シリアルポートを使うため、dialoutグループにユーザを追加する(/dev/ttyACM#や/dev/ttyUSB#のグループはdialout)。 sudo adduser $USER dialout スケッチの作成 特に特殊なファイルを必要としたりはしないので、 Arduino IDEで作成しても、好きなテキストエディタで作成してもよい。 一応テンプレート付きのスケッチを作成するには、arduino-cli sketch new SKETCH_NAMEを実行する。 手動で作成する場合にはArduino IDEと同様、 スケッチ名(ディレクトリ名)と同じ名前で、SKETCH_NAME.inoのように メインのソースコードを作成する。 以下、arduino-cliのコマンドはスケッチのディレクトリで実行する。 FQBNの確認 arduino-cliでボードを扱うときには、ボード名にあたるFQBNというコロンで区切られた文字列を使う。 arduino-cli board listallコマンドで arduino-cliが対応しているボードのFQBN一覧が出力される。 arduino-cli board listall esp32のようにキーワードを追加して、 絞り込むこともできる。 また、arduino-cli board listコマンドでPCに接続しているボードのFQBNを調べられる場合がある(Arduino系ボードの場合?)。 ...

2020年11月9日 · aoirint

ロータリエンコーダ付きステッピングモータをArduinoで制御して角度を取得する

機材 Arduino UNO(中華) ロータリエンコーダ付きステッピングモータ PKP214U06A-R2EL PKP214U06A-R2EL-L|PKPシリーズ/PKシリーズ|ステッピングモーター|オリエンタルモーター株式会社 モータ部説明書(PDF、HM-7433J.pdf) ロータリエンコーダ部説明書(PDF、HM-7439JE.pdf) 特性図(画像)(DC24V駆動時) モータ部 2相 ユニポーラ5本リード線 基本ステップ角度1.8° AC 50/60Hz 0.5kV 絶縁耐圧(1分間) ロータリエンコーダ部 分解能 200 パルス/回転(pulse/revolution) A相、B相、Z相:3チャンネル出力 DC5V駆動 モータドライバ SLA7078MPRT SLA7078MPRT |サンケン電気 2相ステッピングモータードライバー ユニポーラ駆動用 SLA7078MPRT: 半導体 秋月電子通商-電子部品・ネット通販 データシート(PDF、sla7073mprt_ds_jp.pdf) μステップ対応品 実使用電圧 10-44V モータドライバ基板 SEC20120330A エレ・メカ・ホビーショップSEC 資料置き場 新型 2相ステップドライバ資料(PDF、step-2p-v1.pdf) ステッピングモータの制御 ステッピングモータ 配線 ステッピングモータ本体からは、左から黒・緑・橙・青・赤の5本のケーブルが出ている。 これは説明書を見ると 黒・緑がA相(\(\rm A\)・\(\rm \overline{A}\))、 青・赤がB相(\(\rm B\)・\(\rm \overline{B}\))、 橙が電源になっている。 モータドライバ基板の対応する端子にこれらを接続する。 モータ電源として24V DC電源(ATS065-P240)を使用した。 ステッピングモータ ドライバ設定 μステップ機能(角度をより細かく制御できる)を使い、 励磁方式をW1-2相励磁(4分割)にするため、ドライバのM3端子をHIGHにする。 今回使ったドライバ基板ではDIPスイッチの4番をONにする。 第3回 ドライブICの制御方式「励磁方式」 | 特集 | NPM 日本パルスモーター株式会社 ドライバ基板上の半固定抵抗(Refに接続)を使って、 カレントダウン(過熱防止のための電流カット機能)時の電流と 通常時の電流をできるだけ絞る(反時計回りで絞れる)。 実際に回すときは、求められるトルクと発熱のトレードオフで調節すると思われる。 ...

2020年10月6日 · aoirint