1

Topic: Нет связи смартфона через модуль jd-08 + ардуино нано

Добрый день
Использую 
Блютуз модуль JD-08 https://amperkot.ru/static/3236/uploads … JDY-08.pdf
Ардуино НАНО и пробовал на  Искра Нано https://amperka.ru/product/iskra-nano-pro

Не стабильно соединялась плата по Хард сериал, пробовал на софт сериал, также часто было невозможно соединение.
Сейчас вообще пропал коннект. Получилось соединение на скорости 9600, но постоянно отваливалось
Увеличил скорость до 19200. Проверял прохождение связи между модулем и платой в обоих направлениях. Все ок.
Заливал чисто код из страницы (получить код) с параметрами софт сериал. Коннекта нет вообще
Пропаял соединение блютуз модуля с платой. Ничего не помогает. 
В лупе отслеживаю статус соединения через RemoteXY.connect_flag
Получается что после установки флага в 1 через какое то время коннект отваливается, обычно ошибка Device not reply/ Receive time out error.

В коде библиотеки RemoteXY.h есть функции debag serial. На сайте у вас не описания как работать с библиотекой.

Что делать?

2

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Научился запускать режим дебаг
для этого надо перед подключением библиотеки написать
    #define REMOTEXY__DEBUGLOGS Serial   тут указываем сериал в который отправляем дебаг сообщения
    #define REMOTEXY__DEBUGLOGS_SPEED 115200 тут скорость порта

измерил время на обработку одного обращения к RemoteXY_Handler(); в лупе
TIME 12 это время, пока нет попытки подключения время не более 20 микросекунд при попытке подключения время возрастает до TIME 253400, а связь обрывается при отправке очередного пакета данных. Получается что приемник (смартфон) обрывает прием данных не дождавшись получения всего пакета !!!
Думаю что разработчик может исправить такую мелочь. Длинну пакета то можно передать и дождаться всех данных?

