Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
products:laboratory_iot_c:exp57 [2024/12/05 11:06] – [Программный код эксперимента] labuser30 | products:laboratory_iot_c:exp57 [2024/12/05 11:22] (текущий) – [Программный код эксперимента] labuser30 |
---|
#include <ESP8266WebServer.h> | #include <ESP8266WebServer.h> |
| |
#define WIFI_NAME "Freedom" | #define WIFI_NAME "WiFi_Name" |
#define WIFI_PASSWORD "koval2121" | #define WIFI_PASSWORD "WiFi_Password" |
| |
ESP8266WebServer server(80); | ESP8266WebServer server(80); |
</WRAP> | </WRAP> |
| |
Создаем объект сетевого интерфейса и активируем его | Создаем объект веб-сервера, в качестве параметра указываем порт на котором он будет принимать запросы. |
<code python[enable_line_numbers="2", start_line_numbers_at="11"]> | <code arduino[enable_line_numbers="2", start_line_numbers_at="7"]> |
wlan = network.WLAN(network.STA_IF) | ESP8266WebServer server(80); |
wlan.active(True) | |
</code> | </code> |
| |
Подключаемся к сети и секунду ждем соединения | Устанавливаем режим клиента. Подключаемся к сети и печатаем точку каждые полсекунды, до тех пор, пока микроконтроллер не подключится к сети. Если соединение не устанавливается, то скорее всего допущена ошибка в имени сети или пароле от нее. |
<code python[enable_line_numbers="2", start_line_numbers_at="13"]> | <code arduino[enable_line_numbers="2", start_line_numbers_at="19"]> |
wlan.connect(wlan_id, wlan_pass) | WiFi.mode(WIFI_STA); |
time.sleep(1) | WiFi.begin(WIFI_NAME, WIFI_PASSWORD); |
| while (WiFi.status() != WL_CONNECTED) { |
| Serial.print("."); |
| delay(500); |
| } |
</code> | </code> |
| |
Проверяем состояние подключения. Если соединение еще не установлено, то проверяем снова, до тех пор, пока соединение не будет установлено. Если соединение не устанавливается, то скорее всего допущена ошибка в имени сети или пароле от нее. | В сети есть специальный сервер, который выдает настройки вновь подключаемым устройствам — DHCP сервер. Помимо прочих настроек, он назначает устройствам IP- адреса. После подключения нашего устройства, ему был присвоен IP-адрес. Выведем этот адрес в последовательный порт. |
<code python[enable_line_numbers="2", start_line_numbers_at="16"]> | <code arduino[enable_line_numbers="2", start_line_numbers_at="26"]> |
while wlan.isconnected() == False: | Serial.print("IP address: "); |
pass | Serial.println(WiFi.localIP()); |
</code> | |
| |
В сети есть специальный сервер, который выдает настройки вновь подключаемым устройствам — DHCP сервер. Помимо прочих настроек, он назначает устройствам IP- адреса. После подключения нашего устройства, ему был присвоен IP-адрес. Выведем этот адрес в терминал | |
<code python[enable_line_numbers="2", start_line_numbers_at="19"]> | |
print('Device IP:', wlan.ifconfig()[0]) | |
</code> | </code> |
| |
Например, может быть получен адрес ''192.168.0.25'' или ''192.168.43.195''. Но может быть и другой. Это зависит от настроек сети и уже подключенных к ней устройств. Не очень важно какой именно адрес был назначен нашему микроконтроллеру, главное, что этот адрес нам нужно запомнить, ведь именно по нему мы будем обращаться к устройству. | Например, может быть получен адрес ''192.168.0.25'' или ''192.168.43.195''. Но может быть и другой. Это зависит от настроек сети и уже подключенных к ней устройств. Не очень важно какой именно адрес был назначен нашему микроконтроллеру, главное, что этот адрес нам нужно запомнить, ведь именно по нему мы будем обращаться к устройству. |
| |
Создадим веб- сервер | Настраиваем веб-сервер таким образом, что при обращении к главной странице будет вызываться функция ''show_message'' |
<code python[enable_line_numbers="2", start_line_numbers_at="25"]> | |
server = MicroPyServer() | |
</code> | |
| |
Настроим его таким образом, что при обращении к главной странице будет вызываться функция ''show_message'' | <code arduino[enable_line_numbers="2", start_line_numbers_at="29"]> |
<code python[enable_line_numbers="2", start_line_numbers_at="27"]> | server.on("/", showMessage); |
server.add_route("/", show_message) | |
</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"]> | <code arduino[enable_line_numbers="2", start_line_numbers_at="30"]> |
server.start() | server.begin(); |
| </code> |
| |
| В основном цикле программы проверяем наличие новых клиентов: |
| <code arduino[enable_line_numbers="2", start_line_numbers_at="30"]> |
| server.handleClient(); |
</code> | </code> |
| |
| |
Когда браузер обращается к главной странице нашего веб- сервера, веб сервер вызывает функцию ''show_message'': | Когда браузер обращается к главной странице нашего веб- сервера, веб сервер вызывает функцию ''show_message'': |
<code python[enable_line_numbers="2", start_line_numbers_at="21"]> | <code arduino[enable_line_numbers="2", start_line_numbers_at="9"]> |
def show_message(request, params): | void showMessage() { |
''' request handler ''' | server.send(200, "text/html", "HELLO WORLD!"); |
server.send("HELLO WORLD!") | } |
</code> | </code> |
| В ней всего одна строка, в которой вызывается метод ''send'', отправляющий клиенту ответ. Именно этот текст мы и увидели в браузере. Первый аргумент метода ''send()'' — код HTTP сообщения, второй — тип сообщение, третий — само сообщение. |
В ней всего одна строка, в которой вызывается метод ''send'', отправляющий клиенту ответ. Именно этот текст мы и увидели в браузере. | |
| |
Таким образом мы написали простейший веб-сервер, который при обращении к нему отправляет строку приветствия. | Таким образом мы написали простейший веб-сервер, который при обращении к нему отправляет строку приветствия. |