244 KiB
Практическая работа 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}
Как дополнительная доработка мастер-скетча – может быть выполнена модификация, для, например, ежесекундной буферизации данных макетом и готовности по запросу, отдать готовые данные.
Рисунок 2. Коммуникация макетов.
В следующих лабораторных предстоит объединить работу макетов с программой, написанной на Python языке, для чего необходимо продумать, запомнить, запротоколировать все договоренности о формате передаваемых данных.
НАСТРОЙКА МАКЕТА В РЕЖИМЕ РАБОТЫ СЕРВЕРА
Для выполнения пункта лабораторной работы проведите анализ листинга данных полученных на предыдущих пунктах лабораторного практикума. Сделайте вывод о блокирующих свойствах работы функции опроса датчиков, в составе лабораторного макета. Следуйте предложенной последовательности действий для запуска макета в режиме сервера.
Сделайте конспект основных функций мастер-скетча и ответьте на вопрос для каждой их них: «за что отвечает данных блок кода?»
Какие из представленных функций определяют сетевые функции макета
Внесите исправления в код мастер-скетча и измените данные точки доступа, для получения доступа к Wi-fi точке, организованной в учебном помещении.
Воспользуйтесь предыдущими наработками, для получения данных с датчика.
Законспектируйте формат JSON посылки, определите в каком формате вы будете пересылать вложенные объекты, это важно, для дальнейшей разработки ПО для ПК на ЯП Python.
В дополнительном скетче выполните тестовую упаковку данных датчика макета, для этого создайте новый скетч – скопируйте необходимые функции и объявления переменных в созданный скетч.
В дополнительном скетче выполните тестовую распаковку данных макета, и присвоение состояниям светодиодов значений соответствующих, полученных переменных, для этого в тестовом скетче заведите строковую, статическую переменную, которая будет представлять атрибут body реального входящего http запроса от клиента.
Убедитесь в верном процессе десириализации и обработке тестовых данных. Тестовые данные предлагается представлять в строковом виде. выводя их в монитор порта, для просмотра результатов работы программы. Более продвинутые программисты, могут использовать псевдослучайные генераторы, для получения различных данных в ходе тестирования.
Работа с мастер-скетчем
Загрузите код мастер-скетча в микроконтроллер.
Выполните тестовое подключение к макету и получите реальные данные от него в обозревателе браузера.
После выполнения задания ответьте на вопросы:
Сколько времени занимает опрос датчиков?
Сколько времени занимает рутина (задача) полного ответа клиенту?
Подумайте, какими способами можно было бы упаковать состояния всех датчиков и описать состояние макета, в виде JSON документа?
Контрольные вопросы
Как устанавливаются пути, для определения действий макета в ходе получения запроса?
Какие коды возвращает сервер при успешном выполнении запроса?
Какие коды вернет сервер, при неудачном обработке запроса клиента?
Какие типы запросов используются в проекте?
Какие типы запросов являются REST full, для описания схожего приложения?
Какие коды ответа вернет сервер, при ошибке в запросе клиента?
Какие коды ошибок вернет сервер при неудачной попытке авторизовать клиента?
Какие коды ошибок вернет сервер, если не сможет найти ресурс?
Какие команды определят развертывание сервера на ESP8266 ?
Какие типы запросов могут позволить изменить данные на сервере?
Каким образом клиент может получить доступ к серверу, развернутом на лабораторном макете?
Для чего на в состав лабораторного макета входит отдельная микросхема памяти?
Почему в ходе сетевого взаимодействия могут увеличиться временные интервалы обработки клиентом запроса?
В состав макета входит как цифровой так и аналоговый датчик освещенности, в чем их различия, в чем сходства?
Опишите процесс взаимодействия с любым из цифровых датчиков лабораторного макета.
Для датчика акселерометра на основе полученных данных сделайте вывод о точности его работы.
Для датчика температуры и давления, сделайте вывод о его точности.
Приведите пример псевдо-кода инициализации цифрового датчика.
Приведите пример получения данных от датчика температуры и их обработки.
Реализуйте алгоритм интегральной, мажоритарной выборки данных освещенности, между датчиками освещенности аналоговым и цифровым. Предпочтение следует отдавать цифровому датчику.
Приведите пример кода получения усредненных данных датчиков выборки из множества значений. Оставьте возможность в прошивке управлять значением количества выборки.
Опишите алгоритм работы макета – сервера.
Опишите алгоритм распределения маршрутов клиента.
Представьте блок-схему взаимодействий с лабораторным макетом – сервером.
Опишите в виде JSON пакета сущность: студент.
Опишите в виде JSON пакета сущность: компьютер.
Опишите в виде JSON пакета сущность: язык программирования.
Опишите в виде JSON пакета сущность: гастрономический продукт.