色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Adafruit Ultimate GPS模塊的使用教程

454398 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-27 11:13 ? 次閱讀

概述

Adafruit Ultimate GPS模塊的使用教程

我們?cè)?a target="_blank">Adafruit商店中提供了幾種不同的GPS模塊,但是沒有一個(gè)能夠滿足我們的所有愿望-這就是為什么我們?cè)O(shè)計(jì)了這個(gè)小小的GPS接線板。我們認(rèn)為這是 Ultimate GPS模塊,因此我們將其命名為。它具有您想要的一切以及更多的功能:

-165 dBm靈敏度,10 Hz更新,66個(gè)通道

5V友好設(shè)計(jì)和僅20mA的電流消耗

易于使用的木板+兩個(gè)安裝孔

兼容RTC電池

內(nèi)置數(shù)據(jù)記錄

PPS固定輸出

內(nèi)置貼片天線+用于外部有源天線的u.FL連接器

固定狀態(tài)LED

此突破圍繞MTK3339芯片組構(gòu)建,這是毫無(wú)疑問(wèn)的,高質(zhì)量GPS模塊,可以在66個(gè)頻道上跟蹤多達(dá)22顆衛(wèi)星,具有出色的高靈敏度接收器(-165 dB跟蹤!)和內(nèi)置天線。它每秒最多可以進(jìn)行10個(gè)位置更新,以進(jìn)行高速,高靈敏度的記錄或跟蹤。功耗非常低,在導(dǎo)航期間僅為20 mA。

最終GPS分線板

面包板突破板隨附::超低壓降3.3V穩(wěn)壓器,因此您可以使用3.3-5VDC輸入,5V電平安全輸入和ENABLE引腳為其供電,從而可以使用以下方式關(guān)閉模塊:任何微控制器引腳或開關(guān),可選CR1220紐扣電池的占位面積,以保持RTC正常運(yùn)行并允許熱啟動(dòng)和微小的亮紅色LED。搜索衛(wèi)星時(shí),LED指示燈以大約1Hz的頻率閃爍,找到可節(jié)省電量的解決方案時(shí),它每15秒閃爍一次。如果您一直希望有一個(gè)LED,我們還會(huì)在引腳上提供FIX信號(hào),以便您可以將一個(gè)外部LED點(diǎn)亮。

最終GPS USB

USB Breakout板隨附: 4針USB Break板,用于直接焊接或連接到USB主機(jī),兩個(gè)黃色的接收/發(fā)送LED指示燈可讓您知道何時(shí)將數(shù)據(jù)發(fā)送到GPS模塊串行接口或從GPS模塊串行接口發(fā)送數(shù)據(jù);可選的CR1220紐扣電池的占用空間可保持RTC的運(yùn)行并允許熱啟動(dòng),并且還有一個(gè)很小的亮紅色LED指示燈。搜索衛(wèi)星時(shí),LED指示燈以大約1Hz的頻率閃爍,找到可節(jié)省電量的解決方案時(shí),它每15秒閃爍一次。如果您一直希望有一個(gè)LED,我們還會(huì)在引腳上提供FIX信號(hào),以便您可以將一個(gè)外部LED點(diǎn)亮。

天線使用情況

基于版本3 MTK3339的模塊真正突出的兩個(gè)功能是外部天線功能和內(nèi)置的數(shù)據(jù)記錄功能。該模塊具有標(biāo)準(zhǔn)的陶瓷貼片天線,可提供-165 dB的靈敏度,但是如果您想要更大的天線,則可以通過(guò)uFL連接器扣緊任何3V有源GPS天線。模塊將自動(dòng)檢測(cè)活動(dòng)的天線并進(jìn)行切換!大多數(shù)GPS天線使用SMA連接器,因此您可能需要使用我們的uFL到SMA適配器之一。

基于MTK3339的新模塊(我們已經(jīng)成功測(cè)試)的另一個(gè)很酷的功能是內(nèi)置的數(shù)據(jù)記錄功能。由于模塊內(nèi)部有一個(gè)微控制器,帶有一些空的閃存,因此,最新的固件現(xiàn)在允許發(fā)送命令以對(duì)該閃存進(jìn)行內(nèi)部記錄。唯一的事情是您確實(shí)需要讓微控制器發(fā)送“開始記錄”命令。但是,發(fā)送該消息后,微控制器可以進(jìn)入睡眠狀態(tài),并且無(wú)需喚醒即可與GPS通話以降低功耗。時(shí)間,日期,經(jīng)度,緯度和高度每15秒記錄一次,并且僅在有修正時(shí)記錄。內(nèi)部閃存可以存儲(chǔ)大約16個(gè)小時(shí)的數(shù)據(jù),它將自動(dòng)追加數(shù)據(jù),因此您不必?fù)?dān)心斷電會(huì)意外丟失數(shù)據(jù)。無(wú)法將記錄的內(nèi)容和記錄的頻率更改為已硬編碼到模塊中,但是我們發(fā)現(xiàn)這種安排涵蓋了許多最常見的GPS數(shù)據(jù)記錄要求。

今天在Adafruit商店提貨一個(gè)!

規(guī)格

模塊規(guī)格:

衛(wèi)星:跟蹤22條,搜索66條

貼片天線尺寸:15mm x 15mm x 4mm

更新速率:1至10 Hz

位置精度:1.8米

速度精度:0.1米/秒

暖/冷啟動(dòng):34秒

采集靈敏度:-145 dBm

跟蹤靈敏度:-165 dBm

最大速度:515m/s

輸入電壓范圍:3.0-5.5VDC

MTK3339工作電流:25mA跟蹤,導(dǎo)航時(shí)消耗20mA電流

輸出:NMEA 0183,默認(rèn)9600波特率

支持DGPS/WAAS/EGNOS

符合FCC E911和支持AGPS(離線模式:EPO,有效期最長(zhǎng)為14天)

多達(dá)210個(gè)PRN頻道

干擾檢測(cè)和減少

多徑檢測(cè)和補(bǔ)償

突破b詳情:

重量(不包括紐扣電池或支架):8.5g

尺寸(不包括紐扣電池或支架):25.5mm x 35mm x 6.5mm/1.0“ x 1.35” x 0.25“

如果您在2012年3月26日之前購(gòu)買了模塊,并且絲網(wǎng)印刷版上顯示MTK3329,則您可以使用MT3329芯片組獲得此突破的PA6B版本。 MTK3329沒有內(nèi)置的數(shù)據(jù)記錄。如果您的模塊有沙皮筆標(biāo)記劃掉了MTK3329文本或沒有文本,則您的PA6C MTK3339具有數(shù)據(jù)記錄功能。如果名稱旁邊帶有“ v3”的版本,則說(shuō)明PA6H具有PPS輸出并支持外部天線。

教程假定您使用的是‘3339類型的模塊。

插腳

普通的GPS分組接口旨在與具有3/5V UART且所有GPIO引腳暴露在底部0.1“接頭上的微控制器一起使用

USB版本沒有這些突破,而是只有一個(gè)USB串行端口。當(dāng)您要將其直接焊接到USB主機(jī)傳送器時(shí),右側(cè)有4個(gè)焊盤是USB引腳。

斷路器電源引腳

這些是與GPS供電有關(guān)的引腳。在右側(cè)是必需的電源引腳:

VIN -電源輸入,連接到3-5VDC。連接到干凈安靜電源很重要。 GPS非常敏感,因此您需要一個(gè)安靜的電源。如果可以避免的話,請(qǐng)不要連接到開關(guān)電源,否則LDO的噪音會(huì)減少!

GND -電源和信號(hào)地。連接到電源和微控制器接地。

然后,在左側(cè)是一些可選的電源引腳:

VBAT 輸入引腳-連接到GPS實(shí)時(shí)時(shí)鐘備用電池。我們建議使用背面的電池點(diǎn),但是如果您有一個(gè)項(xiàng)目要使用紐扣電池或其他類型的電池(且其電壓低于3.3V),則可以將其連接至VBAT引腳。 對(duì)于V1和V2模塊:如果要執(zhí)行此操作,請(qǐng)確保在RTC焊盤之間切掉背面的走線

EN 是啟用引腳,通過(guò)一個(gè)10K電阻將其拉高。當(dāng)該引腳接地時(shí),它將關(guān)閉GPS模塊。這對(duì)于非常低功耗的項(xiàng)目可能非常方便,在這些項(xiàng)目中您想輕松地長(zhǎng)時(shí)間關(guān)閉模塊。如果禁用GPS,將會(huì)丟失修復(fù)程序;如果未安裝備用電池,則修復(fù)過(guò)程也將花費(fèi)很長(zhǎng)時(shí)間。

3.3V 是輸出來(lái)自板載3.3V穩(wěn)壓器。如果您需要干凈的3.3V輸出,可以使用它!它可以提供至少100mA的輸出。

中斷串行數(shù)據(jù)引腳

接下來(lái)要使用的引腳是串行數(shù)據(jù)引腳:

TX -傳輸數(shù)據(jù)的引腳從GPS模塊到您的微控制器或計(jì)算機(jī)。它是3.3V邏輯電平。默認(rèn)情況下,數(shù)據(jù)以9600波特的速率輸出

RX -您可以使用該引腳向GPS發(fā)送數(shù)據(jù) 。您可以使用使用3.3V或5V邏輯,有一個(gè)邏輯電平轉(zhuǎn)換器。默認(rèn)情況下,它期望9600波特?cái)?shù)據(jù),并且記住您需要向其發(fā)送校驗(yàn)和的NMEA句子

中斷其他引腳

FIX 是輸出引腳-它與驅(qū)動(dòng)紅色LED的引腳相同。如果沒有解決辦法,F(xiàn)IX引腳將每秒上下脈沖一次。修復(fù)后,大部分時(shí)間該引腳處于低電平(0V),每15秒鐘將脈沖高電平200毫秒

PPS 是一個(gè)新的引腳輸出在V3模塊上。其“每秒脈沖數(shù)”輸出。多數(shù)情況下,它處于邏輯低電平(地),然后每秒脈沖高電平(3.3V),持續(xù)50-100ms,因此,微控制器應(yīng)該很容易地與之同步

備用電池

GPS具有內(nèi)置的實(shí)時(shí)時(shí)鐘,即使掉電且尚未修復(fù),它也可以跟蹤時(shí)間。如果您希望使用火焰狀電源連接(例如,您使用的是太陽(yáng)能或類似產(chǎn)品),它還可以幫助減少修理時(shí)間。要使用RTC,我們需要安裝電池。 CR1220 尺寸的電池座背面有一個(gè)斑點(diǎn)。我們提供支架,但不包括電池。您可以使用任何12毫米硬幣電池-這些硬幣電池很受歡迎,我們也可以在Adafruit商店中使用它們。

