Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp67 [2024/12/05 17:45] – [Программный код эксперимента] labuser30products:laboratory_iot_c:exp67 [2024/12/16 15:00] (текущий) – [Программный код эксперимента] labuser30
Строка 10: Строка 10:
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
-<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>
Строка 23: Строка 23:
  
   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();
Строка 59: Строка 59:
   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));
 } }
  
Строка 66: Строка 66:
 </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 и получаем ответ.