Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp57 [2020/06/16 16:54] – [Программный код эксперимента] labuser29products:laboratory_iot:exp57 [2024/12/05 10:54] (текущий) – [Программный код эксперимента] labuser30
Строка 1: Строка 1:
-===== Эксперимент 57. Простой веб- сервер =====+===== Эксперимент 57. Простой веб-сервер =====
  
 В прошлом эксперименте мы получили список доступных сетей Wi-Fi. После подключения к одной из них мы станем полноценным участником информационного обмена в ней. Мы сможем быть как клиентом, так и сервером. Как мы уже узнали ранее, клиент — это программа, которая запрашивает данные, а сервер — это программа, которая отдает данные. Сервер ожидает когда клиент к нему подключится и запросит данные. В прошлом эксперименте мы получили список доступных сетей Wi-Fi. После подключения к одной из них мы станем полноценным участником информационного обмена в ней. Мы сможем быть как клиентом, так и сервером. Как мы уже узнали ранее, клиент — это программа, которая запрашивает данные, а сервер — это программа, которая отдает данные. Сервер ожидает когда клиент к нему подключится и запросит данные.
Строка 7: Строка 7:
 В прошлом эксперименте мы получали список доступных Wi-Fi сетей. Необходимо убедиться, что среди них есть нужная сеть — домашняя сеть или сеть, поднятая посредством смартфона. Имя этой сети нужно записать. Также нужно удостовериться, что уровень сигнала достаточный для подключения. Если RSSI (мощность сигнала) менее, чем -70, то необходимо переместиться ближе к точки доступа. В прошлом эксперименте мы получали список доступных Wi-Fi сетей. Необходимо убедиться, что среди них есть нужная сеть — домашняя сеть или сеть, поднятая посредством смартфона. Имя этой сети нужно записать. Также нужно удостовериться, что уровень сигнала достаточный для подключения. Если RSSI (мощность сигнала) менее, чем -70, то необходимо переместиться ближе к точки доступа.
  
-Попробуем написать простейший веб- сервер, который будет отвечать на запросы клиентов. Для этого нам потребуется библиотека ''micropyserver''. Ее нужно закачать в корень файловой системы микроконтроллера.  +Попробуем написать простейший веб-сервер, который будет отвечать на запросы клиентов. Для этого нам потребуется библиотека ''micropyserver''. Ее нужно закачать в корень файловой системы микроконтроллера.  
-Скачать ее можно по ссылке ниже. Как обычно, в архиве 2 версии — в виде исходных кодов с расширением .py и в откомпилированном виде с расширением .mpy. Мы рекомендуем загружать в микроконтроллер откомпилированную версию бибилотеки, а для самостоятельного изучения можно читать код в файле с исходным кодом.+Скачать ее можно по ссылке ниже. Как обычно, в архиве 2 версии — в виде исходных кодов с расширением .py и в откомпилированном виде с расширением .mpy. Мы рекомендуем загружать в микроконтроллер откомпилированную версию библиотеки, а для самостоятельного изучения можно читать код в файле с исходным кодом.
  
 <WRAP center round download 60%> <WRAP center round download 60%>
Строка 48: Строка 48:
 </file> </file>
  
-Первым делом в коде программы нужно заменить ''Wi-Fi_Name'' на имя нужной ести, а ''Wi-Fi_Password'' на пароль от нее.+<WRAP center round important 60%> 
 +Первым делом в коде программы нужно заменить ''Wi-Fi_Name'' на имя нужной cети, а ''Wi-Fi_Password'' на пароль от нее. 
 +</WRAP> 
  
 ''gc.collect()'' — вызывается для сборки "мусора". Переменные, объекты и данные, которые были использованы в программах не сразу удаляются из памяти микроконтроллера после завершения использования и даже после завершения программы. Python удаляет эти данные постепенно. Чтобы очистить память немедленно мы и вызываем ''gc.collect()''. Без этого при многократных запусках программ может возникнуть нехватка памяти. ''gc.collect()'' — вызывается для сборки "мусора". Переменные, объекты и данные, которые были использованы в программах не сразу удаляются из памяти микроконтроллера после завершения использования и даже после завершения программы. Python удаляет эти данные постепенно. Чтобы очистить память немедленно мы и вызываем ''gc.collect()''. Без этого при многократных запусках программ может возникнуть нехватка памяти.
Строка 70: Строка 73:
 </code> </code>
  
