Баги/глюки/проблемы в каком-то конкретном примере из пакета Sming

anakod

Moderator
Команда форума
У таймера есть одно главное преимущество - он не блокирует работу модуля, поэтому в фоне продолжают корректно работать Wi-Fi сеть и соединения.
 

JustACat

Moderator
Команда форума
anakod, а нельзя ли в delay встроить вызов системных функций? Например, если delay большой (по временной задержке в нем указанной)? Где-то ведь я это видел, в соседних проектах что ли - не помню...
(если что, сам я против delay с большими задержками, но многим это привычно, особенно после ардуино)

Update: вообще неплохо было бы какой-нибудь System.yeld(); встроить в код, тогда можно было бы делать свои бесконечные циклы, в которых проверять свой собственный некий счетчик (тот же millis()) и пока он не будет нужного "размера", звать System.yeld(); вместо delay(); - и никаких блокировок.
 
Последнее редактирование:

SamGold

New member
Сделал таймер:

Код:
void counterrrr()
{
  float temp;
  Serial.println("Alive3");
...
}


void init()
{
....
  WDT.alive();
  Serial.println("Alive");
  procTimer.initializeMs(500, counterrrr).start();
  Serial.println("Alive2");
}//конец программы
Вылетает по WDT, Alive3 не пишет:

Код:
Alive
Alive2
mode : sta(18:fe:34:a0:8c:05)
add if0

ets Jan  8 2013,rst cause:4, boot mode:(1,7)

wdt reset
Подскажите, куда копать?

upd: Проблема решилась удалением вызова WDT.alive(); Видимо, он что-то сбивает, возможно, это какой-то баг.
 
Последнее редактирование:

anakod

Moderator
Команда форума
На вид все Ок. Может быть неправильно вызывать WDT.alive() до того как система закончила инициализацию?
Простейший пример Basic Blink работает? Какая версия SDK стоит?
 

sherr

New member
Запускаю дисплей на SSD1306 I2C (SDA = GPIO0;SCL = GPIO2). Раскомментировал нужную строку, собрал, зашил.
Получаю в терминале---
(после закорючек и MEM CHECK FAIL - но это на всех примерах )
rfs.start: size:224 Kb, offset:40244000
m
Display start
Fatal exception (28):
epc1=0x40239b7d, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

Где копать ? Я даже не понял, где задаются пины Soft I2C(я так понимаю
контроллера I2C в нашем любимом чипе нет...)
ps - уже понял, перепаял, проблема в другом .
 
Последнее редактирование:

sherr

New member
sherr, версии Sming, UDK и SDK, пожалуйста, напишите?..
SDK- 1.0.0; Sming - dev 1.1.0; UDK- не применяю(у меня Линукс), стоит esp-open-sdk от pfalcon.
Примечание - залил пример Basic ScannerI2C - не виснет, находит дисплей по адресу
0х3с, как и должно быть, те с железом всё в порядке.
Начал по одной добавлять команды из примера - виснет на первой же команде
инициализации дисплея :
display.begin(SSD1306_SWITCHCAPVCC);
 
Последнее редактирование:

sherr

New member
Всё-таки завёл дисплей, применив грязный хак - перенёс в рабочий пример Basic ScannerI2C инициализацию и иже с ней, заодно расчистив от гор [HASHTAG]#ifdef[/HASHTAG] и оформив как честные С-функции, а не классы. Адафрутовский логотип радостно светится, но осадок остался - разобраться бы, как оно должно работать с родными библиотеками, а то переписывать все графические функции -
радость небольшая .
 

anakod

Moderator
Команда форума
Это не основная ветка, в ней идёт работа над поддержкой кросплатформенности, лучше тестировать на мастер. Этот экран точно тестировался на железе, вроде ни у кого из пользователей проблем не было.

UDK- не применяю(у меня Линукс), стоит esp-open-sdk от pfalcon.
Может быть проблема связана с этим?
 

sherr

New member
Это не основная ветка, в ней идёт работа над поддержкой кросплатформенности,
Ну так у меня и не Windows. Может есть смысл обновить у себя кроссплатформенную ветку от Kireevko ?
И еще - я хочу разобраться, что происходит, для проверки собрал максимально схожий проект с ILI9163 - успешно залился и зависания не вызвал ,хотя он использует даже ту же библиотеку Adafruit GFX.
Завтра на работе попробую развернуть UDK + Sming....
 
