# Обнаружение близости - Виртуальное IoT оборудование В этой части урока вы добавите датчик близости к вашему виртуальному IoT-устройству и будете считывать расстояние с него. ## Оборудование Виртуальное IoT-устройство будет использовать симулированный датчик расстояния. В физическом IoT-устройстве вы бы использовали датчик с лазерным модулем для измерения расстояния. ### Добавление датчика расстояния в CounterFit Чтобы использовать виртуальный датчик расстояния, необходимо добавить его в приложение CounterFit. #### Задача - добавление датчика расстояния в CounterFit Добавьте датчик расстояния в приложение CounterFit. 1. Откройте код `fruit-quality-detector` в VS Code и убедитесь, что виртуальная среда активирована. 1. Установите дополнительный пакет Pip, чтобы добавить CounterFit shim, который может взаимодействовать с датчиками расстояния, симулируя [rpi-vl53l0x Pip package](https://pypi.org/project/rpi-vl53l0x/) — Python-пакет, который работает с [датчиком расстояния VL53L0X](https://wiki.seeedstudio.com/Grove-Time_of_Flight_Distance_Sensor-VL53L0X/). Убедитесь, что установка выполняется из терминала с активированной виртуальной средой. ```sh pip install counterfit-shims-rpi-vl53l0x ``` 1. Убедитесь, что веб-приложение CounterFit запущено. 1. Создайте датчик расстояния: 1. В поле *Create sensor* на панели *Sensors* раскройте список *Sensor type* и выберите *Distance*. 1. Оставьте *Units* как `Millimeter`. 1. Этот датчик является датчиком I²C, поэтому установите адрес `0x29`. Если бы вы использовали физический датчик VL53L0X, он был бы жестко привязан к этому адресу. 1. Нажмите кнопку **Add**, чтобы создать датчик расстояния. ![Настройки датчика расстояния](../../../../../translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.ru.png) Датчик расстояния будет создан и появится в списке датчиков. ![Созданный датчик расстояния](../../../../../translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.ru.png) ## Программирование датчика расстояния Теперь виртуальное IoT-устройство можно запрограммировать для использования симулированного датчика расстояния. ### Задача - программирование датчика времени полета 1. Создайте новый файл в проекте `fruit-quality-detector` с именем `distance-sensor.py`. > 💁 Легкий способ симулировать несколько IoT-устройств — создать для каждого отдельный Python-файл, а затем запускать их одновременно. 1. Начните подключение к CounterFit с помощью следующего кода: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` 1. Добавьте следующий код ниже: ```python import time from counterfit_shims_rpi_vl53l0x.vl53l0x import VL53L0X ``` Этот код импортирует библиотеку shim для датчика времени полета VL53L0X. 1. Ниже добавьте следующий код для доступа к датчику: ```python distance_sensor = VL53L0X() distance_sensor.begin() ``` Этот код объявляет датчик расстояния, а затем запускает его. 1. Наконец, добавьте бесконечный цикл для считывания расстояний: ```python while True: distance_sensor.wait_ready() print(f'Distance = {distance_sensor.get_distance()} mm') time.sleep(1) ``` Этот код ожидает готовности значения для считывания с датчика, а затем выводит его в консоль. 1. Запустите этот код. > 💁 Не забудьте, что этот файл называется `distance-sensor.py`! Убедитесь, что вы запускаете его через Python, а не `app.py`. 1. Вы увидите измерения расстояния в консоли. Измените значение в CounterFit, чтобы увидеть, как оно меняется, или используйте случайные значения. ```output (.venv) ➜ fruit-quality-detector python distance-sensor.py Distance = 37 mm Distance = 42 mm Distance = 29 mm ``` > 💁 Вы можете найти этот код в папке [code-proximity/virtual-iot-device](../../../../../4-manufacturing/lessons/4-trigger-fruit-detector/code-proximity/virtual-iot-device). 😀 Программа для вашего датчика близости успешно завершена! --- **Отказ от ответственности**: Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.