-В сети есть специальный сервер, который выдает настройки вновь подключаемым устройствам — DHCP сервер. Помимо прочих настроек, он назначет устройствам IP- адреса. После подключения нашего устрйоства, ему был присвоен IP- адрес. Выведем этот адрес в терминал+В сети есть специальный сервер, который выдает настройки вновь подключаемым устройствам — DHCP сервер. Помимо прочих настроек, он назначает устройствам IP- адреса. После подключения нашего устройства, ему был присвоен IP-адрес. Выведем этот адрес в терминал
 <code python[enable_line_numbers="2", start_line_numbers_at="19"]> <code python[enable_line_numbers="2", start_line_numbers_at="19"]>
 print('Device IP:', wlan.ifconfig()[0]) print('Device IP:', wlan.ifconfig()[0])
 </code> </code>
  
-Например, может быть получен адрес ''192.168.0.25''. Но может быть и другой. Это зависит от настроек сети и уже подключенных к ней устройств. Не очень важно какой именно адрес был назначен нашему микроконтроллеру, главное, что этот адрес нам нужно запомнить, ведь именно по нему мы будем обращаться к устройству.+Например, может быть получен адрес ''192.168.0.25'' или ''192.168.43.195''. Но может быть и другой. Это зависит от настроек сети и уже подключенных к ней устройств. Не очень важно какой именно адрес был назначен нашему микроконтроллеру, главное, что этот адрес нам нужно запомнить, ведь именно по нему мы будем обращаться к устройству.
  
 Создадим веб- сервер Создадим веб- сервер
Строка 87: Строка 90:
 </code> </code>
  
-На веб- сервере, или скажем: на сайте, может быть не одна страница, а много. Адрес страницы, к которой мы хотим обратиться мы передаем в адресе (URL) после домена сайта. Например http://pinlab.ru/page1 или http://pinlab.ru/page2. Если имя страницы отсутствует, то обращение происходит к главной странице.+На веб- сервере, или скажем: на сайте, может быть не одна страница, а много. Адрес страницы, к которой мы хотим обратиться мы передаем в адресе (URL) после домена сайта. Например %%http://pinlab.ru/page1%% или %%http://pinlab.ru/page2%%. Если имя страницы отсутствует, то обращение происходит к главной странице. В коде нашего сервера адрес главной страницы обозначается символом ''/'' 
 + 
 +Запускаем веб- сервер 
 +<code python[enable_line_numbers="2", start_line_numbers_at="29"]> 
 +server.start() 
 +</code> 
 + 
 +Все, теперь на нашем устройстве запущен веб-сервер, который ждет присоединения клиента. Давайте присоединимся. Самое главное условие — чтобы сервер и клиент находились в одной сети. Например, если у тебя дома Wi-Fi роутер, к которому подключился микроконтроллер и к этому же роутеру подключен домашний компьютер, то микроконтроллер и компьютер находятся в одной сети. Тогда мы можем обратиться к нашему серверу с компьютера.  
 + 
 +Если твой смартфон подключен по Wi-Fi к этому же роутеру, то можно обратиться к серверу с этого смартфона. Но если смартфон не подключен к этому же Wi-Fi роутеру, а выходит в интернет через сотовую вышку — то подключиться с него не получится. Прежде чем попытаться обратиться к серверу убедись, что сервер и клиент находятся в одной сети. После этого в адресной строке браузера нужно набрать IP- адрес, который получил микроконтроллер. 
 + 
 +В нашем случае микроконтроллером был получен IP ''192.168.43.195'' при подключении к точке доступа Wi-Fi, которая создана посредством смартфона, поэтому его и вводим в браузер в смартфоне ''192.168.43.195'' 
 +{{ :products:esp-iot:076a2fd8-06d0-4e5a-b02a-c3f397cea6c4.jpg?direct&400 |}} 
 + 
 +Когда браузер обращается к главной странице нашего веб- сервера, веб сервер вызывает функцию ''show_message'': 
 +<code python[enable_line_numbers="2", start_line_numbers_at="21"]> 
 +def show_message(request, params): 
 +    ''' request handler ''' 
 +    server.send("HELLO WORLD!"
 +</code> 
 + 
 +В ней всего одна строка, в которой вызывается метод ''send'', отправляющий клиенту ответ. Именно этот текст мы и увидели в браузере. 
  
 +Таким образом мы написали простейший веб-сервер, который при обращении к нему отправляет строку приветствия.