Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| products:laboratory_iot:exp69 [2020/06/14 15:47] – создано labuser29 | products:laboratory_iot:exp69 [2024/12/16 15:23] (текущий) – labuser30 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ===== Эксперимент 69. Получение данных с интернет- сервиса ===== | + | ===== Эксперимент 69. Получение данных с интернет-сервиса ===== |
| - | Устройства интернета- вещей не только отправляют данные в интернет, | + | Устройства интернета-вещей не только отправляют данные в интернет, |
| + | |||
| + | Попробуем поработать с веб-сервисом. Для получения погодных данных хорошо подходит веб-сервис weatherbit.io. Основные данные о погоде данный сервис предоставляет бесплатно до 500 запросов в сутки, но необходимо пройти простую процедуру регистрации. | ||
| + | |||
| + | Регистрация происходит на странице [[https:// | ||
| + | {{ : | ||
| + | |||
| + | Вводим в поле **Username** логин, например pinlab. В поле **Password** пароль, | ||
| + | |||
| + | Устанавливаем галочку **I accept the Terms and Conditions and the Privacy Policy**, которой мы подтверждаем согласие с условиями предоставления сервиса. По желанию можно убрать галочку **Send me updates via email**, чтобы не получать писем от этого сервиса. | ||
| + | |||
| + | Ставим галочку **Я не робот** и нажимаем на кнопку **Submit**. | ||
| + | |||
| + | Если выводится сообщение **Signup blocked due to suspected spam. If you are a human, please use another VPN / IP address.** нужно попробовать включить VPN. | ||
| + | |||
| + | Если форма заполнена правильно, | ||
| + | {{ : | ||
| + | |||
| + | После авторизации в сервисе мы попадаем на страницу, | ||
| + | {{ : | ||
| + | |||
| + | * Company Name/ | ||
| + | * First Name*, Last Name* — имя и фамилия, | ||
| + | * Country — страна, | ||
| + | * API Tier* — тарифный план сервиса, | ||
| + | * API Usage Purpose* — для чего мы будем использовать сервис, | ||
| + | |||
| + | После заполнения формы нажимаем на кнопку Proceed to Dashboard. После этого открывается страница с ключом доступа | ||
| + | {{ : | ||
| + | |||
| + | В нашем случае наш ключ доступа это 341182dee74d4049a0dc5470919e39fa, | ||
| + | |||
| + | ==== Схема эксперимента ==== | ||
| + | Схема отсутствует. | ||
| + | |||
| + | ==== Программный код эксперимента ==== | ||
| + | |||
| + | <file python Exp69.py[enable_line_numbers=" | ||
| + | from machine import Pin | ||
| + | import network | ||
| + | import gc | ||
| + | import time | ||
| + | import socket | ||
| + | import json | ||
| + | |||
| + | _init() | ||
| + | gc.collect() | ||
| + | |||
| + | |||
| + | wlan_id = " | ||
| + | wlan_pass = " | ||
| + | |||
| + | |||
| + | wlan = network.WLAN(network.STA_IF) | ||
| + | wlan.active(True) | ||
| + | wlan.connect(wlan_id, | ||
| + | time.sleep(1) | ||
| + | |||
| + | |||
| + | while wlan.isconnected() == False: | ||
| + | pass | ||
| + | |||
| + | print(' | ||
| + | |||
| + | |||
| + | |||
| + | def http_get(url, | ||
| + | _, _, host, path = url.split('/', | ||
| + | addr = socket.getaddrinfo(host, | ||
| + | |||
| + | s = socket.socket() | ||
| + | s.connect(addr) | ||
| + | s.send(bytes(' | ||
| + | |||
| + | text = '' | ||
| + | |||
| + | while True: | ||
| + | data = s.recv(100) | ||
| + | if data: | ||
| + | text += str(data, ' | ||
| + | pass | ||
| + | else: | ||
| + | a = text.split(' | ||
| + | return a | ||
| + | break | ||
| + | |||
| + | |||
| + | apiKey = ' | ||
| + | cityName = ' | ||
| + | |||
| + | json_data = http_get(' | ||
| + | data = json.loads(json_data) | ||
| + | print(data) | ||
| + | print(data[' | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | В коде необходимо заменить | ||
| + | * WiFi_name нужно заменить на имя WifI сети | ||
| + | * WiFi_pass нужно заменить на пароль от нее | ||
| + | * YourApiKey нужно заменить на ключ доступа, | ||
| + | </ | ||
| + | |||
| + | Нужно заменить имя сети и пароль на свои | ||
| + | <code python[enable_line_numbers=" | ||
| + | wlan_id = " | ||
| + | wlan_pass = " | ||
| + | </ | ||
| + | |||
| + | Создаем объект сетевого интерфейса, | ||
| + | <code python[enable_line_numbers=" | ||
| + | wlan = network.WLAN(network.STA_IF) | ||
| + | wlan.active(True) | ||
| + | wlan.connect(wlan_id, | ||
| + | time.sleep(1) | ||
| + | </ | ||
| + | |||
| + | Проверяем установилось ли соединение с беспроводной сетью до тех пор, пока оно не будет установлено | ||
| + | <code python[enable_line_numbers=" | ||
| + | while wlan.isconnected() == False: | ||
| + | pass | ||
| + | </ | ||
| + | |||
| + | Выводим IP адрес, который получил наш микроконтроллер при подключении к Wi-Fi сети | ||
| + | <code python[enable_line_numbers=" | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | Функция http_get предназначена для формирования запроса к веб-серверу. В качестве параметров она принимает адрес веб страницы (url) и порт (по умолчанию 80, стандартный для веб-страниц). Функция возвращает данные, | ||
| + | |||
| + | Здесь необходимо ввести свой ключ доступа к сервису weatherbit.io, | ||
| + | <code python[enable_line_numbers=" | ||
| + | apiKey = ' | ||
| + | cityName = ' | ||
| + | </ | ||
| + | |||
| + | Отправляем запрос сервису на предоставления данный о текущей погоде | ||
| + | <code python[enable_line_numbers=" | ||
| + | json_data = http_get(' | ||
| + | </ | ||
| + | |||
| + | Запрос отправляется на сервер сервиса, | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | [[https:// | ||
| + | </ | ||
| + | |||
| + | В переменной '' | ||
| + | <code python[enable_line_numbers=" | ||
| + | data = json.loads(json_data) | ||
| + | </ | ||
| + | |||
| + | Теперь в переменной '' | ||
| + | <code python[enable_line_numbers=" | ||
| + | print(data) | ||
| + | </ | ||
| + | |||
| + | В нашем случае выводится строка (в вашем случае данные будут другими так как запрос будет сделан в другое время и будет другая погода) | ||
| + | < | ||
| + | {' | ||
| + | </ | ||
| + | |||
| + | Это и есть данные, | ||
| + | <code python[enable_line_numbers=" | ||
| + | print(data[' | ||
| + | </ | ||
| + | |||
| + | В нашем случае выводится 23.9 | ||
| + | |||
| + | Таким образом мы только что запросили данные о текущей погоде в городе Москва у интернет-сервиса weatherbit.io | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Подробное описание данных, | ||
| + | </ | ||
| - | Попробуем поработать с веб- сервисом. Для получения погодных данных хорошо подходит веб- сервис openweathermap.org. Основные данные о погоде данный сервис предоставляет бесплатно, | ||