Вот такая картинка
18:12:51.555 -> [    0.004] RemoteXY startedRemoteXY initialise...
18:12:51.555 ->
18:12:51.555 -> TIME 12
18:12:51.555 ->
18:12:51.555 -> TIME 16
18:12:51.555 ->
18:12:51.555 -> TIME 20
18:12:52.951 ->
18:12:52.951 -> TIME 24
18:13:04.046 ->
18:13:04.046 -> [   12.466] <- 55 06 00 00 F1 E9 (тут запрос на получение данных со смартфона первый)
18:13:04.046 -> [   12.467] -> 55 F5 02 00 0A C8 04 42 82 06 10 36 2A 01 40 79
18:13:04.046 ->                42 81 3D 16 27 07 01 A2 1A 42 81 41 20 23 07 01
18:13:04.046 ->                E7 1A 81 00 3F 18 05 04 01 11 41 68 00 81 00 43
18:13:04.046 ->                22 04 04 01 11 57 68 00 42 81 34 0C 30 07 01 5E
18:13:04.081 ->                1A 81 00 36 0E 03 04 01 11 56 00 43 01 0F 00 24
18:13:04.081 ->                0D 01 02 1A 0B 81 00 1D 30 08 04 01 3F D0 BA D0
18:13:04.081 ->                BC 2F D1 87 00 01 02 4E 02 0F 06 01 6A 01 52 45
18:13:04.081 ->                53 45 54 00 83 01 3E 39 0B 05 01 6A 1F 31 00 83
18:13:04.081 ->                00 58 39 0B 05 02 05 1F 33 00 07 0E 54 08 0F 06
18:13:04.081 ->                02 02 1A 02 02 81 00 01 09 2C 04 02 11 46 55 4C
18:13:04.115 ->                4C 20 20 43 41 50 41 43 49 54 59 20 41 68 00 81
18:13:04.115 ->                00 01 10 2F 04 02 11 46 55 4C 4C 20 20 43 41 50
18:13:04.115 ->                41 43 49 54 59 20 57 74 68 00 07 0E 54 0F 0F 06
18:13:04.115 ->                02 02 1A 02 01 07 0E 54 01 0F 06 02 02 1A 02 02
18:13:04.115 ->                81 00 01 02 32 04 02 11 4D 41 58 20 49 20 41 3A
18:13:04.115 ->                00 81 00 01 17 35 04 02 11 46 55 4C 4C 20 20 56
18:13:04.148 ->                4F 4C 54 47 45 20 56 00 81 00 01 1E 35 04 02 11
18:13:04.148 ->                45 4D 50 54 59 20 56 4F 4C 54 41 47 45 20 56 00
18:13:04.148 ->                81 00 01 25 20 04 02 11 41 4C 41 52 4D 20 4C 4F
18:13:04.148 ->                57 20 56 4F 4C 54 41 47 45 00 07 0E 54 16 0F 06
18:13:04.148 ->                02 02 1A 02 02 07 0E 54 1D 0F 06 02 02 1A 02 02
18:13:04.148 ->                07 0E 54 24 0F 06 02 02 1A 02 02 41 17 5E 02 06
18:13:04.182 ->                06 01 43 01 1A 12 0E 08 01 CC 1A 04 83 00 4B 39
18:13:04.182 ->                0B 05 03 5A 1F 32 00 44 36 00 00 64 37 03 08 24
18:13:04.182 ->                87 E7 CC E9 A3 D0 90 00 D0 92 00 D0 92 D0 90 D0
18:13:04.182 ->                A2 D0 A2 2F 31 30 00 4B 4D 2F D1 87 00 D0 9A D0
18:13:04.182 ->                93 2F D1 87 00 43 41 44 00 43 02 44 01 0F 06 02
18:13:04.182 ->                02 1A 05 43 02 45 16 0E 06 02 02 1A 05 43 02 45
18:13:04.216 ->                1D 0E 06 02 02 1A 05 43 02 44 24 0F 06 02 02 1A
18:13:04.216 ->                05 81 00 02 30 03 03 02 11 56 3A 00 81 00 02 34
18:13:04.216 ->                05 03 02 11 D0 90 D0 A7 3A 00 81 00 02 39 08 03
18:13:04.216 ->                02 11 57 74 2F 68 3A 00 43 01 51 0D 12 05 01 11
18:13:04.216 ->                11 05 43 01 52 17 0F 05 01 02 1A 05 43 01 54 21
18:13:04.216 ->                0B 05 01 02 1A 05 42 81 14 36 1A 06 01 40 77 43
18:13:04.216 ->                02 44 08 0F 06 02 02 1A 05 43 02 44 0F 0F 06 02
18:13:04.249 ->                02 1A 05 81 00 18 37 12 04 01 11 65 63 6F 6E 6F
18:13:04.249 ->                6D 79 00 43 02 0A 2A 11 04 02 02 1A 0B 81 00 02
18:13:04.249 ->                2B 10 03 02 11 74 3A 00 81 00 3C 2E 04 04 02 11
18:13:04.249 ->                4B 69 00 81 00 3C 32 05 04 02 11 4B 75 00 07 0E
18:13:04.249 ->                52 2D 11 04 02 02 1A 02 05 07 0E 52 32 11 04 02
18:13:04.249 ->                02 1A 02 05 43 02 42 2D 10 04 02 02 1A 09 43 02
18:13:04.283 ->                42 32 10 04 02 02 1A 09 81 00 1D 2B 06 03 02 11
18:13:04.283 ->                56 43 43 00 43 00 27 2A 11 04 02 02 1A 07 01 02
18:13:04.283 ->                FE 00 11 0E 01 5A 1F 47 4F 00 43 01 14 22 1A 0C
18:13:04.283 ->                01 02 1A 0B 43 01 4C 28 18 09 01 02 1A 05 81 00
18:13:04.283 ->                41 2B 0B 06 01 11 D0 9A D0 9C 3A 00 43 00 4E 32
18:13:04.283 ->                14 05 01 02 1A 05 81 00 41 33 09 04 01 11 6B 6D
18:13:04.316 ->                2F 68 00 D1 97
18:13:04.316 -> TIME 255932
18:13:05.605 ->
18:13:05.605 -> [   14.034] <- 55 06 00 00 F1 E9 (тут второй)
18:13:05.605 -> [   14.036] -> 55 F5 02 00 0A C8 04 42 82 06 10 36 2A 01 40 79
18:13:05.639 ->                42 81 3D 16 27 07 01 A2 1A 42 81 41 20 23 07 01
18:13:05.639 ->                E7 1A 81 00 3F 18 05 04 01 11 41 68 00 81 00 43
18:13:05.639 ->                22 04 04 01 11 57 68 00 42 81 34 0C 30 07 01 5E
18:13:05.639 ->                1A 81 00 36 0E 03 04 01 11 56 00 43 01 0F 00 24
18:13:05.639 ->                0D 01 02 1A 0B 81 00 1D 30 08 04 01 3F D0 BA D0
18:13:05.639 ->                BC 2F D1 87 00 01 02 4E 02 0F 06 01 6A 01 52 45
18:13:05.673 ->                53 45 54 00 83 01 3E 39 0B 05 01 6A 1F 31 00 83
18:13:05.673 ->                00 58 39 0B 05 02 05 1F 33 00 07 0E 54 08 0F 06
18:13:05.673 ->                02 02 1A 02 02 81 00 01 09 2C 04 02 11 46 55 4C
18:13:05.673 ->                4C 20 20 43 41 50 41 43 49 54 59 20 41 68 00 81
18:13:05.673 ->                00 01 10 2F 04 02 11 46 55 4C 4C 20 20 43 41 50
18:13:05.673 ->                41 43 49 54 59 20 57 74 68 00 07 0E 54 0F 0F 06
18:13:05.706 ->                02 02 1A 02 01 07 0E 54 01 0F 06 02 02 1A 02 02
18:13:05.706 ->                81 00 01 02 32 04 02 11 4D 41 58 20 49 20 41 3A
18:13:05.706 ->                00 81 00 01 17 35 04 02 11 46 55 4C 4C 20 20 56
18:13:05.706 ->                4F 4C 54 47 45 20 56 00 81 00 01 1E 35 04 02 11
18:13:05.706 ->                45 4D 50 54 59 20 56 4F 4C 54 41 47 45 20 56 00
18:13:05.706 ->                81 00 01 25 20 04 02 11 41 4C 41 52 4D 20 4C 4F
18:13:05.740 ->                57 20 56 4F 4C 54 41 47 45 00 07 0E 54 16 0F 06
18:13:05.740 ->                02 02 1A 02 02 07 0E 54 1D 0F 06 02 02 1A 02 02
18:13:05.740 ->                07 0E 54 24 0F 06 02 02 1A 02 02 41 17 5E 02 06
18:13:05.740 ->                06 01 43 01 1A 12 0E 08 01 CC 1A 04 83 00 4B 39
18:13:05.740 ->                0B 05 03 5A 1F 32 00 44 36 00 00 64 37 03 08 24
18:13:05.740 ->                87 E7 CC E9 A3 D0 90 00 D0 92 00 D0 92 D0 90 D0
18:13:05.774 ->                A2 D0 A2 2F 31 30 00 4B 4D 2F D1 87 00 D0 9A D0
18:13:05.774 ->                93 2F D1 87 00 43 41 44 00 43 02 44 01 0F 06 02
18:13:05.774 ->                02 1A 05 43 02 45 16 0E 06 02 02 1A 05 43 02 45
18:13:05.774 ->                1D 0E 06 02 02 1A 05 43 02 44 24 0F 06 02 02 1A
18:13:05.774 ->                05 81 00 02 30 03 03 02 11 56 3A 00 81 00 02 34
18:13:05.774 ->                05 03 02 11 D0 90 D0 A7 3A 00 81 00 02 39 08 03
18:13:05.774 ->                02 11 57 74 2F 68 3A 00 43 01 51 0D 12 05 01 11
18:13:05.808 ->                11 05 43 01 52 17 0F 05 01 02 1A 05 43 01 54 21
18:13:05.808 ->                0B 05 01 02 1A 05 42 81 14 36 1A 06 01 40 77 43
18:13:05.808 ->                02 44 08 0F 06 02 02 1A 05 43 02 44 0F 0F 06 02
18:13:05.808 ->                02 1A 05 81 00 18 37 12 04 01 11 65 63 6F 6E 6F
18:13:05.808 ->                6D 79 00 43 02 0A 2A 11 04 02 02 1A 0B 81 00 02
18:13:05.808 ->                2B 10 03 02 11 74 3A 00 81 00 3C 2E 04 04 02 11
18:13:05.842 ->                4B 69 00 81 00 3C 32 05 04 02 11 4B 75 00 07 0E
18:13:05.842 ->                52 2D 11 04 02 02 1A 02 05 07 0E 52 32 11 04 02
18:13:05.842 ->                02 1A 02 05 43 02 42 2D 10 04 02 02 1A 09 43 02
18:13:05.842 ->                42 32 10 04 02 02 1A 09 81 00 1D 2B 06 03 02 11
18:13:05.842 ->                56 43 43 00 43 00 27 2A 11 04 02 02 1A 07 01 02
18:13:05.842 ->                FE 00 11 0E 01 5A 1F 47 4F 00 43 01 14 22 1A 0C
18:13:05.876 ->                01 02 1A 0B 43 01 4C 28 18 09 01 02 1A 05 81 00
18:13:05.876 ->                41 2B 0B 06 01 11 D0 9A D0 9C 3A 00 43 00 4E 32
18:13:05.876 ->                14 05 01 02 1A 05 81 00 41 33 09 04 01 11 6B 6D
18:13:05.876 ->                2F 68 00 D1 97
18:13:05.876 -> TIME 255924
18:13:05.978 ->
18:13:05.978 -> [   14.396] <- 04 00 00 FC 55 06 00 00 F1 E9 (тут третий и отличается от первых двух 55 06 00 00 F1 E9)
18:13:11.195 -> [   19.582] -> 55 F5 02 00 0A C8 04 42 82 06 10 36 2A 01 40 79
18:13:11.195 ->                42 81 3D 16 27 07 01 A2 1A 42 81 41 20 23 07 01
18:13:11.195 ->                E7 1A 81 00 3F 18 05 04 01 11 41 68 00 81 00 43
18:13:11.195 ->                22 04 04 01 11 57 68 00 42 81 34 0C 30 07 01 5E
18:13:11.195 ->                1A 81 00 36 0E 03 04 01 11 56 00 43 01 0F 00 24
18:13:11.195 ->                0D 01 02 1A 0B 81 00 1D 30 08 04 01 3F D0 BA D0
18:13:11.229 ->                BC 2F D1 87 00 01 02 4E 02 0F 06 01 6A 01 52 45
18:13:11.229 ->                53 45 54 00 83 01 3E 39 0B 05 01 6A 1F 31 00 83
18:13:11.229 ->                00 58 39 0B 05 02 05 1F 33 00 07 0E 54 08 0F 06
18:13:11.229 ->                02 02 1A 02 02 81 00 01 09 2C 04 02 11 46 55 4C
18:13:11.229 ->                4C 20 20 43 41 50 41 43 49 54 59 20 41 68 00 81
18:13:11.229 ->                00 01 10 2F 04 02 11 46 55 4C 4C 20 20 43 41 50
18:13:11.263 ->                41 43 49 54 59 20 57 74 68 00 07 0E 54 0F 0F 06
18:13:11.263 ->                02 02 1A 02 01 07 0E 54 01 0F 06 02 02 1A 02 02
18:13:11.263 ->                81 00 01 02 32 04 02 11 4D 41 58 20 49 20 41 3A
18:13:11.263 ->                00 81 00 01 17 35 04 02 11 46 55 4C 4C 20 20 56
18:13:11.263 ->                4F 4C 54 47 45 20 56 00 81 00 01 1E 35 04 02 11
18:13:11.263 ->                45 4D 50 54 59 20 56 4F 4C 54 41 47 45 20 56 00
18:13:11.297 ->                81 00 01 25 20 04 02 11 41 4C 41 52 4D 20 4C 4F
18:13:11.297 ->                57 20 56 4F 4C 54 41 47 45 00 07 0E 54 16 0F 06
18:13:11.297 ->                02 02 1A 02 02 07 0E 54 1D 0F 06 02 02 1A 02 02
18:13:11.297 ->                07 0E 54 24 0F 06 02 02 1A 02 02 41 17 5E 02 06
18:13:11.297 ->                06 01 43 01 1A 12 0E 08 01 CC 1A 04 83 00 4B 39
18:13:11.297 ->                0B 05 03 5A 1F 32 00 44 36 00 00 64 37 03 08 24
18:13:11.330 ->                87 E7 CC E9 A3 D0 90 00 D0 92 00 D0 92 D0 90 D0
18:13:11.330 ->                A2 D0 A2 2F 31 30 00 4B 4D 2F D1 87 00 D0 9A D0
18:13:11.330 ->                93 2F D1 87 00 43 41 44 00 43 02 44 01 0F 06 02
18:13:11.330 ->                02 1A 05 43 02 45 16 0E 06 02 02 1A 05 43 02 45
18:13:11.330 ->                1D 0E 06 02 02 1A 05 43 02 44 24 0F 06 02 02 1A
18:13:11.330 ->                05 81 00 02 30 03 03 02 11 56 3A 00 81 00 02 34
18:13:11.330 ->                05 03 02 11 D0 90 D0 A7 3A 00 81 00 02 39 08 03
18:13:11.364 ->                02 11 57 74 2F 68 3A 00 43 01 51 0D 12 05 01 11
18:13:11.364 ->                11 05 43 01 52 17 0F 05 01 02 1A 05 43 01 54 21
18:13:11.364 ->                0B 05 01 02 1A 05 42 81 14 36 1A 06 01 40 77 43
18:13:11.364 ->                02 44 08 0F 06 02 02 1A 05 43 02 44 0F 0F 06 02
18:13:11.364 ->                02 1A 05 81 00 18 37 12 04 01 11 65 63 6F 6E 6F
18:13:11.364 ->                6D 79 00 43 02 0A 2A 11 04 02 02 1A 0B 81 00 02
18:13:11.398 ->                2B 10 03 02 11 74 3A 00 81 00 3C 2E 04 04 02 11
18:13:11.398 ->                4B 69 00 81 00 3C 32 05 04 02 11 4B 75 00 07 0E
18:13:11.398 ->                52 2D 11 04 02 02 1A 02 05 07 0E 52 32 11 04 02
18:13:11.398 ->                02 1A 02 05 43 02 42 2D 10 04 02 02 1A 09 43 02
18:13:11.398 ->                42 32 10 04 02 02 1A 09 81 00 1D 2B 06 03 02 11
18:13:11.398 ->                56 43 43 00 43 00 27 2A 11 04 02 02 1A 07 01 02
18:13:11.432 ->                FE 00 11 0E 01 5A 1F 47 4F 00 43 01 14 22 1A 0C
18:13:11.432 ->                01 02 1A 0B 43 01 4C 28 18 09 01 02 1A 05 81 00
18:13:11.432 ->                41 2B 0B 06 01 11 D0 9A D0 9C 3A 00 43 00 4E 32
18:13:11.432 ->                14 05 01 02 1A 05 81 00 41 33 09 04 01 11 6B 6D
18:13:11.432 ->                2F 68 00 D1 97
18:13:11.432 -> TIME 253400 и тут молчок, ответа нет???