通常,如果GPS斷電,它將恢復(fù)到出廠默認(rèn)的波特率,配置等。備用電池將意味著這些默認(rèn)值不會(huì)丟失!

備用實(shí)時(shí)時(shí)鐘電路消耗7 uA(0.007 mA),因此CR1220的使用壽命為40mAh/0.007mA = 5,714小時(shí)= 240天連續(xù)。備用電池僅在GPS沒有3V主電源時(shí)使用,因此,只要偶爾使用一次,就可以使用幾年

如果僅具有v1或v2模塊:在將電池插入電池盒之前,請(qǐng)先切割背面兩個(gè)焊墊之間的走線,標(biāo)記為RTC(這將VIN引腳與電池輸入斷開連接)使用萬(wàn)用表進(jìn)行連續(xù)性檢查,以確保兩個(gè)焊盤不再連接在一起。

V3模塊沒有切割痕跡,它們具有內(nèi)置二極管

請(qǐng)記住, GPS不知道您處于哪個(gè)時(shí)區(qū)(即使知道您所在的位置,沒有大量查找表也無(wú)法輕松確定時(shí)區(qū)),因此所有日期/時(shí)間數(shù)據(jù)都采用UTC(又稱格林威治標(biāo)準(zhǔn)時(shí)間)-你會(huì)必須編寫將其轉(zhuǎn)換為您當(dāng)?shù)貢r(shí)區(qū)的代碼,并在需要時(shí)記入夏令時(shí)!由于這很復(fù)雜,因此大多數(shù)人都堅(jiān)持將所有內(nèi)容保留在UTC

外部天線

版本3中的新功能在Ultimate GPS突破中,我們現(xiàn)在支持可選的外部天線!該功能在v1或v2中不可用,因此,如果看不到uFL連接器,則說(shuō)明該模塊的版本較舊,不支持天線

所有Ultimate GPS模塊具有內(nèi)置貼片天線-該天線提供-165 dBm的靈敏度,非常適合許多項(xiàng)目。但是,如果要將項(xiàng)目放在盒子中,則可能無(wú)法使天線指向上方,或者可能位于金屬屏蔽中,或者可能需要更高的靈敏度。在這些情況下,您可能需要使用外部有源天線。

有源天線會(huì)吸收電流,因此它們確實(shí)可以提供更大的增益,但會(huì)降低功耗。檢查天線數(shù)據(jù)表中的確切電流(通常為10-20mA)。大多數(shù)GPS天線使用流行且易于使用的SMA連接器。但是,SMA接頭在GPS突破口上會(huì)相當(dāng)大,因此我們選擇了uFL接頭-重量輕,體積小且易于制造。如果您不需要外部天線,則不會(huì)增加重量或空間,但是易于連接uFL-》 SMA適配器電纜。然后將GPS天線連接到電纜。

uFL連接器小巧,纖巧,沒有額定應(yīng)變或大量的連接/斷開。一旦您連接了uFL適配器,請(qǐng)使用應(yīng)力消除以避免剝落uFL

Ultimate GPS將自動(dòng)檢測(cè)到已連接外部有源天線并“切換” -您不需要發(fā)送任何命令。

有一個(gè)輸出語(yǔ)句可以告訴您天線的狀態(tài)。 $ PGTOP,11,x ,其中 x 是狀態(tài)號(hào)。如果 x 為 3 ,則表示它正在使用外部天線。如果 x 為 2 ,則使用內(nèi)部天線,如果 x 為 1 ,則表明天線短路或出現(xiàn)問(wèn)題。

在較新的防護(hù)罩和模塊上,您需要告知要輸出此報(bào)告的固件,可以通過(guò)在同一時(shí)間添加 gps.sendCommand(PGCMD_ANTENNA)來(lái)做到這一點(diǎn)。設(shè)置更新率/句子輸出。

直接計(jì)算機(jī)接線

GPS模塊很棒,因?yàn)榇蜷_它們的那一刻,它們將開始吐出數(shù)據(jù),并嘗試獲取“修復(fù)”(位置驗(yàn)證)。就像現(xiàn)有的幾乎所有GPS一樣,Adafruit Ultimate GPS使用TTL串行輸出發(fā)送數(shù)據(jù),因此首先測(cè)試GPS的最佳方法是通過(guò)Arduino上的TTL串行到USB轉(zhuǎn)換器將其直接連接到計(jì)算機(jī)。您也可以使用FTDI Friend或其他TTL適配器,但在本演示中,我們將使用經(jīng)典的Arduino。

Leonardo用戶:本教程步驟不適用于Leonardo。繼續(xù)下一步,“ Arduino接線”,但是請(qǐng)回到這里進(jìn)行有關(guān)GPS數(shù)據(jù)的討論!

首先,將“空白”草圖加載到Arduino中:

下載:文件

復(fù)制代碼

// this sketch will allow you to bypass the Atmega chip

// and connect the Ultimate GPS directly to the USB/Serial

// chip converter.

// Connect VIN to +5V

// Connect GND to Ground

// Connect GPS RX (data into GPS) to Digital 0

// Connect GPS TX (data out from GPS) to Digital 1

void setup() {}

void loop() {} // this sketch will allow you to bypass the Atmega chip

// and connect the Ultimate GPS directly to the USB/Serial

// chip converter.

// Connect VIN to +5V

// Connect GND to Ground

// Connect GPS RX (data into GPS) to Digital 0

// Connect GPS TX (data out from GPS) to Digital 1

void setup() {}

void loop() {}

這將釋放轉(zhuǎn)換器,因此您可以直接接線并繞過(guò)Arduino芯片。上傳該草圖后,請(qǐng)按照以下步驟連接GPS。您的模塊外觀可能略有不同,但是只要您連接到正確的引腳名稱,它們?cè)谠摬糠值?a target="_blank">工作原理都是相同的

現(xiàn)在插入U(xiǎn)SB電纜,然后從Arduino IDE打開串行監(jiān)視器,并確保選擇 9600波特 中。您應(yīng)該看到如下文本:

這是模塊輸出的原始GPS“ NMEA語(yǔ)句”。 NMEA句子有幾種,人們最常用的是 $ GPRMC (( G lobal P 定位 R 推薦 M 至少 C 個(gè)坐標(biāo)或類似內(nèi)容)和 $ GPGGA 語(yǔ)句。這兩個(gè)提供時(shí)間,日期,緯度,經(jīng)度,高度,估計(jì)的陸地速度和定位類型。修復(fù)類型表示GPS是否已鎖定到衛(wèi)星數(shù)據(jù)上并接收到足夠的數(shù)據(jù)來(lái)確定位置(2D修復(fù))或位置+高度(3D修復(fù))。

有關(guān)NMEA語(yǔ)句以及它們的數(shù)據(jù)的更多詳細(xì)信息包含,請(qǐng)查看此站點(diǎn)

如果您在上面的窗口中查看數(shù)據(jù),您會(huì)發(fā)現(xiàn)其中有很多逗號(hào),而中間沒有數(shù)據(jù)。這是因?yàn)榇四K在我的桌子上,室內(nèi),并且沒有“修復(fù)”功能。要解決此問(wèn)題,我們需要將該模塊放在外面。

GPS模塊將即使沒有修復(fù)程序,也始終發(fā)送數(shù)據(jù)!為了獲取“有效”(非空白)數(shù)據(jù),您必須將GPS模塊直接放在外面,方形陶瓷天線指向上方,并享有晴朗的天空。在理想條件下,該模塊可以在45秒內(nèi)得到修復(fù)。但是,取決于您的位置,衛(wèi)星配置,太陽(yáng)耀斑,附近的高樓大廈,RF噪聲等,修復(fù)可能最多需要半小時(shí)(或更長(zhǎng)時(shí)間)!這并不意味著您的GPS模塊已損壞,GPS模塊將始終盡可能快地工作以獲取修復(fù)。

如果您能獲得很長(zhǎng)的USB線(或?qū)PS天線連接到v3模塊),然后將GPS伸出窗口,使其指向天空,最終GPS將得到修復(fù),窗口數(shù)據(jù)將轉(zhuǎn)換為傳輸有效數(shù)據(jù),如下所示:

查找以下內(nèi)容: $ GPRMC,194509.000,A,4042.6142,N,07400.4168,W,2.03,221.11,160412 ,,, A * 77

該行稱為RMC(建議的最低要求)句子,所有最有用的數(shù)據(jù)。每個(gè)數(shù)據(jù)塊都用逗號(hào)分隔。

第一部分 194509.000 是當(dāng)前時(shí)間 GMT (格林威治標(biāo)準(zhǔn)時(shí)間)。前兩個(gè)數(shù)字 19 表示小時(shí)(1900h,也稱為7pm),后兩個(gè)數(shù)字是分鐘,后兩個(gè)數(shù)字是秒,最后是毫秒。因此,截取該屏幕截圖的時(shí)間為7:45 pm和9秒。 GPS不知道您所在的時(shí)區(qū)或“夏令時(shí)”,因此您必須進(jìn)行計(jì)算才能將GMT轉(zhuǎn)換為您的時(shí)區(qū)

第二部分是“狀態(tài)代碼”,如果它是 V ,表示數(shù)據(jù)是 V oid(無(wú)效)。如果它是 A ,則表示其 A 功能(GPS可以獲取鎖定/修復(fù))

接下來(lái)的4個(gè)數(shù)據(jù)是地理位置數(shù)據(jù)。根據(jù)GPS,我的位置是 4042.6142,N (北緯40度,北42.6142分鐘)和 07400.4168,W 。 (西經(jīng)74度,西數(shù)0.4168,十進(jìn)制分鐘)要在Google地圖中查看此位置,請(qǐng)?jiān)贕oogle地圖搜索框中輸入 +40 42.6142’,-74 00.4168‘。不幸的是,gmaps要求您使用+/-而不是NSWE表示法。 N和E為正,S和W為負(fù)。

人們經(jīng)常會(huì)感到困惑因?yàn)镚PS正常工作,但“距5英里遠(yuǎn)”-這是因?yàn)镚PS不能正確解析經(jīng)緯度數(shù)據(jù)。盡管有外觀,但是地理位置數(shù)據(jù)并非以十進(jìn)制度為單位。格式為度和分鐘,格式如下:緯度:DDMM.MMMM(前兩個(gè)字符為度。)經(jīng)度:DDDMM.MMMM(前三個(gè)字符為度。)

