Search the Community
Showing results for tags 'openweathermap'.
Found 1 result
-
Всем доброго времени суток, сегодня поговорим о esp8266 и парсинге погоды с интернета. Это довольно интересная альтернатива метеостанции описанной в параллельной теме и думаю, что первый пост стоит посвятить базовой программе - своего рода фундаменту, на базе которого можно производить дальнейшие модификации от подключения дисплея до прикручивания MQTT протокола для системы умного дома. О самом проекте OpenWeatherMap много написано в сети, но я познакомился с ним недавно, как и с микроконтроллером esp8266 который мы будем программировать в доработанной среде Arduino IDE. Но перед тем как начать, необходимо посетить сайт, с которого мы будем вытаскивать данные об окружающей среде. И так, OpenWeatherMap предоставляет нам удобный и бесплатный API. На момент публикации статьи (05.2016) мы можем: Производить не более 60 запросов в минуту Не более 50000 запросов в день Два типа прогноза (на 5 и на 16 дней) Доступность сервиса 95% Интервал обновление данных < 2 часов Отлично, нас все устраивает. Регистрируемся и в личном кабинете переходим в раздел API Keys. По умолчанию нам уже дадут один ключ, можно воспользоваться им, а можно создать новый и обозвать его более понятным именем. Это довольно актуально, если планируется использовать несколько устройств, да и вообще должен быть порядок везде. Без данного ключа получить доступ к API невозможно. Осталось определиться с интересующей нас местностью. API гласит, что есть несколько вариантов: По названию города и коду страны По уникальному идентификатору города По географическим координатам По почтовому индексу Мне показалось удобным использовать географические координаты. При этом сервер сам найдет ближайший населенный пункт, а по сути, ближайшую метеостанцию и предоставит данные с неё. Данные по необходимым для Вас координатам можно взять прямо с сайта, воспользовавшись любезно предоставленной картой. При выборе населенного пункта долгота и широта будут указаны в описании. Москва [ 37.62, 55.75 ] Санкт Петербург [ 30.26, 59.89 ] Ростов-на-Дону [ 39.71, 47.24 ] Севастополь [ 33.53, 44.6 ] Список всех доступных населенных пунктов можно найти тут http://openweathermap.org/help/city_list.txt Теперь переходим к самому интересному - скетч. В начале поста я оставил ссылку на ресурс, подробно описывающий все процедуры необходимые, чтобы завести контроллер и использовать Arduino IDE для прошивки. Но я пошел еще более простым путем и приобрел ESP-12E с обвесом под NodeMCU, это позволило прошивать контроллер без нажатия кнопок RESET и FLASH. Получать данные от сервера можно в двух форматах, XML и JSON. Последний мне показался более предпочтительным и в связи с этим нам понадобится библиотека ArduinoJson Программа Все, что нам нужно редактировать, это начальные переменные (ключ указан рабочий, но это все временно) const char* ssid = "WiFi AP name"; const char* password = "WiFi AP password"; const String server = "api.openweathermap.org"; const String lat = "51.31"; const String lon = "37.89"; const String appid = "b1f6b0a1ea9e10feb04eb3a2de2ad2b9"; По умолчанию программа производит запрос информации с сервера каждые 10 минут, но если что-то пойдет не так и информация не будет получена, то интервал уменьшится до 1 минуты, а при ближайшем удачном подключении вернется обратно. И так, на данный момент мы собираем: weather.id - Идентификатор погодных условий (будет полезен, см. отсылку с weather.icon) weather.main - Группа метеорологических параметров weather.descript - Описание погодных условий в группе weather.icon - Идентификатор иконки (подробнее ознакомиться с ними можно тут) weather.temp - Текущая температура в градусах Цельсия weather.humidity - Текущая влажность в % weather.pressure - Текущее давление (по умолчанию сервер отдает её в hPa, но при умножении на 0,75 мы получаем mmHg) weather.speed - Скорость ветра метры/сек. weather.deg - Направление ветра в градусах Выглядит это следующим образом Connecting to Lenovo S90 ...... WiFi connected IP address: 10.10.1.243 Connecting successfully, code: 200 {"coord":{"lon":37.84,"lat":51.3},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"cmc stations","main":{"temp":18.24,"pressure":996.52,"humidity":92,"temp_min":18.24,"temp_max":18.24,"sea_level":1021.77,"grnd_level":996.52},"wind":{"speed":2.01,"deg":30.5008},"clouds":{"all":48},"dt":1464076525,"sys":{"message":0.0025,"country":"RU","sunrise":1464053115,"sunset":1464110798},"id":487928,"name":"Staryy Oskol","cod":200} Weather id: 802 main: Clouds description: scattered clouds icon: 03d temp: 18 celsius humidity: 92 % pressure: 997 hPa or 747 mmHg wind's speed: 2 wind's direction: 31 Как оказалось, ничего сложного в реализации задуманного не было, но местами пришлось повозиться. Думаю, что это будет хорошей отправной точкой для дальнейшего развития проекта.
- 19 replies
-
- 1
-
- openweathermap
- weather
-
(and 2 more)
Tagged with: