# خواندن داده‌های GPS - سخت‌افزار مجازی IoT در این بخش از درس، شما یک حسگر GPS به دستگاه IoT مجازی خود اضافه می‌کنید و مقادیر آن را می‌خوانید. ## سخت‌افزار مجازی دستگاه IoT مجازی از یک حسگر GPS شبیه‌سازی‌شده استفاده می‌کند که از طریق یک پورت سریال به UART دسترسی دارد. یک حسگر GPS فیزیکی دارای یک آنتن است که امواج رادیویی را از ماهواره‌های GPS دریافت کرده و سیگنال‌های GPS را به داده‌های GPS تبدیل می‌کند. نسخه مجازی این کار را شبیه‌سازی می‌کند و به شما اجازه می‌دهد که یا یک عرض و طول جغرافیایی تنظیم کنید، جملات خام NMEA ارسال کنید، یا یک فایل GPX با چندین موقعیت مکانی بارگذاری کنید که به ترتیب بازگردانده شوند. > 🎓 جملات NMEA در ادامه این درس پوشش داده خواهند شد ### افزودن حسگر به CounterFit برای استفاده از یک حسگر GPS مجازی، باید یکی را به برنامه CounterFit اضافه کنید. #### وظیفه - افزودن حسگر به CounterFit حسگر GPS را به برنامه CounterFit اضافه کنید. 1. یک برنامه پایتون جدید در کامپیوتر خود در پوشه‌ای به نام `gps-sensor` با یک فایل به نام `app.py` و یک محیط مجازی پایتون ایجاد کنید و بسته‌های pip مربوط به CounterFit را اضافه کنید. > ⚠️ می‌توانید به [دستورالعمل‌های ایجاد و تنظیم یک پروژه پایتون CounterFit در درس ۱ در صورت نیاز مراجعه کنید](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). 1. یک بسته Pip اضافی نصب کنید تا یک شیم CounterFit نصب شود که بتواند با حسگرهای مبتنی بر 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.fa.png) حسگر GPS ایجاد شده و در لیست حسگرها ظاهر می‌شود. ![حسگر GPS ایجاد شده](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.fa.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. این کد را اجرا کنید، مطمئن شوید که از ترمینالی متفاوت از ترمینالی که برنامه CounterFit در آن اجرا می‌شود استفاده می‌کنید تا برنامه CounterFit همچنان در حال اجرا باقی بماند. 1. از برنامه CounterFit، مقدار حسگر GPS را تغییر دهید. می‌توانید این کار را به یکی از روش‌های زیر انجام دهید: * مقدار **Source** را روی `Lat/Lon` تنظیم کنید و یک عرض جغرافیایی، طول جغرافیایی و تعداد ماهواره‌های استفاده‌شده برای دریافت موقعیت GPS مشخص کنید. این مقدار فقط یک بار ارسال می‌شود، بنابراین گزینه **Repeat** را علامت بزنید تا داده‌ها هر ثانیه تکرار شوند. ![حسگر GPS با Lat/Lon تنظیم شده](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.fa.png) * مقدار **Source** را روی `NMEA` تنظیم کنید و چند جمله NMEA در کادر متن وارد کنید. تمام این مقادیر ارسال می‌شوند، با تأخیری ۱ ثانیه‌ای قبل از هر جمله GGA (موقعیت‌یابی). ![حسگر GPS با جملات NMEA تنظیم شده](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.fa.png) می‌توانید از ابزاری مانند [nmeagen.org](https://www.nmeagen.org) برای تولید این جملات با کشیدن روی نقشه استفاده کنید. این مقادیر فقط یک بار ارسال می‌شوند، بنابراین گزینه **Repeat** را علامت بزنید تا داده‌ها یک ثانیه پس از ارسال کامل تکرار شوند. * مقدار **Source** را روی فایل GPX تنظیم کنید و یک فایل GPX با موقعیت‌های مسیر بارگذاری کنید. می‌توانید فایل‌های GPX را از سایت‌های محبوب نقشه‌برداری و کوهنوردی مانند [AllTrails](https://www.alltrails.com/) دانلود کنید. این فایل‌ها شامل چندین موقعیت GPS به صورت یک مسیر هستند و حسگر GPS هر موقعیت جدید را با فاصله ۱ ثانیه بازمی‌گرداند. ![حسگر GPS با فایل GPX تنظیم شده](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.fa.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 شما با موفقیت اجرا شد! **سلب مسئولیت**: این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.