🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

2140閲覧

GPSモジュールで得た緯度経度をpythonで出力したい。

退会済みユーザー

退会済みユーザー

総合スコア0

GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2019/12/13 15:27

編集2019/12/14 05:44

GPSモジュールをLattepandaalphaのarduinoleonardに接続し得れる緯度経度を、pyserial等を用いてpythonで出力できるようにしたい。
GPSはGYSFDMAXBを使っています。ポートレートは9600bpsで送受信統一して行ってます。接続はブレッドボードを介して、GPS-lattepanda(arduinoleonard)、5V-5V、GND-GND、TXD-D0、RXD-D1です。
GPSモジュールは点滅している状況です。

Arduino

1#include <TinyGPS++.h> 2 3TinyGPSPlus gps; 4 5void setup() { 6 Serial1.begin(9600); 7 while (!Serial1) { 8 ; 9 } 10} 11 12void loop() { 13 while (Serial1.available() > 0) { 14 char c = Serial1.read(); 15 gps.encode(c); 16 if (gps.location.isUpdated()) { 17 Serial1.println(gps.location.lat(), 9); 18 Serial1.println(gps.location.lng(), 9); 19 delay(1000); 20 } 21 } 22}

python

1import serial 2 3ser = serial.Serial() 4ser.port = "COM6" 5ser.baudrate = 9600 6ser.timeout = 0 7ser.setDTR(False) 8ser.open() 9while True: 10 line = ser.readline() 11 print(line) 12ser.close()

イメージ説明
現在、上記画像の出力結果となっています。
python、arduinoともに初心者の為、見当違いなことをしているかもしれませんが、ご教授頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/12/13 22:32

回路構成がわかりませんが、あなたのいうGPSとはいったいなんでしょうか。 なにをどう使ってるのか詳しく説明しましょう
退会済みユーザー

退会済みユーザー

2019/12/14 03:05

GPSはGYSFDMAXBを使っています。ポートレートは9600bpsで送受信統一して行ってます。接続はブレッドボードを介して、GPS-lattepanda(arduinoleonard)、5V-5V、GND-GND、TXD-D0、RXD-D1です。
y_waiwai

2019/12/14 03:08

それを質問文に追記しましょう 質問文は編集できます
guest

回答1

0

ベストアンサー

Lattepandaalpha上でのArduino Leonardoの扱いの資料を見つけられませんでしたが、Leonard互換であるなら、PC(USB)への送信はSerial1ではなくてSerialだと思いますがいかが。

(DTRを落としたりしているのがどういう影響があるか気になりますが、実はLeonardボードも持っていないのでわかりませんが...)

投稿2019/12/14 01:13

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/14 03:08

返信ありがとうございます。 serial1では出来ないんですかね? leonardはserial1で行えるという情報を得たのでserial1でやっているのですが。
thkana

2019/12/14 03:59

> serial1では出来ないんですかね? 「何が」出来る/出来ないの話ですか? 「情報を得た」なら、単純なプログラムで(余計な要素を排除して)試してみたらよいのではないですか? serial/serial1を確認すると自動的に考えることになるので触れてませんでしたが、そもそも char c = Serial1.read(); でgpsモジュールからデータを得ているのに、PC(というかLattepanda?)にデータを送るのが Serial1.println(gps.location.lat(), 9); というのはとても異常なことのような気がしますが、それも「情報」で出来ることになっているのですか?
退会済みユーザー

退会済みユーザー

2019/12/14 05:52

serial1を使うという情報は以下のURLからです。 https://trac.switch-science.com/wiki/Guide/ArduinoLeonardo GPSモジュールからserial1.readで読み込むだけだと緯度経度以外の情報も含まれているため、TinyGPSPlusを噛ませて緯度経度だけを取り出し、出力したいと考えたため、上記のようなプログラムをarduinoIDEに書きました。 間違いがあれば教えて頂けると有り難いです。
thkana

2019/12/14 09:14

> PC(USB)への送信はSerial1ではなくてSerialだと思いますが と回答したのであって、GPSモジュールとArduinoとの接続にSerial1が使えるという話については異議ありませんよ。 あなたの持っているGPSモジュールの情報はありませんが、まさかGPSモジュールに画面がついていてPythonが走っているわけではないでしょう?
退会済みユーザー

退会済みユーザー

2019/12/14 11:05

GPSはGYSFDMAXBを使っています。 ということは上記プログラム、arduinoIDEのserial1.println()の部分をserial.println()に変える必要があるという認識で正しいでしょうか? lattepandaオンボードのarduinoleonardにGPS(GYSFDMAXB)を繋いでいる状況です。
thkana

2019/12/14 11:20

> Lattepandaalpha上でのArduino Leonardoの扱いの資料を見つけられません ので断言は出来ませんが、 > serial.println()に変える必要がある 可能性は高いと思います。 GPSとは関係ないところなので、 void setup(){ Serial.begin(9600); } void loop(){ Serial.println(millis()); } とでもやってデータが送られてくることを確認してみればいいんじゃないですか?
退会済みユーザー

退会済みユーザー

2019/12/14 16:14

thkanaさんの上記のプログラムは正常に動きました。 ありがとうございます。 thkanaさんのご指摘の通り、PCへの送信はserial1ではなく、serialで行う必要があるということが確認できました。 私の質問時のarduinoのプログラムのGPSが関わる部分 具体的には while (Serial1.available() > 0) { char c = Serial1.read(); gps.encode(c); のみをserial1で、ここ以外をserialにすれば出来そうだと思い、実行しましたが、質問時の写真と同じ結果になってしまいました。 ご意見いただけると幸いです。
thkana

2019/12/15 04:08

Python側、`ser.timeout = 0`としていますが、これはノンブロッキング(データがなかったら瞬時に返る)です。データがなかったらreadlineは空で返って表示`b' '`、その繰り返しですから、そういうことになります。もしかしたら間で本来期待しているデータが表示されているかも知れませんが、高速で流れていってしまうでしょう。 あなたがどうしたいのかわかりませんが、とりあえず`ser.timeout = None`とでもして、データが来るまでreadlineから返らないようにしてみたらいかがですか。
退会済みユーザー

退会済みユーザー

2019/12/15 09:22

thkanaさんのアドバイスのおかげで無事、経度緯度をpyrthonで出力できるようになりました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問