Разбираем JSON на ESP8266: Получаем точное время и текущую погоду из Интернет
Vložit
- čas přidán 15. 11. 2018
- Скетч писался быстро, возможны косяки. Сильно не пинайте. ;) На работоспособность проверен!
Сообщество: / @iomoio3897
Присоединяйтесь ВКонтакте: im_pub
Скетч примера: yadi.sk/d/q5c4U7AA3A7Bqg
Библиотека TimeLib: yadi.sk/d/YZmqQ0pxV9tYkg
Библиотека ArduinoJson: yadi.sk/d/fNfVAvqzqE-aUg
#esp8266 #часы #arduino #ардуино #уроки #uno #уно #nano #nodemcu #lua #обзор #esp-01 #программирование - Věda a technologie
А если я в Украине и яндекс не доступен каким сервисом и каким образом с ним общаться лучше всего?
Через анонимный прокси можно подключаться... :))) Тогда в client.connect указывается ip и порт прокси-сервера, а в передаваемых заголовках в client.println перед GET вставить CONNECT yandex.com:443 HTTP/1.1
Не пробовал, но должно сработать. Списки актуальных прокси-серверов можно нагуглить. Выбирайте тот, что находится не в Украине и с наименьшим пингом.
Да можно другой сервер использовать.
через VPN
"get time as json" в гугле выдало сервис "worldtimeapi". Там даны примеры. Для Киева к базовому адресу нужно добавить /api/timezone/Europe/Kiev
просто используй NTP сервер в Украине
мне все интересно, пожалуйста продолжай снимать как можно чаще 👍👍👍📺
Скетч работает. С парой оговорок на 2020 год. Первое - библиотека arduinojson должна быть не выше 5й версии. И второе - плата nodemcu v3 после прошивки сваливается в WDT soft reset. Чтобы этого избежать, тело циклов while должно быть в фигурных скобках. Т.е. иметь вид while (WiFi.status() != WL_CONNECTED) {
delay(500); }
Спасибо, за отличные уроки, благодаря вашим разъяснениям, хорошо принимается информация, идет движение вперед !👍
Спасибо Как всегда всё подробно, от души записывай дальше такие видео.
Здорово ! Очень нужные такие видео. Записывай ещё ))). Ещё бы по си-шным функциям видео, как можно обходиться без Стринг, чаром например. А так записывай, интересно рассказываешь, и код не особо заумный пишешь.
Спасибо тебе !
Отличный видос, все очень подробно!!! Лайк отдуши!!!
Спасибо за видео. Полезная информация для реализации собственных задумок.
Очень хорошо объясняешь!!! Приминение не найду, но для кругозора - супер!!!
спасибо за подробный разбор скетча
Дружище, это очень крутая информация которую ты доводишь в роликах своих!
Я неделю лазил по сайтам, нигде толкового ничего не нашел! Еще бы научится это все писать!
Отличное и очень полезное видео. Лайк и благодарность =)
Спасибо !!! Шикарное видео...
О! Как раз то, что нужно. Не сразу нашел материал по теме
Потрясающий урок, все понятно, спасибо большое!
Отличное видео! Спасибо
Спасибо!! Понравилось!
Супер ))
спасибо за инфу .)
Полезное и добротное видео
Спасибо, было очень полезно
Все твои видосы заходят как надо
у моего сына (10 лет) после просмотра серии видео про esp8266 появился огромный интерес к програмированию и конструированию
огромное спасибо
Спасибо! Для меня это самое важное! )
@@iomoio3897 сын говорит "ну все! теперь я определился и хочу стать инженером🙂 и заниматься автоматизацией как ты"
Это тебе спасибо а то сидит целыми днями за играми диградирует теперь хоть пользой займется
Надолго ли только всетаки 10 лет😄
Отличное видео! Давно искал подробное объяснение этой темы- спасибо Вам огромное. Вот если бы Вы еще рассказали как можно например выдернуть с какого нибудь сайта курс валют, анекдот, коротенькую рандомную новоть ;) ? Буду всем рекомендовать Ваш канал!
Супер!
Отлично !
супер!!!
Очень классно
Молодец, все понятно. У других сделай как я и будет работать, а код сам разберёшь. )) Тема json в принципе интересна.
ништяк, продолжай
Отлично, резать видос не обязательно, если где-то нудно человек перемотает, так даже лучше. Каждый выбирает ту часть, которая была не понятна.
Спасибо!!!
Как всегда, все подробно и понятно. Спасибо за годный контент.
да, отличное понятное видео. очень подробно и правильно. есть непринципиальное замечание по неправильному произношению ... так ведь повзрослеете и уедите куда надо там и призносить правильно будете :-)))))
Продолжай :)
Эх класс. Давно искал как распарсить погоду. А если можно то на следующий день ещё добавьте функцию или хотя бы объясните.
Продолжай
Спасибо, интересно. Могли бы вы разобрать саму библиотеку ArduinoJson чтобы повторить ее для другого процессора , например для STM32?
да полезная инфа, дальше нужен вывод информации на экранчик
Очень интересно. Попробовал, да работает. Отлично! Только вот для Москвы показывает верно, а для Петрозаводска (ID=18) с ошибкой. Там в Json значений побольше и уже выскакивает несоответствие. Может можно как-то подправить?
213.Москва
Tekuschie data i vremya: 04.01.2020 10:43:16
Voshod v 08:58
Zakat v 16:10
Temperatura: 0 C
Pasmurno
18.Петрозаводск
Tekuschie data i vremya: 00.00.1970 00:00:00
Voshod v
Zakat v
Temperatura: C
Добавил скетч. Обрабатывает по другому, можно подставлять любой город, не только Москву. Если что мопед не мой, добавил только дисплей 128х32 + датчик температуры DS18B20 и отправку на Blynk. dropmefiles.com/Rika1
за помощь спасибо lean_74, ну и конечно iomoio
Братан, нуди больше ;) ! Ты единственный кого я смог найти с полезными видео, остольное просто сопли и песок (только не задирай нос :-D) для таких как я (новичков) самое то что надо. Крутые ардуинщики (редиски) не хотят помогать совсем :-\ мол мы крутые, а вы читайте кучу ненужной мукулатуры ( какахи месите :-( вот ).
если монитор выдаёт "Invalid response
", то
в строке 47 -
client.println("GET /time/sync.json?geo=" + regionID + " HTTP/1.1
Host: yandex.com
Connection: close
");
замена метод "println" на "print" -
client.print("GET /time/sync.json?geo=" + regionID + " HTTP/1.1
Host: yandex.com
Connection: close
");
Спасибо!
Спасибо, всё заработало.
Очень здорово! А влажности и ветра нет?
Все работает, все хорошо. А можно ли как то сделать тоже самое, но с сайта pr5? по мне он более точный и там есть текущие показания температуры с метеостанций, с обновлением каждые 4 часа
Здравствуйте. Почему-то при 5-значных ID региона (Люберцы) скетч компилируется, но ничего не выдает? Может, кто знает почему? Спасибо.
А как получать именно прогноз погоды? На завтра, скажем.
Формат ок
Здравствуйте, я пытаюсь отправить get запрос к blockchain.info, получить курс биткойна хочу, но мне возвращается ошибка -1, с браузера набираю host и url нет проблем, могу ли я с вами как то связаться чтобы обсудить проблему, голову ломаю 2 дня уже
Почему выдается ошибка: DynamicJsonBuffer jsonBuffer(capacity);
Зачем монтаж? И так отлично
Может кто подсказать, почему для Новосибирска не работает, тип если смотреть по ссылке yandex.com/time/sync.json?geo=65 , то все ок, а в коде из видио работать не хочет? С остальными городами все ок.
Полезная информация, так как сейчас большая часть информации в json, к тому же это снижает трафик
кто знает почему з библиотекой БЛИНК, и его приложением на телефоне - все работает.... даный же пример даже не хочет подключатся к роутеру, на АТ команды не отвечает? модуль ESP12-E
Приветствую спасибо за видео а esp32 ещё не пробовали?
Пока не приходилось. Не подвернулось подходящего проекта.
@@iomoio3897 надеюсь в дальнейшем до него доберётесь очень интересный))
А як для JSON v6 ?
Ваше видео очень полезно , но это не ширпотреб поэтому лайков будет немного , но нам надо снимай и показывай
Нужно ли регистрироваться и как это сделать в Яндексе для работы этого скетча? Скетч выдает только пустые строки. Ответьте пожалуйста кто использует этот скетч.
В ф-ии TimeAndWeather () в строке
client.println("GET /time/sync.json?geo=" + regionID + " HTTP/1.1
Host: yandex.com
Connection: close
");
заменил метод println на print и всё пошло
Уважаемый автор канала, сделай ролик плес, как созданную переменную модулем esp8266 отобразить на сайте html, ? ( именно чтобы модуль сам записывал переменную в .json, а после сервер сам вытаскивал эту переменную и записывал её на сайте) И соответственно обратный процесс , чтобы я в input text на сайте ввёл переменную и после, чтобы сам модуль смогу её определить и в последующем с ней работать. На русскоязычном ютубе нету таких уроков. Плеееез обьясниииииии(((
сайт не может к тебе на модуль заходить, у тебя же айпи динамика ,постоянно меняется. модуль должен периодически дергать,каждую секунду например, твой сайт и считывать инфу что ему делать. примерно так...
скетч не работал пока не поменял
//#include // Библиотека для связи с сетевыми хостами (локальными и интернет)
#include
Спасибо, помог! У меня еще и на скорости 9600 не грузил, поставил 57600 бод, конфетка
Привет, какую версию ArduinoJson используешь?
Не помню. Архив по ссылке под видео. Там, вероятно, где-то написано.
@@iomoio3897 'DynamicJsonDocument' was not declared in this scope понять не могу почему
@@AlexSolder Было такое, но не помню как решил. Можно попробовать на Static заменить. Попробуй сначала скетчи примеров из библиотеки.
@@iomoio3897 да спасибо, DynamicJsonDocument заменил на DynamicJsonBuffer
Было бы логичнее синхронизировать время и полученные данные впихивать в модуль часов на ds3231. Уход времени минимален и не нужно часто синхронизировать
Почему бы не хранить такие настройки, как регион, в отдельном текстовом файле?
Причин не хранить настройки сети и идентификатор региона в отдельном текстовом файле нет.
к роутеру так и не смог подключится, подключился к телефону. на телефоне есть мобильный интенет, сам с украины и яндекс у нас не работает. установил на телефон программу TunnelBear меняет ИП всей системы через ВПН, короче яндекс завелся. сопряжение с телефоном есть плата ESP12-E успешно прошывается, прекрасно работает с приложением блинк... а тут, и советы все перепробывал а КОМ порт молчит, і на АТ команды не отвечает, тока после ресета сыпет кракозябры в порт а потом пусто уже ждал и ресетовал нечего нет КОМ пустой
Как отправить json на другой сервер? Думаю это тоже интересно...
Если соединение инициализируется модулем, то параметры логично передавать GET или POST параметрами (в зависимости от содержания и объёма данных). Если модуль отвечает на запрос сервера, то надо сформировать ответ в формате JSON, в соответствии с форматом, отправить заголовок серверу, сообщающий о том что ответ в формате JSON и передать содержимое. Тут особо не о чем рассказывать, видео получится минуты на 2, не больше. )
как на шестую версию библиотеки json перевести?
сам спросил, сам решил
@@isclean69 "сам ответил" забыл :D
Странно при попытке открыть адрес https//yandex.com/time/sync.json?geo=11251 мне выдал Не удается получить доступ к сайту :( кто подскажет куда копать?
Двоеточие после https забыли. yandex.com/time/sync.json?geo=11251
@@iomoio3897 Благодарю - опечатался :)
отвечает:
Invalid response
Видимо что то поменялось..
и у меня тоже,может формат изменился?
Пора переснять видео. Json сменили версию с 5й на 6ю и код не работает. Можно посмотреть дядечку (англ) и подправить arduinojson.org/v6/doc/upgrade/
Спасибо, выручил
Все работает очень криво. Обращение к серверу по HTTPS не работает, на самом деле по порту 443 программа посылает запрос без шифрования. Ответ Яндекса это скорее ошибка, поскольку сервер на незашифрованный запрос по 443 порту должен выдавать ошибку. В 6 версии JSon можно поправить чтобы все работало, но там не корректно работает функционал по большим целым числам. В итоге время на ESP сбрасывается на 1970 год. Новая версия JSON преобразует его в тип double.
StaticJsonDocument root;
deserializeJson(root, client);
double dd=root["time"];
Это для 6 версии.
666 лайков 0_0
Два раза от милисекунд избавлялся.
залил скетч на пробу , поменял только имя и пароль вайфая . В адресной строке дублируется "Invalid response
" , в веб морде роутера плата видется
такая-же хрень.
в строке 47 -
client.println("GET /time/sync.json?geo=" + regionID + " HTTP/1.1
Host: yandex.com
Connection: close
");
замена метод "println" на "print" -
client.print("GET /time/sync.json?geo=" + regionID + " HTTP/1.1
Host: yandex.com
Connection: close
");
@@user-yi5ee1yj8b спасибо вам потом проверю отпишусь
@@user-yi5ee1yj8b Сработало!
Мне походу с самого начала надо канал смотреть, в тонкости я не вьехал.
//Текущая погода и пргноз на 7 дней Openweathermap
#include
#include
#define debug true
#include
void Openweather() {
HTTPClient http;
if (debug) Serial.println(openweatheGET);
http.begin(openweatheGET); //api.openweathermap.org/data/2.5/weather?lat=47.810042&lon=35.050216&units=metric&lang=ru&appid=&appid= тут id из личного кабинета при бесплатной регистрации
, координаты тоже меняем на свои
http.GET();
DynamicJsonDocument Answer(8000); // Инициализируем буфер под JSON // Эта константа определяет размер буфера под содержимое JSON (расчитывается тут arduinojson.org/v5/assistant/)
deserializeJson(Answer, http.getString()); // Парсим JSON-содержимое ответа сервера
http.end();
//Serial.println(Answer.as()); //Выводим содержимое что прислал сервер
if (debug) serializeJsonPretty(Answer, Serial); Serial.println(); //Выводим содержимое что прислал сервер красиво по строчкам
if (Answer["current"]["weather"][0]["description"].as() == "null") {
Serial.println("Данные openweathermap.org не получены. Перезагрузка.");
ESP.restart();
}
if (debug) {
//// Погода сейчас
Serial.println("Данные openweathermap.org " + Answer["timezone"].as());//город
Serial.println("Погода за окном:");
Serial.println(Answer["current"]["weather"][0]["description"].as());// Явление погоды
Serial.println("Иконка " + Answer["current"]["weather"][0]["icon"].as());// Иконка
Serial.println("Температура " + Answer["current"]["temp"].as() + " ощущается как " + Answer["current"]["feels_like"].as()); // Температура
Serial.println("Облачность " + Answer["current"]["clouds"].as() + " %"); // Облачность
Serial.println("Скорость ветра " + Answer["current"]["wind_speed"].as() + " м/с"); // Скорость ветра
Serial.println("Давление " + Answer["current"]["pressure"].as() + " Па");
Serial.println("Влажность " + Answer["current"]["humidity"].as() + " %");
Serial.println("Точка росы " + Answer["current"]["dew_point"].as() + " 'С");
Serial.println("Ультрафиолетовый индекс " + Answer["current"]["uvi"].as());
Serial.println("Видимость " + Answer["current"]["visibility"].as() + " м");
Serial.println("Направление ветра " + Answer["current"]["wind_deg"].as() + " градусов метеорологических
");
////Прогноз наперед
time_t unix;
time_t timezone = Answer["timezone_offset"].as();
for (byte Day = 1; Day < 8; Day++) {
Serial.println(Day);
unix = Answer["daily"][Day]["dt"].as() + timezone;
Serial.printf("Прогноз на %02d.%02d.%4d
", day(unix), month(unix), year(unix));
unix = Answer["daily"][Day]["sunrise"].as() + timezone;
Serial.printf("Восход в %02d:%02d
", hour(unix), minute(unix));
unix = Answer["daily"][Day]["sunset"].as() + timezone;
Serial.printf("Закат в %02d:%02d
", hour(unix), minute(unix));
Serial.println(Answer["daily"][Day]["weather"][0]["description"].as() + "."); //Погодное явление
Serial.println("Температура утром " + Answer["daily"][Day]["temp"]["morn"].as() + " 'С");
Serial.println("Температура днем " + Answer["daily"][Day]["temp"]["day"].as() + " 'С");
Serial.println("Температура вечером " + Answer["daily"][Day]["temp"]["eve"].as() + " 'С");
Serial.println("Температура ночью " + Answer["daily"][Day]["temp"]["night"].as() + " 'С");
Serial.println("Давление " + Answer["daily"][Day]["pressure"].as() + " Па");
Serial.println("Влажность " + Answer["daily"][Day]["humidity"].as() + " %");
Serial.println("Точка росы " + Answer["daily"][Day]["dew_point"].as() + " 'С");
Serial.println("Ветер " + Answer["daily"][Day]["wind_speed"].as() + " м/с");
Serial.println("Направление ветра " + Answer["daily"][Day]["wind_deg"].as() + " градусов метеорологических");
Serial.println("Облачность " + Answer["daily"][Day]["clouds"].as() + " %");
Serial.println("Вероятность осадков " + Answer["daily"][Day]["pop"].as() + " %");
Serial.println("Ультрафиолетовый индекс " + Answer["daily"][Day]["uvi"].as() + " %");
Serial.println("Иконка " + Answer["daily"][Day]["weather"][0]["icon"].as() + "
");
}
Answer.clear();
}
здрасти. бьюся как рыба. не могу к есп32 подключить матрицу 64*32 2121. желательно без "стандартных" библиотек а самописанными способами. кто может - ПАМАГИТИ
супер!!!