Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Sming Open Source Framework", создана пользователем JustACat, 23 мар 2015.

  1. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    В "свалке", верно? По изменениям разберемся без проблем, другие файлы не требуют обновления?
     
  2. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.958
    Симпатии:
    1.300
    Неа. espconn только. Но в её глюкодром я не полезу :)
    И WDT исправьте, а то у вас копи-паст версия заголовков и подхода к ней от каких-то детей...
     
  3. programmer

    programmer Читатель

    Сообщения:
    33
    Симпатии:
    7
    Не могу справиться с 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 - до самой последней ещё не обновлял..
     
  4. anakod

    anakod Moderator Команда форума

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

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

    PS I2C сканер должен работать
     
    Последнее редактирование: 6 июн 2015
    programmer нравится это.
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.958
    Симпатии:
    1.300
    Для I2C, на длинных проводах, надо ещё меньше. В таких случаях желательно уменьшить до предела паспортных токов выходов микросхем на шине I2C. У ESP8266 примерно 10mA -> 3.3/0.01 = 330 Ом в пределе.
     
    programmer нравится это.
  6. programmer

    programmer Читатель

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

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

    programmer Читатель

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

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

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

    pvvx Активный участник сообщества

    Сообщения:
    8.958
    Симпатии:
    1.300
    А задержка после команды "измерять" учтена? По PDF там "The total conversion time will be tCONV(RH) + tCONV(T)." = 12+10.8ms.
     
    programmer нравится это.
  9. programmer

    programmer Читатель

    Сообщения:
    33
    Симпатии:
    7
    Спасибо!! Ещё раз глянул PDF и понял, что мерял с помощью в режиме с "Hold Master Mode". В этом случае устройство ожидает, что мы дождемся ответа благодаря "Clock stretch during measurement". На Ардуине это работает на ура, на ESP (конкретно в Sming) - нет. Попробовал вторым способом "No Hold Master Mode", где нужно читать регистр несколько раз (или просто подождать перед чтением, как вы заметили) и заодно проверять его правильность с помощью CRC8 - все заработало! Причем на одной линии ещё 3 других I2C устройства, которые работают ОК. Шикарно! :)

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

    Оффтоп:
    *** А ещё, это означает, что ESP у меня подключена как надо и можно разрабатывать серьезные вещи :) Когда все делал только на макетке, то это был просто ад...
     
    JustACat нравится это.
  10. programmer

    programmer Читатель

    Сообщения:
    33
    Симпатии:
    7
    По поводу ATTiny85:
    Так что попробую использовать самую дешевую ATmega для моих целей..
     
    Последнее редактирование: 7 июн 2015
  11. JustACat

    JustACat Moderator Команда форума

    Сообщения:
    568
    Симпатии:
    121
    Оффтоп:
    Делитесь, как у вас оно "как надо", если конечно не тайна. Нам тут варианты, которые работают безсбойно, ой как пригодятся :)
    Можно хотя бы в виде схемы, можно и полностью с печатками, если есть.
    Конечно это в отдельной теме, где-нибудь в Железных вопросах, либо в своих проектах.
     
    programmer нравится это.
  12. Tohakrat

    Tohakrat Новичок

    Сообщения:
    7
    Симпатии:
    4
    Передаю параметры при помощи get, как у вас в httpserverbootstrap
    bool led = request.getQueryParameter("led") == "on";

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

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Очень странно. Как повторить проблему, приложите более полный код (с формой или URL проблемного запроса)?
     
  14. Alexander V. Ribchansky

    Alexander V. Ribchansky Читатель

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

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

    pvvx Активный участник сообщества

    Сообщения:
    8.958
    Симпатии:
    1.300
    Вероятные причины:
    Соединение идет через proxy, который не корректно работает с TCP. При соединении клиент-сервер, клиент должен закрывать соединение первым, а сервер только подтверждает. Кто первым закрыл TCP соединение должен удерживать структуру на это соединение в течении 60..120 сек для разрешения "затерявшихся" пакетов и для невозможности заново открыть соединение с одними и теми-же ip : port в сети (что может привести к путанице по цепочке сети и сбоям протоколов). Это приводит к тому, что первый закрывший соединение теряет порт выхода на 120 сек. А портов всего 65536 и это ограничивает кол-во соединений за время. Бандитские прокси не хотят этого делать и ждут когда сервер первым закроет соединение и/или не передают завершения TCP от клиента :) По этому у приемной стороны (клиента) выходит тайм-аут на ожидание конца приема запроса.
    Решение только одно - при передаче HTTP сервером использовать "шинковку" или (в заголовке ответа) явное указание длины сообщения с указанием конца соединения, чтобы клиент закрыл сам соединение первым. В случае с бандитскими прокси, сервер должен выждать тайм-аут и передать abort TCP соединения. Если сервер сам просто закрывает TCP соединение - то ему будет необходимо ждать 120 сек, до удаления структуры этого соединения и память в модуле кончиться, если таких соединений много за определенный период и будет крах. Для решения этого ставиться проверка кол-ва свободной памяти перед открытием любого нового соединения.
    Это всё пока не реализовано в сервере HTTP "АрДурины" и она может своим "поведением" приводить к краху и сбоям внешней сети инет :p Т.е. является "домашним террористом" в глобальной сети инет.
    А у вас - скорее всего выходит тайм-аут приема HTTP ответа от сервера у клиента - он ожидает конца сообщения которое неверно указано в заголовке и через время сбрасывает соединение, не дождавшись корректного завершения. Всё это повязано с вышеописанным. Соблюдайте протоколы и всё будет работать.
     
    Последнее редактирование: 10 июн 2015
    jmms нравится это.
  16. Alexander V. Ribchansky

    Alexander V. Ribchansky Читатель

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

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

    Спасибо!
     
  17. jmms

    jmms Moderator Команда форума

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

    pvvx Активный участник сообщества

    Сообщения:
    8.958
    Симпатии:
    1.300
    То, что писали выше - Sming только часть системы Arduino.
    Уточните как вы строите HTTP ответ (заголовок ответа) и используемые процедуры закрытия соединения или дайте лог Wireshark пакетов (только заголовки) с разных сторон.
    Мобильный инет всегда через NAT + там могут быть очень большие задержки пакетов... А т.к. через NAT, то построить со внешней стороны запрос к серверу за ним нет никакой возможности или она очень специфична... + могут не работать POST запросы (связано с устаревшим оборудованием GSM, направляемым из больших городов на переферию, по мере "апгрейда" оператором своей сети :) ).
    Всё зависит от автора Sming и исправления библиотек Arduino. Arduino и её библиотеки не созданы для создания более-менее серьезных вещей. Это система для детского творчества на вечер и цель её - создавать по быстрому код не затратив времени на обучение при минимуме знаний, к примеру для помигать пару светодиодами и выбросить. На большее она не катит, без серьезных переделок. Можно использовать чтобы что-то по быстрому кое-как протестировать или испытать, но временно.
     
    Последнее редактирование: 10 июн 2015
  19. alexhi

    alexhi Читатель

    Сообщения:
    77
    Симпатии:
    15
    Сегодня 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 все собиралось ОК. В чем может быть дело и что надо поправить.
     
  20. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Не совсем, в Sming полностью свой сетевой стек, никак не завязанный с Ардуино библиотеками (на базе LWIP).

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

    Попробуйте первым делом пересобрать проект SmingFramework.
     
    alexhi нравится это.

Поделиться этой страницей