下一個(gè)數(shù)據(jù)是地面速度(以節(jié)為單位)。我們要 2.03 結(jié)

在此之后是跟蹤角度,這意味著根據(jù)過(guò)去的行程來(lái)近似我們要駛向的“羅盤”方向

此后的一個(gè)是 160412 ,它是當(dāng)前日期(2012年4月16日)。

最后是 * XX 用作數(shù)據(jù)傳輸校驗(yàn)和的數(shù)據(jù)

使用GPS模塊獲得修復(fù)后,請(qǐng)使用Google地圖(或某些其他地圖軟件)驗(yàn)證您的位置。請(qǐng)記住,GPS通常只能精確到5-10米,如果您在室內(nèi)或被高大的建筑物包圍著,則更糟。

中斷Arduino接線

一旦您通過(guò)直接接線對(duì)GPS模塊進(jìn)行了測(cè)試,我們就可以將其接線到微控制器上。我們將使用Arduino,但您可以將我們的代碼改編為能夠以9600波特接收TTL串行的任何其他微控制器。

將 VIN 連接到+ 5V, GND 接地, RX 至數(shù)字2, TX 至數(shù)字3。

下一步,下載Adafruit GPS庫(kù)。該庫(kù)完成了從GPS模塊接收數(shù)據(jù)所需的許多“繁重工作”,例如在后臺(tái)中斷中讀取流數(shù)據(jù)并自動(dòng)對(duì)其進(jìn)行魔術(shù)解析。要下載它,請(qǐng)?jiān)L問(wèn)GitHub存儲(chǔ)庫(kù),或單擊下面的

從github下載Adafruit GPS庫(kù)

重命名未壓縮的文件夾 Adafruit_GPS 。檢查 Adafruit_GPS 文件夾是否包含 Adafruit_GPS.cpp 和 Adafruit_GPS.h

移動(dòng) Adafruit_GPS 到您的Arduino/Libraries文件夾,然后重新啟動(dòng)Arduino IDE。庫(kù)安裝是一個(gè)經(jīng)常遇到的障礙……如果您需要幫助,我們的《關(guān)于Arduino的所有圖書館指南》將其詳細(xì)說(shuō)明!

萊昂納多和Micro用戶:我們?cè)贏dafruit_GPS庫(kù)中有特殊的示例草圖,可與Micro/Leo配合使用!

打開文件→示例→Adafruit_GPS→echo 草圖并將其上傳到Arduino。然后打開串行監(jiān)視器。該草圖僅從軟件串行端口(引腳2和3)讀取數(shù)據(jù),并將其輸出到連接到USB的硬件串行端口。

打開Arduino IDE串行控制臺(tái),并確保將串行波特率設(shè)置為 115200

您可以在 setup()過(guò)程中通過(guò)注釋/取消注釋行來(lái)配置所看到的GPS輸出。例如,我們可以要求GPS發(fā)送不同的句子,并更改其發(fā)送數(shù)據(jù)的頻率。最大速度為10 Hz(每秒10次),并且是大量數(shù)據(jù)。您可能無(wú)法以該速度輸出“所有數(shù)據(jù)”,因?yàn)?600波特率不夠快。

下載:文件

復(fù)制代碼

// You can adjust which sentences to have the module emit, below

// uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude

GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);

// uncomment this line to turn on only the “minimum recommended” data for high update rates!

//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);

// uncomment this line to turn on all the available data - for 9600 baud you’ll want 1 Hz rate

//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_ALLDATA);

// Set the update rate

// 1 Hz update rate

//GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);

// 5 Hz update rate- for 9600 baud you‘ll have to set the output to RMC or RMCGGA only (see above)

GPS.sendCommand(PMTK_SET_NMEA_UPDATE_5HZ);

// 10 Hz update rate - for 9600 baud you’ll have to set the output to RMC only (see above)

//GPS.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ); // You can adjust which sentences to have the module emit, below

// uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude

GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);

// uncomment this line to turn on only the “minimum recommended” data for high update rates!

//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);

// uncomment this line to turn on all the available data - for 9600 baud you‘ll want 1 Hz rate

//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_ALLDATA);

// Set the update rate

// 1 Hz update rate

//GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);

// 5 Hz update rate- for 9600 baud you’ll have to set the output to RMC or RMCGGA only (see above)

GPS.sendCommand(PMTK_SET_NMEA_UPDATE_5HZ);

// 10 Hz update rate - for 9600 baud you‘ll have to set the output to RMC only (see above)

//GPS.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ);

通常,我們發(fā)現(xiàn)僅大多數(shù)項(xiàng)目需要RMC和GGA NMEA,因此除非您需要了解衛(wèi)星位置,否則您不需要ALLDATA。

突破性的Arduino解析

由于所有GPS的輸出NMEA語(yǔ)句(通常對(duì)于我們的項(xiàng)目,我們都需要從中提取實(shí)際數(shù)據(jù)),因此在使用Adafruit GPS庫(kù)。通過(guò)使庫(kù)在后臺(tái)中斷中讀取,存儲(chǔ)和解析數(shù)據(jù),可以輕松地查詢庫(kù)并獲取最新的更新信息,而無(wú)需進(jìn)行任何麻煩的解析工作。

打開文件→示例→Adafruit_GPS→解析草圖并將其上傳到Arduino。然后打開串行監(jiān)視器。

在此草圖中,我們?cè)谥餮h(huán)中不斷調(diào)用 GPS.read()(如果可以的話,請(qǐng)使其在中斷中運(yùn)行一毫秒)。然后在主循環(huán)中,我們可以通過(guò)調(diào)用 GPS.newNMEAreceived()來(lái)詢問(wèn)是否已接收到新的數(shù)據(jù)塊,如果返回的結(jié)果是 true ,那么我們可以要求圖書館使用 GPS.parse(GPS.lastNMEA())解析數(shù)據(jù)。

我們確實(shí)必須在主循環(huán)中保持查詢和解析-不可能在中斷,因?yàn)槟菢拥脑捨覀儠?huì)意外丟失GPS數(shù)據(jù)。

一旦解析了數(shù)據(jù),我們就可以從庫(kù)中獲取數(shù)據(jù),例如 GPS.day , GPS .month 和 GPS.year 作為當(dāng)前日期。 GPS.fix 如果有修復(fù),將為1,如果沒有,則為0。如果我們有解決辦法,那么我們可以要求 GPS。緯度, GPS。經(jīng)度, GPS。速度(以節(jié)為單位,而不是mph或k/hr!), GPS.angle , GPS.altitude (以厘米為單位)和 GPS.satellites (衛(wèi)星數(shù))

這應(yīng)該使基于位置的項(xiàng)目更加容易。我們建議將更新速率保持在1Hz,并要求GPS僅輸出RMC和GGA,因?yàn)?a href="http://www.1cnz.cn/tags/解析器/" target="_blank">解析器始終無(wú)法跟蹤其他數(shù)據(jù)。

CircuitPython和Python設(shè)置

除Arduino外,您還可以輕松地將GPS模塊與Python或CircuitPython代碼一起使用。 Python代碼非常適合解析和處理從GPS模塊輸出的文本,此Adafruit CircuitPython GPS模塊可以為您處理大部分工作!

CircuitPython微控制器接線

首先請(qǐng)確保將GPS模塊連接到CircuitPython板,以便使用硬件UART引腳。這是Metro M0 Express的示例:

table》

Python計(jì)算機(jī)接線

由于您可以使用數(shù)十種Linux計(jì)算機(jī)/板,因此我們將顯示Raspberry Pi的接線。對(duì)于其他平臺(tái),請(qǐng)?jiān)L問(wèn)Linux上的CircuitPython指南,以了解您的平臺(tái)是否受支持。

這里有兩個(gè)選項(xiàng):外部USB到串行轉(zhuǎn)換器,或Pi的TX/RX引腳上的內(nèi)置UART。下面是連接USB到串行轉(zhuǎn)換器的示例:

板5V 或 3.3V 到 GPS模塊VIN 。

板GND 到 GPS模塊GND 。

板串行TX 到 GPS模塊RX 。

板載串行RX 到 GPS模塊TX 。

GPS Vin 至 USB 5V 或 3V 》(USB控制臺(tái)電纜上的紅色電線)

GPS地面到 USB接地(黑線)

GPS RX 到 USB TX (綠線)

GPS TX 到 USB RX (白線)

如果是Raspberry Pi以外的單板計(jì)算機(jī),則串行端口可能已綁定到控制臺(tái),或者對(duì)用戶不可用。請(qǐng)參閱主板文檔以了解如何使用串行端口

您也可以跳過(guò)USB控制臺(tái)電纜,只需將Micro B電纜直接從計(jì)算機(jī)插入最終GPS USB

下面是使用Pi內(nèi)置UART的示例:

GPS Vin 至 3。 3V (紅線)

GPS接地到地面(黑線)

GPS RX 至 TX (綠線)

GPS TX 至 RX (白線)

如果要使用內(nèi)置UART,則需要禁用串行控制臺(tái),并在 raspi-config 中啟用串行端口硬件。有關(guān)如何執(zhí)行此操作的詳細(xì)說(shuō)明,請(qǐng)參見《 Raspberry Pi上的CircuitPython指南》的“ UART/串行”部分。

CircuitPython安裝GPS庫(kù)

接下來(lái),您需要在CircuitPython板上安裝Adafruit CircuitPython GPS庫(kù)。請(qǐng)記住,該模塊用于Adafruit CircuitPython固件,而不是用于MicroPython.org固件!

首先,請(qǐng)確保您的電路板正在運(yùn)行最新版本的Adafruit CircuitPython。

下一步,需要安裝必要的庫(kù)才能使用硬件。仔細(xì)按照以下步驟從Adafruit的CircuitPython庫(kù)捆綁包中查找和安裝這些庫(kù)。例如,Circuit Playground Express指南上有一個(gè)很棒的頁(yè)面,介紹了如何為Express和非Express板安裝庫(kù)包。

請(qǐng)記住Trinket M0,Gemma M0和Trinket M0等非Express板。 Feather/Metro M0 basic,您需要從捆綁包中手動(dòng)安裝必要的庫(kù):

adafruit_gps.mpy

您還可以從Adafruit CircuitPython GPS版本頁(yè)面下載 adafruit_gps.mpy 文件。

在繼續(xù)之前,請(qǐng)確保您開發(fā)板的 lib 文件夾中的 adafruit_gps.mpy 文件復(fù)制過(guò)來(lái)。

