NEO-6M memberi Arduino koordinat kedudukan secara langsung melalui tiga wayar sahaja β VCC ke 5 V, GND ke GND, dan pin TX modul disilangkan ke satu pin SoftwareSerial pada 9600 baud β tetapi di luar rumah sahaja. Di dalam rumah ia tetap hidup, tetap menghantar data, dan tetap tidak pernah dapat fix, dan LED fix-nya memang tidak akan berkelip. Itu modul yang berfungsi, bukan modul rosak.
Apa yang anda perlukan untuk membaca koordinat GPS pada Arduino?
Modul GPS GY-NEO-6M ialah sebuah board biru yang membawa penerima u-blox NEO-6M dalam tin logam perak, berserta antena patch seramik segi empat 25 mm bersalut perisai perak pada satu pigtail coaxial kelabu. Empat sambungannya bersilkscreen VCC, RX, TX, GND di sepanjang tepi atas β dan ia tiba sebagai lubang plated yang masih kosong. Empat pin yang dipatahkan daripada jalur header male 40-pin lalu disolder masuk ialah langkah pertama binaan ini, sebelum sebarang pendawaian; panduan solder pin header kami menerangkan tekniknya.
Senarai komponen β modul GPS NEO-6M dengan Arduino Uno, koordinat pada Serial Monitor
Pilihan β paparan di meja, kabel dan set solder
OLED 0.96 inci menjadikan binaan ini alat pegang tangan yang memaparkan koordinat tanpa laptop, dan ia menggunakan pin I2C Uno iaitu A4 dan A5, yang memang dibiarkan kosong oleh binaan ini. Kabel USB A-to-B pula ialah kabel berplug segi empat yang diterima oleh soket bersaiz penuh pada Uno β tambah satu kalau bentuk itu belum ada dalam laci anda. Besi solder dan timah pula untuk empat pin header modul; langkau kalau anda sudah ada besi solder.
Selepas disolder, modul itu memakai pin male, Uno pula mempunyai soket shield female dan OLED tiba dengan pin male sudah terpasang β jadi satu pek jumper male-to-female menyambung kedua-duanya terus ke board, tanpa breadboard di tengah.

