• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Общие баги/глюки/проблемы в пакете Sming

anakod

Moderator
Команда форума
Главный файл дан - eagle_lwip_if.c. Передайте его kadamski и всё.
В "свалке", верно? По изменениям разберемся без проблем, другие файлы не требуют обновления?
 

pvvx

Активный участник сообщества
В "свалке", верно? По изменениям разберемся без проблем, другие файлы не требуют обновления?
Неа. espconn только. Но в её глюкодром я не полезу :)
И WDT исправьте, а то у вас копи-паст версия заголовков и подхода к ней от каких-то детей...
 

programmer

New member
Не могу справиться с I2C.
Подключаю к 13, 14 пинам (хотя с другими пинами тоже самое), подтянуты 10К резисторами к питанию.
Пытаюсь работать с двумя устройствами - датчиком Si7021 и ATTiny85 (библиотека TinyWireS, сам прошил). Для Si7021 пользуюсь кодом https://github.com/mlsorensen/SI7021 , только чуть мною доработанным, чтобы проверять CRC8.
Si7021 отлично откликается на чтение версии датчика, но при чтении температуры и влажности сыплет мусор или иногда вообще ничего не засылает в ответ (т.е. Wire.available() = 0). ATTiny85 вообще не отвечает и не находится сканером I2C (пример Basic_ScannerI2C).

Проверял оба устройства на Arduino Uno - работают на ура (и с питанием 3.3В), никаких вопросов.

Логического анализатора и осциллографа пока нету, поэтому отладить нет возможности. Соответственно вопрос: я что-то делаю не так? Ну, например, так как I2C в ESP реализуется софтварно, то может с ним нужно как-то особо работать...

* Версия Sming от https://github.com/anakod/Sming/tree/aba1287f50981a414c55bae99f3d2f572925e5cd - до самой последней ещё не обновлял..
 

anakod

Moderator
Команда форума
> подтянуты 10К резисторами к питанию.
Сразу скажу - это много. Я ставил вроде бы 2,5КОм (уже точно не помню). Тут 3.3V а не 5 как на Ардуине, поэтому и резисторы лучше ставить поменьше.

В остальном, особой разницы быть не должно, но я порекомендовал бы еще попробовать повторить на других GPIO портах и заодно проверить само соединение.

PS I2C сканер должен работать
 
Последнее редактирование:

pvvx

Активный участник сообщества
Я ставил вроде бы 2,5КОм (уже точно не помню).
Для I2C, на длинных проводах, надо ещё меньше. В таких случаях желательно уменьшить до предела паспортных токов выходов микросхем на шине I2C. У ESP8266 примерно 10mA -> 3.3/0.01 = 330 Ом в пределе.
 

programmer

New member
pvvx, anakod, спасибо, но не помогло. Теперь на 13/14 резисторы 150 ом, на 5/4 резисторы 2.7кОм - попробовал различны комбинации и все по-прежнему. Сдул пыль с Arduino Leonardo, пихнул скетч со I2C Slave --- ESP его видит и отлично общается (правда I2C сканер иногда бывает не находит..). Почему с Si7021 не все регистры читаются, а ATTiny85 вообще никак не видит, я пока не понимаю... Может ATTiny85 слишком медленный для ESP? Или что-то подобное, например реализация протокола в TinyWireS не полная и т.д.

П.С. Нашел ещё у себя DS3231, BMP180, BH1750 - все I2C, буду пробовать...
 
Последнее редактирование:

programmer

New member
DS3231 (часы), BMP180 (давление), BH1750 (свет) - заработали на ура и одновременно на одной линии. На 10К pullup резисторах. На 2.7К и 150 сбоят.. Все даташиты рекомендуют как один 4.7К, а интернет рекомендует подбирать под конкретную задачу, поэтому завтра куплю разных резисторов и буду пробовать.
Но Si7021 так и не хочет возвращать температуру и влажность, только свой deviceid... Эх.