3

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Провел небольшое тестирование.
На простом интерфейсе в виде одного графика с тремя сериями и четырех эдитов
произвел замеры зависимости времени задержки между вызовами RemoteXY_Handler() и времени его выполнения.
Оказалось, что связь после первого коннекта стабильно не прерывается после коннекта и начала обмена при очень больших задержках. А при перепрошивке платы спокойно восстанавливается

В Loop была выставлена нарастающая задержка delay о нежелательности применения которой предупреждает разработчик.

Значения задержки между вызовами RemoteXY_Handler() увеличивалось на 0.1 секунды каждый цикл
Время на выполнение RemoteXY_Handler() измеряется в микросекундах
RemoteXY_Handler() при вызове полностью отрабатывает двухсторонний обмен.

В начале работы время выполнения RemoteXY_Handler() составляет стабильно 4916 мкс, но после достижения delay 5 секунд время выполнения RemoteXY_Handler() начинает резко увеличиваться до 107000 мкс, потом опять уменьшается и увеличивается, все в район 100000 мкс.

И вот уже задержка 16 секунд а связь не оборвалась!!!
Вывод такой, при установленном коннекте стабильность связи не зависит от delay а есть проблемы
с обменом при передаче структуры описания интерфейса и начальной инициализации. Ну и возможно при большом количестве данных для передачи.

