概述
我們?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固定輸出
固定狀態(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ī)格:
衛(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
-
gps
+關(guān)注
關(guān)注
22文章
2895瀏覽量
166196
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論