# GPS ਡਾਟਾ ਪੜ੍ਹੋ - ਵਰਚੁਅਲ IoT ਹਾਰਡਵੇਅਰ ਇਸ ਪਾਠ ਦੇ ਇਸ ਹਿੱਸੇ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਿੱਚ GPS ਸੈਂਸਰ ਸ਼ਾਮਲ ਕਰੋਗੇ ਅਤੇ ਇਸ ਤੋਂ ਮੁੱਲ ਪੜ੍ਹੋਗੇ। ## ਵਰਚੁਅਲ ਹਾਰਡਵੇਅਰ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਇੱਕ ਸਿਮੂਲੇਟ ਕੀਤੇ GPS ਸੈਂਸਰ ਦੀ ਵਰਤੋਂ ਕਰੇਗਾ ਜੋ ਕਿ UART ਰਾਹੀਂ ਇੱਕ ਸੀਰੀਅਲ ਪੋਰਟ ਉੱਤੇ ਪਹੁੰਚਯੋਗ ਹੈ। ਇੱਕ ਭੌਤਿਕ GPS ਸੈਂਸਰ ਵਿੱਚ GPS ਸੈਟੇਲਾਈਟਾਂ ਤੋਂ ਰੇਡੀਓ ਤਰੰਗਾਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਲਈ ਐਂਟੀਨਾ ਹੁੰਦਾ ਹੈ ਅਤੇ GPS ਸਿਗਨਲਾਂ ਨੂੰ GPS ਡਾਟਾ ਵਿੱਚ ਬਦਲਦਾ ਹੈ। ਵਰਚੁਅਲ ਵਰਜਨ ਇਸ ਨੂੰ ਸਿਮੂਲੇਟ ਕਰਦਾ ਹੈ, ਜਿੱਥੇ ਤੁਸੀਂ ਲੈਟੀਟਿਊਡ ਅਤੇ ਲੌਂਗਿਟਿਊਡ ਸੈਟ ਕਰ ਸਕਦੇ ਹੋ, ਕੱਚੇ NMEA ਵਾਕ ਭੇਜ ਸਕਦੇ ਹੋ, ਜਾਂ ਇੱਕ GPX ਫਾਈਲ ਅੱਪਲੋਡ ਕਰ ਸਕਦੇ ਹੋ ਜਿਸ ਵਿੱਚ ਕਈ ਸਥਾਨ ਹਨ ਜੋ ਲਗਾਤਾਰ ਵਾਪਸ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ। > 🎓 NMEA ਵਾਕਾਂ ਬਾਰੇ ਇਸ ਪਾਠ ਵਿੱਚ ਬਾਅਦ ਵਿੱਚ ਚਰਚਾ ਕੀਤੀ ਜਾਵੇਗੀ ### CounterFit ਵਿੱਚ ਸੈਂਸਰ ਸ਼ਾਮਲ ਕਰੋ ਵਰਚੁਅਲ GPS ਸੈਂਸਰ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਇਸਨੂੰ CounterFit ਐਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਪਵੇਗਾ। #### ਕੰਮ - CounterFit ਵਿੱਚ ਸੈਂਸਰ ਸ਼ਾਮਲ ਕਰੋ CounterFit ਐਪ ਵਿੱਚ GPS ਸੈਂਸਰ ਸ਼ਾਮਲ ਕਰੋ। 1. ਆਪਣੇ ਕੰਪਿਊਟਰ 'ਤੇ `gps-sensor` ਨਾਮਕ ਫੋਲਡਰ ਵਿੱਚ ਇੱਕ ਨਵੀਂ Python ਐਪ ਬਣਾਓ, ਜਿਸ ਵਿੱਚ ਇੱਕ ਫਾਈਲ `app.py` ਹੋਵੇ ਅਤੇ ਇੱਕ Python ਵਰਚੁਅਲ ਵਾਤਾਵਰਣ ਹੋਵੇ, ਅਤੇ CounterFit ਪਿਪ ਪੈਕੇਜ ਸ਼ਾਮਲ ਕਰੋ। > ⚠️ ਤੁਸੀਂ [ਪਾਠ 1 ਵਿੱਚ CounterFit Python ਪ੍ਰੋਜੈਕਟ ਬਣਾਉਣ ਅਤੇ ਸੈਟਅੱਪ ਕਰਨ ਲਈ ਨਿਰਦੇਸ਼ਾਂ](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md) ਨੂੰ ਜ਼ਰੂਰਤ ਪੈਣ 'ਤੇ ਵੇਖ ਸਕਦੇ ਹੋ। 1. ਇੱਕ ਹੋਰ ਪਿਪ ਪੈਕੇਜ ਇੰਸਟਾਲ ਕਰੋ ਜੋ UART ਅਧਾਰਿਤ ਸੈਂਸਰਾਂ ਨਾਲ ਸੀਰੀਅਲ ਕਨੈਕਸ਼ਨ ਰਾਹੀਂ ਗੱਲਬਾਤ ਕਰਨ ਲਈ CounterFit ਸ਼ਿਮ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਸੀਂ ਇਹ ਵਰਚੁਅਲ ਵਾਤਾਵਰਣ ਐਕਟੀਵੇਟ ਕੀਤੇ ਹੋਏ ਟਰਮੀਨਲ ਤੋਂ ਇੰਸਟਾਲ ਕਰ ਰਹੇ ਹੋ। ```sh pip install counterfit-shims-serial ``` 1. ਯਕੀਨੀ ਬਣਾਓ ਕਿ CounterFit ਵੈੱਬ ਐਪ ਚੱਲ ਰਿਹਾ ਹੈ। 1. ਇੱਕ GPS ਸੈਂਸਰ ਬਣਾਓ: 1. *Sensors* ਪੈਨ ਵਿੱਚ *Create sensor* ਬਾਕਸ ਵਿੱਚ, *Sensor type* ਡ੍ਰੌਪਡਾਊਨ ਬਾਕਸ ਵਿੱਚੋਂ *UART GPS* ਚੁਣੋ। 1. *Port* ਨੂੰ */dev/ttyAMA0* 'ਤੇ ਹੀ ਛੱਡੋ। 1. **Add** ਬਟਨ ਚੁਣੋ ਤਾਂ ਜੋ `/dev/ttyAMA0` ਪੋਰਟ 'ਤੇ GPS ਸੈਂਸਰ ਬਣਾਇਆ ਜਾ ਸਕੇ। ![GPS ਸੈਂਸਰ ਸੈਟਿੰਗ](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.pa.png) GPS ਸੈਂਸਰ ਬਣਾਇਆ ਜਾਵੇਗਾ ਅਤੇ ਸੈਂਸਰਾਂ ਦੀ ਸੂਚੀ ਵਿੱਚ ਦਿਖਾਈ ਦੇਵੇਗਾ। ![GPS ਸੈਂਸਰ ਬਣਾਇਆ ਗਿਆ](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.pa.png) ## GPS ਸੈਂਸਰ ਪ੍ਰੋਗਰਾਮ ਕਰੋ ਹੁਣ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਨੂੰ ਵਰਚੁਅਲ GPS ਸੈਂਸਰ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਪ੍ਰੋਗਰਾਮ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ### ਕੰਮ - GPS ਸੈਂਸਰ ਪ੍ਰੋਗਰਾਮ ਕਰੋ GPS ਸੈਂਸਰ ਐਪ ਪ੍ਰੋਗਰਾਮ ਕਰੋ। 1. ਯਕੀਨੀ ਬਣਾਓ ਕਿ `gps-sensor` ਐਪ VS Code ਵਿੱਚ ਖੁੱਲ੍ਹੀ ਹੋਈ ਹੈ। 1. `app.py` ਫਾਈਲ ਖੋਲ੍ਹੋ। 1. CounterFit ਨਾਲ ਐਪ ਨੂੰ ਕਨੈਕਟ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ `app.py` ਦੇ ਸਿਰੇ 'ਤੇ ਸ਼ਾਮਲ ਕਰੋ: ```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') ``` ਇਹ ਕੋਡ `counterfit_shims_serial` ਪਿਪ ਪੈਕੇਜ ਤੋਂ `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` 'ਤੇ ਸੈਟ ਕਰੋ ਅਤੇ ਇੱਕ ਸਪਸ਼ਟ ਲੈਟੀਟਿਊਡ, ਲੌਂਗਿਟਿਊਡ ਅਤੇ ਸੈਟੇਲਾਈਟਾਂ ਦੀ ਗਿਣਤੀ ਸੈਟ ਕਰੋ। ਇਹ ਮੁੱਲ ਸਿਰਫ ਇੱਕ ਵਾਰ ਭੇਜਿਆ ਜਾਵੇਗਾ, ਇਸ ਲਈ **Repeat** ਬਾਕਸ ਚੈੱਕ ਕਰੋ ਤਾਂ ਜੋ ਡਾਟਾ ਹਰ ਸਕਿੰਟ ਦੁਹਰਾਇਆ ਜਾਵੇ। ![GPS ਸੈਂਸਰ lat lon ਨਾਲ ਚੁਣਿਆ ਗਿਆ](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.pa.png) * **Source** ਨੂੰ `NMEA` 'ਤੇ ਸੈਟ ਕਰੋ ਅਤੇ ਕੁਝ NMEA ਵਾਕ ਟੈਕਸਟ ਬਾਕਸ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ। ਇਹ ਸਾਰੇ ਮੁੱਲ ਭੇਜੇ ਜਾਣਗੇ, ਹਰ ਨਵੇਂ GGA (ਸਥਿਤੀ ਫਿਕਸ) ਵਾਕ ਤੋਂ ਪਹਿਲਾਂ 1 ਸਕਿੰਟ ਦੀ ਦੇਰੀ ਨਾਲ। ![GPS ਸੈਂਸਰ NMEA ਵਾਕਾਂ ਨਾਲ ਸੈਟ ਕੀਤਾ ਗਿਆ](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.pa.png) ਤੁਸੀਂ [nmeagen.org](https://www.nmeagen.org) ਵਰਗੇ ਟੂਲ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ ਮੈਪ 'ਤੇ ਖਿੱਚਣ ਲਈ ਇਹ ਵਾਕ ਬਣਾਉਣ ਲਈ। ਇਹ ਮੁੱਲ ਸਿਰਫ ਇੱਕ ਵਾਰ ਭੇਜੇ ਜਾਣਗੇ, ਇਸ ਲਈ **Repeat** ਬਾਕਸ ਚੈੱਕ ਕਰੋ ਤਾਂ ਜੋ ਸਾਰਾ ਡਾਟਾ ਭੇਜਣ ਤੋਂ ਬਾਅਦ ਇੱਕ ਸਕਿੰਟ ਬਾਅਦ ਦੁਹਰਾਇਆ ਜਾਵੇ। * **Source** ਨੂੰ GPX ਫਾਈਲ 'ਤੇ ਸੈਟ ਕਰੋ ਅਤੇ ਟਰੈਕ ਸਥਾਨਾਂ ਵਾਲੀ GPX ਫਾਈਲ ਅੱਪਲੋਡ ਕਰੋ। ਤੁਸੀਂ [AllTrails](https://www.alltrails.com/) ਵਰਗੀਆਂ ਮਸ਼ਹੂਰ ਮੈਪਿੰਗ ਅਤੇ ਹਾਈਕਿੰਗ ਸਾਈਟਾਂ ਤੋਂ GPX ਫਾਈਲਾਂ ਡਾਊਨਲੋਡ ਕਰ ਸਕਦੇ ਹੋ। ਇਹ ਫਾਈਲਾਂ ਇੱਕ ਟ੍ਰੇਲ ਵਜੋਂ ਕਈ GPS ਸਥਾਨਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੀਆਂ ਹਨ, ਅਤੇ GPS ਸੈਂਸਰ ਹਰ ਨਵੇਂ ਸਥਾਨ ਨੂੰ 1 ਸਕਿੰਟ ਦੇ ਅੰਤਰਾਲ 'ਤੇ ਵਾਪਸ ਕਰੇਗਾ। ![GPS ਸੈਂਸਰ GPX ਫਾਈਲ ਨਾਲ ਸੈਟ ਕੀਤਾ ਗਿਆ](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.pa.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) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।