基于物聯(lián)網(wǎng)的GPS跟蹤,在ThingSpeak上使用NodeMCU和Matlab可視化
掃描二維碼
隨時隨地手機(jī)看文章
有沒有想過你的手機(jī)軟件是如何在駕駛時使用GPS定位你的位置的?這個問題的答案是,嵌入你手機(jī)中的一個小型GPS模塊與衛(wèi)星網(wǎng)絡(luò)通信,以確定你手機(jī)的位置。在這個項(xiàng)目中,我們將了解GPS模塊是如何工作的,我們將了解一種流行的GPS接收器模塊NEO 6M,該模塊與手機(jī)中使用的模塊大小不同,但工作原理相同。通過使用GPS接收器模塊和Thingspeak物聯(lián)網(wǎng)平臺提供的信息,我們將嘗試在圖表上繪制數(shù)據(jù)。除此之外,我們還將通過使用Thingspeak- Matlab可視化中的inbuild函數(shù)生成URL來可視化衛(wèi)星視圖地圖上的位置(需要編碼,在代碼說明部分進(jìn)行解釋)。通過使用這個URL,任何瀏覽器的任何人都可以跟蹤它所連接的GPS設(shè)備的位置。如果你正在尋找一個簡單的解決方案,你也可以看看NodeMCU GPS Webserver項(xiàng)目,它也非常類似于我們即將構(gòu)建的。
組件的要求
?NEO 6M GPS模塊
?節(jié)點(diǎn)單片機(jī)
?連接電線
GPS模塊是如何工作的?
GPS是全球定位系統(tǒng)的縮寫,是一種全球性的無線電導(dǎo)航系統(tǒng)。為了跟蹤設(shè)備的位置,GPS跟蹤系統(tǒng)使用全球?qū)Ш叫l(wèi)星系統(tǒng)(GNSS)網(wǎng)絡(luò)。該網(wǎng)絡(luò)由一系列衛(wèi)星組成,這些衛(wèi)星使用微波信號傳輸數(shù)據(jù),這些數(shù)據(jù)將被GPS接收器模塊接收。
GPS衛(wèi)星星座由24顆繞地球運(yùn)行的GPS衛(wèi)星組成。這些衛(wèi)星的定位方式是,在任何時候,至少有6顆衛(wèi)星處于地球表面任何地方的視線范圍內(nèi)。當(dāng)涉及到GPS設(shè)備的精確定位時,該系統(tǒng)遵循一個簡單的數(shù)學(xué)原理,稱為三邊定位。
例如,考慮衛(wèi)星a。當(dāng)您打開移動GPS時,它會接收衛(wèi)星a的當(dāng)前時間和位置?,F(xiàn)在接收器通過計算信號的時間和速度(信號的速度等于光速)來計算到衛(wèi)星A的距離。接收器現(xiàn)在知道它必須位于由衛(wèi)星A的距離形成的圓上?,F(xiàn)在,GPS接收器從另一顆衛(wèi)星獲得數(shù)據(jù),假設(shè)是衛(wèi)星B。通過使用衛(wèi)星B提供的數(shù)據(jù),它知道它必須位于這兩個圓(由衛(wèi)星A和衛(wèi)星B組成)之間的交互點(diǎn)上?,F(xiàn)在,它從第三顆衛(wèi)星獲取數(shù)據(jù)來精確定位。這種利用衛(wèi)星的時間和位置等數(shù)據(jù)來確定你的位置的過程被稱為三邊定位。
NEO 6M GPS接收器模塊
因此,現(xiàn)在在我們的項(xiàng)目中,我們將使用NEO 6M GPS接收器模塊,它由50個通道組成。這些頻道就像房間,每個頻道可以容納每個衛(wèi)星的一個頻率。這些信道通常是并行操作的,這使得接收機(jī)在移動時保持精度。首次定位時間(TTFF)是接收衛(wèi)星信號和導(dǎo)航信號并使用該數(shù)據(jù)計算位置所需的時間。NEO 6M的TTFF在冷啟動和熱啟動時為27秒,熱啟動時為1秒。
在工作條件方面,最大工作電壓為3.6V,最小工作電壓為2.7V。NEO 6M模塊的平均供電電流為39mA。在一些模塊中,有一個內(nèi)置的3.3V穩(wěn)壓器。因此,我們可以將模塊連接到5V以獲得最大性能。在通信方面,該模塊采用UART,可以方便地與任何MCU (Node MCU)進(jìn)行通信。連接部分在電路圖部分討論。
測試Neo 6M GPS模塊
要知道GPS模塊是否工作,請按照如下電路圖連接模塊,并上傳空代碼。注意,如果您上傳的是空代碼,那么串行通信將使用nodeMCU的默認(rèn)TX和RX引腳進(jìn)行。要檢查串行監(jiān)視器上的數(shù)據(jù),請相應(yīng)地更改電路,即將GPS模塊的RX和TX連接到NodeMCU的RX和TX,如下所示
上傳空代碼后,打開串口監(jiān)視器。到目前為止,您應(yīng)該看到屏幕上打印了一些值。等等,它們不是正確的值。如果您觀察,您可以發(fā)現(xiàn)輸出中缺少一些位。首先,模塊需要一些時間才能給出正確的值。注意:如果GPS模塊開始閃爍,則表示該模塊正在接收值。下圖顯示了接收到的數(shù)據(jù)中缺少一些位的情況。
如果數(shù)據(jù)沒有丟失位,則數(shù)據(jù)將如下圖所示。
您看到的上述數(shù)據(jù)是用NMEA格式表示的數(shù)據(jù)。NMEA代表國家海洋電子協(xié)會。這種標(biāo)準(zhǔn)數(shù)據(jù)格式被所有GPS制造商所支持,就像計算機(jī)制造商的ASCII一樣。
GPGSV -顯示當(dāng)前的GPS衛(wèi)星
1 =此周期內(nèi)該類型消息的總數(shù)
2 =留言號
3 =正在查看的sv的總數(shù)
4 = SV PRN號
5 =仰角,最高90度
6 =方位角,從真北000到359度
7 =信噪比,00-99 dB(不跟蹤時為空)
8-11 =第二個SV信息
12-15=第三SV信息
16-19=第四個SV信息
GPGLL -地理定位,緯度和經(jīng)度。例如:$GPGLL,4815.45,N,12311.12,W,215455,A
GPS跟蹤器電路圖
節(jié)點(diǎn)MCU與NEO 6M模塊之間的連接非常簡單。NEO 6M模塊的VCC和GND引腳連接到面包板的正負(fù)電源軌,節(jié)點(diǎn)MCU的3v3和GND引腳連接到面包板的正負(fù)電源軌,如下圖所示。NEO 6M的RX和TX引腳連接到節(jié)點(diǎn)MCU的D1和D2引腳。Node MCU采用USB供電方式。
設(shè)置Thingspeak
首先,如果你是一個新用戶,注冊一個thingspeak帳戶。我們已經(jīng)用Thingspeak構(gòu)建了很多有趣的項(xiàng)目,你也可以去看看。
注冊后,選擇頻道。選擇通道后,選擇“新建通道”。
選擇新通道后,將加載下面的頁面。輸入詳細(xì)信息和適當(dāng)?shù)淖侄蚊Q,然后單擊保存。
選擇保存后,將加載下面的頁面?,F(xiàn)在選擇選項(xiàng)API密鑰
選擇API密鑰后,將加載以下頁面。現(xiàn)在,記下通道ID,寫鍵和讀鍵。在nodeMCU編程中使用Write鍵,而在Matlab可視化程序中使用Read鍵。
之后,選擇私有視圖選項(xiàng)并單擊Matlab可視化選項(xiàng)。
現(xiàn)在,下面的頁面將被加載。不做任何更改,然后選擇Create。
現(xiàn)在,您將加載一個頁面,您可以在其中編寫代碼,使用緯度和經(jīng)度在地圖上指出位置。復(fù)制粘貼本文提供的代碼,并更改所需的值(讀取密鑰和通道ID)。
檢查“創(chuàng)建公共URL”框,以便任何人都可以使用此URL找到設(shè)備的位置。
接下來,我們需要兩種不同類型的程序。一個代碼處理從GPS模塊獲取數(shù)據(jù),然后將數(shù)據(jù)傳輸?shù)絫hingspeak。第二個代碼處理使用發(fā)送給thingspeak的數(shù)據(jù)指向地圖上的位置。第一個代碼是用Arduino IDE編寫的,而第二個代碼是用thingspeak Matlab可視化編寫的。
在進(jìn)入代碼解釋之前,需要下載某些庫,這些庫有助于將原始數(shù)據(jù)(NMEA格式)轉(zhuǎn)換為可理解的數(shù)據(jù)。首先,使用提供的鏈接下載tinyGPS庫。接下來,通過在庫管理器中搜索下載thingspeak庫。下載MathWorks提供的那個。
NodeMCU程序讀取GPS數(shù)據(jù)并發(fā)送給Thingspeak
完整的程序可以在本頁底部找到,相同的解釋如下。下面的代碼片段用于包含庫,這些庫是我們的代碼正常工作所需的,并且將GPIO引腳4和5設(shè)置為NodeMCU的RX和TX引腳。設(shè)置GPS波特率為9600。
以下代碼僅在有來自GPS模塊的傳入數(shù)據(jù)時運(yùn)行。代碼對數(shù)據(jù)進(jìn)行編碼,如果編碼后的數(shù)據(jù)有效,則考慮該數(shù)據(jù),并進(jìn)行進(jìn)一步的計算以將NMEA數(shù)據(jù)轉(zhuǎn)換為可理解的數(shù)據(jù)。下面的代碼只向thingspeak發(fā)送緯度和經(jīng)度值。
Matlab ThingSpeak可視化代碼在地圖上顯示位置
現(xiàn)在,我們必須編寫一個代碼,它可以通過使用緯度和經(jīng)度值在地圖上指出位置,這些值被轉(zhuǎn)移到thingspeak中。下面的屏幕截圖顯示了示例URL。
下面的代碼獲取最后10個值的值,并將它們定位在地圖上。通過使用URL,該URL將在運(yùn)行代碼后可用。要更改值的數(shù)量,它需要考慮更改寫在‘ NumPoints ’之后的值。
在下面輸入您的MATLAB代碼
下面的代碼使用由nodeMCU提供的緯度和經(jīng)度在地圖上精確定位位置。
一旦您的編程完成,您的頁面應(yīng)該看起來像下面所示
通過使用提供的URL,我在web瀏覽器中得到了下面的圖片。
Matlab可視化從字段中獲取數(shù)據(jù),然后在地圖上定位它們。下圖顯示了繪制在字段上的數(shù)據(jù),這將進(jìn)一步用于Matlab可視化。
測試NodeMCU GPS跟蹤器
一旦啟動nodeMCU,串行監(jiān)視器中看到的讀數(shù)可能不正確。它需要一些有限的時間來得到正確的讀數(shù)。如果GPS模塊開始閃爍,您將知道讀數(shù)是正確的。一旦nodeMCU與LAN連接,并且GPS數(shù)據(jù)有效,則該數(shù)據(jù)將被發(fā)送到thingspeak。您可以在Thingspeak的字段中查看正在更新的數(shù)據(jù)。通過使用我們在Matlab可視化中獲得的生成的URL,我們可以從任何瀏覽器跟蹤位置。
本文編譯自iotdesignpro