Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: Монитор погоды на ESP8266

Чт ноя 30, 2017 16:21:29

По поводу GPIO16, Вы правы, нужно поставить резистор на пару сотен ом, или диод, чтоб защитить вывод.

А вот по поводу пропадания иконки заряда сказать нечего. Я не видел этого глюка, попробую понаблюдать более пристально. Может фотку скинете как это выглядит.

Re: Монитор погоды на ESP8266

Чт ноя 30, 2017 17:21:49

По поводу GPIO16, Вы правы, нужно поставить резистор на пару сотен ом, или диод, чтоб защитить вывод.

А вот по поводу пропадания иконки заряда сказать нечего. Я не видел этого глюка, попробую понаблюдать более пристально. Может фотку скинете как это выглядит.


Парой сотен Ом не выйдет. На плате NodeMCU нога Ресет подтянута к питанию через резистор 12 К,
а кнопка подключена через резистор 470 Ом к земле. Не просаживается GPIO16 до нолика,
выход достаточно мощный и десятком-другим миллиампер его не просадишь.
С диодом - Х его З, надо попробовать.
Замыкал напрямую - держит, но не факт что на 101 раз не выгорит.
Лучше дёрнуть по питанию.

Насчет иконки - просто пропадает в верхнем левом углу, всё остальное в норме.

Добавлено after 44 minutes 22 seconds:
В дополнение к предыдущему посту:
Диод надо подключить анодом к РЕСЕТу, катодом к ГПИО16.
Проверено - работает, и ГПИО так не спалишь.
Диод подцепил 1N4148, но лучше какой-нибудь Шоттки.

Есть просьба - нельзя ли добавить в настройки время выхода из спячки, чтобы не ждать 15 минут,
для настройки вполне бы устроила 1 минута.

Re: Монитор погоды на ESP8266

Чт ноя 30, 2017 19:57:29

По поводу пропадания иконки - попробовать перезагрузить домашний роутер Wi-Fi. У меня с Huawei 8245 такая проблема. Пришлось в программе встроить сброс по условию пропадания иконки.

Re: Монитор погоды на ESP8266

Сб дек 02, 2017 11:21:24

Вопрос к himikat123 по схеме основного блока: зачем нужен резистор R7?
Для чего подтягивать GPIO15 к земле, если в данном случае это выход,
CS дисплея тоже незачем, он подключен к GPIO15 и прекрасно им управляется.
Во внешнем блоке GPIO15 просто подключен к земле через тот-же R7. Зачем?

Re: Монитор погоды на ESP8266

Сб дек 02, 2017 13:54:51

Так нужно для старта модуля ESP8266, чтоб на GPIO0 и на GPIO2 был высокий уровень, а на GPIO15 низкий. Производитель чипа ESP8266 сказал, что при старте чипа в обычном режиме нужно обеспечить данные уровни.

Re: Монитор погоды на ESP8266

Сб дек 02, 2017 15:59:05

Так нужно для старта модуля ESP8266, чтоб на GPIO0 и на GPIO2 был высокий уровень, а на GPIO15 низкий. Производитель чипа ESP8266 сказал, что при старте чипа в обычном режиме нужно обеспечить данные уровни.


Это, похоже, так и есть.
Прозвонил тестером две платы NodeMCU, собранные в разных сараях:
GPIO0 - как и РЕСЕТ, 12К на питание, кнопка FLASH на землю через 470 Ом.
GPIO2 - 12К на питание.
GPIO15- 12К на землю.
Вопрос снят.

Но просьба сделать прошивку уличного блока с регулировкой времени спячки осталась.

Re: Монитор погоды на ESP8266

Сб дек 02, 2017 22:35:52

Но просьба сделать прошивку уличного блока с регулировкой времени спячки осталась.

Об этой просьбе я помню, обязательно добавлю эту регулировку в следующую прошивку.

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 14:33:47

