11 KiB
อ่านข้อมูล GPS - Wio Terminal
ในส่วนนี้ของบทเรียน คุณจะเพิ่มเซ็นเซอร์ GPS ให้กับ Wio Terminal และอ่านค่าจากเซ็นเซอร์นี้
ฮาร์ดแวร์
Wio Terminal ต้องการเซ็นเซอร์ GPS
เซ็นเซอร์ที่คุณจะใช้คือ Grove GPS Air530 sensor เซ็นเซอร์นี้สามารถเชื่อมต่อกับระบบ GPS หลายระบบเพื่อให้ได้ตำแหน่งที่รวดเร็วและแม่นยำ เซ็นเซอร์นี้ประกอบด้วย 2 ส่วน คือ อุปกรณ์อิเล็กทรอนิกส์หลักของเซ็นเซอร์ และเสาอากาศภายนอกที่เชื่อมต่อด้วยสายไฟบางๆ เพื่อรับคลื่นวิทยุจากดาวเทียม
นี่คือเซ็นเซอร์แบบ UART ซึ่งจะส่งข้อมูล GPS ผ่าน UART
เชื่อมต่อเซ็นเซอร์ GPS
เซ็นเซอร์ Grove GPS สามารถเชื่อมต่อกับ Wio Terminal ได้
งาน - เชื่อมต่อเซ็นเซอร์ GPS
เชื่อมต่อเซ็นเซอร์ GPS
-
เสียบปลายด้านหนึ่งของสาย Grove เข้ากับช่องเสียบของเซ็นเซอร์ GPS สายจะเสียบได้เพียงด้านเดียวเท่านั้น
-
เมื่อ Wio Terminal ไม่ได้เชื่อมต่อกับคอมพิวเตอร์หรือแหล่งจ่ายไฟอื่น ให้เชื่อมต่อปลายอีกด้านของสาย Grove เข้ากับช่องเสียบ Grove ด้านซ้ายของ Wio Terminal (เมื่อมองที่หน้าจอ) ซึ่งเป็นช่องที่ใกล้กับปุ่มเปิด/ปิดมากที่สุด
-
วางเซ็นเซอร์ GPS ในตำแหน่งที่เสาอากาศที่เชื่อมต่อสามารถมองเห็นท้องฟ้าได้ - โดยเฉพาะใกล้หน้าต่างที่เปิดหรือภายนอกอาคาร การไม่มีสิ่งกีดขวางเสาอากาศจะช่วยให้สัญญาณชัดเจนขึ้น
-
ตอนนี้คุณสามารถเชื่อมต่อ Wio Terminal กับคอมพิวเตอร์ของคุณได้แล้ว
-
เซ็นเซอร์ GPS มีไฟ LED 2 ดวง - ไฟ LED สีน้ำเงินจะกระพริบเมื่อมีการส่งข้อมูล และไฟ LED สีเขียวจะกระพริบทุกวินาทีเมื่อรับข้อมูลจากดาวเทียม ตรวจสอบให้แน่ใจว่าไฟ LED สีน้ำเงินกระพริบเมื่อเปิด Wio Terminal หลังจากไม่กี่นาที ไฟ LED สีเขียวจะเริ่มกระพริบ - หากไม่กระพริบ คุณอาจต้องปรับตำแหน่งเสาอากาศ
เขียนโปรแกรมสำหรับเซ็นเซอร์ GPS
ตอนนี้ Wio Terminal สามารถเขียนโปรแกรมเพื่อใช้งานเซ็นเซอร์ GPS ที่เชื่อมต่อได้แล้ว
งาน - เขียนโปรแกรมสำหรับเซ็นเซอร์ GPS
เขียนโปรแกรมให้กับอุปกรณ์
-
สร้างโปรเจกต์ Wio Terminal ใหม่โดยใช้ PlatformIO ตั้งชื่อโปรเจกต์นี้ว่า
gps-sensor
เพิ่มโค้ดในฟังก์ชันsetup
เพื่อกำหนดค่าพอร์ต serial -
เพิ่มคำสั่ง include ด้านล่างนี้ที่ส่วนบนของไฟล์
main.cpp
เพื่อรวมไฟล์ header ที่มีฟังก์ชันสำหรับกำหนดค่าพอร์ต Grove ด้านซ้ายสำหรับ UART#include <wiring_private.h>
-
ด้านล่างนี้ ให้เพิ่มโค้ดบรรทัดต่อไปนี้เพื่อประกาศการเชื่อมต่อพอร์ต serial กับพอร์ต UART:
static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0);
-
คุณต้องเพิ่มโค้ดบางส่วนเพื่อเปลี่ยนเส้นทางตัวจัดการสัญญาณภายในไปยังพอร์ต serial นี้ เพิ่มโค้ดด้านล่างนี้หลังจากการประกาศ
Serial3
:void SERCOM3_0_Handler() { Serial3.IrqHandler(); } void SERCOM3_1_Handler() { Serial3.IrqHandler(); } void SERCOM3_2_Handler() { Serial3.IrqHandler(); } void SERCOM3_3_Handler() { Serial3.IrqHandler(); }
-
ในฟังก์ชัน
setup
ด้านล่างที่กำหนดค่าพอร์ตSerial
ให้กำหนดค่าพอร์ต serial UART ด้วยโค้ดต่อไปนี้:Serial3.begin(9600); while (!Serial3) ; // Wait for Serial3 to be ready delay(1000);
-
ด้านล่างโค้ดนี้ในฟังก์ชัน
setup
ให้เพิ่มโค้ดต่อไปนี้เพื่อเชื่อมต่อพิน Grove กับพอร์ต serial:pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT);
-
เพิ่มฟังก์ชันต่อไปนี้ก่อนฟังก์ชัน
loop
เพื่อส่งข้อมูล GPS ไปยัง serial monitor:void printGPSData() { Serial.println(Serial3.readStringUntil('\n')); }
-
ในฟังก์ชัน
loop
ให้เพิ่มโค้ดต่อไปนี้เพื่ออ่านข้อมูลจากพอร์ต serial UART และพิมพ์ผลลัพธ์ไปยัง serial monitor:while (Serial3.available() > 0) { printGPSData(); } delay(1000);
โค้ดนี้จะอ่านข้อมูลจากพอร์ต serial UART ฟังก์ชัน
readStringUntil
จะอ่านข้อมูลจนกว่าจะเจออักขระตัวสุดท้าย ซึ่งในกรณีนี้คือบรรทัดใหม่ (new line) โค้ดนี้จะอ่านประโยค NMEA ทั้งหมด (ประโยค NMEA จะสิ้นสุดด้วยอักขระบรรทัดใหม่) ตราบใดที่ยังสามารถอ่านข้อมูลจากพอร์ต serial UART ได้ ข้อมูลจะถูกอ่านและส่งไปยัง serial monitor ผ่านฟังก์ชันprintGPSData
เมื่อไม่มีข้อมูลให้อ่านอีก ฟังก์ชันloop
จะหน่วงเวลา 1 วินาที (1,000ms) -
สร้างและอัปโหลดโค้ดไปยัง Wio Terminal
-
เมื่ออัปโหลดเสร็จแล้ว คุณสามารถตรวจสอบข้อมูล GPS ได้โดยใช้ serial monitor
> Executing task: platformio device monitor < --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $BDGSA,A,1,,,,,,,,,,,,,,,*0F $GPGSV,1,1,00*79 $BDGSV,1,1,00*68
💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ code-gps/wio-terminal
😀 โปรแกรมเซ็นเซอร์ GPS ของคุณสำเร็จแล้ว!
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้