Skip to content

3_2_CodeExplanation

Soi Dev edited this page Nov 9, 2024 · 4 revisions

3.2 コード説明

3.2.1 コードのファイル構成

☆code_raspberrypi4

● init.sh

プログラムの環境構築の際に実行するファイル

● makefileフォルダ

プログラムの環境構築で必要なファイルがまとめられたフォルダ

● requirements.txt

プログラムの環境構築の際に導入するライブラリの名前がまとめられたファイル

● logフォルダ

プログラム実行時に出力されるログを記録したファイルが置かれるフォルダ

● main.py

メインプログラムファイル

このプログラムがアプリ起動時に自動的に実行される.

● subフォルダ

ファイル名 用途
_flask.py アプリとの通信に使用するウェブサーバ
battery.py バッテリーの電圧値取得(ADC)
bme280.py 温湿度センサデータ取得
bno055.py 9軸センサデータ取得
browser.py ブラウザ操作・管理
buzzer.py ブザーの管理
camera.py カメラの管理・画像認識
cpu.py CPU関連のデータ取得
display.py ディスプレイ操作
encoder.py モータエンコーダ取得
fan.py ファン操作
gps.py GPSデータ取得
led.py LED操作
led_sudo.py LED手動操作
motor.py モータ操作
servo.py サーボ操作
static/index.js ウェブのプログラム
static/video_settings.json カメラの画質設定等
templates/flask.js ウェブの通信プログラム
templates/index.html ウェブのレイアウトコード

3.2.2 プログラムの流れ

Raspberry Pi 起動

main.pyを自動的に開始

メインスレッド

~プログラムスタート~
・logの初期化
・センサ等初期化
・カメラ初期化・起動
・SkyWay通信用webサーバ起動
・ブラウザ起動
・インターネット確認
・SkyWay通信用web開く
・GPS受信処理設定
~ループ処理~
・各センサのデータ取得
・CPUの温度に応じてファンonoff
・ログに各センサデータ出力
・送信キューに各センサデータまとめを送る

サブスレッド

~ループ処理2~(_flask.py)
(ラズパイからデータを送る処理)
・送信キューにデータが入っていたら最初のデータを送る

イベント

~受信イベント~
(アプリからデータが来た時|非同期処理)
・受信したデータをそのまま送信キューに送り返す
・受信したデータの判別
・受信したデータを登録されているコマンドと照らし合わせて、コマンドの処理を実行

3.2.3 登録されているコマンド

アプリで実行することができるコマンドについて紹介する.

※引数が複数の時はカンマで区切る

<コマンド> <引数1>,<引数2>,...,<引数n>

使い方の例(左のモータの出力を0.3, 右のモータの出力を0.4とする)

bothMotor 0.3,0.4
コマンド 引数 処理
ConnectionCheckPing - 定期確認(基本手動では使わない)
restart - プログラムだけ再起動
reboot - Raspberry Pi再起動
getGPScon - GPSのデータを定期的に受信
getGPSraw - GPSの生データを定期的に受信
onGPSran - 緯度経度情報の乱数モードON
offGPSran - 緯度経度情報の乱数モードOFF
stopGPS - GPSの定期的なデータ受信を終了
ping - pongが返ってくる
leftMotor power (Float) 左モータの出力(0.0~1.0)を決める
rightMotor power (Float) 右モータの出力(0.0~1.0)を決める
bothMotor left_power (Float), right_power (Float) 両方のモータの出力(0.0~100.0)をそれぞれ決める
servo angle (Float) サーボの角度(-90.0~90.0)を決める
buzzer freq (Float) ブザーの周波数を決め,鳴らす
updateVS height (int), width (int),
frame_rate (int), isAvailable (int)
アプリに送る動画の高さ[px],横幅[px],
FPS,有効(1)/無効(0)を決める
led n (int),r (int),g (int),b (int) n番目のLEDの色(r,g,b)を決める
onFan - ファンをONにする
offFan - ファンをOFFにする
autoFan - ファンを自動制御モードにする(デフォルト)

3.2.4 新しいコマンドの作成方法

受信したコマンドの判別処理はmain.pyの下部で行われている.

画像だよ

onFan,offFan,autoFanと同じようにelif文で判別処理を続けて書けばオリジナルのコマンドを作成することができる.

なお,上書き保存後にRaspberry Piかプログラムの再起動が必要である.

画像だよ