То himikat123: если в погодном мониторе спячка отключена, то показания погоды с сайта openweathermap не обновляются автоматически. Обновление происходит только после сброса,
но каждый раз давить РЕСЕТ - как-то нехорошо. Автоматическое обновление раз в полчаса было бы самое то.
В спящем режиме все нормально - всё равно будим РЕСЕТом.

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 14:50:23

Mizetsky Я только что еще раз проверил, все обновляется как положено, примерно раз в 3 минуты. Может у Вас прошивка старая?

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 16:23:22

Mizetsky Я только что еще раз проверил, все обновляется как положено, примерно раз в 3 минуты. Может у Вас прошивка старая?


Прошивка 2.7, уличный датчик отключен.
Пробовал с Вашим и со своим APPID, разница только в наличии и отсутствии прогноза.

Добавлено after 29 minutes 4 seconds:
Добавлю: картинка перерисовывается, как положено, но данные о текущей погоде не меняются,
хотя на сайте openweathermap они изменились. И так может стоять часами.
После сброса всё синхронизируется до следующего сброса.

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 16:26:40

OK, я исследую этот вопрос более детально.

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 17:04:08

Mizetsky, странно. Проверил у себя, все отлично. Прошивка 2.7а (вместо значка батарейки - вольтаж)

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 17:06:42

понаблюдал более пристально, даже лог обновлений погоды снял:

16:44:32
weather.id 620
weather.icon 13d
weather.temp 1.00
weather.humidity 86
weather.pressure 1005.00
weather.speed 8.20
weather.deg 300.00
weather.country MD
weather.sunrise 1512884394
weather.sunset 1512915318
weather.city Chisinau


16:46:5
weather.id 620
weather.icon 13d
weather.temp 1.00
weather.humidity 86
weather.pressure 1005.00
weather.speed 8.20
weather.deg 300.00
weather.country MD
weather.sunrise 1512884394
weather.sunset 1512915318
weather.city Chisinau


16:47:39
weather.id 620
weather.icon 13n
weather.temp 1.00
weather.humidity 86
weather.pressure 1006.00
weather.speed 8.70
weather.deg 290.00
weather.country MD
weather.sunrise 1512884395
weather.sunset 1512915318
weather.city Chisinau


16:49:12
weather.id 620
weather.icon 13n
weather.temp 1.00
weather.humidity 86
weather.pressure 1006.00
weather.speed 8.70
weather.deg 290.00
weather.country MD
weather.sunrise 1512884395
weather.sunset 1512915318
weather.city Chisinau


16:50:45
weather.id 620
weather.icon 13n
weather.temp 1.00
weather.humidity 86
weather.pressure 1006.00
weather.speed 8.70
weather.deg 290.00
weather.country MD
weather.sunrise 1512884395
weather.sunset 1512915318
weather.city Chisinau

обратите внимание атмосферное давление weather.pressure и скорость ветра weather.speed поменялись, значит обновление происходит.

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 17:45:22

А как такой лог получить?
В скетче есть Serial.begin(115200);, но ничего не выводится.

Re: Монитор погоды на ESP8266

Вс дек 10, 2017 20:14:08

Нужно модифицировать файл weather.ino. Замените все содержимое данного файла на это

void getCoordinates(void){
String url="http://api.2ip.ua/geo.json?ip=";
coordinatesRequest(url);
parseCoordinates();
}

void getWeatherNow(void){
String Units,url;
if(html.units) Units="imperial";
else Units="metric";
if(html.city.indexOf("auto")!=-1){
url="http://api.openweathermap.org/data/2.5/weather?lat=";
url+=weather.latitude;
url+="&lon=";
url+=weather.longitude;
url+="&units=";
url+=Units;
url+="&appid=";
url+=html.appid;
url+="&lang=";
url+=urlLang;
}
else{
url="http://api.openweathermap.org/data/2.5/weather?q=";
url+=html.city;
url+="&units=";
url+=Units;
url+="&appid=";
url+=html.appid;
url+="&lang=";
url+=urlLang;
}
if(weatherNowRequest(url) and parseWeatherNow()){
country=weather.country;
city=weather.city;
lang=html.lang;
sprintf(cityName,"%s",weather.city);
sprintf(descript,"%s",weather.descript);
icon=atoi(weather.icon);
dtostrf(weather.temp,1,1,text_buf);
dtostrf(weather.speed,1,1,text_buf);
}
}