GPS庫(kù)的Python安裝

您需要安裝 Adafruit_Blinka 庫(kù),該庫(kù)在Python中提供了CircuitPython支持。這可能需要驗(yàn)證您正在運(yùn)行Python3。由于每個(gè)平臺(tái)都有一些不同,并且Linux經(jīng)常更改,請(qǐng)?jiān)L問(wèn)Linux上的CircuitPython指南以使您的計(jì)算機(jī)準(zhǔn)備就緒!

完成后,從命令行運(yùn)行以下命令:

下載:文件

復(fù)制代碼

sudo pip3 install adafruit-circuitpython-gps sudo pip3 install adafruit-circuitpython-gps

CircuitPython和Python UART的用法

為演示在使用UART的CircuitPython中GPS模塊的用法,我們來(lái)看一個(gè)完整的程序示例 gps_simpletest.py 文件中的示例。

CircuitPython微控制器

使用CircuitPython微控制器,將該文件另存為 code.py 在您的板上,然后打開串行控制臺(tái)以查看其輸出。

具有Python的Linux/Computer/Raspberry Pi

如果您在Raspberry Pi(或任何計(jì)算機(jī))上運(yùn)行g(shù)ps_simpletest.py,則必須進(jìn)行一些更改。

在Raspberry Pi上,注釋掉uart = busio(。..)行,并取消注釋import serial和uart = serial.Serial(。..)行,將/dev/ttyUSB0更改為適當(dāng)?shù)男蛄刑?hào)港口。現(xiàn)在,您可以使用以下命令運(yùn)行該程序:

下載:文件

復(fù)制代碼

python3 gps_simpletest.py python3 gps_simpletest.py

示例解析代碼

下載:Project Zip 或 gps_simpletest.py | 在Github上查看

復(fù)制代碼

# Simple GPS module demonstration.

# Will wait for a fix and print a message every second with the current location

# and other details.

import time

import board

import busio

import adafruit_gps

# Create a serial connection for the GPS connection using default speed and

# a slightly higher timeout (GPS modules typically update once a second)。

# These are the defaults you should use for the GPS FeatherWing.

# For other boards set RX = GPS module TX, and TX = GPS module RX pins.

uart = busio.UART(board.TX, board.RX, baudrate=9600, timeout=10)

# for a computer, use the pyserial library for uart access

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=9600, timeout=10)

# If using I2C, we’ll create an I2C interface to talk to using default pins

#i2c = busio.I2C(board.SCL, board.SDA)

# Create a GPS module instance.

gps = adafruit_gps.GPS(uart, debug=False) # Use UART/pyserial

#gps = adafruit_gps.GPS_GtopI2C(i2c, debug=False) # Use I2C interface

# Initialize the GPS module by changing what data it sends and at what rate.

# These are NMEA extensions for PMTK_314_SET_NMEA_OUTPUT and

# PMTK_220_SET_NMEA_UPDATERATE but you can send anything from here to adjust

# the GPS module behavior:

# https://cdn-shop.adafruit.com/datasheets/PMTK_A11.pdf

# Turn on the basic GGA and RMC info (what you typically want)