Еще, если вместе с вышеуказанными чипами на одну линию добавить ATTiny85, то все дружно начинают глючить. Поэтому пока делаю вывод, что реализация I2C там не самая лучшая. Ну или I2C в ESP (Sming) не настолько всеяден.. Было бы здорово, если бы кто-нибудь попробовал тоже, чтобы я перестал думать, что у меня ESP подключен криво.

[off]П.С. Хотел использовать ATTiny85 для расширения количества GPIO. Чем тогда его заменить, что не требует внешней обвязки? MSP430? PIC? Еще один ESP? 8)[/off]
 

pvvx

Активный участник сообщества
Si7021 отлично откликается на чтение версии датчика, но при чтении температуры и влажности сыплет мусор или иногда вообще ничего не засылает в ответ (т.е. Wire.available() = 0).
А задержка после команды "измерять" учтена? По PDF там "The total conversion time will be tCONV(RH) + tCONV(T)." = 12+10.8ms.
 

programmer

New member
А задержка после команды "измерять" учтена? По PDF там "The total conversion time will be tCONV(RH) + tCONV(T)." = 12+10.8ms.
Спасибо!! Ещё раз глянул PDF и понял, что мерял с помощью в режиме с "Hold Master Mode". В этом случае устройство ожидает, что мы дождемся ответа благодаря "Clock stretch during measurement". На Ардуине это работает на ура, на ESP (конкретно в Sming) - нет. Попробовал вторым способом "No Hold Master Mode", где нужно читать регистр несколько раз (или просто подождать перед чтением, как вы заметили) и заодно проверять его правильность с помощью CRC8 - все заработало! Причем на одной линии ещё 3 других I2C устройства, которые работают ОК. Шикарно! :)

Остается открытым вопрос работы ESP по I2C с ATTiny85 (через TinyWireS). Если она не работает с ESP, то значит реализация там не ахти и нужно пытаться доработать или использовать другой МК (ту же ATmega) с полноценным I2C.

[off]*** А ещё, это означает, что ESP у меня подключена как надо и можно разрабатывать серьезные вещи :) Когда все делал только на макетке, то это был просто ад...[/off]
 

programmer

New member
По поводу ATTiny85:
Since (most of) the ATTinys lack TWI module for implementing all the nitty-gritty of I2C in hardware they will have to do some clock-stretching (at least if run at 8MHz, you may get away with more on higher clock speeds) as specified in the I2C protocol. However some (especially "bit-banged") master implementations do not support clock-streching (looking at you Bus pirate 3.x and RPI), you will not get reliable communication unless your master supports the full I2C protocol spec.
Так что попробую использовать самую дешевую ATmega для моих целей..
 
Последнее редактирование:

JustACat

Moderator
Команда форума
[off]
А ещё, это означает, что ESP у меня подключена как надо и можно разрабатывать серьезные вещи
Делитесь, как у вас оно "как надо", если конечно не тайна. Нам тут варианты, которые работают безсбойно, ой как пригодятся :)
Можно хотя бы в виде схемы, можно и полностью с печатками, если есть.
Конечно это в отдельной теме, где-нибудь в Железных вопросах, либо в своих проектах.[/off]
 

Tohakrat

New member
Передаю параметры при помощи get, как у вас в httpserverbootstrap
bool led = request.getQueryParameter("led") == "on";

Так вот, при передаче 2х параметров второй получаю только 1 раз. Все последующие запросы get получаю только 1й параметр.
Временно решил проблему введением 3х параметров, тогда 2 передаются стабильно:D
 

anakod

Moderator
Команда форума
Очень странно. Как повторить проблему, приложите более полный код (с формой или URL проблемного запроса)?
 