void getWeatherDaily(void){
String Units,url;
if(html.units) Units="imperial";
else Units="metric";
url="http://api.openweathermap.org/data/2.5/forecast/daily?q=";
url+=weather.city;
url+="&mode=json&units=";
url+=Units;
url+="&cnt=4&appid=";
url+=html.appid;
if(weatherDailyRequest(url) and parseWeatherDaily()){
dtostrf(weather.day1,1,1,text_buf);
dtostrf(weather.night1,1,1,text_buf);
dtostrf(weather.speed1,1,1,text_buf);
dtostrf(weather.day2,1,1,text_buf);
dtostrf(weather.night2,1,1,text_buf);
dtostrf(weather.speed2,1,1,text_buf);
dtostrf(weather.day3,1,1,text_buf);
dtostrf(weather.night3,1,1,text_buf);
dtostrf(weather.speed3,1,1,text_buf);
}
}

bool weatherNowRequest(String url){
HTTPClient client;
bool find=false;
client.begin(url);
Serial.print(hour());Serial.print(":");Serial.print(minute());Serial.print(":");Serial.println(second());
Serial.println(url);
int httpCode=client.GET();

if(httpCode>0){
if(httpCode==HTTP_CODE_OK){
httpData=client.getString();
if(httpData.indexOf(F("\"main\":{\"temp\":"))>-1) find=true;
}
}
client.end();
return find;
}

bool parseWeatherNow(){
DynamicJsonBuffer jsonBuffer;
JsonObject& root=jsonBuffer.parseObject(httpData);

if(!root.success()) return false;

weather.id = root["weather"][0]["id"];
Serial.print("weather.id ");Serial.println(weather.id);
weather.descript = root["weather"][0]["description"];
weather.icon = root["weather"][0]["icon"];
Serial.print("weather.icon ");Serial.println(weather.icon);
weather.temp = root["main"]["temp"];
Serial.print("weather.temp ");Serial.println(weather.temp);
weather.humidity = root["main"]["humidity"];
Serial.print("weather.humidity ");Serial.println(weather.humidity);
weather.pressure = root["main"]["pressure"];
Serial.print("weather.pressure ");Serial.println(weather.pressure);
weather.speed = root["wind"]["speed"];
Serial.print("weather.speed ");Serial.println(weather.speed);
weather.deg = root["wind"]["deg"];
Serial.print("weather.deg ");Serial.println(weather.deg);
weather.country = root["sys"]["country"];
Serial.print("weather.country ");Serial.println(weather.country);
weather.sunrise = root["sys"]["sunrise"];
Serial.print("weather.sunrise ");Serial.println(weather.sunrise);
weather.sunset = root["sys"]["sunset"];
Serial.print("weather.sunset ");Serial.println(weather.sunset);
weather.city = root["name"];
Serial.print("weather.city ");Serial.println(weather.city);Serial.println("\r\n");
int dayLight=0;
if(summertime()) dayLight=3600;
time_t time_now=now()-html.zone*3600-dayLight;
if(time_now>weather.sunrise and time_now<weather.sunset) weather.isDay=true;
else weather.isDay=false;
if(time_now<weather.sunrise) weather.isDay=true;
httpData="";
return true;
}

bool weatherDailyRequest(String url){
HTTPClient client;
bool find=false;
client.begin(url);
int httpCode=client.GET();

if(httpCode>0){
if(httpCode==HTTP_CODE_OK){
httpData=client.getString();
if(httpData.indexOf(F(",\"weather\":[{\"id\":"))>-1) find=true;
}
}
client.end();
return find;
}

