Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
products:laboratory_iot_c:exp67 [2024/12/05 17:45] – [Программный код эксперимента] labuser30 | products:laboratory_iot_c:exp67 [2024/12/16 15:00] (текущий) – [Программный код эксперимента] labuser30 |
---|
| |
==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== |
<file python Exp67.py[enable_line_numbers="2", start_line_numbers_at="1"]> | <file arduino Exp67.ino[enable_line_numbers="2", start_line_numbers_at="1"]> |
#include <ESP8266WiFi.h> | #include <ESP8266WiFi.h> |
#include <WiFiClient.h> | #include <WiFiClient.h> |
| |
if (http.begin(client, url)) { | if (http.begin(client, url)) { |
Serial.print("[HTTP] GET...\n"); | Serial.print("[HTTP] GET\n"); |
int httpCode = http.GET(); | int httpCode = http.GET(); |
if (httpCode > 0) { | if (httpCode > 0) { |
Serial.printf("[HTTP] GET... code: %d\n", httpCode); | Serial.printf("[HTTP] GET code: %d\n", httpCode); |
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { | if (httpCode == HTTP_CODE_OK) { |
String payload = http.getString(); | String payload = http.getString(); |
Serial.println(payload); | Serial.println(payload); |
} else { | } else { |
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); | Serial.printf("[HTTP] GET failed, error: %s\n", http.errorToString(httpCode).c_str()); |
} | } |
http.end(); | http.end(); |
float temp = 22.9; | float temp = 22.9; |
| |
httpGet("http://dweet.io/dweet/for/" + device_name + "?temp=" + String(22.9)); | httpGet("http://dweet.io/dweet/for/" + device_name + "?temp=" + String(temp)); |
} | } |
| |
</file> | </file> |
| |
Первым делом нам необходимо подключиться к WiFi сети с доступом в интернет. После этого мы готовы к отправке данных. Для этого нам потребуется библиотека для работы с сокетами ''socket''. Сетевые сокеты — это интерфейс, который по сути представляет собой совокупность адреса в сети и используемого порта. | Первым делом нам необходимо подключиться к WiFi сети с доступом в интернет. После этого мы готовы к отправке данных. Для этого нам потребуется библиотеки для работы ''WiFiClient'' и ''ESP8266HTTPClient'' |
| |
<WRAP center round info 60%> | Чтобы передать данные на сервер нам нужно знать его адрес. В нашем случае адрес http://dweet.io/dweet/for/DEVICENAME?temp=TEMP. Вместо DEVICENAME нужно подставить свое имя устройства. Имя может быть любым, но желательно придумать уникальное. Такое, которое точно еще не использовано. Мы придумали PinLabIoTSensor010520. Вам необходимо придумать свое, например IvanovIvanSPBSensor123. |
[[https://lecturesnet.readthedocs.io/net/low-level/ipc/socket/intro.html|Подробнее о сокетах]] | |
</WRAP> | |
| |
Чтобы передать данные на сервер нам нужно знать его адрес и порт. В нашем случае адрес http://dweet.io/dweet/for/DEVICENAME?temp=TEMP а порт 80 (стандартный порт для протокола HTTP). | |
Вместо DEVICENAME нужно подставить свое имя устройства. Имя может быть любым, но желательно придумать уникальное. Такое, которое точно еще не использовано. Мы придумали PinLabIoTSensor010520. Вам необходимо придумать свое, например IvanovIvanSPBSensor123. | |
| |
После знака ''?'' передаются данные. В нашем случае это temp=TEMP, где ''temp'' это имя переменной, а ''TEMP'' это ее значение, которое необходимо заменить на реальное. | После знака ''?'' передаются данные. В нашем случае это temp=TEMP, где ''temp'' это имя переменной, а ''TEMP'' это ее значение, которое необходимо заменить на реальное. |
| |
Запишем имя нашего устройства и значение температуры в переменные для удобства дальнейшего их использования: | Запишем имя нашего устройства и значение температуры в переменные для удобства дальнейшего их использования: |
<code python[enable_line_numbers="2", start_line_numbers_at="49"]> | <code python[enable_line_numbers="2", start_line_numbers_at="46"]> |
deviceName = 'PinLabIoTSensor010520' | String device_name = "PinLabIoTSensor010520"; |
temp = 22.9 | float temp = 22.9; |
</code> | </code> |
| |
Теперь формируем адрес в интернете (URL), по которому мы будем обращаться с параметрами, которые мы будем передавать: | Теперь формируем адрес в интернете (URL), по которому мы будем обращаться с параметрами, которые мы будем передавать: |
<code python[enable_line_numbers="2", start_line_numbers_at="52"]> | <code arduino[enable_line_numbers="2", start_line_numbers_at="49"]> |
data = http_get('http://dweet.io/dweet/for/' + deviceName + '?temp=' + str(temp)) | httpGet("http://dweet.io/dweet/for/" + device_name + "?temp=" + String(temp)); |
</code> | </code> |
| |
Функция ''http_get'' принимает два параметра: URL и порт (по умолчанию 80). Функция обращается по указанному адресу, получает ответ от сервера и возвращает его в качестве ответа. В нашем случае ответ не требуется, мы просто передаем данные. | Функция ''http_get'' принимает один параметра URL. Функция обращается по указанному адресу, получает ответ от сервера и печатает ответ в последовательный порт. |
| |
Код функции ''http_get'' достаточно сложен, он реализует формирование HTTP запроса и разбор HTTP ответа . Чтобы понять эту функцию необходимо разбираться в протоколе HTTP. Но это не обязательно для того, чтобы просто ей пользоваться. Главное понимать, что с ее помощью мы формируем запрос к серверу, расположенному по адресу url и получаем ответ. | Код функции ''http_get'' достаточно сложен, он реализует формирование HTTP запроса и разбор HTTP ответа . Чтобы понять эту функцию необходимо разбираться в протоколе HTTP. Но это не обязательно для того, чтобы просто ей пользоваться. Главное понимать, что с ее помощью мы формируем запрос к серверу, расположенному по адресу url и получаем ответ. |