5.6 KiB
ถอดรหัสข้อมูล GPS - ฮาร์ดแวร์ IoT เสมือนและ Raspberry Pi
ในส่วนนี้ของบทเรียน คุณจะถอดรหัสข้อความ NMEA ที่อ่านจากเซ็นเซอร์ GPS โดยใช้ Raspberry Pi หรืออุปกรณ์ IoT เสมือน และดึงค่าละติจูดและลองจิจูดออกมา
ถอดรหัสข้อมูล GPS
เมื่อข้อมูล NMEA ดิบถูกอ่านจากพอร์ตอนุกรมแล้ว สามารถถอดรหัสได้โดยใช้ไลบรารี NMEA แบบโอเพ่นซอร์ส
งาน - ถอดรหัสข้อมูล GPS
เขียนโปรแกรมให้อุปกรณ์ถอดรหัสข้อมูล GPS
-
เปิดโปรเจกต์แอป
gps-sensor
หากยังไม่ได้เปิด -
ติดตั้งแพ็กเกจ Pip ชื่อ
pynmea2
แพ็กเกจนี้มีโค้ดสำหรับถอดรหัสข้อความ NMEApip3 install pynmea2
-
เพิ่มโค้ดต่อไปนี้ในส่วน imports ของไฟล์
app.py
เพื่อ import โมดูลpynmea2
:import pynmea2
-
แทนที่เนื้อหาของฟังก์ชัน
print_gps_data
ด้วยโค้ดต่อไปนี้:msg = pynmea2.parse(line) if msg.sentence_type == 'GGA': lat = pynmea2.dm_to_sd(msg.lat) lon = pynmea2.dm_to_sd(msg.lon) if msg.lat_dir == 'S': lat = lat * -1 if msg.lon_dir == 'W': lon = lon * -1 print(f'{lat},{lon} - from {msg.num_sats} satellites')
โค้ดนี้จะใช้ไลบรารี
pynmea2
เพื่อแปลงข้อความที่อ่านจากพอร์ตอนุกรม UARTหากประเภทของข้อความเป็น
GGA
นั่นหมายถึงข้อความนี้เป็นข้อความระบุตำแหน่ง และจะถูกประมวลผล ค่าละติจูดและลองจิจูดจะถูกอ่านจากข้อความและแปลงเป็นค่าทศนิยมจากรูปแบบ NMEA(d)ddmm.mmmm
ฟังก์ชันdm_to_sd
จะทำการแปลงนี้จากนั้นจะตรวจสอบทิศทางของละติจูด หากละติจูดอยู่ทางใต้ ค่าจะถูกแปลงเป็นค่าลบ เช่นเดียวกับลองจิจูด หากอยู่ทางตะวันตกก็จะถูกแปลงเป็นค่าลบ
สุดท้าย พิกัดจะถูกพิมพ์ออกมาบนคอนโซล พร้อมกับจำนวนดาวเทียมที่ใช้ในการระบุตำแหน่ง
-
รันโค้ด หากคุณใช้อุปกรณ์ IoT เสมือน ให้แน่ใจว่าแอป CounterFit กำลังทำงานอยู่และข้อมูล GPS กำลังถูกส่ง
pi@raspberrypi:~/gps-sensor $ python3 app.py 47.6423109,-122.1390293 - from 3 satellites
💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ code-gps-decode/virtual-device หรือ code-gps-decode/pi
😀 โปรแกรมเซ็นเซอร์ GPS ของคุณพร้อมการถอดรหัสข้อมูลสำเร็จแล้ว!
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้