Edited at
QtDay 19

Qt SensorsでIoTしたつもりになる


はじめに

お米とか野菜とか売っている会社で、IoTデバイスの開発をやっております@mogurisoです。数年前はメガネ型デバイス開発を手伝ったり、変なドローン飛ばすのを手伝ったりしておりました。

今回は頑張って開発しているIoTデバイス量産されまくって困るくらいのデモアプリをQtで作れたら良いなぁという壮大な夢に挑戦してみました。結論としては全くそこまで達していないのですが、出来たところまでPOSTします。


Qtでセンサーデータ取得

前提としては、Qt Sensorsで対応センサーからデータ取得することは出来そうです。


  • Accelerometer(加速度

  • Altimeter(高度

  • AmbientTemperatureSensor(温度

  • Compass(コンパス

  • Gyroscope(ジャイロ

  • PressureSensor(気圧

個人的には10軸センサーのデータをサンプリング出来ると嬉しいので、期待のデータ取得は出来そうに見えました。1


センサーデータ取得のサンプルを動かす

取っ掛かりがないと難しいのでQt付属のExamplesからセンサーデータ取得のサンプルを引っ張り出してみます。

無題.png

一番シンプルっぽいQt Sensors - QML exampleをビルドしてデプロイして動かしてみました。2

2018-12-20 01.42.26.jpg


気圧センサーに対応してみる

サンプルでは”傾きセンサー(x, y)””周囲光センサー””近接センサー”のデータサンプリングに対応しています。手元のデバイスだと周囲光/近接はデータが取れなかったので、とりあえずサンプルを弄って確実に搭載されている気圧センサーに対応させてみました。


qmlqtsensors.qml

        PressureSensor {

id: pressure
active: false
}

Divider { label: "PressureSensor" }

Row {
spacing: 20
width: parent.width
anchors.margins: 5

Button{
id: pressureStart
height: 30
width: 80
text: pressure.active ? "Stop" : "Start"
onClicked: {
pressure.active = (pressureStart.text === "Start" ? true : false);
}
}

Text {
id: pressureText
height: 30
verticalAlignment: Text.AlignVCenter
text: "Pressure: " + (pressure.reading ? pressure.reading.pressure : " Unknown")
}
}


pressure.reading.pressureに気圧センサーのデータが入っているのは、公式のドキュメントに載ってはいるのですが・・・分かる人なら簡単に分かるもんなんでしょうか。。。

2018-12-20 01.42.26.jpg

ちなみに、数値の値を見ると明らかにおかしいかつ補正前の生データをドライバから直接拾ってもこの値にはならないのでまだなにかおかしいです。(単純計算で1/100くらいにすればいい感じっぽいですが何でこんな値になるのかよく分からない、、、)


まとめ

Windows上でやってたせいも多分あるのですが、AndroidデバイスにQtアプリをデプロイする環境を作るだけで3回くらいQt環境を作り直す羽目になったり、公式のサンプルではQtSensors 5.0をimportするままだったり(Pressureの対応は5.1からだった、、、)、Qt Creatorが起動しなくなったり色々と落とし穴だらけでした。どうもググっても使っている記事もほとんどないのも、触りだけでコレだけハマりどころがあると納得ではあります。。。

ともあれ、デプロイ環境まで作ればQMLだけでセンサーデータを取れるのは間違いなく便利なのでモチベーションが続けばもうちょっと触ってみたいかと思います。。

明日は(というか今日は)@task_jpさんの”なんか書きます”です。毎回仕込まれているウィットに飛んだIRONYに乞うご期待。





  1. この時点では 



  2. 辛うじて動いてますがここまでに10時間以上掛かってます。。。orz