Kenapa fix GPS pertama ambil masa berminit-minit sedangkan datasheet kata 27 saat?
Bagi NEO-6M, datasheet u-blox menyebut cold start 27 saat, hot start 1 saat dan ketepatan mendatar 2.5 m, semuanya di bawah langit terbuka. Jurang antara angka itu dengan sepuluh minit yang orang sebenarnya tunggu bukan tanda modul rosak; itu had apa yang satelit mampu hantar secara fizikal.
Setiap satelit GPS menyiarkan mesej navigasinya pada 50 bit sesaat, dibina daripada frame 30 saat, dan apa yang penerima perlukan daripada setiap satelit β pembetulan jamnya dalam subframe 1, data orbitnya atau ephemeris dalam subframe 2 dan 3 β memenuhi tiga daripada lima subframe enam saat itu, jadi ia berulang sekali setiap 30 saat. Penerima yang tidak tahu apa-apa terpaksa mentafsir 18 saat siaran itu daripada setiap satelit yang hendak digunakannya, dan ia hanya sempat menangkapnya dari mula sekali setiap frame. Lapan belas hingga tiga puluh saat mendengar semata-mata itulah lantainya; tiada perubahan pendawaian atau library yang boleh memendekkannya.
Selebihnya mesej itu ialah almanak, orbit kasar seluruh konstelasi, ditaburkan nipis merentasi 25 frame berturut-turut β 25 Γ 30 s = 12.5 minit untuk diterima sepenuhnya. Itulah angka di sebalik nasihat “biarkan di luar seketika”: u-blox meletakkan almanak lengkap pada kebiasaannya 12 minit selepas fix pertama. Setelah modul memilikinya, ia tahu lebih kurang di mana setiap satelit sepatutnya berada dan berhenti mencari secara buta.
Itu juga tugas sel bateri sandaran di bahagian bawah board. Ia menyimpan jam penerima dan ephemeris terakhir dalam memori bersokong bateri pada kira-kira 22 Β΅A, jadi hidupan berikutnya ialah hot start β modul sudah tahu waktu dan ke mana hendak mencari, lalu angka 1 saat dalam datasheet itu menjadi realistik. Dibiarkan tanpa kuasa berminggu-minggu, atau selnya sudah kosong, ia kembali semula ke cold start.
Melihat satu modul mencari fix di luar rumah membuatkan tempoh menunggu itu lebih nyata:
Kenapa NEO-6M tidak pernah dapat fix di dalam rumah?
Angka kepekaan NEO-6M menjawabnya dengan tepat. Tracking dan navigasi dispesifikasikan pada β161 dBm, tetapi cold start tanpa bantuan memerlukan β147 dBm. Menangkap satelit dari kosong memerlukan isyarat 14 dB lebih kuat berbanding mengekalkan satelit yang sudah ada β beza kuasa dua puluh lima kali ganda. Pemasaan dalam datasheet menganggap satelit tiba pada kira-kira β130 dBm, yang meninggalkan cold start hanya 17 dB ruang lebih sedangkan tracking ada 31 dB β dan konkrit, jubin serta plaster biasa memakan bajet itu dengan cepat. Jadi modul yang nampak elok di birai tingkap selepas anda bawa masuk dari kebun itu tidak akan sesekali mendapat fix pertamanya di situ.
Antena patch seramik itu bersifat berarah: permukaan logam perak yang rata itulah sisi penerimanya, dan ia mahu permukaan itu mengadap langit terbuka, bukan berdiri tegak β nota antena u-blox meminta satah patch itu selari dengan ufuk dengan pandangan langit yang penuh. Railing balkoni, meja taman atau bumbung kereta semuanya menjadi, dan permukaan logam rata di bawahnya menolong dan bukan mengganggu: ia melanjutkan ground plane antena, sebab itulah u-blox menyebut bumbung atau dashboard kereta sebagai tempat ideal dan meletakkan saiz ground plane yang berguna pada 50β70 mm persegi. Yang menghalang langit ialah logam di atas atau di sisi permukaan perak itu, termasuk filem tinted bermetal pada cermin kereta, bukan logam di bawahnya. Hujan dan awan pula tidak: GPS pada 1.5 GHz menembusi titisan air, manakala dedaun basah dan konkrit menyerapnya.