Есть ESP-01 со сминг-бейсд софтинкой - вариация на тему MeteoControl. Через собственную точку доступа esp-01 - веб-сервер доступен и все работает ожидаемо, равно как и в режиме клиента точки доступа внешней - веб-сервер в железке ведет себя адекватно - отдает все странички, отдает json.. Решил попробовать из инета получить доступ. Пробросил нужный порт и.. и все плохо. нет ответа от веб-сервера встроенного. Включал отладку, по отладке видно что запросы приходят и вроде как даже и ответы со встроенного веб-сервера уходят, но до клиента через инет эти ответы не доходят. НО! есть самое мерзкое но - "маленькие" ответы до клиента через инет доходят, когда я запрашиваю УРЛ в ответ на который получаю коротенький json - все работает и через инет, что исключает вроде бы кривость проброса портов и настройки "выхода в инет"

Кто виноват? что делать? как еще потестить, чтоб понять в чем проблема?
 

pvvx

Активный участник сообщества
"маленькие" ответы до клиента через инет доходят, когда я запрашиваю УРЛ в ответ на который получаю коротенький json - все работает и через инет, что исключает вроде бы кривость проброса портов и настройки "выхода в инет"
Вероятные причины:
Соединение идет через proxy, который не корректно работает с TCP. При соединении клиент-сервер, клиент должен закрывать соединение первым, а сервер только подтверждает. Кто первым закрыл TCP соединение должен удерживать структуру на это соединение в течении 60..120 сек для разрешения "затерявшихся" пакетов и для невозможности заново открыть соединение с одними и теми-же ip : port в сети (что может привести к путанице по цепочке сети и сбоям протоколов). Это приводит к тому, что первый закрывший соединение теряет порт выхода на 120 сек. А портов всего 65536 и это ограничивает кол-во соединений за время. Бандитские прокси не хотят этого делать и ждут когда сервер первым закроет соединение и/или не передают завершения TCP от клиента :) По этому у приемной стороны (клиента) выходит тайм-аут на ожидание конца приема запроса.
Решение только одно - при передаче HTTP сервером использовать "шинковку" или (в заголовке ответа) явное указание длины сообщения с указанием конца соединения, чтобы клиент закрыл сам соединение первым. В случае с бандитскими прокси, сервер должен выждать тайм-аут и передать abort TCP соединения. Если сервер сам просто закрывает TCP соединение - то ему будет необходимо ждать 120 сек, до удаления структуры этого соединения и память в модуле кончиться, если таких соединений много за определенный период и будет крах. Для решения этого ставиться проверка кол-ва свободной памяти перед открытием любого нового соединения.
Это всё пока не реализовано в сервере HTTP "АрДурины" и она может своим "поведением" приводить к краху и сбоям внешней сети инет :p Т.е. является "домашним террористом" в глобальной сети инет.
А у вас - скорее всего выходит тайм-аут приема HTTP ответа от сервера у клиента - он ожидает конца сообщения которое неверно указано в заголовке и через время сбрасывает соединение, не дождавшись корректного завершения. Всё это повязано с вышеописанным. Соблюдайте протоколы и всё будет работать.
 
Последнее редактирование:
  • Like
Реакции: jmms
pvvx, Спасибо за пространный ответ, сижу вникаю..
сразу же вопрос, что Вы именуете АрДуиной? прошивку на базе Sming влитую в ESP-01 или что? я ж вроде нигде не писал, что я что-то на ардуино (настоящем ардуино) делаю..
Далее, я действительно пробовал сперва через "бандитские прокси" находясь во внутренней сети с ESP-01 заходить "как будто через инет" - и оно ожидаемо, по Вашим словам - не работало. Но я так же и черз нормальный инет заходил на esp-01 итот же результат - большие страницы уходят в ниекуда, а маленькие json-чики прекрасно получаю. Нормальный инет - инет от adsl-оператора и мобильный инет.

И последнее, на сколько реально по-Вашему проблему описанную Вами, в плане закрытия соединений, таймаутов иже с ним решить в Sming-овском веб-сервере?

Спасибо!
 

jmms