gps.send_command(b‘PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Turn on just minimum info (RMC only, location):

#gps.send_command(b‘PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Turn off everything:

#gps.send_command(b‘PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Tuen on everything (not all of it is parsed!)

#gps.send_command(b‘PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Set update rate to once a second (1hz) which is what you typically want.

gps.send_command(b‘PMTK220,1000’)

# Or decrease to once every two seconds by doubling the millisecond value.

# Be sure to also increase your UART timeout above!

#gps.send_command(b‘PMTK220,2000’)

# You can also speed up the rate, but don‘t go too fast or else you can lose

# data during parsing. This would be twice a second (2hz, 500ms delay):

#gps.send_command(b’PMTK220,500‘)

# Main loop runs forever printing the location, etc. every second.

last_print = time.monotonic()

while True:

# Make sure to call gps.update() every loop iteration and at least twice

# as fast as data comes from the GPS unit (usually every second)。

# This returns a bool that’s true if it parsed new data (you can ignore it

# though if you don‘t care and instead look at the has_fix property)。

gps.update()

# Every second print out current location details if there’s a fix.

current = time.monotonic()

if current - last_print 》= 1.0:

last_print = current

if not gps.has_fix:

# Try again if we don‘t have a fix yet.

print(’Waiting for fix.。.‘)

continue

# We have a fix! (gps.has_fix is true)

# Print out details about the fix like location, date, etc.

print(’=‘ * 40) # Print a separator line.

print(’Fix timestamp: {}/{}/{} {:02}:{:02}:{:02}‘.format(

gps.timestamp_utc.tm_mon, # Grab parts of the time from the

gps.timestamp_utc.tm_mday, # struct_time object that holds

gps.timestamp_utc.tm_year, # the fix time. Note you might

gps.timestamp_utc.tm_hour, # not get all data like year, day,

gps.timestamp_utc.tm_min, # month!

gps.timestamp_utc.tm_sec))

print(’Latitude: {0:.6f} degrees‘.format(gps.latitude))

print(’Longitude: {0:.6f} degrees‘.format(gps.longitude))

print(’Fix quality: {}‘.format(gps.fix_quality))

# Some attributes beyond latitude, longitude and timestamp are optional

# and might not be present. Check if they’re None before trying to use!

if gps.satellites is not None:

print(‘# satellites: {}’.format(gps.satellites))

if gps.altitude_m is not None:

print(‘Altitude: {} meters’.format(gps.altitude_m))

if gps.speed_knots is not None:

print(‘Speed: {} knots’.format(gps.speed_knots))

if gps.track_angle_deg is not None:

print(‘Track angle: {} degrees’.format(gps.track_angle_deg))

if gps.horizontal_dilution is not None:

print(‘Horizontal dilution: {}’.format(gps.horizontal_dilution))

if gps.height_geoid is not None:

print(‘Height geo ID: {} meters’.format(gps.height_geoid))

# Simple GPS module demonstration.

# Will wait for a fix and print a message every second with the current location

# and other details.

import time

import board

import busio

import adafruit_gps

# Create a serial connection for the GPS connection using default speed and

# a slightly higher timeout (GPS modules typically update once a second)。

# These are the defaults you should use for the GPS FeatherWing.

# For other boards set RX = GPS module TX, and TX = GPS module RX pins.

uart = busio.UART(board.TX, board.RX, baudrate=9600, timeout=10)

# for a computer, use the pyserial library for uart access

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=9600, timeout=10)

# If using I2C, we‘ll create an I2C interface to talk to using default pins

#i2c = busio.I2C(board.SCL, board.SDA)

# Create a GPS module instance.

gps = adafruit_gps.GPS(uart, debug=False) # Use UART/pyserial

#gps = adafruit_gps.GPS_GtopI2C(i2c, debug=False) # Use I2C interface

# Initialize the GPS module by changing what data it sends and at what rate.

# These are NMEA extensions for PMTK_314_SET_NMEA_OUTPUT and

# PMTK_220_SET_NMEA_UPDATERATE but you can send anything from here to adjust

# the GPS module behavior:

# https://cdn-shop.adafruit.com/datasheets/PMTK_A11.pdf

# Turn on the basic GGA and RMC info (what you typically want)

gps.send_command(b’PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Turn on just minimum info (RMC only, location):

#gps.send_command(b’PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Turn off everything:

#gps.send_command(b’PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Tuen on everything (not all of it is parsed!)

#gps.send_command(b’PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Set update rate to once a second (1hz) which is what you typically want.

gps.send_command(b’PMTK220,1000‘)

# Or decrease to once every two seconds by doubling the millisecond value.

# Be sure to also increase your UART timeout above!

#gps.send_command(b’PMTK220,2000‘)

# You can also speed up the rate, but don’t go too fast or else you can lose

# data during parsing. This would be twice a second (2hz, 500ms delay):

#gps.send_command(b‘PMTK220,500’)

# Main loop runs forever printing the location, etc. every second.

last_print = time.monotonic()

while True:

# Make sure to call gps.update() every loop iteration and at least twice

# as fast as data comes from the GPS unit (usually every second)。

# This returns a bool that‘s true if it parsed new data (you can ignore it

# though if you don’t care and instead look at the has_fix property)。

gps.update()

# Every second print out current location details if there‘s a fix.

current = time.monotonic()

if current - last_print 》= 1.0:

last_print = current

if not gps.has_fix:

# Try again if we don’t have a fix yet.

print(‘Waiting for fix.。.’)

continue

# We have a fix! (gps.has_fix is true)

# Print out details about the fix like location, date, etc.

print(‘=’ * 40) # Print a separator line.

print(‘Fix timestamp: {}/{}/{} {:02}:{:02}:{:02}’.format(

gps.timestamp_utc.tm_mon, # Grab parts of the time from the

gps.timestamp_utc.tm_mday, # struct_time object that holds

gps.timestamp_utc.tm_year, # the fix time. Note you might

gps.timestamp_utc.tm_hour, # not get all data like year, day,

gps.timestamp_utc.tm_min, # month!

gps.timestamp_utc.tm_sec))

print(‘Latitude: {0:.6f} degrees’.format(gps.latitude))

print(‘Longitude: {0:.6f} degrees’.format(gps.longitude))

print(‘Fix quality: {}’.format(gps.fix_quality))

# Some attributes beyond latitude, longitude and timestamp are optional

# and might not be present. Check if they‘re None before trying to use!

if gps.satellites is not None:

print(’# satellites: {}‘.format(gps.satellites))

if gps.altitude_m is not None:

print(’Altitude: {} meters‘.format(gps.altitude_m))

if gps.speed_knots is not None:

print(’Speed: {} knots‘.format(gps.speed_knots))

if gps.track_angle_deg is not None:

print(’Track angle: {} degrees‘.format(gps.track_angle_deg))

if gps.horizontal_dilution is not None:

print(’Horizontal dilution: {}‘.format(gps.horizontal_dilution))

if gps.height_geoid is not None:

print(’Height geo ID: {} meters‘.format(gps.height_geoid))

在代碼運(yùn)行時(shí),它將每秒打印一條消息,或者更新它仍在等待GPS修復(fù):

注意:由于與內(nèi)置天線相比,PA1010D微型GPS模塊可能需要比其他帶有永恒天線的GPS模塊更通暢的天空視野。對(duì)于任何GPS模塊,如果您在獲取修復(fù)程序時(shí)遇到問(wèn)題,請(qǐng)嘗試將其移動(dòng)到更理想的位置。

一旦建立了修復(fù)程序,它將打印有關(guān)當(dāng)前位置和其他GPS數(shù)據(jù)的詳細(xì)信息:

讓我們更詳細(xì)地看一下代碼,以了解其工作原理。首先,該示例需要導(dǎo)入一些模塊,例如用于訪問(wèn)串行端口和其他硬件的內(nèi)置busio和board模塊:

下載:文件

復(fù)制代碼

import board

import busio

import time import board

import busio

import time

接下來(lái)導(dǎo)入GPS模塊:

下載:文件

復(fù)制代碼

import adafruit_gps import adafruit_gps

現(xiàn)在已創(chuàng)建了串行UART,并將其連接到GPS模塊將使用的串行端口引腳,這是用于與GPS模塊通信

下載:文件

復(fù)制代碼

# Define RX and TX pins for the board’s serial port connected to the GPS.

# These are the defaults you should use for the GPS FeatherWing.

# For other boards set RX = GPS module TX, and TX = GPS module RX pins.

RX = board.RX

TX = board.TX

# Create a serial connection for the GPS connection using default speed and

# a slightly higher timeout (GPS modules typically update once a second)。

uart = busio.UART(TX, RX, baudrate=9600, timeout=3000)

# for a computer, use the pyserial library for uart access

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=9600, timeout=3000) # Define RX and TX pins for the board‘s serial port connected to the GPS.

# These are the defaults you should use for the GPS FeatherWing.

# For other boards set RX = GPS module TX, and TX = GPS module RX pins.

RX = board.RX

TX = board.TX

# Create a serial connection for the GPS connection using default speed and

# a slightly higher timeout (GPS modules typically update once a second)。

uart = busio.UART(TX, RX, baudrate=9600, timeout=3000)

# for a computer, use the pyserial library for uart access

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=9600, timeout=3000)

一旦連接的GPS模塊可以使用UART對(duì)象,您就可以創(chuàng)建GPS解析類的實(shí)例。您需要將此類傳遞給UART實(shí)例,它將從內(nèi)部從與其連接的GPS模塊讀取新數(shù)據(jù):

下載:文件

復(fù)制代碼

gps = adafruit_gps.GPS(uart) gps = adafruit_gps.GPS(uart)

GPS示例代碼已解釋

在讀取GPS數(shù)據(jù)之前,該示例通過(guò)發(fā)送一些自定義的NMEA GPS命令來(lái)配置模塊數(shù)據(jù)量和速率。閱讀評(píng)論以查看一些用于調(diào)整數(shù)據(jù)速率和數(shù)據(jù)量的選項(xiàng),但是通常您希望默認(rèn)使用每秒一次的核心位置信息默認(rèn)值:

下載:文件

復(fù)制代碼

# Initialize the GPS module by changing what data it sends and at what rate.

# These are NMEA extensions for PMTK_314_SET_NMEA_OUTPUT and

# PMTK_220_SET_NMEA_UPDATERATE but you can send anything from here to adjust

# the GPS module behavior:

# https://cdn-shop.adafruit.com/datasheets/PMTK_A11.pdf

# Turn on the basic GGA and RMC info (what you typically want)

gps.send_command(b’PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Turn on just minimum info (RMC only, location):

#gps.send_command(b’PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Turn off everything:

#gps.send_command(b’PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Tuen on everything (not all of it is parsed!)

#gps.send_command(b’PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0‘)

# Set update rate to once a second (1hz) which is what you typically want.

gps.send_command(b’PMTK220,1000‘)

# Or decrease to once every two seconds by doubling the millisecond value.

# Be sure to also increase your UART timeout above!

#gps.send_command(b’PMTK220,2000‘)

# You can also speed up the rate, but don’t go too fast or else you can lose

# data during parsing. This would be twice a second (2hz, 500ms delay):

#gps.send_command(b‘PMTK220,500’) # Initialize the GPS module by changing what data it sends and at what rate.

# These are NMEA extensions for PMTK_314_SET_NMEA_OUTPUT and

# PMTK_220_SET_NMEA_UPDATERATE but you can send anything from here to adjust

# the GPS module behavior:

# https://cdn-shop.adafruit.com/datasheets/PMTK_A11.pdf

# Turn on the basic GGA and RMC info (what you typically want)

gps.send_command(b‘PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Turn on just minimum info (RMC only, location):

#gps.send_command(b‘PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Turn off everything:

#gps.send_command(b‘PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Tuen on everything (not all of it is parsed!)

#gps.send_command(b‘PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0’)

# Set update rate to once a second (1hz) which is what you typically want.

gps.send_command(b‘PMTK220,1000’)

# Or decrease to once every two seconds by doubling the millisecond value.

# Be sure to also increase your UART timeout above!

#gps.send_command(b‘PMTK220,2000’)

# You can also speed up the rate, but don‘t go too fast or else you can lose

# data during parsing. This would be twice a second (2hz, 500ms delay):

#gps.send_command(b’PMTK220,500‘)

如果需要,可以使用上面顯示的send_command功能將其他自定義命令發(fā)送到GPS模塊。您也不必?fù)?dān)心在命令中添加NMEA校驗(yàn)和,該函數(shù)將自動(dòng)執(zhí)行此操作(或者不自動(dòng)將add_checksum=False設(shè)置為參數(shù),并跳過(guò)校驗(yàn)和的添加)。

《現(xiàn)在,我們可以進(jìn)入一個(gè)主循環(huán),該循環(huán)不斷更新來(lái)自GPS模塊的數(shù)據(jù)并打印出狀態(tài)。此循環(huán)最重要的部分是調(diào)用GPS更新功能:

下載:文件

復(fù)制代碼

# Make sure to call gps.update() every loop iteration and at least twice

# as fast as data comes from the GPS unit (usually every second)。

# This returns a bool that’s true if it parsed new data (you can ignore it

# though if you don‘t care and instead look at the has_fix property)。

gps.update() # Make sure to call gps.update() every loop iteration and at least twice

# as fast as data comes from the GPS unit (usually every second)。

# This returns a bool that’s true if it parsed new data (you can ignore it

# though if you don‘t care and instead look at the has_fix property)。

gps.update()

就像注釋中提到的那樣,您必須在每次循環(huán)迭代中調(diào)用update,理想情況下必須多次調(diào)用次。每次調(diào)用update時(shí),它都會(huì)允許GPS庫(kù)代碼從GPS模塊讀取新數(shù)據(jù)并更新其狀態(tài)。由于GPS模塊始終在發(fā)送數(shù)據(jù),因此您必須注意不斷讀取數(shù)據(jù),否則可能會(huì)由于緩沖區(qū)已滿而丟失數(shù)據(jù)。

您可以檢查has_fix屬性,看看是否該模塊具有GPS定位功能,如果有,則可以讀取許多屬性,如latitude和longitude(以度為單位):

下載:文件

復(fù)制代碼

if not gps.has_fix:

# Try again if we don’t have a fix yet.

print(‘Waiting for fix.。.’)

continue

# We have a fix! (gps.has_fix is true)

# Print out details about the fix like location, date, etc.

print(‘=’ * 40) # Print a separator line.

print(‘Fix timestamp: {}/{}/{} {:02}:{:02}:{:02}’.format(

gps.timestamp_utc.tm_mon, # Grab parts of the time from the

gps.timestamp_utc.tm_mday, # struct_time object that holds

gps.timestamp_utc.tm_year, # the fix time. Note you might

gps.timestamp_utc.tm_hour, # not get all data like year, day,

gps.timestamp_utc.tm_min, # month!

gps.timestamp_utc.tm_sec))

print(‘Latitude: {} degrees’.format(gps.latitude))

print(‘Longitude: {} degrees’.format(gps.longitude))

print(‘Fix quality: {}’.format(gps.fix_quality))

# Some attributes beyond latitude, longitude and timestamp are optional

# and might not be present. Check if they‘re None before trying to use!

if gps.satellites is not None:

print(’# satellites: {}‘.format(gps.satellites))

if gps.altitude_m is not None:

print(’Altitude: {} meters‘.format(gps.altitude_m))

if gps.track_angle_deg is not None:

print(’Speed: {} knots‘.format(gps.speed_knots))

if gps.track_angle_deg is not None:

print(’Track angle: {} degrees‘.format(gps.track_angle_deg))

if gps.horizontal_dilution is not None:

print(’Horizontal dilution: {}‘.format(gps.horizontal_dilution))

if gps.height_geoid is not None: if not gps.has_fix:

# Try again if we don’t have a fix yet.

print(‘Waiting for fix.。.’)

continue

# We have a fix! (gps.has_fix is true)

# Print out details about the fix like location, date, etc.

print(‘=’ * 40) # Print a separator line.

print(‘Fix timestamp: {}/{}/{} {:02}:{:02}:{:02}’.format(

gps.timestamp_utc.tm_mon, # Grab parts of the time from the

gps.timestamp_utc.tm_mday, # struct_time object that holds

gps.timestamp_utc.tm_year, # the fix time. Note you might

gps.timestamp_utc.tm_hour, # not get all data like year, day,

gps.timestamp_utc.tm_min, # month!

gps.timestamp_utc.tm_sec))

print(‘Latitude: {} degrees’.format(gps.latitude))

print(‘Longitude: {} degrees’.format(gps.longitude))

print(‘Fix quality: {}’.format(gps.fix_quality))

# Some attributes beyond latitude, longitude and timestamp are optional

# and might not be present. Check if they‘re None before trying to use!

if gps.satellites is not None:

print(’# satellites: {}‘.format(gps.satellites))

if gps.altitude_m is not None:

print(’Altitude: {} meters‘.format(gps.altitude_m))

if gps.track_angle_deg is not None:

print(’Speed: {} knots‘.format(gps.speed_knots))

if gps.track_angle_deg is not None:

print(’Track angle: {} degrees‘.format(gps.track_angle_deg))

if gps.horizontal_dilution is not None:

print(’Horizontal dilution: {}‘.format(gps.horizontal_dilution))

if gps.height_geoid is not None:

注意,在讀取之前,已將某些屬性(如altitude_m)檢查為None。這是插入代碼的明智選擇,因?yàn)橛袝r(shí)GPS模塊不會(huì)發(fā)送這些屬性。如果模塊未發(fā)送屬性,則會(huì)為該屬性提供None/null值,并且在Python中嘗試打印或讀取該屬性將失敗。 latitude,longitude和timestamp的核心屬性通常總是可用的(如果您按原樣使用示例),但是如果您使用以下命令關(guān)閉了這些輸出,則它們可能不可用一個(gè)自定義的NMEA命令!

這是用CircuitPython代碼讀取GPS位置的全部?jī)?nèi)容!

