В этот скетч нет, он написан для чайника Redmond, но можно попробовать сделать это через WiFi-IoT. У WiFi-IoT BT HUB пока нет поддержки чайника.
Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Модератор: immortal
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- tarasfrompir
- Сообщения: 3216
- Зарегистрирован: Ср мар 02, 2016 8:18 pm
- Откуда: Украина Пирятин
- Благодарил (а): 223 раза
- Поблагодарили: 816 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
ну это видел - но тоже пока глухоDivan писал(а): ↑Вт июн 02, 2020 9:42 pmВ этот скетч нет, он написан для чайника Redmond, но можно попробовать сделать это через WiFi-IoT. У WiFi-IoT BT HUB пока нет поддержки чайника.
а в этот скетч можно добавить по идее - потому что способ авторизации и передача данных не меняется, а только количество данных меняется... но уж нет так нет
Спасибо нам ПОМОЖЕТ..!
-
- Сообщения: 44
- Зарегистрирован: Пт июн 05, 2020 7:26 am
- Благодарил (а): 1 раз
- Поблагодарили: 18 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Тоже использую этот код для связи с чайником RK-M173S. Пробую прикрутить асинхронный MQTT, пока еще сыровато.
По зависаниям. Тоже есть эта проблема, но хотелось бы решить ее без костылей. Вчера пробовал рекомендацию из https://github.com/nkolban/esp32-snippets/issues/874 о правке файла FreeRTOS.cpp. У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: Вроде бы помогло пережить ночь.
Но есть и другая проблема, это утечка памяти. Для ее проверки я вставлял в тело цикла строку:
ESP_LOGW("TAG", "%d: - RAM left %d", __LINE__, esp_get_free_heap_size());
При работе шлюза наблюдал в дебаге постепенное уменьшение свободной памяти. Обнаружил 2 утечки. Первая это диагностический вывод по ключу #define R4S_LOG_EXCHANGE в файле r4scfg.h. При комментировании ключа и запрете вывода одна утечка уходит. Вторая проблема в процедуре r4sWrite в файле R4S.cpp. Уж не знаю почему и как, но при замене строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];" уходит вторая утечка памяти. Продолжаю наблюдать.
По зависаниям. Тоже есть эта проблема, но хотелось бы решить ее без костылей. Вчера пробовал рекомендацию из https://github.com/nkolban/esp32-snippets/issues/874 о правке файла FreeRTOS.cpp. У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: Вроде бы помогло пережить ночь.

ESP_LOGW("TAG", "%d: - RAM left %d", __LINE__, esp_get_free_heap_size());
При работе шлюза наблюдал в дебаге постепенное уменьшение свободной памяти. Обнаружил 2 утечки. Первая это диагностический вывод по ключу #define R4S_LOG_EXCHANGE в файле r4scfg.h. При комментировании ключа и запрете вывода одна утечка уходит. Вторая проблема в процедуре r4sWrite в файле R4S.cpp. Уж не знаю почему и как, но при замене строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];" уходит вторая утечка памяти. Продолжаю наблюдать.
- Рейтинг: 2.33%
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Спасибо за ваше участие, надо это попробовать, потому что вы правильно сказали, что память забивается логами, именно это и вызывает зависание платы + нестабильная связь. Два фактора нужно устранить. У меня 4 сутки проработало нормально и зависло. Попробую вашу рекомендацию.alutov писал(а): ↑Пт июн 05, 2020 6:20 pmТоже использую этот код для связи с чайником RK-M173S. Пробую прикрутить асинхронный MQTT, пока еще сыровато.
По зависаниям. Тоже есть эта проблема, но хотелось бы решить ее без костылей. Вчера пробовал рекомендацию из https://github.com/nkolban/esp32-snippets/issues/874 о правке файла FreeRTOS.cpp. У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: FreeRTOS.rar
Вроде бы помогло пережить ночь.Но есть и другая проблема, это утечка памяти. Для ее проверки я вставлял в тело цикла строку:
ESP_LOGW("TAG", "%d: - RAM left %d", __LINE__, esp_get_free_heap_size());
При работе шлюза наблюдал в дебаге постепенное уменьшение свободной памяти. Обнаружил 2 утечки. Первая это диагностический вывод по ключу #define R4S_LOG_EXCHANGE в файле r4scfg.h. При комментировании ключа и запрете вывода одна утечка уходит. Вторая проблема в процедуре r4sWrite в файле R4S.cpp. Уж не знаю почему и как, но при замене строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];" уходит вторая утечка памяти. Продолжаю наблюдать.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 40
- Зарегистрирован: Вт апр 11, 2017 11:06 am
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Спасибо за участие. Залил, наблюдаю
Тоже смотрел на FreeRTOS.rar с семафорами. Но так как нихрена не понимаю
отложил. Но автор указал на проблему в этом направлении. Отлично что нашелся спец, который нашел хотя бы вариант. И целых 2 утечки.
Тоже смотрел на FreeRTOS.rar с семафорами. Но так как нихрена не понимаю

