Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
products:laboratory_iot:exp67 [2021/04/25 18:55] – labuser29 | products:laboratory_iot:exp67 [2024/12/05 17:44] (текущий) – labuser30 |
---|
===== Эксперимент 67. Отправка данных в интернет ===== | ===== Эксперимент 67. Отправка данных в интернет ===== |
| |
Мы уже умеем подключаться к WiFi сети или создавать собственную точку доступа. Поднимать свой веб- сервер, чтобы принимать команды или сообщать данные. Например, наш [[products:laboratory_iot:exp65|WiFi- термометр]] является типичным устройством интернета вещей. Это датчик, к которому можно получить доступ через интернет. Этот датчик может находиться на другом конце света, может находиться в теплице, в автомобиле. Он может измерять температуру какого нибудь важного технологического оборудования, следить за соблюдением технологического процесса на производстве. Чтобы получить информацию с этого датчика к нему нужно обратиться. | Мы уже умеем подключаться к WiFi сети или создавать собственную точку доступа. Поднимать свой веб- сервер, чтобы принимать команды или сообщать данные. Например, наш [[products:laboratory_iot:exp65|WiFi-термометр]] является типичным устройством интернета вещей. Это датчик, к которому можно получить доступ через интернет. Этот датчик может находиться на другом конце света, может находиться в теплице, в автомобиле. Он может измерять температуру какого-нибудь важного технологического оборудования, следить за соблюдением технологического процесса на производстве. Чтобы получить информацию с этого датчика к нему нужно обратиться. |
| |
Теперь мы попробуем сделать наоборот. Пусть наш термометр сам обращается на сервер в интернете и передает на него свои данные о температуре. На сервере эти данные будут сохраняться и мы, или другие пользователи интернета, смогут выйти на сайт и посмотреть данные, которые были ранее переданы туда. | Теперь мы попробуем сделать наоборот. Пусть наш термометр сам обращается на сервер в интернете и передает на него свои данные о температуре. На сервере эти данные будут сохраняться и мы, или другие пользователи интернета, смогут выйти на сайт и посмотреть данные, которые были ранее переданы туда. |
Для этих целей воспользуемся известным интернет- сервисом для хранения данных с устройств интернета вещей [[http://dweet.io/|dweet.io]]. Для наших целей нам даже не придется регистрироваться на этом сервисе. Достаточно просто передать на него данные и сервис их запомнит. | Для этих целей воспользуемся известным интернет- сервисом для хранения данных с устройств интернета вещей [[http://dweet.io/|dweet.io]]. Для наших целей нам даже не придется регистрироваться на этом сервисе. Достаточно просто передать на него данные и сервис их запомнит. |
| |
Для начала нам нужно просто научиться соединяться с интернет- сервисом и передавать туда хоть какие-то данные. Поэтому пока не будем собирать термометр, а ограничимся просто передачей константы. | Для начала нам нужно просто научиться соединяться с интернет-сервисом и передавать туда хоть какие-то данные. Поэтому пока не будем собирать термометр, а ограничимся просто передачей константы. |
| |
| ==== Программный код эксперимента ==== |
<file python Exp67.py[enable_line_numbers="2", start_line_numbers_at="1"]> | <file python Exp67.py[enable_line_numbers="2", start_line_numbers_at="1"]> |
from machine import Pin | from machine import Pin |
data = http_get('http://dweet.io/dweet/for/' + deviceName + '?temp=' + str(temp)) | data = http_get('http://dweet.io/dweet/for/' + deviceName + '?temp=' + str(temp)) |
</file> | </file> |
| |
| Первым делом нам необходимо подключиться к WiFi сети с доступом в интернет. После этого мы готовы к отправке данных. Для этого нам потребуется библиотека для работы с сокетами ''socket''. Сетевые сокеты — это интерфейс, который по сути представляет собой совокупность адреса в сети и используемого порта. |
| |
| <WRAP center round info 60%> |
| [[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'' это ее значение, которое необходимо заменить на реальное. |
| |
| Запишем имя нашего устройства и значение температуры в переменные для удобства дальнейшего их использования: |
| <code python[enable_line_numbers="2", start_line_numbers_at="49"]> |
| deviceName = 'PinLabIoTSensor010520' |
| temp = 22.9 |
| </code> |
| |
| Теперь формируем адрес в интернете (URL), по которому мы будем обращаться с параметрами, которые мы будем передавать: |
| <code python[enable_line_numbers="2", start_line_numbers_at="52"]> |
| data = http_get('http://dweet.io/dweet/for/' + deviceName + '?temp=' + str(temp)) |
| </code> |
| |
| Функция ''http_get'' принимает два параметра: URL и порт (по умолчанию 80). Функция обращается по указанному адресу, получает ответ от сервера и возвращает его в качестве ответа. В нашем случае ответ не требуется, мы просто передаем данные. |
| |
| Код функции ''http_get'' достаточно сложен, он реализует формирование HTTP запроса и разбор HTTP ответа . Чтобы понять эту функцию необходимо разбираться в протоколе HTTP. Но это не обязательно для того, чтобы просто ей пользоваться. Главное понимать, что с ее помощью мы формируем запрос к серверу, расположенному по адресу url и получаем ответ. |
| |
| Запустим данную программу. Она отправит данные в интернет- сервис dweet.io. Чтобы посмотреть эти данные в сервисе необходимо перейти по ссылке вида http://dweet.io/follow/DEVICENAME, где ''DEVICENAME'' имя устройства, указанное в программе. В нашем случае это http://dweet.io/follow/PinLabIoTSensor010520 |
| |
| {{ :products:esp-iot:2021-04-25_19-45-16.png?direct&600 |}} |
| |
| |
| Видим имя нашей переменной ''temp'' и ее значение 22.9. Значит данные были успешно переданы в интернет. |