Последнее редактирование:

sherr

New member
Установил UDK + Sming/WinXP. Уменьшил задержки, отключил вотчдог, сделал вызов по таймеру -
всё работает ... С Линуксом , похоже, прийдётся ковыряться самому.
Улучшенный демо-пример
 

Вложения

FGX

New member
Добрый день в примере народмонитор. Наконец снял лог момента пропажи передачи, может это поможет в отловле глюка
09.05.15 16:57:16:T=24.8°C,Tout=16.8°C;

09.05.15 16:58:16:T=24.8°C,Tout=16.8°C;

09.05.15 16:59:17:T=24.8°C,Tout=16.8°C;

09.05.15 17:00:18:T=24.8°C,Tout=17.0°C;

09.05.15 17:01:18:T=24.9°C,Tout=16.9°C;

+TCP connection
connect to: narodmon.ru
TcpConnection::connect result:, 0
OnConnected
TCP connected
onReadyToSendData: 0
nmOnReadyToSend
sourceEvent: 0
TCP connection send: 56 (56)
TcpClient request completed
TCP sent: 56
onReadyToSendData: 2
nmOnReadyToSend
sourceEvent: 2
nmOnCompleted
successful: 1
TCP connection closing
-TCP connection
09.05.15 17:02:19:T=24.9°C,Tout=17.1°C;

09.05.15 17:03:20:T=24.8°C,Tout=17.1°C;

09.05.15 17:04:21:T=24.8°C,Tout=17.0°C;

09.05.15 17:05:21:T=24.7°C,Tout=17.1°C;

09.05.15 17:06:22:T=24.7°C,Tout=17.0°C;

+TCP connection
connect to: narodmon.ru
TcpConnection::connect result:, 0
OnConnected
TCP connected
onReadyToSendData: 0
nmOnReadyToSend
sourceEvent: 0
TCP connection send: 56 (56)
TcpClient request completed
TCP sent: 56
onReadyToSendData: 2
nmOnReadyToSend
sourceEvent: 2
nmOnCompleted
successful: 1
TCP connection closing
-TCP connection
09.05.15 17:07:23:T=24.6°C,Tout=17.0°C;

09.05.15 17:08:23:T=24.6°C,Tout=17.0°C;

09.05.15 17:09:24:T=24.6°C,Tout=17.0°C;

09.05.15 17:10:25:T=24.6°C,Tout=16.8°C;

09.05.15 17:11:25:T=24.6°C,Tout=16.8°C;

+TCP connection
connect to: narodmon.ru
TcpConnection::connect result:, 0
OnConnected
TCP connected
onReadyToSendData: 0
nmOnReadyToSend
sourceEvent: 0
TCP connection send: 56 (56)
TcpClient request completed
TCP sent: 56
onReadyToSendData: 2
nmOnReadyToSend
sourceEvent: 2
nmOnCompleted
successful: 1
TCP connection closing
-TCP connection
09.05.15 17:12:26:T=24.6°C,Tout=16.8°C;

09.05.15 17:13:27:T=24.5°C,Tout=16.6°C;

09.05.15 17:14:28:T=24.5°C,Tout=16.5°C;

Save: 09.05.15 17:15:28:T=24.5°C,Tout=16.3°C;
09.05.15 17:15:29:T=24.5°C,Tout=16.3°C;

09.05.15 17:16:29:T=24.5°C,Tout=16.2°C;

+TCP connection
connect to: narodmon.ru
TcpConnection::connect result:, 0
OnConnected
TCP connected
onReadyToSendData: 0
nmOnReadyToSend
sourceEvent: 0
TCP connection send: 56 (56)
TcpClient request completed
TCP sent: 56
onReadyToSendData: 2
nmOnReadyToSend
sourceEvent: 2
nmOnCompleted
successful: 1
TCP connection closing
-TCP connection
09.05.15 17:17:30:T=24.5°C,Tout=16.2°C;

09.05.15 17:18:30:T=24.5°C,Tout=16.2°C;

09.05.15 17:19:31:T=24.5°C,Tout=16.0°C;

09.05.15 17:20:32:T=24.4°C,Tout=16.0°C;