Кому интересно
Вот ссылка на проект http://remotexy.com/ru/editor/b67b2c4ad … ca683e60c/
вот скриншот графика https://yadi.sk/i/2E8kBmD9X_S75Q

Вот  код в loop
void loop()
{
  xyup = micros();
  RemoteXY_Handler();

  long vll = micros() - xyup;
  if (oldxyup < vll || vll > 100) {
    Serial.println("");
    Serial.println("TIME " + String(vll) + " delay " + String(cou));
    oldxyup = vll;
  }
 
  if (vll > 100) cou = cou + 200;
  RemoteXY.onlineGraph_1_var1 = (float)cou;
  RemoteXY.onlineGraph_1_var2 = (float)vll;
//  for (int i = 0; i < 100; i++) {
//    RemoteXY.onlineGraph_1_var3 = (float)i;
//  }

  delay(cou);
  //}


  // TODO you loop code
  // используйте структуру RemoteXY для передачи данных
  // не используйте функцию delay()


}

4

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Remove delay

5

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Тесты показали что delay вообще ни на что не влияем если начальная инициализация прошла успешно, см выше описание теста с примером

6

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Из таймингов дебага можно сделать вывод о том, что запросы от смартфона приходят и корректно отрабатываются контроллером, и контроллер отправляет ответы. Однако ответ не приходит в смартфон. По этому смартфон посылает новый запрос на получение интерфейса спустя полсекунды. И да, это происходит 4 раза. 3-й раз происходит запрос в устаревшем формате (04 00 00 FC  для совместимости для старых библиотек). Почему так может происходить:
1. Обрыв в канале TX контроллера - RX модуля связи. Или несогласованность уровней напряжения 5 - 3.3 В.
2. Может быть модуль JD-08 требует перед передачей данных посылать какую то специальную последовательность данных.
3. Может быть модуль JD-08 не может передать большую последовательность данных и требует разбиения данных на пакеты с выдержкой таймаута. Например из за ограниченности внутреннего буфера отправки.
4. Может быть еще что то.
Требуется тестирование модуля JD-08 для его совместимости с RemoteXY. На данный момент такие тесты не проводились и RemoteXY не поддерживает модуль JD-08. К сожалению у нас сейчас нет возможности протестировать модуль JD-08 и увидеть, что происходит, что от него приходит на смартфон.

