# อ่านข้อมูล GPS - ฮาร์ดแวร์ IoT เสมือนจริง ในส่วนนี้ของบทเรียน คุณจะเพิ่มเซ็นเซอร์ GPS ลงในอุปกรณ์ IoT เสมือนจริงของคุณ และอ่านค่าจากเซ็นเซอร์นั้น ## ฮาร์ดแวร์เสมือนจริง อุปกรณ์ IoT เสมือนจริงจะใช้เซ็นเซอร์ GPS จำลองที่สามารถเข้าถึงได้ผ่าน UART ผ่านพอร์ตอนุกรม เซ็นเซอร์ GPS จริงจะมีเสาอากาศเพื่อรับคลื่นวิทยุจากดาวเทียม GPS และแปลงสัญญาณ GPS เป็นข้อมูล GPS ส่วนเวอร์ชันเสมือนจริงจะจำลองสิ่งนี้โดยให้คุณตั้งค่าละติจูดและลองจิจูด ส่งประโยค NMEA ดิบ หรืออัปโหลดไฟล์ GPX ที่มีตำแหน่งหลายตำแหน่งซึ่งสามารถส่งคืนได้ตามลำดับ > 🎓 ประโยค NMEA จะถูกอธิบายในภายหลังในบทเรียนนี้ ### เพิ่มเซ็นเซอร์ใน CounterFit เพื่อใช้เซ็นเซอร์ GPS เสมือน คุณต้องเพิ่มเซ็นเซอร์นี้ในแอป CounterFit #### งาน - เพิ่มเซ็นเซอร์ใน CounterFit เพิ่มเซ็นเซอร์ GPS ในแอป CounterFit 1. สร้างแอป Python ใหม่ในคอมพิวเตอร์ของคุณในโฟลเดอร์ชื่อ `gps-sensor` โดยมีไฟล์เดียวชื่อ `app.py` และสภาพแวดล้อมเสมือน Python และเพิ่มแพ็กเกจ pip ของ CounterFit > ⚠️ คุณสามารถดู [คำแนะนำสำหรับการสร้างและตั้งค่าโปรเจกต์ Python ของ CounterFit ในบทเรียนที่ 1 หากจำเป็น](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md) 1. ติดตั้งแพ็กเกจ Pip เพิ่มเติมเพื่อติดตั้ง CounterFit shim ที่สามารถสื่อสารกับเซ็นเซอร์ที่ใช้ UART ผ่านการเชื่อมต่ออนุกรม ตรวจสอบให้แน่ใจว่าคุณกำลังติดตั้งจากเทอร์มินัลที่เปิดใช้งานสภาพแวดล้อมเสมือน ```sh pip install counterfit-shims-serial ``` 1. ตรวจสอบให้แน่ใจว่าแอปเว็บ CounterFit กำลังทำงานอยู่ 1. สร้างเซ็นเซอร์ GPS: 1. ในกล่อง *Create sensor* ในแถบ *Sensors* เลือกกล่องแบบเลื่อนลง *Sensor type* และเลือก *UART GPS* 1. ปล่อยให้ *Port* ตั้งค่าเป็น */dev/ttyAMA0* 1. เลือกปุ่ม **Add** เพื่อสร้างเซ็นเซอร์ GPS บนพอร์ต `/dev/ttyAMA0` ![การตั้งค่าเซ็นเซอร์ GPS](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.th.png) เซ็นเซอร์ GPS จะถูกสร้างและปรากฏในรายการเซ็นเซอร์ ![เซ็นเซอร์ GPS ที่ถูกสร้าง](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.th.png) ## เขียนโปรแกรมเซ็นเซอร์ GPS อุปกรณ์ IoT เสมือนจริงสามารถเขียนโปรแกรมเพื่อใช้เซ็นเซอร์ GPS เสมือนได้แล้ว ### งาน - เขียนโปรแกรมเซ็นเซอร์ GPS เขียนโปรแกรมแอปเซ็นเซอร์ GPS 1. ตรวจสอบให้แน่ใจว่าแอป `gps-sensor` เปิดอยู่ใน VS Code 1. เปิดไฟล์ `app.py` 1. เพิ่มโค้ดต่อไปนี้ที่ด้านบนของ `app.py` เพื่อเชื่อมต่อแอปกับ CounterFit: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` 1. เพิ่มโค้ดต่อไปนี้ด้านล่างเพื่อเรียกใช้ไลบรารีที่จำเป็น รวมถึงไลบรารีสำหรับพอร์ตอนุกรมของ CounterFit: ```python import time import counterfit_shims_serial serial = counterfit_shims_serial.Serial('/dev/ttyAMA0') ``` โค้ดนี้นำเข้าโมดูล `serial` จากแพ็กเกจ Pip `counterfit_shims_serial` จากนั้นเชื่อมต่อกับพอร์ตอนุกรม `/dev/ttyAMA0` ซึ่งเป็นที่อยู่ของพอร์ตอนุกรมที่เซ็นเซอร์ GPS เสมือนใช้สำหรับพอร์ต UART 1. เพิ่มโค้ดต่อไปนี้ด้านล่างเพื่ออ่านจากพอร์ตอนุกรมและพิมพ์ค่าลงในคอนโซล: ```python def print_gps_data(line): print(line.rstrip()) while True: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data(line) line = serial.readline().decode('utf-8') time.sleep(1) ``` ฟังก์ชันชื่อ `print_gps_data` ถูกกำหนดขึ้นเพื่อพิมพ์บรรทัดที่ส่งผ่านไปยังคอนโซล จากนั้นโค้ดจะวนลูปตลอดเวลา โดยอ่านบรรทัดข้อความจากพอร์ตอนุกรมในแต่ละลูป และเรียกใช้ฟังก์ชัน `print_gps_data` สำหรับแต่ละบรรทัด หลังจากอ่านข้อมูลทั้งหมดแล้ว ลูปจะหยุดพัก 1 วินาที จากนั้นลองอีกครั้ง 1. รันโค้ดนี้ โดยตรวจสอบให้แน่ใจว่าคุณใช้เทอร์มินัลที่แตกต่างจากที่แอป CounterFit กำลังทำงานอยู่ เพื่อให้แอป CounterFit ยังคงทำงานต่อไป 1. จากแอป CounterFit เปลี่ยนค่าของเซ็นเซอร์ GPS คุณสามารถทำได้ในวิธีใดวิธีหนึ่งดังนี้: * ตั้งค่า **Source** เป็น `Lat/Lon` และตั้งค่าละติจูด ลองจิจูด และจำนวนดาวเทียมที่ใช้ในการรับค่าตำแหน่ง GPS ค่านี้จะถูกส่งเพียงครั้งเดียว ดังนั้นให้ทำเครื่องหมายที่กล่อง **Repeat** เพื่อให้ข้อมูลส่งซ้ำทุกวินาที ![เซ็นเซอร์ GPS ที่ตั้งค่า lat lon](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.th.png) * ตั้งค่า **Source** เป็น `NMEA` และเพิ่มประโยค NMEA ลงในกล่องข้อความ ค่าทั้งหมดนี้จะถูกส่ง โดยมีการหน่วงเวลา 1 วินาทีก่อนที่ประโยค GGA (ตำแหน่ง) ใหม่จะถูกอ่าน ![เซ็นเซอร์ GPS ที่ตั้งค่าประโยค NMEA](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.th.png) คุณสามารถใช้เครื่องมืออย่าง [nmeagen.org](https://www.nmeagen.org) เพื่อสร้างประโยคเหล่านี้โดยการวาดบนแผนที่ ค่าจะถูกส่งเพียงครั้งเดียว ดังนั้นให้ทำเครื่องหมายที่กล่อง **Repeat** เพื่อให้ข้อมูลส่งซ้ำหลังจากส่งทั้งหมดแล้ว * ตั้งค่า **Source** เป็นไฟล์ GPX และอัปโหลดไฟล์ GPX ที่มีตำแหน่งเส้นทาง คุณสามารถดาวน์โหลดไฟล์ GPX จากเว็บไซต์แผนที่และเดินป่ายอดนิยม เช่น [AllTrails](https://www.alltrails.com/) ไฟล์เหล่านี้มีตำแหน่ง GPS หลายตำแหน่งเป็นเส้นทาง และเซ็นเซอร์ GPS จะส่งคืนตำแหน่งใหม่ทุกๆ 1 วินาที ![เซ็นเซอร์ GPS ที่ตั้งค่าไฟล์ GPX](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.th.png) ค่าจะถูกส่งเพียงครั้งเดียว ดังนั้นให้ทำเครื่องหมายที่กล่อง **Repeat** เพื่อให้ข้อมูลส่งซ้ำหลังจากส่งทั้งหมดแล้ว เมื่อคุณตั้งค่าการตั้งค่า GPS เสร็จแล้ว ให้เลือกปุ่ม **Set** เพื่อบันทึกค่าลงในเซ็นเซอร์ 1. คุณจะเห็นผลลัพธ์ดิบจากเซ็นเซอร์ GPS บางอย่างเช่น: ```output $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 ``` > 💁 คุณสามารถค้นหาโค้ดนี้ได้ในโฟลเดอร์ [code-gps/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps/virtual-device) 😀 โปรแกรมเซ็นเซอร์ GPS ของคุณสำเร็จแล้ว! --- **ข้อจำกัดความรับผิดชอบ**: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้