Weather widget на NodeMCU или ESP8266
Отступление
Не люблю смотреть погоду на телефоне и часто забываю сделать это перед выходом из дома. А такой виджет всегда на виду и волей не волей погоду узнаешь.
Захотелось сделать что-то своими руками полезного. На instructables нашелся отличный пост по тому как сделать погодный виджет на базе esp8266 или nodemcu.
На nodemcu проще - плата, oled, 4 провода и готово. На esp8266 сложнее, но и интереснее.
Я сделал оба варианта и добавил кое-что от себя в данный проект: скорость ветра, время рассвета и заката, загруженность дорог.
По ссылке http://www.instructables.com/id/ESP8266-Weather-Widget/ описано все подробно и проблем возникнуть не должно. Сделав все по инструкции мы получим окна с текущей датой и временем, окно с текущей погодой, прогноз на три дня, давление, осадки и влажность.
Единственный момент - в этой инструкции перепутаны SDA и SCL пины. Подключить нужно в обратном порядке.
Чтобы добавить дополнительных экранов нужно:
В коде указать нужное кол-во экранов в переменной и дописать drawFrame{N} в следующем месте:
void (*frameCallbacks[])(int x, int y) = {drawFrame1, drawFrame2, drawFrame3, drawFrame4};
int numberOfFrames = 4;
Далее в программе в соответствующих функциях дополнить своим кодом:
void drawFrame4(int x, int y) {...}
Загруженность трафиком, время рассвета и заката я получал с помощью thingspeak.com
Делал все по этой инструкции: https://www.youtube.com/watch?v=4vKxGHGYOtI
В двух словах: портал парсит страницу, выдерает нужный кусок данных и отдает через свой API. Все что оставалось, так это почистить немного данные от мусора (в видео об этом сказано) и вывести на экран.
Парсил я страницу городского портала. На ней, к слову, было много полезной инфы: курсы валют, погода, погода по ощущению и т.д.
В итоге кусок кода для получения времени рассвета и заката у меня выглядит так:
String sunset()
{
String result;
HTTPClient http;
const char kUrl[] = "api.thingspeak.com";
const char kPath[] = "/apps/thinghttp/send_request?api_key=my_apikey_here";
http.begin(kUrl,80,kPath);
int httpCode = http.GET();
if(httpCode == 200) {
String payload = http.getString();
int i = 0;
while (payload.charAt(i) != ':') // Character before required data starts.
i++;
String sunr = payload.substring(i-2,i+3);
payload = payload.substring(i+2);
int j = 0;
while (payload.charAt(j) != ':') // Character after required data ends.
j++;
String suns = payload.substring(j-2, j+3);
result = sunr+"-"+suns;
}
return (result);
}
Какую информацию выводить на экране - решать вам. У меня сразу появилось несколько неплохих идей. Например, вместо индекса загруженности города выводить загруженность по определенному рутинному маршруту (дом-работа). Или для этого маршрута, при наличии нескольких альтернативных дорого, выводить ту, по которой быстрее всего.
Первое готовое приложение!
(Тихо сп*здил и ушёл, называется нашёл...) ©тырнет
это я о картинке
Сначала, наверное, надо признаться что я немного приврал, это не совсем первое приложение, это не совсем приложение, да бог ты мой, даже на плеймаркете оно у меня второе. В общем, это моя четвертая попытка написать приложение под андроид, но это... виджет. Bash.im Widget , если точнее. В чем же я не соврал? В том что это мое первое ГОТОВОЕ приложение.
И так, первая попытка написать приложение под андроид и выложить его на плеймаркет у меня состоялась месяцев 7 назад. Это было судоку.
Точнее не так, начать надо с другого, подходил выпускной год в университете и мне предложили выбрать свою дипломную работу, я прикинул, и решил что брать какое-то г*вно в стиле "статистические выборки ожидания капающих капель в невесомости по летоисчислению марса" как-то не сруки, и хотелось бы чего-то что хоть как-то котировалось бы в будущем(нет, серьезно, темы дипломных работ - это крах). Выбор пал на приложение под андроид, т.к, во-первых, андроид бы мне пришлось изучать с 0, во вторых - полноценный рабочий проект, а значит на собеседовании зачтется.
В общем, темой стал "Аудиоплеер для аудиокниг. Статистический анализ схожих приложений"(Да, от красиво звучащей части, но целиком бесполезной, никуда не уйдешь). Собственно, проигрывание музыки в андроиде довольно простая штука, так я думал, один ведь класс всего(ох как же я тогда ошибался), в общем, взял диплом и пошлепал учить андроид. http://startandroid.ru кто еще не знаком был моим учителем. Писал я простенькие подерлки в стиле (урок_номер_один_кнопочки), а потом пошел на курсы, т.к. все-таки одних тырнетовских уроков - маловато.
Ну и постепенно писал аудиоплеер, чего уж там, а потом понял, что знаний то пока маловато, и надо бы первым написать чего-то другое, и вот мы возвращяемся к судоку. Собственно, в нем было плохо все, какой подсчет очков, какой гридлейоут, там был кнопочный интерфейс ити его :) Думаю эта картинка скажет о многом:
Именно так у меня реализовано xml игрового поля, про код я вообще молчу, 93 кнопки, про код я вообще молчу, какой баттеркнайф, какие генерации, свитчкейс мать его, только хардкор. И да, свитчкейс из 93 пунктов(наверно не надо говорить что программист я аховый, ну, на то время?). Ну да ладно, потом была попытка замены дипломной работы на эту самую судоку, неудачную надо сказать, попытка написать аудиоплеер, но принесенное на предзащиту приложение никого не устроило и со словами "че это ты нам тут на эмуляторе показываешь, мы хотим плеймаркет", а защита то через неделю... В общем, первое приложение на плеймаркете, этот самый диплом, с кучей заглушек и говнокода, полностью нерабочий, до сих пор у меня весит на девелопере 0x11 на плеймаркете, но так сказать, г*вно не считается, так что вот вам мое первое приложение :D
На самом деле, еще до виджета, была третья попытка, отслеживатель обновлений для Самиздата ( samlib.ru ), Lit-era ( lit-era.com ) и Libstation ( libstation.ru ) Так сказать, слова русского, буквенного, в общем библиотек поточного написания доморощенными писателями( дюже я читать люблю). Там должно быть было круто все, и пуш нотификация по найденному обновлению, и список обновлений, и чего там только не должно было быть. Но столкнувшись с очередной трудностью, я плюнул на все, отложил и с мыслью "надо сделать хоть что-то, но ГОТОВОЕ" и написал этот виджетик. Вот лично для себя, чтоб доказать что не зря потратил почти год, своего личного времени, не зря выбрал специльностью мобильную разработку #ищуработухарьков и что могу создать что-то свое.
В принципе, даже и не знаю чего еще тут можно написать, можно распиать собенности технологий, что виджет не имеет активити и предсатвляет собой простой ресивер. Но смысл? Виджет - это технология, и чтоб ее применять, не обязательно знать как именно она работает. А значит Абстракция. Эта продажная девка империализма парадигма Шрёдингера, вот вроде бы и парадигма ООП, а вроде бы и нет.
Если кого заинтересовал виджет, то ТЫЦ СЮДА . Ну и наверное если этот пост наберет 50 плюсов, то могу запилить пост в стиле "Трудности разработки если ты криворукий начинающий кодер", ну и о последующих приложеницах, когда те допишу, там, как это не странно, есть о чем написать, причем включая и способы реализации. Почему бы и нет.
Всем котиков.
Прошу помочь советом в решении нетривиальной задачи.
Доброго дня, уважаемое сообщество.
Сижу я значит на работе, с планом задач планомерно справляюсь. Код пишется, техника чинится. И подходит мне начальник и молвит голосом человеческим.
- Скажи мне вот %USERNAME%, вот есть у меня сотрудники, подчинённые, и они каждый день табличку в экселе заполняют, да не простую, а на шаре лежащую, процент от выполненного плана возле своих фамилий ставят. А можно ли замутить какое блюдце, что бы яблочко по нему каталося и данные мне с этой таблички показывало. Да не просто данные, а желательно что бы было это виджетом на рабочем столе, операционки БиллГейтовской?
И призадумался я, ибо таких задач никогда не решал, и свет мой зеркальце меня тоже послало, сказав, "Я конечно гугл, но не на столько".
Поможите, добры молодцы, самому интересно стало нечисть такую завести:)
Так как вопрос исключительно шкурного характера, комментов для минусов отсыплю вдоволь:)
Привет Пикабу, я тут подумал...
...а нельзя ли запилить pikabu-виджет для android? С возможностью настроить отображение материалов? Например "рандомные новости/новость", или же отображать какую нибудь интересную тему (горячее/лучшее/свежее) с возможностью выбора времени (за 24 часа, или же наоборот, чтобы появлялись только новости за 2015 год)? Спрашиваю, т.к яжнепрограммист, но показалось что идейка не самая плохая:) Если кто-то предлагал что-то подобное - ссорямба, вроде все обыскал