Обрыв связи происходит через 20 сек отсутствия ответа от контроллера. В последней версии приложения, после удачной установки соединения, в каждом сеансе обмена делается 4 попытки запросить данные с контроллера с таймаутом в 5 секунд.

7

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

antonov_sasha wrote:

В начале работы время выполнения RemoteXY_Handler() составляет стабильно 4916 мкс, но после достижения delay 5 секунд время выполнения RemoteXY_Handler() начинает резко увеличиваться до 107000 мкс, потом опять уменьшается и увеличивается, все в район 100000 мкс.

RemoteXY_Handler() - это не блокирующая функция. Она никогда не ждет пока придут данных. Нет полного пакета входных данных, идем на возврат. Собрался валидный пакт данных, формируется ответ и возврат.

Если в течении 5-и секунд нет ответа от контроллера, то смартфон заново запрашивает данные. Т.е. когда вы вызываете RemoteXY_Handler(), там на входе Serial уже ждут два необработанных пакета данных. Видимо это добавляет какое то время на обработку данных из двух пакетов. Однако такое существенное увеличение времени выглядит странно и возможно код можно оптимизировать.

Контроллер идентифицирует обрыв связи уже через 5 секунд если нет запросов от смартфона. Это установлено в библиотеке в файле RemoteXY_API.h строкой #define REMOTEXY_TIMEOUT 5000
Смартфон же делает 4 попытки связи с интервалом в 5 секунд. По этому смартфон отсоединяется через 20 секунд. И если вы успеете за это время перезагрузить контроллер, то возможно связь восстановится.

