Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:laboratory_iot:exp69 [2020/06/15 15:54] – labuser29 | products:laboratory_iot:exp69 [2024/12/16 15:23] (текущий) – labuser30 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ===== Эксперимент 69. Получение данных с интернет- сервиса ===== | + | ===== Эксперимент 69. Получение данных с интернет-сервиса ===== |
- | Устройства интернета- вещей не только отправляют данные в интернет, | + | Устройства интернета-вещей не только отправляют данные в интернет, |
- | Попробуем поработать с веб- сервисом. Для получения погодных данных хорошо подходит веб- сервис weatherbit.io. Основные данные о погоде данный сервис предоставляет бесплатно до 500 запросов в сутки, но необходимо пройти простую процедуру регистрации. | + | Попробуем поработать с веб-сервисом. Для получения погодных данных хорошо подходит веб-сервис weatherbit.io. Основные данные о погоде данный сервис предоставляет бесплатно до 500 запросов в сутки, но необходимо пройти простую процедуру регистрации. |
Регистрация происходит на странице [[https:// | Регистрация происходит на странице [[https:// | ||
Строка 13: | Строка 13: | ||
Ставим галочку **Я не робот** и нажимаем на кнопку **Submit**. | Ставим галочку **Я не робот** и нажимаем на кнопку **Submit**. | ||
+ | |||
+ | Если выводится сообщение **Signup blocked due to suspected spam. If you are a human, please use another VPN / IP address.** нужно попробовать включить VPN. | ||
Если форма заполнена правильно, | Если форма заполнена правильно, | ||
Строка 29: | Строка 31: | ||
{{ : | {{ : | ||
- | В нашем случае наш ключ доступа это 341182dee74d4049a0dc5470919e39fa, | + | В нашем случае наш ключ доступа это 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%> | ||
+ | Подробное описание данных, | ||
+ | </ |