faculty_project/Проектирование встроенных приложений Практическая работа 3 _вер.3_.docx

244 KiB
Raw Permalink History

Практическая работа 3.

ПРОГРАММИРОВАНИЕ. Отправка данных датчиков. Запуск Web-сервера.

Цель работы получить данные цифровых датчиков, аналоговых датчиков, в виде JSON пакета в ответе Web-сервера.

ОБЩИЕ СВЕДЕНИЯ

Основной идеей создания серверного модуля в составе лабораторного комплекса, является получение данных в виде интернет-страницы или JSON пакета данных (для проектирование ПО для ПК).

На рисунке 1 представлен вид путей общения и маршрутизации клиента и ответов сервера макета с датчиками. Причем обеспечивается как отправка данных с макета (упаковка всех данных датчика, пройденная в ходе предыдущих лабораторных работ), так и получение макетом обновленных данных, для решения задач управления, отображения внешних данных.

Для эффективной работы в рамках лабораторного практикума необходимо изучить приложение 1 лаб. работы 2, и провести анализ мастер-скетча. Все функции в представленной программе, работоспособные и выполняют поставленные задачи. Так же обратитесь к контрольным вопросам к подпунктам лабораторной работы, они помогут вам в выполнении работы, защите лабораторной работы и проведения дополнительных модификаций программы для МК.

Рисунок 1. Представление путей обращения для Web-сервера.

Будем считать клиента в этой системе любое внешнее устройство, например ПК, мобильное устройство, подключенное к единой локальной сети с лабораторным макетом. Клиент может обращаться к лабораторному макету с запросами по прямому IP адресу или короткому mDNS имени.

Сервер в данной системе это сам лабораторный макет, который запускает серверную службу и после этого готов реагировать на входящие на его адрес запросы от клиентов, выполняя полезную работу, для пользователя. Например собирая данные с датчиков, обрабатывая ее и пересылая в ответ на запрос клиента. Так же макет может отвечать сервисными сообщениями, например, о текущем состоянии и д.р.

Основное место в настройке макета, занимает функция указания путей маршрутизации, для обработки клиентских запросов, типа: esp8266/getData, где getData внутренний путь, для принятия решения сервером о действии которое нужно выполнить в программном коде(какую функцию программного кода необходимо выполнить), и вернуть ответ пользователю, если это требуется. Так для получения макетом данных используется функция GetData (см. мастер-скетч), включающая парсинг JSON сообщения. А так же функция sendData, включающая отправку актуального состояния датчиков. Важно отметить, что данные для отправки макет собирает, в данной реализации, непосредственно после получения запроса, а не выдает буферизированные данные, что может замедлить работу клиентского приложения. Используемый в проекта JSON формат передачи данных, является одним из распространенных форматов сериализации/десериализации данных в программной среде. Каждый программный объект в JJSON формате заключен в фигурные скобки, а каждый параметр объекта представлен парой ключ-значение, при чем значение может быть таким же вложенным объектом, например:

Листинг 1. Пример сообщения в JSON формате.

{ “Name”: “Ivan , “Mood”: {“value” : 45, “caterogyId”: 5} }

Листинг 2. Пример сообщения в JSON формате.

{ “name”: “presure”, “value”: “prescent”, “volume”: 94, “accuary”: 0.12}

Как дополнительная доработка мастер-скетча может быть выполнена модификация, для, например, ежесекундной буферизации данных макетом и готовности по запросу, отдать готовые данные.

D:\all\job\РЭС\РП IoT весна 2023\classes connection diargramm v2.drawio.png

Рисунок 2. Коммуникация макетов.

В следующих лабораторных предстоит объединить работу макетов с программой, написанной на Python языке, для чего необходимо продумать, запомнить, запротоколировать все договоренности о формате передаваемых данных.

  1. НАСТРОЙКА МАКЕТА В РЕЖИМЕ РАБОТЫ СЕРВЕРА