Moderator
Команда форума
pvvx, Спасибо за пространный ответ, сижу вникаю..
сразу же вопрос, что Вы именуете АрДуиной? прошивку на базе Sming влитую в ESP-01 или что? я ж вроде нигде не писал, что я что-то на ардуино (настоящем ардуино) делаю..
Далее, я действительно пробовал сперва через "бандитские прокси" находясь во внутренней сети с ESP-01 заходить "как будто через инет" - и оно ожидаемо, по Вашим словам - не работало. Но я так же и черз нормальный инет заходил на esp-01 итот же результат - большие страницы уходят в ниекуда, а маленькие json-чики прекрасно получаю. Нормальный инет - инет от adsl-оператора и мобильный инет.

И последнее, на сколько реально по-Вашему проблему описанную Вами, в плане закрытия соединений, таймаутов иже с ним решить в Sming-овском веб-сервере?

Спасибо!
Скорей всего имеется ввиду прошивка, которая разработана для взаимодействия с Arduino IDE (конкретно эта https://github.com/esp8266/Arduino). Если вы не знакомы с этим ресурсом, то в двух словах - разработка кода практически во всех моментах похожа на разработку для Ардуино, только заливается все в МК ESP. Надеюсь, pvvx имел ввиду именно эту "Ардуино".
 

pvvx

Активный участник сообщества
сразу же вопрос, что Вы именуете АрДуиной?
То, что писали выше - Sming только часть системы Arduino.
Далее, я действительно пробовал сперва через "бандитские прокси" находясь во внутренней сети с ESP-01 заходить "как будто через инет" - и оно ожидаемо, по Вашим словам - не работало. Но я так же и черз нормальный инет заходил на esp-01 итот же результат - большие страницы уходят в ниекуда, а маленькие json-чики прекрасно получаю. Нормальный инет - инет от adsl-оператора и мобильный инет.
Уточните как вы строите HTTP ответ (заголовок ответа) и используемые процедуры закрытия соединения или дайте лог Wireshark пакетов (только заголовки) с разных сторон.
Мобильный инет всегда через NAT + там могут быть очень большие задержки пакетов... А т.к. через NAT, то построить со внешней стороны запрос к серверу за ним нет никакой возможности или она очень специфична... + могут не работать POST запросы (связано с устаревшим оборудованием GSM, направляемым из больших городов на переферию, по мере "апгрейда" оператором своей сети :) ).
И последнее, на сколько реально по-Вашему проблему описанную Вами, в плане закрытия соединений, таймаутов иже с ним решить в Sming-овском веб-сервере?
Всё зависит от автора Sming и исправления библиотек Arduino. Arduino и её библиотеки не созданы для создания более-менее серьезных вещей. Это система для детского творчества на вечер и цель её - создавать по быстрому код не затратив времени на обучение при минимуме знаний, к примеру для помигать пару светодиодами и выбросить. На большее она не катит, без серьезных переделок. Можно использовать чтобы что-то по быстрому кое-как протестировать или испытать, но временно.
 
Последнее редактирование:

alexhi

Member
Сегодня 12.06.2015 скачал с сайта https://github.com/anakod/Sming попробывал откомпилить Basic_Wifi из примеров, дает ошибку:
undefined reference to `StationClass::waitConnection(Delegate<void ()>)
ругается на строку :
WifiAccessPoint.config(ssid, pass, AUTH_WPA2_PSK);

Вроде написали что Refactored Station class to use delegates, но примеры которые идут в архиве тоже дают ошибки.
C предыдущей версией Sming все собиралось ОК. В чем может быть дело и что надо поправить.
 

anakod

Moderator
Команда форума
Всё зависит от автора Sming и исправления библиотек Arduino. Arduino и её библиотеки не созданы для создания более-менее серьезных вещей
Не совсем, в Sming полностью свой сетевой стек, никак не завязанный с Ардуино библиотеками (на базе LWIP).

pvvx тут совершенно прав, чтобы сказать что-либо о причинах проблем нужен wireshark лог.

дает ошибку:
undefined reference to
Попробуйте первым делом пересобрать проект SmingFramework.
 
Сверху Снизу