kunimiyasoftkunimiyasoftオリジナル日本地図「JSMAP2」を作るkunimiyasoftのオフィシャルウェブサイトです。Pi(ラズベリーパイ)にGPS受信機を付けて緯度・経度、速度などを確認するプログラムを作ってきましたが、スマートフォンでもできることから、実際の山歩きではあまり使っていません。PiではスマートフォンのGPSデータを転送してもらうのもありだと思っています。Piを使う時は、スマートフォンのテザリングを使うことが多いのですから、スマートフォンで取得できるデータを活用した方が良いはずです。Piで受信するには、どうすれば良いでしょうか。Piへデータを送る方法の一つとして、UDPソケット通信があります。これを使えば、ローカルなネットワーク上にある端末同士でデータのやり取りができます。Piへ送ってみました。実際にGPSデータを送る場合は複雑な構造のデータが必要ですが、基本的な仕組みは同じです。今回のプログラム作成は、以下のサイト様の記事を参考にさせて頂きました。...https://www.shujima.work/entry/2018/11/21/2134582.スマートフォン側のプログラムスマートフォン側で用意するUDPソケット通信のコードは以下のとおりです。}緯度・経度は、onLocationChanged関数で取得できるので、その中にUDPソケット通信のコードを書きます。Piが持つIPアドレス(clientIPAddress)を指定して、メッセージを送信します。注意することとして、UDPソケット通信の処理は別スレッドで動かします。今回は1つの文字列だけ送るので、処理が簡単です。Pi側は、ターミナルから起動するプログラムにしました。0;}このように、スマートフォンから送られる文字列を待機して、受信したらターミナルへ出力します。4.実行してみる実行してみて、文字列が受信できることを確認しました。Piのためではなく、M5StickCを念頭に置いたものです。M5StickCに合わせた拡張機器である「ハット」にはGPSセンサーがなく(予定はあるようです)、M5Stack用のGPSセンサーはケーブルで接続しなければなりません。M5StickCに内蔵されるバッテリー容量は少なく、GPSを動かすとすぐに容量を使い切ってしまいます。そこで、GPSデータはスマートフォンから送って、M5StickCは表示するだけにしようと考えています。これでもバッテリーがどれだけ持つか分かりませんが、期待しています。M5StickCでのテスト結果は、近日公開予定です。スマートフォンは、操作をしないまま指定の時間になるとスリープします。その操作をしない時間の最大値は、たったの30分です。そのため、今回のようなGPSデータを送信するようなプログラムを作っても、スリープになると止まってしまいます。そのため、バックグラウンドで動作するプログラムを作る必要があります。ところが現時点では、バックグラウンドとUDPソケット通信を同時に行うと、UDPソケット通信部分などで例外処理が発生します。試したのですが、どうしてもうまく行きません。管理の中の「開発者向けオプション」でスリープさせない設定にするしかありません。Androidスマートフォンは、充電していない状態で使いたいです。何か分かったら、追記します。以下のコードをonCreate関数内で定義すると、スリープにならないようです。getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);SdkVersionが33で有効を確認しています。Piを用いて作りました。Liteを購入しました。2.81)OpenStreetMapをベースにした日本地図アプリケーションです。独自の情報を加えて日本全国を紹介します。4.225)札幌市を中心とした北海道地図アプリです。