CircuitPython數(shù)據(jù)記錄

數(shù)據(jù)記錄示例

GPS的另一個(gè)便捷任務(wù)是將GPS模塊的所有原始輸出記錄到文件中。如果要將GPS數(shù)據(jù)導(dǎo)入到可以處理原始NMEA句子的工具(如Google Earth)中,這將非常有用。您可以使用CircuitPython非常輕松地執(zhí)行此數(shù)據(jù)記錄。

要存儲(chǔ)數(shù)據(jù),您需要選擇以下兩個(gè)選項(xiàng)之一:

將SD卡固定器連接到主板的SPI總線,或者使用內(nèi)置SD卡座的板,例如Feather M0 Adalogger。推薦的方法,因?yàn)樗鼮槟峁┝撕芏啻鎯?chǔ)數(shù)據(jù)的空間,并且您可以輕松地將數(shù)據(jù)復(fù)制到

將數(shù)據(jù)存儲(chǔ)在電路板的內(nèi)部文件系統(tǒng)中。這需要更多的設(shè)置,但是允許您保存到CircuitPython板的內(nèi)部文件系統(tǒng)上的文件中,緊挨代碼和其他數(shù)據(jù)文件的駐留位置。這是較為有限的,因?yàn)楦鶕?jù)您的主板,您可能只有幾個(gè)千字節(jié)或幾兆字節(jié)的可用空間,并且GPS句子將迅速累加(在記錄幾個(gè)小時(shí)內(nèi)輕松填充幾兆字節(jié))。

安裝SD卡庫(kù)

如果要在SD卡上存儲(chǔ)數(shù)據(jù),您必須確保SD卡已連接至開發(fā)板上,并且已安裝Adafruit SD卡庫(kù)。幸運(yùn)的是,有完整的指南可供您學(xué)習(xí),以了解連接SD卡和安裝必要的庫(kù)的過(guò)程。請(qǐng)務(wù)必仔細(xì)按照指南進(jìn)行操作,以使卡已連接并已安裝了磁帶庫(kù),并且可以確認(rèn)能夠從Python提示符下手動(dòng)將數(shù)據(jù)寫入卡。

啟用內(nèi)部文件系統(tǒng)寫入

如果要在內(nèi)部文件系統(tǒng)上存儲(chǔ)數(shù)據(jù),則必須仔細(xì)按照CPU溫度記錄指南中的步驟進(jìn)行操作,以允許寫入內(nèi)部存儲(chǔ)。如果要寫入SD卡,請(qǐng)?zhí)^(guò)這些步驟,然后繼續(xù)查看下面的數(shù)據(jù)記錄代碼。 在板上編輯 boot.py (如果不存在則創(chuàng)建它)并添加以下行:

下載:文件

復(fù)制代碼

import digitalio

import board

import storage

switch = digitalio.DigitalInOut(board.D5)

switch.direction = digitalio.Direction.INPUT

switch.pull = digitalio.Pull.UP

# If the D5 is connected to ground with a wire

# you can edit files over the USB drive again.

storage.remount(“/”, not switch.value) import digitalio

import board

import storage

switch = digitalio.DigitalInOut(board.D5)

switch.direction = digitalio.Direction.INPUT

switch.pull = digitalio.Pull.UP

# If the D5 is connected to ground with a wire

# you can edit files over the USB drive again.

storage.remount(“/”, not switch.value)

記住,一旦重新掛載(“/”),您將無(wú)法再通過(guò)USB驅(qū)動(dòng)器編輯代碼!這意味著您無(wú)法編輯 boot.py ,這有點(diǎn)難題。因此,我們將 boot.py 配置為基于開關(guān)或什至只是鱷魚夾接地而選擇性地將內(nèi)部文件系統(tǒng)安裝為可寫狀態(tài)。就像CPU溫度指南顯示的一樣。在此示例中,我們使用 D5 ,但選擇任何可用的引腳。

此代碼將在電路板啟動(dòng)時(shí)以及是否將其接地時(shí)查看D5數(shù)字輸入。鱷魚夾或電線,例如,將其從D5連接到電路板接地),它將禁用內(nèi)部文件系統(tǒng)寫操作,并允許您照常通過(guò)USB驅(qū)動(dòng)器編輯代碼。卸下鱷魚夾,重置板,然后 boot.py 會(huì)切換為以可寫方式安裝內(nèi)部文件系統(tǒng),以便您可以再次將映像記錄到該文件系統(tǒng)(但不要編寫任何代碼!)。

請(qǐng)記住,當(dāng)您啟用USB驅(qū)動(dòng)器寫入(通過(guò)在啟動(dòng)時(shí)將D5接地)時(shí),您無(wú)法將文件寫入內(nèi)部文件系統(tǒng)以及您的 main.py 中的任何代碼嘗試這樣做(如下面的示例)將失敗。編輯代碼時(shí)請(qǐng)記住這一點(diǎn)-修改代碼后,您需要?jiǎng)h除鱷魚夾,將板重置為重新啟用內(nèi)部文件系統(tǒng)寫操作,然后查看程序的輸出。

如果遇到困難,可以按照https://learn.adafruit.com/cpu-temperature-如果需要返回并編輯代碼,請(qǐng)使用電路日志記錄python/write-to-the-filesystem從REPL中刪除boot.py!

數(shù)據(jù)記錄示例代碼

GPS庫(kù)示例具有數(shù)據(jù)記錄。 py 文件,您可以將其編輯并另存為 main.py 在板上:

下載:Project Zip 或 gps_computer_datalogging.py | 在Github上查看

復(fù)制代碼

Temporarily unable to load content:

Temporarily unable to load content:

默認(rèn)情況下,此示例希望將GPS NMEA句子記錄到內(nèi)部存儲(chǔ)系統(tǒng)上的文件中,該文件位于/gps.txt 。每次示例開始運(yùn)行時(shí),新句子都會(huì)添加到文件末尾。

如果您想改為寫入SD卡,請(qǐng)注意不要注釋注釋中提到的相應(yīng)行:

下載:文件

復(fù)制代碼

# Path to the file to log GPS data. By default this will be appended to

# which means new lines are added at the end and all old data is kept.

# Change this path to point at internal storage (like ’/gps.txt‘) or SD

# card mounted storage (’/sd/gps.txt‘) as desired.

#LOG_FILE = ’/gps.txt‘ # Example for writing to internal path /gps.txt

LOG_FILE = ’/sd/gps.txt‘ # Example for writing to SD card path /sd/gps.txt # Path to the file to log GPS data. By default this will be appended to

# which means new lines are added at the end and all old data is kept.

# Change this path to point at internal storage (like ’/gps.txt‘) or SD

# card mounted storage (’/sd/gps.txt‘) as desired.

#LOG_FILE = ’/gps.txt‘ # Example for writing to internal path /gps.txt

LOG_FILE = ’/sd/gps.txt‘ # Example for writing to SD card path /sd/gps.txt

以及下面的內(nèi)容:

都應(yīng)取消注釋,并與上面相同。這將配置代碼以將GPS NMEA數(shù)據(jù)寫入/sd/gps.txt 文件,并將新數(shù)據(jù)追加到文件末尾。

示例運(yùn)行方式為板上的 main.py 打開串行REPL,您應(yīng)該看到原始的NMEA語(yǔ)句已打印出來(lái):

檢查 gps.txt 文件(位于根目錄下或/sd路徑,具體取決于您如何設(shè)置示例)在文本編輯器中,您將看到相同的原始NMEA語(yǔ)句:

太棒了!這就是使用GPS模塊和CircuitPython對(duì)NMEA句子進(jìn)行基本數(shù)據(jù)記錄的全部?jī)?nèi)容!

內(nèi)置日志記錄

MTK3339的優(yōu)點(diǎn)之一是內(nèi)置的數(shù)據(jù)記錄器。這種基本的數(shù)據(jù)記錄功能可以將日期,時(shí)間,緯度,經(jīng)度和高度數(shù)據(jù)存儲(chǔ)到內(nèi)部的64K閃存芯片中。它不是高分辨率記錄器-修復(fù)后僅每15秒記錄一次-但對(duì)于99%的想要跟蹤位置的項(xiàng)目,這可能是一種低功耗的數(shù)據(jù)記錄方式-無(wú)需SD卡或其他EEPROM需要!它最多可以存儲(chǔ)16個(gè)小時(shí)的數(shù)據(jù)。

GPS模塊確實(shí)要求微控制器通過(guò)請(qǐng)求啟動(dòng)記錄儀來(lái)“啟動(dòng)”記錄儀。如果斷電,則需要重新啟動(dòng)。如果閃存中已經(jīng)有一些數(shù)據(jù),則將創(chuàng)建新的跟蹤(這樣就不會(huì)丟失舊數(shù)據(jù)),如果空間用完了,它只會(huì)停止并且不會(huì)覆蓋舊數(shù)據(jù)。盡管有這種煩惱,但它仍然是一個(gè)非常不錯(cuò)的附加功能,我們提供了一些庫(kù)支持來(lái)幫助您使用它。

有關(guān)更多詳細(xì)信息,請(qǐng)查閱LOCUS(內(nèi)置數(shù)據(jù)記錄系統(tǒng))用戶指南

首先,我們應(yīng)該嘗試運(yùn)行記錄器。打開文件→示例→Adafruit_GPS→locus_start 草圖。這將演示如何啟動(dòng)記錄器(稱為L(zhǎng)OCUS)

關(guān)鍵部分在這里:

下載:文件

復(fù)制代碼

Serial.print(“STARTING LOGGING.。..”);

if (GPS.LOCUS_StartLogger())

Serial.println(“ STARTED!”);

else

