【termux】Androidスマホのセンサーの値を取得する
スマホやタブレットには様々なセンサーが付いていますが、今回はtermuxでコマンドからセンサーの値を取得してみます。
目次
作業環境
termux-sensorコマンドの使い方
AndroidにGoogleプレイからtermuxをインストールしてあることが前提です。
まずはtermuxを起動し、次のコマンドを実行します。
termux-sensor -h
と入力すれば、termux-sensorコマンドのヘルプが表示されます。
↓こんな感じ
Usage: termux-sensor Get information about types of sensors as well as live data -h, help Show this help -a, all Listen to all sensors (WARNING! may have battery impact) -c, cleanup Perform cleanup (release sensor resources) -l, list Show list of available sensors -s, sensors [,,,] Sensors to listen to (can contain just partial name) -d, delay [ms] Delay time in milliseconds before receiving new sensor update -n, limit [num] Number of times to read sensor(s) (default: continuous) (min: 1)
termux-sensorコマンドで取得できるセンサー値の一覧を表示
termux-sensor -l
{
"sensors": [
"LSM6DSM Accelerometer",
"LSM6DSM Accelerometer Uncalibrated",
"AK09915 Magnetometer",
"AK09915 Magnetometer Uncalibrated",
"LSM6DSM Gyroscope",
"LSM6DSM Gyroscope Uncalibrated",
"APDS-9940 Proximity",
"APDS-9940 Light",
以下略
センサーの値を取得してみる
一覧の中にgeomagnetic rotation vectorというものがあるのでそれを取得してみます。
これは地球磁界の回転ベクトルの値だそうで何のこっちゃ分かりませんけどw、方位磁石コンパスのアプリを作ろうとするならこの値を使うとか。
コマンドは次の通り。
termux-sensor -s "geomagnetic rotation vector"
センサーを止めるときはCtrl + c
{
"GeoMagnetic Rotation Vector": {
"values": [
0.4498130977153778,
-0.5622631311416626,
-0.5495213270187378,
0.42373886704444885,
-1
]
}
}
コマンドを実行すると、↑のようなjson形式の値が一秒おきぐらいで流れてくる。
参考
QpythonでもPythonコードを書けば同じ事ができます。
Qpython AndroidFacadeApi
その他、sl4aがサポートするAndroidFacadeApiを様々なプログラム言語で呼び出して利用できます。
SL4AによるAndroidプログラミング
※↑のサイトのPythonコードにimport androidとありますが、termuxでpip install androidが出来ませんでした。stackoverflow等にQ&Aが見つかります。termux-sensorコマンドを使えって事で。
おわりに
コマンドを実行したらセンサー値が淀みなく流れて来ましたが、リアルタイムで更新されていくデータをPythonで取得し続けるには、どうすれば良いだろうか?
また、その値によって動くコンパスアプリのような、リアルタイムな描写をするには?
後々の課題としておこ。以上です。
追記
GoogleプレイストアからTermux廃止された後のF-Droid版Termuxの導入方法など参考まで。