Bagaimana cara mendawai NEO-6M ke Arduino Uno?
Cip NEO-6M berjalan pada rel 2.7β3.6 V, yang dihasilkan oleh regulator kecil pada board biru itu daripada apa sahaja yang anda beri pada VCC, jadi 5 V masuk memang betul dan memang dijangka. Pin I/O cip itu sendiri yang merupakan bahagian 3.3 V: u-blox menetapkan julat inputnya sebagai 0 V hingga VCC dan maksimum mutlaknya 3.6 V, jadi TX 5 V daripada Uno tidak boleh mendarat terus pada pin RX modul. Binaan di bawah memang langsung tidak menggunakan arah itu.
| Pin modul | Uno | Kenapa |
|---|---|---|
VCC |
5V |
Regulator board menurunkannya ke rel 3.3 V penerima |
GND |
GND |
Rujukan dikongsi β tanpanya talian serial tiada makna langsung |
TX |
D4 |
Bersilang. Modul bercakap, Uno mendengar. Ini sahaja wayar yang diperlukan sketch |
RX |
β (biarkan kosong) | Hanya perlu untuk konfigur semula modul. TX Uno ialah 5 V dan perlukan pembahagi voltan dahulu |
TX ke TX gagal secara senyap β dua pemancar menjerit sesama sendiri tidak menghasilkan data dan tiada mesej ralat β sebab itulah ia kesilapan yang paling lama bertahan. D4 itu sendiri pilihan bebas β mana-mana pin digital kecuali 0 dan 1.
TX modul memacu taliannya ke rel 3.3 V dalaman itu. ATmega328P pada 5 V mengira apa-apa yang melebihi 0.6 Γ VCC β iaitu 3.0 V β sebagai logik tinggi, jadi 3.3 V melepasi ambang itu dengan margin lebih kurang 0.3 V. Margin 0.3 V itu nipis, jadi noise pada jumper yang panjang boleh menarik satu bit ke bawah ambang di tengah-tengah aksara: pendekkan wayar TX. Panduan Bluetooth HC-05 kami menggunakan corak terima-sahaja yang sama atas sebab yang sama.
Library apa yang diperlukan oleh code Arduino NEO-6M?
NEO-6M menghantar teks NMEA biasa pada 9600 baud, 8-N-1, sebaik sahaja ia dihidupkan β ayat GGA, GLL, GSA, GSV, RMC, VTG dan TXT, sama ada ia sudah dapat fix atau belum. TinyGPSPlus oleh Mikal Hart, dipasang daripada Library Manager, menukarkan ayat berpisah koma itu menjadi nombor: latitud mentah tiba dalam bentuk ddmm.mmmm, bukan darjah perpuluhan, dan setiap ayat membawa checksum untuk disahkan.
Ayat-ayat itu juga mengumumkan keadaan fix dalam teks biasa, dan itu pemeriksaan kesihatan yang lebih baik daripada LED. Dalam $GPRMC, medan tepat selepas waktu ialah satu huruf β V untuk void, bermakna belum ada kedudukan, bertukar kepada A untuk active pada fix pertama β dan $GPGGA menyatakan perkara yang sama dengan satu digit kualiti fix, 0 sebelum dan 1 selepas. Modul yang belum dapat fix tetap menghantar kedua-duanya setiap saat, cuma medan kedudukannya dibiarkan kosong.
/*
NEO-6M GPS -> Arduino Uno: koordinat langsung pada Serial Monitor.
Library: TinyGPSPlus oleh Mikal Hart (Library Manager).
Pendawaian ini TERIMA-SAHAJA dan TX/RX mesti BERSILANG:
GPS VCC -> Uno 5V GPS GND -> Uno GND GPS TX -> Uno D4
Uno D3 -> GPS RX bersifat pilihan dan perlukan pembahagi voltan (lihat artikel).
Serial Monitor pada 115200, modul pada 9600. Dua nombor berbeza, memang sengaja.
*/
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
const uint8_t UNO_RX_PIN = 4; // Uno MENDENGAR di sini <- TX modul
const uint8_t UNO_TX_PIN = 3; // Uno BERCAKAP di sini -> RX modul (pilihan)
const uint32_t GPS_BAUD = 9600; // lalai kilang NEO-6M, 8-N-1
SoftwareSerial gpsSerial(UNO_RX_PIN, UNO_TX_PIN);
TinyGPSPlus gps;
uint32_t lastReport = 0;
void setup() {
Serial.begin(115200);
gpsSerial.begin(GPS_BAUD);
Serial.println(F("NEO-6M starting. Give it sky - indoors it will never fix."));
}
void loop() {
// Kosongkan modul setiap pusingan. Terlepas ini, buffer 64 bait melimpah.
while (gpsSerial.available() > 0) {
gps.encode(gpsSerial.read());
}
if (millis() - lastReport < 2000) return;
lastReport = millis();
// MASALAH 1: tiada apa-apa masuk langsung -> pendawaian atau baud, bukan langit.
if (gps.charsProcessed() < 10) {
Serial.println(F("NO DATA on D4 - check GPS TX -> D4 (crossed) and 9600 baud"));
return;
}
Serial.print(F("chars "));
Serial.print(gps.charsProcessed());
Serial.print(F(" bad-checksum "));
Serial.print(gps.failedChecksum());
Serial.print(F(" sats "));
if (gps.satellites.isValid()) {
Serial.print(gps.satellites.value());
} else {
Serial.print(F("--"));
}
// MASALAH 2: ayat mengalir tetapi tiada kedudukan -> antena dan langit, bukan wayar.
if (!gps.location.isValid()) {
Serial.println(F(" NO FIX YET - data is flowing, so the module is alive"));
return;
}
Serial.print(F(" lat "));
Serial.print(gps.location.lat(), 6);
Serial.print(F(" lng "));
Serial.print(gps.location.lng(), 6);
Serial.print(F(" age "));
Serial.print(gps.location.age());
Serial.print(F(" ms alt "));
Serial.print(gps.altitude.meters(), 1);
Serial.println(F(" m"));
}
Pada Uno, ini mengkompil kepada 8,434 bait flash β 26% daripada 32 KB β dan 518 bait RAM statik. Pemisahan baud itu berbaloi: SoftwareSerial hanya menyimpan 64 bait yang diterima, sedangkan modul menghantar sehingga 960 bait sesaat pada 9600 baud. Mencetak laporan 110 aksara pada 9600 akan menyibukkan board selama kira-kira 115 ms, dan dalam tempoh itu kira-kira 110 bait lagi tiba lalu buffer melimpah; pada 115200 baris yang sama mengambil kira-kira 10 ms dan kurang daripada sedozen bait sahaja beratur. Tampal latitud dan longitud yang tercetak itu terus ke Google Maps untuk menyemaknya.
Menambah OLED bermakna empat wayar lagi β GND, VCC, SCL ke A5, SDA ke A4, dan ambil perhatian bahawa GND yang datang dahulu pada headernya, bukan VCC β kemudian Adafruit_SSD1306 pada alamat 0x3C mencetak nilai gps.location.lat() yang sama. Ia bukan percuma pada Uno: library itu menyimpan keseluruhan frame buffer 128 Γ 64 dalam RAM, iaitu 1 KB daripada 2 KB milik ATmega328P, jadi balut string literal dalam F() dan lukis semula secara berjimat β satu frame penuh melalui I2C mengambil puluhan milisaat, sedangkan buffer serial 64 bait itu penuh dalam enam puluh tujuh milisaat. Merekod ke kad SD pula binaan seterusnya yang paling semula jadi β trek GPS hanyalah baris berstempel masa, dan data logger SD Arduino kami menguruskan bahagian failnya.
Macam mana rupanya NEO-6M yang sihat tetapi belum dapat fix?
NEO-6M memberi dua isyarat kesihatan yang berasingan, dan membacanya secara berasingan menukar panik “modul rosak” menjadi diagnosis dua minit. LED fix dipacu oleh output TIMEPULSE, yang menurut spesifikasi protokol u-blox secara lalai menghasilkan satu denyut 100 ms sesaat mengikut waktu GPS, dan tiada denyut langsung apabila tiada fix β dan penerima tidak boleh menyelaraskan apa-apa dengan waktu GPS sehingga ia menyelesaikan ofset jamnya sendiri, yang memerlukan fix. Jadi LED itu bukan lampu kuasa: gelap atau menyala tetap ialah keadaan normal tanpa fix, dan kelipan 1 Hz mengumumkan bahawa koordinat sudah sah.
| Apa yang anda nampak | Apa maknanya | Di mana hendak periksa |
|---|---|---|
| Langsung tiada apa-apa pada Serial Monitor | Modul tidak sampai ke Uno | TX/RX bersilang? TX modul pada pin yang diisytiharkan sketch? Monitor pada 115200, gpsSerial pada 9600? VCC dan GND kedua-duanya bersambung? |
| Ayat mengalir, tiada koordinat, LED gelap | Modul yang sihat sepenuhnya, cuma tiada langit | Keluar ke luar rumah dan tunggu β bawa laptop sekali, atau pasang OLED supaya ia boleh dibaca tanpa laptop. Pastikan pigtail antena sudah berklik masuk, dan perhatikan $GPRMC sehingga Vnya bertukar kepada A |
| Bilangan satelit naik, masih tiada fix | Ia sedang berfungsi β cuma satelitnya belum cukup, atau data orbitnya belum cukup | Tunggu lebih lama dan luaskan pandangan langit. Empat ialah minimum: tiga menetapkan kedudukan, yang keempat menyelesaikan ofset jam penerima itu sendiri |
| Koordinat keluar, kemudian beku | Isyarat hilang, nilai terakhir dikekalkan | Perhatikan nilai age memanjat; melebihi beberapa saat bermakna ia sudah berhenti dikemas kini |
| Aksara bercelaru | Baud tak sepadan atau buffer melimpah | Set dropdown Serial Monitor ke 115200 β pada 9600 lalai ia mencetak sampah; 9600 pula dalam gpsSerial.begin(); pendekkan jumper TX; jangan tersekat di dalam loop() |