Serial.println(“ no response :(”);

delay(1000); Serial.print(“STARTING LOGGING.。..”);

if (GPS.LOCUS_StartLogger())

Serial.println(“ STARTED!”);

else

Serial.println(“ no response :(”);

delay(1000);

,您應(yīng)該啟動(dòng)記錄儀,然后檢查響應(yīng):

記錄狀態(tài)

GPS可以記錄日志,您可以加載狀態(tài)草圖,這還將為您提供更多數(shù)據(jù)。上載文件→示例→Adafruit_GPS→locus_status

此輸出為您提供了更多信息。第一個(gè)條目是日志號(hào)。這是內(nèi)存中有多少日志跟蹤。每次啟動(dòng)并保存數(shù)據(jù)時(shí),都會(huì)創(chuàng)建一個(gè)新日志。完全停止意味著記錄器一旦內(nèi)存用完,它將停止。接下來(lái)的輸出表明我們僅在修復(fù)數(shù)據(jù)期間并以設(shè)置的間隔進(jìn)行記錄,間隔延遲為15秒。我們不是根據(jù)距離或速度進(jìn)行記錄。當(dāng)前狀態(tài)為L(zhǎng)OGGING(活動(dòng)),還有我們存儲(chǔ)的記錄數(shù)。每條記錄都是帶有時(shí)間戳的位置。我們每15秒記錄一次,您可以在此處看到記錄從344增加到345的過(guò)程。最后,我們可以看到內(nèi)部閃存的使用量,目前只有4%

在實(shí)際使用中,您可能希望開始記錄,然后讓微控制器進(jìn)入睡眠狀態(tài)保留電源,有時(shí)會(huì)醒來(lái)以檢查日志記錄狀態(tài)。

下載數(shù)據(jù)

最后,完成記錄后,我們需要提取數(shù)據(jù)。為此,我們需要首先從閃存中獲取原始數(shù)據(jù),然后對(duì)語(yǔ)句進(jìn)行解碼。將文件→示例→Adafruit_GPS→locus_dump 上傳到Arduino,并打開串行監(jiān)視器

請(qǐng)注意:請(qǐng)具有2K RAM緩沖區(qū)的Arduino處理64KB FLASH數(shù)據(jù)并將其從GPS吐出有時(shí)會(huì)給處理器增加負(fù)擔(dān)。如果遇到打h,請(qǐng)查看下面的GPS工具說(shuō)明

將所有文本復(fù)制并粘貼到“-”之后(以 $ PMTKLOX,0,86 * 67 開頭 $ PMTK001,622,3 * 36 ),然后將其粘貼到此頁(yè)面上的框中

,您可以嘗試使用該工具請(qǐng)捐贈(zèng)給社區(qū)!

GPS工具

如果您在使用Arduino/javascript工具時(shí)遇到困難,也可以嘗試使用GPS工具。該工具僅在Windows下運(yùn)行,但功能非常強(qiáng)大。

將GPS模塊連接到Arduino(與Direct Wiring示例連接),F(xiàn)TDI適配器或其他TTL轉(zhuǎn)換器,然后下載GPS工具-通過(guò)COM連接到GPS Arduino/FTDI/TTL電纜的端口。然后,您可以查詢,轉(zhuǎn)儲(chǔ)和刪除日志存儲(chǔ)器

資源

數(shù)據(jù)表

MTK3329/MTK3339命令集表,用于更改固定數(shù)據(jù)速率,波特率,句子輸出等!

PMTK“完整”數(shù)據(jù)表(與上面類似,但具有更多命令)

PA6B(MTK3329)GPS模塊本身的數(shù)據(jù)表

PA6C(MTK3339)GPS模塊本身的數(shù)據(jù)表

PA6H(MTK3339)GPS模塊本身的數(shù)據(jù)表

MT3339 GPS PC工具(僅限Windows)和PC工具手冊(cè)

LOCUS內(nèi)置記錄器的示例代碼和規(guī)格表

LOCUS(內(nèi)置內(nèi)置數(shù)據(jù)記錄系統(tǒng))用戶指南

迷你GPS工具(僅適用于Windows)

更多閱讀:

Trimble的GPS教程

Garmin的GPS教程

用于Arduino的Adafruit GPS庫(kù)

https://github.com/adafruit/Adafruit-GPS -Library/

用于AGPS的EPO文件

EPO文件的數(shù)據(jù)格式

MTK_EPO_Nov_12_2014.zip

常見問(wèn)題解答

終極GPS可以用于高海拔嗎?我怎么知道?

2013年以上出廠的模塊(許多2012年下半年開始安裝)固件已通過(guò)40公里GPS工廠的仿真測(cè)試。

您可以通過(guò)發(fā)送固件查詢命令 $ PMTK605 * 31 來(lái)告訴您擁有什么固件(您可以使用echo演示將自定義語(yǔ)句發(fā)送到GPS)

如果您的模塊回復(fù)了 AXN_2.10_3339_2012072601 5223 ,這意味著您具有版本#5223,這是40Km支持的固件版本。如果數(shù)量大于5223,則其數(shù)量甚至更近,并且還應(yīng)包括40Km支持

但是,這些模塊不是專門為高空氣球使用而設(shè)計(jì)的。人們已經(jīng)成功使用了它們,但是由于我們(在Adafruit)尚未對(duì)它們進(jìn)行高空使用的親自測(cè)試,因此我們不以任何方式保證它們適合高海拔使用。

請(qǐng)不要要求我們“證明”它們適合高海拔使用,我們沒有任何辦法

如果您想使用GPS測(cè)量高海拔,請(qǐng)找到可以保證/保證高空功能的模塊

終極GPS是否受2019周轉(zhuǎn)期問(wèn)題影響?

終極GPS( 20110922_GTOP_EVK01_A2.10 和更高-在2011年以后出售的任何產(chǎn)品)都經(jīng)過(guò)了測(cè)試,直到2019年都可以正常工作。

它們沒有通過(guò)2038過(guò)渡測(cè)試,因此您可能需要從現(xiàn)在到2038之間更新固件。這不會(huì)影響他的2019年展期(每20年有一次)

好,我想要最新的固件!

此處是5632固件的二進(jìn)制文件,您可以使用此工具通過(guò)FTDI或USB-TTL電纜(或直接接線)上傳FTDI)。我們沒有更新固件的教程,如果您更新固件并以某種方式使GPS變磚,我們將不提供替代產(chǎn)品!在執(zhí)行更新過(guò)程之前,請(qǐng)記住這一點(diǎn)!

我修改了示例代碼,但我的GPS NMEA句子都亂碼且不完整!

我們使用SoftwareSerial從GPS讀取數(shù)據(jù),這是對(duì)“ bitbang” UART的支持。它在Arduino上不是很好,并且可以工作,但是添加太多的delay()且未足夠調(diào)用GPS數(shù)據(jù)解析器將導(dǎo)致其阻塞數(shù)據(jù)。

如果您使用的是Leonardo(或Micro/Flora/ATmega32u4)或Mega,請(qǐng)考慮使用HardwareSerial端口而不是SoftwareSerial!

我的GPS正在給我數(shù)據(jù),但位置不正確!

由于GPS是工作正常,但“相距5英里”-這是因?yàn)樗鼈儧]有正確解析經(jīng)緯度數(shù)據(jù)。盡管有外觀,但是地理位置數(shù)據(jù)并非以十進(jìn)制度為單位。格式為度和分鐘,格式如下:緯度:DDMM.MMMM(前兩個(gè)字符為度。)經(jīng)度:DDDMM.MMMM(前三個(gè)字符為度。)

為什么我無(wú)法使GPS以10Hz的頻率輸出?

GPS的默認(rèn)波特率為9600-這只能以10Hz的頻率發(fā)送RMC消息。如果要輸出更多數(shù)據(jù),可以提高GPS波特率(例如,達(dá)到57600)或采用2或5Hz的頻率。您希望GPS輸出更多數(shù)據(jù),GPS波特率,Arduino緩沖區(qū)/處理能力和更新率之間存在權(quán)衡!

可能需要進(jìn)行實(shí)驗(yàn)才能獲得最佳結(jié)果。我們建議RMC僅在10Hz進(jìn)行測(cè)試,因?yàn)樗呀?jīng)過(guò)測(cè)試。

為什么不能使用Adafruit RTC庫(kù)設(shè)置RTC?

GPS中的實(shí)時(shí)時(shí)鐘不可“寫入”,也無(wú)法從Arduino訪問(wèn)。它僅在GPS中!一旦安裝了電池,并且GPS首次從衛(wèi)星接收數(shù)據(jù),它將設(shè)置內(nèi)部RTC。然后,只要安裝了電池,就可以照常從GPS讀取時(shí)間。即使沒有適當(dāng)?shù)摹?gps修復(fù)”,時(shí)間也將是正確的。

時(shí)區(qū)無(wú)法更改,因此您必須基于UTC計(jì)算本地時(shí)間!

所有GPS模塊是否同時(shí)發(fā)出PPS脈沖?

在理想條件下,GPS模塊在每個(gè)GPS秒開始的10ns內(nèi)發(fā)出PPS信號(hào)。

實(shí)際上,每個(gè)GPS模塊與GPS時(shí)鐘系統(tǒng)的同步取決于修復(fù)的質(zhì)量,GPS模塊修復(fù)了多長(zhǎng)時(shí)間以及一組該模塊用于修復(fù)的衛(wèi)星。我們已經(jīng)觀察到剛剛獲得修復(fù)的模塊之間的偏移約為300ns,在模塊具有良好的修復(fù)后,偏移減少到不到100ns(模塊用于修復(fù)的衛(wèi)星的信噪比高于20)持續(xù)十分鐘。

當(dāng)兩個(gè)GPS模塊使用同一組衛(wèi)星進(jìn)行定位時(shí),一旦模塊獲得定位,PPS脈沖之間的偏移就小于30ns。

如何讀取Ultimate GPS USB上的PPS信號(hào)?

PPS線連接到串行端口 RI (環(huán)形指示器)引腳。您可以使用串行端口接口代碼來(lái)閱讀。例如,這是使用pyserial的Python版本:

import serial

ser = serial.Serial(’/dev/ttyS34‘) # open serial port

print(ser.name) # check which port was really used

last_ri = ser.ri

while True:

if ser.ri != last_ri:

last_ri = ser.ri

if last_ri:

print(“ ---------- Pulse high ----------”)

else:

print(“ ---------- Pulse low ----------”)

if ser.in_waiting:

print(ser.read(ser.in_waiting).decode(’utf-8‘), end=“”)

下載

文件

MTK3329/MTK3339命令集表,用于更改固定數(shù)據(jù)速率,波特率,句子輸出等!

LOCUS(內(nèi)置數(shù)據(jù)記錄系統(tǒng))用戶指南

PA6B(MTK3329)GPS模塊本身的數(shù)據(jù)表-在該模塊的版本1中使用

PA6C(MTK3339)GPS模塊本身的數(shù)據(jù)表-在該模塊的版本2中使用

PA6H(MTK3339)GPS模塊本身的數(shù)據(jù)表-在該模塊的版本3中使用

MT3339 GPS PC工具(僅限Windows)和PC工具手冊(cè)