-
- Сообщения: 40
- Зарегистрирован: Вт апр 11, 2017 11:06 am
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Только что заглох. Это график активности MQTT. Видно что к "кончине" работает все с большими паузами выкидывая инфо пачками, и никак не раз в 5 сек.
Чайник шевелил. Похоже плата уходит в зависон. Перегрузка помогает.
upd. Чтото сегодня беда. Проработало несколько мин и ушло в оффлайн. От компа до чайника не добивает, ставлю поближе к чайнику. Поэтому посмотреть в порт, че с ней происходит не могу.
-
- Сообщения: 44
- Зарегистрирован: Пт июн 05, 2020 7:26 am
- Благодарил (а): 1 раз
- Поблагодарили: 18 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Тяжело сказать, что еще виснет. Вот мой вариант: https://yadi.sk/d/a1r3iUwplJqfkg, для однозначности в бинарном виде . Грязных костылей нет. Шьется одним файлом с адреса 0 на стертую есп. После чего в роутере нужно открыть гостевой wifi "r4s" с паролем "12345678" и в браузере настроить Wifi и Mqtt. Имя чайника лучше оставить пустым, тогда есп будет искать его по uuid. После оригинального скетча в браузере может остаться переадресация с ip на ip/r4s, и тогда в нем нужно почистить настройки сайта. Сам тестирую на RK-M173S. Интересует, в первую очередь, тест на зависание.
Последний раз редактировалось alutov Ср июн 17, 2020 8:05 am, всего редактировалось 12 раз.
- Рейтинг: 1.16%
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Тяжело сказать, что еще виснет. Вот мой вариант https://yadi.sk/d/mQCfnzd-NJRLmA , для однозначности в бинарном виде . Грязных костылей нет. Шьется одним файлом с адреса 0 на стертую есп. После чего в роутере нужно открыть гостевой wifi "r4s" с паролем "12345678" и в браузере настроить Wifi и Mqtt. Имя чайника лучше оставить пустым, тогда есп будет искать его по uuid. После оригинального скетча в браузере может остаться переадресация с ip на ip/r4s, и тогда в нем нужно почистить настройки сайта. Сам тестирую на RK-M173S. Интересует, в первую очередь, тест на зависание.
Спасибо за ваше участие. Есть вопросы.
1) Почему нужно открывать гостевой доступ?
2) Можно ли подключить к имеющейся точке доступа?
3) Как прошивать, через flash download tool 3.8.5? Какой код нужно указывать при прошивке? Так вы делаете?
4) Если есть другие устройства с BLE, он сможет связаться с чайником? - Ведь имя указывается для того, чтобы связь была только с чайником и отсекала другие устройства с BLE.
5) В вашем случае сколько дней была связь с чайником?
Спасибо за ваше участие. Есть вопросы.
1) Почему нужно открывать гостевой доступ?
2) Можно ли подключить к имеющейся точке доступа?
3) Как прошивать, через flash download tool 3.8.5? Какой код нужно указывать при прошивке? Так вы делаете?
СпойлерПоказать
5) В вашем случае сколько дней была связь с чайником?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Попробовал такой способalutov писал(а): ↑Пт июн 05, 2020 6:20 pmТоже использую этот код для связи с чайником RK-M173S. Пробую прикрутить асинхронный MQTT, пока еще сыровато.
По зависаниям. Тоже есть эта проблема, но хотелось бы решить ее без костылей. Вчера пробовал рекомендацию из https://github.com/nkolban/esp32-snippets/issues/874 о правке файла FreeRTOS.cpp. У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: FreeRTOS.rar
Вроде бы помогло пережить ночь.Но есть и другая проблема, это утечка памяти. Для ее проверки я вставлял в тело цикла строку:
ESP_LOGW("TAG", "%d: - RAM left %d", __LINE__, esp_get_free_heap_size());
При работе шлюза наблюдал в дебаге постепенное уменьшение свободной памяти. Обнаружил 2 утечки. Первая это диагностический вывод по ключу #define R4S_LOG_EXCHANGE в файле r4scfg.h. При комментировании ключа и запрете вывода одна утечка уходит. Вторая проблема в процедуре r4sWrite в файле R4S.cpp. Уж не знаю почему и как, но при замене строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];" уходит вторая утечка памяти. Продолжаю наблюдать.
мой чайник SkyKettle G240S терял связь чаще, чем до этого.У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: FreeRTOS.rar
Я не понял где именно нужно менять эти строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];", может я не так меняю?
Если я меняю просто "byte buffer[32];", то при проверке скетча всплывает ошибка.
СпойлерПоказать
СпойлерПоказать
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 44
- Зарегистрирован: Пт июн 05, 2020 7:26 am
- Благодарил (а): 1 раз
- Поблагодарили: 18 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
1) При старте есп ищет сеть wifi с параметрами ssid "r4s" и паролем "12345678". После подключения и установки параметров wifi эта сеть больше не нужна.
2) Да, после ввода ее параметров. Гостевая нужна только для первичной настройки.
3) Да, все так, адрес 0x0000.
4) Все как в оригинальном скетче. если имя пустое чайник соединяется по айдишнику. У меня это работает. Если не получается, пробуйте по имени. Имя еще, наверное, пригодится, если 2 разных чайника
.
5) Пока 8 часов. Но файл вчерашний.
Бинарник сделан на 4МБ памяти,если что. Менял много и в разных местах. Исходники, если кому интересно, залил на гит https://github.com/alutov/r4sGate/, для сборки вместо PubSubClient нужны 2 библиотеки https://github.com/me-no-dev/AsyncTCP и https://github.com/marvinroger/async-mqtt-client. Но смысла особого в исходниках нет, кроме погремушек разве что, если виснуть будет так же.
Там выделяется буфер по размеру команды+ 4байта. Я выделяю всегда 32 байта. У меня так:
2) Да, после ввода ее параметров. Гостевая нужна только для первичной настройки.
3) Да, все так, адрес 0x0000.
4) Все как в оригинальном скетче. если имя пустое чайник соединяется по айдишнику. У меня это работает. Если не получается, пробуйте по имени. Имя еще, наверное, пригодится, если 2 разных чайника