09.05.15 17:21:32:T=24.4°C,Tout=16.0°C;

+TCP connection
connect to: narodmon.ru
TcpConnection::connect result:, 0
OnConnected
TCP connected
onReadyToSendData: 0
nmOnReadyToSend
sourceEvent: 0
TCP connection send: 56 (56)
TcpClient request completed
TCP sent: 56
onReadyToSendData: 2
nmOnReadyToSend
sourceEvent: 2
nmOnCompleted
successful: 1
TCP connection closing
-TCP connection
09.05.15 17:22:33:T=24.4°C,Tout=16.0°C;

09.05.15 17:23:34:T=24.4°C,Tout=15.8°C;

09.05.15 17:24:35:T=24.3°C,Tout=15.6°C;

09.05.15 17:25:35:T=24.4°C,Tout=15.8°C;

09.05.15 17:26:36:T=24.4°C,Tout=15.9°C;

beacon timeoutrm matchpm close 7 0 0/2464588227scandoneno Kurochka found, reconnect after 1sreconnectscandoneno Kurochka found, reconnect after 1sreconnectscandoneno Kurochka found, reconnect after 1s+TCP connection
connect to: narodmon.ru
TcpConnection::connect result:, -4
reconnectscandoneno Kurochka found, reconnect after 1sreconnectscandoneno Kurochka found, reconnect after 1sreconnectscandoneno Kurochka found, reconnect after 1sreconnectscandoneno Kurochka found, reconnect after 1sreconnectscandoneno Kurochka found, reconnect after 1sreconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...rm matchpm close 7 0 0/240483reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 17:27:37:T=24.3°C,Tout=15.9°C;

09.05.15 17:28:37:T=24.3°C,Tout=16.0°C;

09.05.15 17:29:38:T=24.2°C,Tout=16.0°C;

09.05.15 17:30:39:T=24.2°C,Tout=15.8°C;

09.05.15 17:31:39:T=24.2°C,Tout=15.9°C;

rm matchpm close 7 0 0/299022677reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 17:32:40:T=24.2°C,Tout=15.9°C;

09.05.15 17:33:41:T=24.2°C,Tout=15.8°C;

09.05.15 17:34:42:T=24.1°C,Tout=15.7°C;

09.05.15 17:35:42:T=24.1°C,Tout=15.6°C;

09.05.15 17:36:43:T=24.1°C,Tout=15.6°C;

09.05.15 17:37:44:T=24.0°C,Tout=15.5°C;

rm matchpm close 7 0 0/373883275reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 17:38:44:T=24.0°C,Tout=15.5°C;

09.05.15 17:39:45:T=24.0°C,Tout=15.4°C;

09.05.15 17:40:46:T=24.0°C,Tout=15.5°C;

09.05.15 17:41:47:T=24.0°C,Tout=15.5°C;

09.05.15 17:42:47:T=24.0°C,Tout=15.5°C;

09.05.15 17:43:48:T=24.0°C,Tout=15.5°C;

rm matchpm close 7 0 0/373852279reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 17:44:49:T=24.0°C,Tout=15.5°C;

Save: 09.05.15 17:45:49:T=24.0°C,Tout=15.5°C;
09.05.15 17:45:50:T=24.0°C,Tout=15.5°C;

09.05.15 17:46:50:T=24.0°C,Tout=15.5°C;

09.05.15 17:47:51:T=24.0°C,Tout=15.5°C;

09.05.15 17:48:51:T=24.0°C,Tout=15.5°C;

09.05.15 17:49:52:T=23.9°C,Tout=15.5°C;

rm matchpm close 7 0 0/373851628reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 17:50:53:T=23.9°C,Tout=15.4°C;

09.05.15 17:51:54:T=24.0°C,Tout=15.4°C;

09.05.15 17:52:54:T=24.0°C,Tout=15.5°C;

09.05.15 17:53:55:T=24.0°C,Tout=15.5°C;

09.05.15 17:54:56:T=24.0°C,Tout=15.5°C;

09.05.15 17:55:56:T=23.9°C,Tout=15.4°C;

09.05.15 17:56:57:T=24.0°C,Tout=15.4°C;

rm matchpm close 7 0 0/373852207reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 17:57:58:T=24.0°C,Tout=15.3°C;