delay в функции loop в первую очередь влияет на частоту обмена данными. Если вы выставите delay в 1 секунду, то данные будут обновляться не чаще этого времени, а возможно в 1-2-3 раза реже. Если без delay, то время обновления данных определяется только задержками связи и временем цикла loop без delay.

8

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Не знаю что там может быть со специальными последовательностями или буфером модуля jd-08, но все выглядит очень странно:
Включаю блютуз, пытаюсь соедениться. Пишет ошибка crc или иное, запускаю терминал. Соединяюсь и нажимаю кнопку оправить, отправляется пустая строка (nl cr), не отсоединяясь запускаю remotexy и все ок работает, и переподключается. А без этого никак.

Естественно что любые обрывы исключены.

Пока не получил ответа на вопрос о котором писал в письме: какое максимальное количество элементов допускается?
Судя по логам при обмене плата отправляет всю структуру данных без отслеживания изменились значения или нет. Если будет отслеживаться то количество элементов можно увеличивать.

Возможно ли сделать так, чтобы в поле edit можно было отобразить текущие значения с платы (совместить edit  и  text)?

9

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Соединяюсь через терминал естественно

10

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

antonov_sasha wrote:

Пока не получил ответа на вопрос о котором писал в письме: какое максимальное количество элементов допускается?