小型GPS工具(僅限Windows)

GitHub上的EagleCAD PCB文件

Adafruit Fritzing庫(kù)中的Fritzing對(duì)象

最終GPS v3原理圖

U精確的GPS加工打印

英寸尺寸

最終GPS USB原理圖

最終GPS USB構(gòu)造打印

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • gps
    gps
    +關(guān)注

    關(guān)注

    22

    文章

    2895

    瀏覽量

    166196
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    新品發(fā)布 | TOSUN正式推出GPS轉(zhuǎn)CAN FD模塊產(chǎn)品,為自動(dòng)駕駛提供數(shù)據(jù)支持

    正式推出一款GPS轉(zhuǎn)CAN/CANFD模塊產(chǎn)品,為自動(dòng)駕駛提供數(shù)據(jù)支持。TOSUN01產(chǎn)品簡(jiǎn)介TM2101可將GPS、IMU信息轉(zhuǎn)成CAN/CANFD報(bào)文來(lái)傳輸,輕松
    的頭像 發(fā)表于 12-02 01:01 ?98次閱讀
    新品發(fā)布 | TOSUN正式推出<b class='flag-5'>GPS</b>轉(zhuǎn)CAN FD<b class='flag-5'>模塊</b>產(chǎn)品,為自動(dòng)駕駛提供數(shù)據(jù)支持

    杭州中科微AT6558R北斗定位芯片 GPS雙模定位模塊芯片

    AT6558原裝北斗GPS雙模定位模塊芯片演示板QFN40芯片尺寸:5mm×5mm×0.9mm,可能配備另顆芯片AT2659 L1 頻段衛(wèi)星導(dǎo)航低噪聲放大器芯片 是一款高性能BDS/GNSS多模衛(wèi)星
    的頭像 發(fā)表于 11-06 11:04 ?323次閱讀

    芯伯樂(lè)產(chǎn)品在GPS定位模塊上的設(shè)計(jì)方案

    模塊方框圖01產(chǎn)品介紹及應(yīng)用ProductIntroductionandApplicationGPS是英文GlobalPositioningSystem(全球定位系統(tǒng))的簡(jiǎn)稱。利用GPS定位衛(wèi)星,在
    的頭像 發(fā)表于 10-15 08:07 ?212次閱讀
    芯伯樂(lè)產(chǎn)品在<b class='flag-5'>GPS</b>定位<b class='flag-5'>模塊</b>上的設(shè)計(jì)方案

    【新品】精準(zhǔn)體驗(yàn)!GNSS多模衛(wèi)星定位模塊GPS+北斗等多系統(tǒng)

    E108-GN03系列和E108-GN04系列是高性能、高集成度、低功耗、低成本的多模衛(wèi)星定位導(dǎo)航模塊。E108-GN03系列基于AT6558R方案,支持BDS/GPS/GLON
    的頭像 發(fā)表于 10-11 08:03 ?427次閱讀
    【新品】精準(zhǔn)體驗(yàn)!GNSS多模衛(wèi)星定位<b class='flag-5'>模塊</b>,<b class='flag-5'>GPS</b>+北斗等多系統(tǒng)

    X1G005441020416晶振昂首挺進(jìn)GPS模塊高端市場(chǎng)

    全球定位系統(tǒng)(GPS模塊在現(xiàn)代通信、導(dǎo)航和定位技術(shù)中扮演著重要角色。高精度和高穩(wěn)定性的晶振是確保GPS模塊性能的關(guān)鍵。EPSON的TG2016SMN X1G00544102041
    發(fā)表于 08-02 16:31 ?0次下載

    基于STM32單片機(jī)的GPS定位系統(tǒng)設(shè)計(jì)

    本次設(shè)計(jì)的定位系統(tǒng),是以STM32單片機(jī)作為核心控制器,可以控制 GPS 定位模塊對(duì)經(jīng)緯度信息進(jìn)行采集,可以對(duì)安全值進(jìn)行設(shè)定,當(dāng)超過(guò)安全范圖后會(huì)控制無(wú)線通信模塊發(fā)送報(bào)警信息給用戶,同時(shí)會(huì)將實(shí)時(shí)位置在手機(jī)端進(jìn)行查看。
    的頭像 發(fā)表于 06-24 09:50 ?2465次閱讀
    基于STM32單片機(jī)的<b class='flag-5'>GPS</b>定位系統(tǒng)設(shè)計(jì)

    車載車庫(kù)GPS信號(hào)屏蔽器:讓GPS追蹤不再困擾

    深圳特信電子|車載車庫(kù)GPS信號(hào)屏蔽器:讓GPS追蹤不再困擾
    的頭像 發(fā)表于 06-17 08:59 ?661次閱讀

    支持 GPS,基于 Arduino 的墨水屏?xí)r鐘(文末可下載完整文件)

    Adafruit MS8607 壓力/濕度/溫度傳感器 × 1 帶有9600 Baud TX 的 GPS 模塊 × 1 電路板 × 1 按鈕開關(guān)(用來(lái)改變 UTC 時(shí)間偏移和顯示偏好) × 若干 制作外殼
    發(fā)表于 05-31 11:34

    PNT-SG3FS-TR Lantronix品牌 GNSS/GPS模塊

    PNT-SG3FS是一個(gè)全球?qū)Ш叫l(wèi)星系統(tǒng)(GNSS)獨(dú)立模塊,具有 ST Microelectronics的集成Teseo III接收器。多星座接收機(jī)可以 通過(guò)GPS L1C/A、北斗B1、伽利略
    發(fā)表于 05-05 08:25

    UWB定位技術(shù)與GPS定位區(qū)別及應(yīng)用

    GPS定位技術(shù)是一種基于衛(wèi)星定位系統(tǒng)的全球定位技術(shù),其主要優(yōu)勢(shì)在于可以覆蓋全球范圍,并且能夠提供相對(duì)較為精確的定位信息,一般達(dá)到米級(jí)或十米級(jí)的精度。GPS模塊適用于室外環(huán)境,如車輛導(dǎo)航、航空航海、戶外運(yùn)動(dòng)等領(lǐng)域。
    的頭像 發(fā)表于 04-24 16:52 ?1915次閱讀
    UWB定位技術(shù)與<b class='flag-5'>GPS</b>定位區(qū)別及應(yīng)用

    傳音發(fā)布6.55英寸卷軸屏概念手機(jī)Tecno Phantom Ultimate

    據(jù)了解,Phantom Ultimate在正常模式下,其6.55寸屏幕可左右延伸,具有單驅(qū)動(dòng)電機(jī)系統(tǒng),用戶只需輕點(diǎn)右側(cè)頂部按鍵,即可在1.3秒內(nèi)拓寬手機(jī)屏幕至7.11寸。
    的頭像 發(fā)表于 02-29 14:12 ?1182次閱讀

    CAN FD版本震撼發(fā)布!全新PCAN-GPS FD模塊,重新定義智能連接!

    導(dǎo)讀:科技飛速發(fā)展的今天,智能連接已成為各行業(yè)追求的焦點(diǎn)。虹科PCAN-GPS FD模塊集成了全球定位系統(tǒng)(GPS)與CAN FD技術(shù),不僅在定位方面表現(xiàn)出色,更在數(shù)據(jù)傳輸上實(shí)現(xiàn)了質(zhì)的飛躍。在汽車
    的頭像 發(fā)表于 01-24 09:44 ?824次閱讀
    CAN FD版本震撼發(fā)布!全新PCAN-<b class='flag-5'>GPS</b> FD<b class='flag-5'>模塊</b>,重新定義智能連接!

    什么是gps定位? gps定位放線的步驟有哪些

    GPS定位是一種通過(guò)全球衛(wèi)星定位系統(tǒng)(GPS)來(lái)確定地理位置的技術(shù)。GPS定位系統(tǒng)是由一組空間分布的衛(wèi)星、地面控制站和用戶接收設(shè)備組成。用戶接收設(shè)備通過(guò)接收衛(wèi)星發(fā)出的信號(hào),并根據(jù)信號(hào)的時(shí)間延遲來(lái)確定
    的頭像 發(fā)表于 01-22 15:48 ?6594次閱讀

    如何讓Adafruit 320x240 IPS TFT顯示屏在PSoC上運(yùn)行?

    我有一臺(tái) Adafruit 320x240 IPS TFT 顯示屏,希望它能夠使用我的 PSoC 4200 主板繪制圖像。 來(lái)自 Adafruit 的代碼庫(kù)是為 Arduino 設(shè)計(jì)的,我不確定如何讓它在 PSoC 上運(yùn)行。
    發(fā)表于 01-22 06:33

    gps衛(wèi)星信號(hào)的組成原理

    GPS全稱為Global Positioning System,就是全球定位系統(tǒng)。它由一系列的衛(wèi)星和地面控制站組成,用來(lái)提供準(zhǔn)確的地理位置和時(shí)間信息。GPS衛(wèi)星信號(hào)的組成原理涉及時(shí)間測(cè)量、衛(wèi)星軌道
    的頭像 發(fā)表于 01-09 10:35 ?1595次閱讀
    主站蜘蛛池模板: jk制服喷水| 亚洲一区二区三区乱码在线欧洲| 国产午夜免费不卡精品理论片| 亚洲人成网站在线播放| 美国大臿蕉香蕉大视频| 成人永久免费视频网站在线观看| 午夜向日葵视频在线观看| 久久久久久久99精品免费观看| 97免费视频观看| 受被三个攻各种道具PLAY| 极品少妇高潮啪啪AV无码吴梦梦| 99pao成人国产永久免费视频| 少妇内射视频播放舔大片| 精品久久久久久久国产潘金莲| 99精彩视频在线观看| 我要色导航| 久青草国产在线视频亚瑟影视| 成人国产三级在线播放| 亚洲日本欧美国产在线视| 欧美成人国产| 国产在线不卡| 99热这里只有精品视频2| 校花在公车上被内射好舒服| 美女穿丝袜被狂躁动态图| 国产成人a一在线观看| 在线视频a| 三级视频网站| 久久影院一区| 福利啪啪吧| 中文字幕一区中文亚洲| 天天操人人射| 美女被抽插到哭内射视频免费| 国产成人免费片在线观看| 中文字幕一区二区三区在线不卡| 色宅男看片午夜大片免费看| 久久性综合亚洲精品电影网| 国产成人精品免费青青草原app | 国产亚洲精品网站在线视频| 97色在线视频| 亚洲黄网站wwwwww| 青柠在线观看视频在线高清|