09.05.15 17:58:59:T=24.0°C,Tout=15.3°C;

09.05.15 17:59:59:T=24.0°C,Tout=15.4°C;

09.05.15 18:01:00:T=24.0°C,Tout=15.3°C;

09.05.15 18:02:01:T=24.0°C,Tout=15.2°C;

09.05.15 18:03:01:T=24.0°C,Tout=15.3°C;

rm matchpm close 7 0 0/373852322reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 18:04:02:T=24.0°C,Tout=15.3°C;

09.05.15 18:05:03:T=24.0°C,Tout=15.3°C;

09.05.15 18:06:03:T=24.0°C,Tout=15.3°C;

09.05.15 18:07:04:T=24.0°C,Tout=15.3°C;

09.05.15 18:08:05:T=24.0°C,Tout=15.3°C;

09.05.15 18:09:06:T=24.0°C,Tout=15.3°C;

rm matchpm close 7 0 0/373855376reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 18:10:06:T=24.0°C,Tout=15.2°C;

09.05.15 18:11:07:T=24.0°C,Tout=15.2°C;

09.05.15 18:12:08:T=24.0°C,Tout=15.3°C;

09.05.15 18:13:08:T=24.0°C,Tout=15.3°C;

09.05.15 18:14:09:T=24.0°C,Tout=15.3°C;

09.05.15 18:15:10:T=24.0°C,Tout=15.2°C;

rm matchpm close 7 0 0/373849071reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.1Save: 09.05.15 18:16:11:T=24.0°C,Tout=15.2°C;
09.05.15 18:16:11:T=24.0°C,Tout=15.2°C;

09.05.15 18:17:11:T=24.0°C,Tout=15.1°C;

09.05.15 18:18:12:T=24.0°C,Tout=15.0°C;

09.05.15 18:19:13:T=24.0°C,Tout=15.0°C;

09.05.15 18:20:13:T=24.0°C,Tout=15.1°C;

09.05.15 18:21:14:T=24.0°C,Tout=15.1°C;

rm matchpm close 7 0 0/373850491reconnectscandoneadd 0aid 1pm open phy_2,type:2 0 0cnt connected with Kurochka, channel 4dhcp client start...ip:192.168.1.100,mask:255.255.255.0,gw:192.168.1.109.05.15 18:22:15:T=24.0°C,Tout=15.1°C;

09.05.15 18:23:15:T=24.0°C,Tout=15.1°C;

09.05.15 18:24:16:T=23.9°C,Tout=15.0°C;

09.05.15 18:25:17:T=23.9°C,Tout=15.1°C;

09.05.15 18:26:18:T=23.9°C,Tout=15.0°C;
 

sherr

New member
С Линуксом , похоже, прийдётся ковыряться самому.
Подрихтовал библиотеку 1306 - убрал в инициализации кучу дефайнов - теперь только I2C 128*64.:p
Подружил с SHT-11 - получилось вот так :SHT_1306.jpg
Ну и архив (изменив пару строк легко переделать на DHT11/22, куда более распространённые)
 

Вложения

С новой версией Sming 1.1.0 + sdk 1.0.1b1 + Linux Есть некая проблема с записью файлов. Баг проявляется в примере MeteoControl. Если собрать пример и залить в железку - все пашет.. Если же внести изменения в настройки и сохранить их - при перезагрузке имеем


+TCP connection
timeout updating: 70 -> 65535
Server timeout updating: 40 -> 90
+TCP connection
fs.start: size:240 Kb, offset:40240000

m

Station configuration was updated to: triosoft
DHT Read fail
mode : sta(18:fe:34:9b:f1:4e)Fatal exception (9):
epc1=0x40100592, epc2=0x00000000, epc3=0x00000000, excvaddr=0x3fff4505, depc=0x00000000

Если в saveConfig закоментить fileSetContent(METEO_CONFIG_FILE, buf); то ясное дело все работает опять. То есть заливаем в железку, вносим изменения в конфигурацию - все работает - перегружаем - все работает (ясное дело конфига-то нет!)

Хелп! Кто виноват? что делать? что еще можно покрутить потестить?
 

waskez