Количество элементов теоретически не ограничено. Ограничен объем кода конфигурации в 65535 байт, но у ардуино и памяти то столько нет

antonov_sasha wrote:

Судя по логам при обмене плата отправляет всю структуру данных без отслеживания изменились значения или нет. Если будет отслеживаться то количество элементов можно увеличивать.

Да, отправляются все данные постоянно. Без отслеживания. Почему так? Считайте это наследием от тех времен когда RemoteXY был очень маленьким. Кроме того отслеживание изменения переменных требует увеличения выделяемых ресурсов контроллера. По ОЗУ минимум в 2 раза больше. Так же данный стек будет хорошо съедать временные ресурсы контроллера. Сейчас эти ресурсы конечно перекладываются на связь. Смартфон же передает данные в контроллер только когда что нибудь изменилось.

antonov_sasha wrote:

Возможно ли сделать так, чтобы в поле edit можно было отобразить текущие значения с платы (совместить edit  и  text)?

Нет. Нельзя. Потому что переменная передается или в контроллер или из контроллера. Подробнее про это я писал тут http://forum.remotexy.com/viewtopic.php?id=928

11

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

antonov_sasha wrote:

Не знаю что там может быть со специальными последовательностями или буфером модуля jd-08, но все выглядит очень странно:
Включаю блютуз, пытаюсь соедениться. Пишет ошибка crc или иное, запускаю терминал. Соединяюсь и нажимаю кнопку оправить, отправляется пустая строка (nl cr), не отсоединяясь запускаю remotexy и все ок работает, и переподключается. А без этого никак.

Для эксперимента попробуйте в библиотеку добавить следующие строки в файл RemoteXY_API.h. Это приведет к отправке вашей последовательности перед любой посылкой данный от контроллера к смартфону. Смартфоном эти байты будут проигнорированы, так как он ищет законченные пакеты данных.

  void sendPackage (uint8_t command, uint8_t *p, uint16_t length, uint8_t itConf) {
    sendByte (0x40);   // добавляемая строка, код любого символа
    sendByte (0x0d); // добавляемая строка, ln
    sendByte (0x0a); // добавляемая строка, cr
    uint16_t crc = initCRC ();
    uint16_t packageLength = length+6;
    sendStart (packageLength);
    sendByteUpdateCRC (REMOTEXY_PACKAGE_START_BYTE, &crc);
   .......

12

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Вы не совсем поняли, я включаю блютуз терминал на смартфоне, отправляю с него пустую строку (это символы lnCr) и не отключая связь в терминале запускаю соединение. Тогда все работает. От платы на смартфон ничего не требуется дополнительно отправлять.

Касаемо отслеживания изменений и отправки на смартфон только обновившихся данных. Для этого нужен набор флагов (бит) которые можно устанавливать программно. Тогда я могу сам решать какие поля будут обновлены в смартфоне.  Также для строк оканчивающихся #0 можно в конец писать еще управляющий символ (признак что данные уже были отправлены) и увеличить длину строки на 1 байт.

Как я предполагаю, последовательность переменных в структуре {}RemoteXY и в описании  RemoteXY_CONF[]  не должна изменяться и при получении данные распределяются последовательно по полям? Если так, то можно для простоты добавить     в конструкторе кода в дополнение к комментариям еще номер переменной (для наглядности), функцию устанавливающую биты по номеру и при желании программиста сэкономить траффик он просто сбрасывает бит нужной переменной в 0, тогда отправка не производится. По умолчанию все биты в 1. Кому надо тот воспользуется)
И в комментах предупреждение о запрете на изменнение последовательности переменных в структуре!
Пример
struct {

    // input variables
  uint8_t b_reset; // =1 если кнопка нажата, иначе =0
  uint8_t b_go; // =1 если переключатель включен и =0 если отключен

    // output variables
  int8_t l_watt;    //ID=00 =0..100 положение уровня
  int8_t l_amch;  //ID=01 =0..100 положение уровня
  int8_t l_wtch;   //ID=02 =0..100 положение уровня
  int8_t l_volt;    //ID=03 =0..100 положение уровня
  char t_tim[11];//ID=04 =строка UTF8 оканчивающаяся нулем
  uint8_t b_on_r;//ID=05 =0..255 яркость красного цвета индикатора
  uint8_t b_on_g;//ID=06 =0..255 яркость зеленого цвета индикатора
  uint8_t b_on_b;//ID=07 =0..255 яркость синего цвета индикатора
  char t_wttxt[4];//ID=08 =строка UTF8 оканчивающаяся нулем
  float graf_var1;//ID=09
  float graf_var2;//ID=10
  float graf_var3;//ID=11