5) Пока 8 часов. Но файл вчерашний.
Бинарник сделан на 4МБ памяти,если что. Менял много и в разных местах. Исходники, если кому интересно, залил на гит https://github.com/alutov/r4sGate/, для сборки вместо PubSubClient нужны 2 библиотеки https://github.com/me-no-dev/AsyncTCP и https://github.com/marvinroger/async-mqtt-client. Но смысла особого в исходниках нет, кроме погремушек разве что, если виснуть будет так же.
Там выделяется буфер по размеру команды+ 4байта. Я выделяю всегда 32 байта. У меня так:
СпойлерПоказать
uint8_t r4sWrite(uint8_t cmd, uint8_t* data, size_t len) {
size_t sz = 4 + len; // 55, counter, cmd, AA
// uint8_t* buffer = new uint8_t[sz];
byte buffer[32];
buffer[0] = 0x55;
buffer[1] = r4scounter;
buffer[2] = cmd;
buffer[sz - 1] = 0xAA;
if (len > 0) {
memcpy(&buffer[3], data, len);
}
// try {
pRemoteTXCharacteristic->writeValue(buffer, sz);
#ifdef R4S_LOG_EXCHANGE
log_i(">> %s", BLEUtils::buildHexData(NULL, buffer, sz));
#endif
// } catch (...) {
// log_d("writeValue failed");
// }
return r4scounter++;
}
size_t sz = 4 + len; // 55, counter, cmd, AA
// uint8_t* buffer = new uint8_t[sz];
byte buffer[32];
buffer[0] = 0x55;
buffer[1] = r4scounter;
buffer[2] = cmd;
buffer[sz - 1] = 0xAA;
if (len > 0) {
memcpy(&buffer[3], data, len);
}
// try {
pRemoteTXCharacteristic->writeValue(buffer, sz);
#ifdef R4S_LOG_EXCHANGE
log_i(">> %s", BLEUtils::buildHexData(NULL, buffer, sz));
#endif
// } catch (...) {
// log_d("writeValue failed");
// }
return r4scounter++;
}