Kesilapan biasa yang kami nampak daripada pelanggan sebenar
Menilai modul berdasarkan LEDnya. Seorang pelanggan memberitahu kami secara terus terang: “Helo my gps cant turn on”, kemudian “i tried with uno, nano”, dan sekali lagi “My gps cant turn on”. Bertukar board memang tidak akan menjawabnya β Uno dan Nano menjalankan sketch ini pada pin yang sama β dan dua punca sebenarnya bukan kerosakan langsung: NEO-6M di dalam rumah tidak dapat fix, jadi LEDnya memang tidak akan berkelip, dan TX mesti bersilang ke RX. Periksa kedua-duanya sebelum anda mendawai semula apa-apa atau mengesyaki board itu.
Terlepas klik antena. Penyambung u.FL emas di sudut board itu sangat kecil dan duduk dengan satu klik positif yang halus. Separuh masuk, modul tetap boot dan tetap mengalirkan ayat β ia cuma langsung tidak mengumpul satelit, yang nampak persis seperti penerimaan teruk. Tanggalkannya dengan memegang badan plug, jangan sekali-kali tarik pada coax: soket pada board yang akan tercabut dahulu.
Membekalkan kuasa daripada power bank yang sudah lemah. Ketika mencari satelit itulah penerima menarik arus paling banyak, dan brown-out di tengah pencarian memulakan semula cold start dari kosong. Port laptop atau adapter yang betul ialah sumber yang lebih selamat untuk fix pertama itu.
Mengharapkan prestasi taraf dron di atas meja. Ini board yang sama digunakan flight controller β tetapi pada dron ia mendapat UART perkakasan yang khas untuknya dan antena yang dipasang tinggi pada tiang, bukan patch terbaring rata di bawah tangan anda.
FAQ
Kenapa LED NEO-6M saya tidak berkelip?
Sebab ia belum dapat fix, dan di dalam rumah itu perkara normal, bukan kerosakan. LED itu mengikut output timepulse, dan timepulse hanya bermula setelah penerima mempunyai waktu GPS yang sah β yang tiba bersama fix pertama. Gelap atau menyala tetap bermakna ia sedang mencari. Kalau ayat NMEA sampai ke Serial Monitor anda, modul itu perlukan langit, bukan pembaikan.
Berapa lama NEO-6M ambil masa untuk dapat fix?
Di bawah langit terbuka, u-blox menetapkan 27 saat dari cold, 1 saat dari hot. Fix kali pertama selalunya ambil beberapa minit kerana satelit menyiar pada 50 bit sesaat dan data orbitnya berulang hanya setiap 30 saat. Biarkan ia di luar rumah dan terus hidup selama sepuluh minit pada kali pertama; hidupan selepas itu jauh lebih pantas.
Perlukah level shifter untuk NEO-6M pada Arduino Uno?
Tidak perlu kalau anda cuma membacanya. Output TX modul pada 3.3 V melepasi ambang logik tinggi 3.0 V milik Uno, jadi wayar terus pun berfungsi. Pembahagi voltan hanya diperlukan pada pin RX modul, dan hanya kalau anda menghantar arahan konfigurasi kepadanya β input itu dinilai pada rel 3.3 V dalamannya, bukan pada 5 V.
Boleh tak saya guna pin 0 dan 1 dan bukan SoftwareSerial?
Boleh, tetapi anda kehilangan Serial Monitor: pin 0 dan 1 ialah UART perkakasan yang sama digunakan cip USB, jadi modul dan komputer anda akan menjerit pada satu talian yang sama. Mana-mana pin digital lain dengan SoftwareSerial mengekalkan kedua-duanya.
Apa beza modul NEO-6M dengan NEO-8M?
GY-NEO-8M membawa u-blox NEO-M8N, yang menerima beberapa konstelasi satelit serentak dan bukan GPS semata-mata. Lebih banyak satelit dalam pandangan bermakna fix yang lebih pantas dan lebih stabil, dan itu paling terasa apabila langitnya separa terlindung. Pinout, output 9600 baud dan sketch di atas semuanya kekal sama β naik taraf terus pasang.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



GPS Module GY NEO 6M/8M with Ceramic Antenna Time and Location Tracking - For Arduino IOT Project - GY-NEO-6M GPS MODULE
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
2.54mm Pin Header Female Male Single Row Header 40P Connector Black White Red Yellow Green Blue - 40P MALE HEADER (BLACK)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 20CM
0.96β OLED Display Module Blue White Screen I2C IIC Serial 128X64 LCD Display Board - 0.96' OLED WHITE
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-B (1.0M)
80W Electronics Soldering Iron with LCD Display Ajustable Temperature Microconstroller Electronic Project
50g Soldering Wire Lead with Flux Core 1mm Diameter