New member
Может быть, я ошибаюсь, но мне кажется что в примере MqttClient_Hello в функции
Код:
bool MqttClient::subscribe(String topic)
{
    uint16_t msgId = 0;
    debugf("subscription '%s' registered", topic.c_str());
    mqtt_subscribe(&broker, topic.c_str(), &msgId);
}
debugf должно выполнятся после получения ответа “SUBACK” от брокера !?
 

anakod

Moderator
Команда форума
waskez, Вы правы, если пишете pull-request с поправками буду особенно благодарен
 
Граждане, просветите пожалуйста!

Пробую организовать парсинг json-а, полученного через Serial. Софтинка основана на MeteoControl. Вот код, который парсить должен:
Код:
void process()
{
    char* buf = new char[255];
    byte length = 0;

    WDT.enable(false);
    if(Serial.available() > 0)
     {
        length = Serial.readBytesUntil('\r', buf, 255);
       if ( length > 0)
       {
          buf[length]='\0';
//          Serial.print("Serial data: ");
//          Serial.print(buf);

          DynamicJsonBuffer jsonBuffer;
          JsonObject& root = jsonBuffer.parseObject(buf);
          if (!root.success())
          {
             Serial.print("parseObject() failed");
          }
          else
          {
//              root.printTo(Serial);
//              Serial.println();

            JsonObject& settings = root["settings"];
            ActiveConfig.set_temp = settings["set_temp"];
            ActiveConfig.temp_delta = settings["temp_delta"];
            ActiveConfig.temp_interval = settings["temp_interval"];
            ActiveConfig.switch_interval = settings["switch_interval"];
          }
          delete[] buf;
          WDT.enable(true);
       }
     }
}

его из init() запускаю

procTimer.initializeMs(15000, process).start();
process();

и чего я только не делал - периодически, достаточно часто, раз в две-три посылки строки с сериала модуль ребутится по wdt timeout :(
Пробовал сперва БЕЗ WDT.enable(false); -тож ребуталось :(
Может я чего-то в принципе не так делаю? вроде же задача простая, получить по сериал json-строчку и разобрать ее на переменные..

От модератора: пожалуйста, используйте спойлер и код. Выбирайте тему правильно!
 
Последнее редактирование:
С новой версией Sming 1.1.0 + sdk 1.0.1b1 + Linux Есть некая проблема с записью файлов. Баг проявляется в примере MeteoControl. Если собрать пример и залить в железку - все пашет.. Если же внести изменения в настройки и сохранить их - при перезагрузке имеем
+TCP connection
timeout updating: 70 -> 65535
Server timeout updating: 40 -> 90
+TCP connection
fs.start: size:240 Kb, offset:40240000
m
Station configuration was updated to: triosoft
DHT Read fail
mode : sta(18:fe:34:9b:f1:4e)Fatal exception (9):
epc1=0x40100592, epc2=0x00000000, epc3=0x00000000, excvaddr=0x3fff4505, depc=0x00000000
По данному вопросу вот что выяснил - если в обновленной версии Sming, самой свежей из git для сборки проекта использовать Makefile из старой версии, то мультиплатформизации и красивого разбиения на куски - то все работает славно, а именно при записи конфигурационного файла от MeteoControl ничего не ломается, данные сохраняются, модул при передерге питания стартует, вычитывает из файла конфиг и все путем работает. Видимо на этапе создания FS-пустышки и ее последующей записи в железку что-то поломалось. Может глупость, но все же - у spiffs есть понятие общего размера ФС? Не может быть проблемой то, что по-умолчанию ФС-пустышка в новых Makefile создается размеров 16384 байта и потом этого размера ФС не хватает для html-шаблонов и конфига?
 

anakod

Moderator
Команда форума
Это интересная мысль. А что пишет модуль при старте - сколько есть места в фс? Что если не использовать spiffy?
 
Это интересная мысль. А что пишет модуль при старте - сколько есть места в фс? Что если не использовать spiffy?
Как посмотреть при старте сколько места в ФС? оно что-то о 240Кб врод писало... Как не использовать spiffy? закоментить в НОВЫХ Makefile что-то связанное со spiffy? Я пока не жутко силен в Makefile-писании :(

А по парсингу json у Вас нет мыслей?? :)

UPD:

fs.start: size:240 Kb, offset:40240000 ?? Это? это лог сборки со старым Makefile, но оно вроде и с новым то же самое писало.
 
Сверху Снизу