よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

【termux】Androidスマホのセンサーの値を取得する

スマホタブレットには様々なセンサーが付いていますが、今回はtermuxでコマンドからセンサーの値を取得してみます。



目次




作業環境


Androidスマホ
termux



termux-sensorコマンドの使い方


AndroidGoogleプレイから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形式の値が一秒おきぐらいで流れてくる。



参考


termux-sensor termux公式

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の導入方法など参考まで。

chayarokurokuro.hatenablog.com