Для выполнения пункта лабораторной работы проведите анализ листинга данных полученных на предыдущих пунктах лабораторного практикума. Сделайте вывод о блокирующих свойствах работы функции опроса датчиков, в составе лабораторного макета. Следуйте предложенной последовательности действий для запуска макета в режиме сервера.

  1. Сделайте конспект основных функций мастер-скетча и ответьте на вопрос для каждой их них: «за что отвечает данных блок кода?»

  2. Какие из представленных функций определяют сетевые функции макета

  3. Внесите исправления в код мастер-скетча и измените данные точки доступа, для получения доступа к Wi-fi точке, организованной в учебном помещении.

  4. Воспользуйтесь предыдущими наработками, для получения данных с датчика.

  5. Законспектируйте формат JSON посылки, определите в каком формате вы будете пересылать вложенные объекты, это важно, для дальнейшей разработки ПО для ПК на ЯП Python.

  6. В дополнительном скетче выполните тестовую упаковку данных датчика макета, для этого создайте новый скетч скопируйте необходимые функции и объявления переменных в созданный скетч.

  7. В дополнительном скетче выполните тестовую распаковку данных макета, и присвоение состояниям светодиодов значений соответствующих, полученных переменных, для этого в тестовом скетче заведите строковую, статическую переменную, которая будет представлять атрибут body реального входящего http запроса от клиента.

  8. Убедитесь в верном процессе десириализации и обработке тестовых данных. Тестовые данные предлагается представлять в строковом виде. выводя их в монитор порта, для просмотра результатов работы программы. Более продвинутые программисты, могут использовать псевдослучайные генераторы, для получения различных данных в ходе тестирования.

Работа с мастер-скетчем

  1. Загрузите код мастер-скетча в микроконтроллер.

  2. Выполните тестовое подключение к макету и получите реальные данные от него в обозревателе браузера.

После выполнения задания ответьте на вопросы:

  • Сколько времени занимает опрос датчиков?

  • Сколько времени занимает рутина (задача) полного ответа клиенту?

  • Подумайте, какими способами можно было бы упаковать состояния всех датчиков и описать состояние макета, в виде JSON документа?

Контрольные вопросы

  1. Как устанавливаются пути, для определения действий макета в ходе получения запроса?

  2. Какие коды возвращает сервер при успешном выполнении запроса?

  3. Какие коды вернет сервер, при неудачном обработке запроса клиента?

  4. Какие типы запросов используются в проекте?

  5. Какие типы запросов являются REST full, для описания схожего приложения?

  6. Какие коды ответа вернет сервер, при ошибке в запросе клиента?

  7. Какие коды ошибок вернет сервер при неудачной попытке авторизовать клиента?

  8. Какие коды ошибок вернет сервер, если не сможет найти ресурс?

  9. Какие команды определят развертывание сервера на ESP8266 ?

  10. Какие типы запросов могут позволить изменить данные на сервере?

  11. Каким образом клиент может получить доступ к серверу, развернутом на лабораторном макете?

  12. Для чего на в состав лабораторного макета входит отдельная микросхема памяти?

  13. Почему в ходе сетевого взаимодействия могут увеличиться временные интервалы обработки клиентом запроса?

  14. В состав макета входит как цифровой так и аналоговый датчик освещенности, в чем их различия, в чем сходства?

  15. Опишите процесс взаимодействия с любым из цифровых датчиков лабораторного макета.

  16. Для датчика акселерометра на основе полученных данных сделайте вывод о точности его работы.

  17. Для датчика температуры и давления, сделайте вывод о его точности.

  18. Приведите пример псевдо-кода инициализации цифрового датчика.

  19. Приведите пример получения данных от датчика температуры и их обработки.

  20. Реализуйте алгоритм интегральной, мажоритарной выборки данных освещенности, между датчиками освещенности аналоговым и цифровым. Предпочтение следует отдавать цифровому датчику.

  21. Приведите пример кода получения усредненных данных датчиков выборки из множества значений. Оставьте возможность в прошивке управлять значением количества выборки.

  22. Опишите алгоритм работы макета сервера.

  23. Опишите алгоритм распределения маршрутов клиента.

  24. Представьте блок-схему взаимодействий с лабораторным макетом сервером.

  25. Опишите в виде JSON пакета сущность: студент.

  26. Опишите в виде JSON пакета сущность: компьютер.

  27. Опишите в виде JSON пакета сущность: язык программирования.

  28. Опишите в виде JSON пакета сущность: гастрономический продукт.