  char t_v[5];     //ID=12 =строка UTF8 оканчивающаяся нулем
  char t_couach[5];  // =строка UTF8 оканчивающаяся нулем

  enableupdate(int id, par=0);//при необходимости запрета отправки данных вызвать функцию с номером id и par= 0 запретить обновление #id, 1 -разрешить все, 2- запретить все
    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0
//Внимание! не ихменяйте структуру, при изменении последовательности записей программа работать не будет!

} RemoteXY;
#pragma pack(pop)

13

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Касаемо поля edit
Также предлагаю дать возможность выбора и учесть обратную совместимость)
Добавьте возможность отправить шаблон вводимого значения при необходимости!
например

....
char edit_1[11];  //id 10 =строка UTF8 оканчивающаяся нулем
...... 

setformat(int id,String format);//для поля id установить формат данных format = "s"(s,s10,i,i10,f##0.00,dddmmgggg) типа того. Тогда при желании я могу указать на то, какие данные ожидаю получить, а в смартфоне осуществлять проверку. Опять же это кому надо, тот будет использовать, по умолчанию все остается без изменений

14

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Дополнительные функции, о которых я написал, не должны сами что то оправлять, они конфигурируют основной алгоритм, а обмен идет как и прежде пакетами с учетом настройки.

15

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

По jd-08 понял. Требуется его тестирование и отладка.
По предлагаемым доработкам примем все описанное к сведению при дальнейших разработках.

16

Re: Нет связи смартфона через модуль jd-08 + ардуино нано

Вопрос Антонову Александру-Вы похоже разбирались с тем как работает построение графика,НЕ могли бы мне помочь, понять причину почему график не строится в моем случае?

antonov_sasha wrote:

Провел небольшое тестирование.
На простом интерфейсе в виде одного графика с тремя сериями и четырех эдитов
произвел замеры зависимости времени задержки между вызовами RemoteXY_Handler() и времени его выполнения.
Оказалось, что связь после первого коннекта стабильно не прерывается после коннекта и начала обмена при очень больших задержках. А при перепрошивке платы спокойно восстанавливается

В Loop была выставлена нарастающая задержка delay о нежелательности применения которой предупреждает разработчик.

Значения задержки между вызовами RemoteXY_Handler() увеличивалось на 0.1 секунды каждый цикл
Время на выполнение RemoteXY_Handler() измеряется в микросекундах
RemoteXY_Handler() при вызове полностью отрабатывает двухсторонний обмен.

В начале работы время выполнения RemoteXY_Handler() составляет стабильно 4916 мкс, но после достижения delay 5 секунд время выполнения RemoteXY_Handler() начинает резко увеличиваться до 107000 мкс, потом опять уменьшается и увеличивается, все в район 100000 мкс.

И вот уже задержка 16 секунд а связь не оборвалась!!!
Вывод такой, при установленном коннекте стабильность связи не зависит от delay а есть проблемы
с обменом при передаче структуры описания интерфейса и начальной инициализации. Ну и возможно при большом количестве данных для передачи.

Кому интересно
Вот ссылка на проект http://remotexy.com/ru/editor/b67b2c4ad … ca683e60c/
вот скриншот графика https://yadi.sk/i/2E8kBmD9X_S75Q

Вот  код в loop
void loop()
{
  xyup = micros();
  RemoteXY_Handler();

  long vll = micros() - xyup;
  if (oldxyup < vll || vll > 100) {
    Serial.println("");
    Serial.println("TIME " + String(vll) + " delay " + String(cou));
    oldxyup = vll;
  }
 
  if (vll > 100) cou = cou + 200;
  RemoteXY.onlineGraph_1_var1 = (float)cou;
  RemoteXY.onlineGraph_1_var2 = (float)vll;
//  for (int i = 0; i < 100; i++) {
//    RemoteXY.onlineGraph_1_var3 = (float)i;
//  }

  delay(cou);
  //}


  // TODO you loop code
  // используйте структуру RemoteXY для передачи данных
  // не используйте функцию delay()


}