bool parseWeatherDaily(){
DynamicJsonBuffer jsonBuffer;
JsonObject& root=jsonBuffer.parseObject(httpData);

if(!root.success()) return false;

weather.day1 = root["list"][0]["temp"]["day"];
weather.night1 = root["list"][0]["temp"]["night"];
weather.icon1 = root["list"][0]["weather"][0]["icon"];
icon1=atoi(weather.icon1);
weather.speed1 = root["list"][0]["speed"];

weather.day2 = root["list"][1]["temp"]["day"];
weather.night2 = root["list"][1]["temp"]["night"];
weather.icon2 = root["list"][1]["weather"][0]["icon"];
icon2=atoi(weather.icon2);
weather.speed2 = root["list"][1]["speed"];

weather.day3 = root["list"][2]["temp"]["day"];
weather.night3 = root["list"][2]["temp"]["night"];
weather.icon3 = root["list"][2]["weather"][0]["icon"];
icon3=atoi(weather.icon3);
weather.speed3 = root["list"][2]["speed"];

httpData = "";
return true;
}

bool coordinatesRequest(String url){
HTTPClient client;
bool find=false;
client.begin(url);
int httpCode=client.GET();

if(httpCode>0){
if(httpCode==HTTP_CODE_OK){
httpData=client.getString();
if(httpData.indexOf(F(",\"region\":"))>-1) find=true;
}
}
client.end();
return find;
}

bool parseCoordinates(){
DynamicJsonBuffer jsonBuffer;
JsonObject& root=jsonBuffer.parseObject(httpData);

if(!root.success()) return false;

weather.latitude =root["latitude"];
weather.longitude=root["longitude"];

httpData="";
return true;
}

ну и, в ардуино, в мониторе порта на скорости 115200 будет такой же лог

Re: Монитор погоды на ESP8266

Пн дек 11, 2017 14:04:14

То himikat123: А не здесь ли собака порылась? Вы говорили, что запросы идут раз в три минуты.
А если с Вашим APPID ломится куча народу?
Вот что нашел на сайте openweathermap.org (перевод машинный)

Если Вы не получили ответа от сервера, не пытайтесь повторить Ваш запрос немедленно, а только через 10 мин. Также мы рекомендуем хранить ваши предыдущие данные запроса.
Ограничение доступа:
Если счет превышает лимиты, то отправляется уведомление о превышении лимитов. Если она повторяется снова, то учетная запись блокируется на час. Таким образом, срок блокировки увеличивается на один час, пока блок не будет установлен на 4 часа. При блокировке повторяется пятый раз, то период блокировки длится 24 часа. Это правило циклическое. Пожалуйста, будьте осторожны с количеством вызовов API завершения.

Re: Монитор погоды на ESP8266

Пн дек 11, 2017 14:22:48

Ну дык у него самого же все ок. Ничего не блокируется. Если бы сработала блокировка, то для всех сразу, а не выборочно. Ну это мое ИМХО.

Re: Монитор погоды на ESP8266

Пн дек 11, 2017 22:44:31

Там на openweathermap пишут что ограничение бесплатного ключа не более 60 запросов в минуту. При условии что уже собрано 83 монитора погоды, из них редко когда бывает чтоб более 15 были включены одновременно, из них вряд ли более половины сидят на моем APPID.
Даже если 60 мониторов одновременно выйдут на связь и израсходуют лимит этой минуты, все равно в следующий раз они запросят данные не в эту же минуту, а через три минуты, то есть лимит той минуты к этому времени обнулится. Я думаю пока можно смело пользоваться одним APPID, а может еще кто поделится своим рабочим APPID, тогда шансы что нас ограничат резко уменьшатся.

Re: Монитор погоды на ESP8266

Вт дек 12, 2017 08:16:52

У меня такая же проблема как у Mizetsky. Без РЕСЕТа обновляться не хочет. Использую свой APPID (рабочий).

Добавлено after 9 hours 19 minutes 52 seconds:
Вношу свой вклад в наше общее дело, мой APPID ab1f93e58657308028621e57e243e2b7

Re: Монитор погоды на ESP8266

Вт дек 12, 2017 22:37:21

У меня вопрос к Mizetsky, что Вы используете, самолепный девайс или NodeMCU ESP8266 ESP-12E.
Ответить