Есть вот такой модуль https://amperka.ru/product/hc-06-bluetooth-module Есть код который посылает на ардуино данные. Каждые 0.02 секунды по 99 байт. Т.е. в секунду 4950 байт. Если задать скорость в 57600 бод, то это получается по 7200 байт в секунду можно принимать. Если соединение через USB - то все принимается хорошо. Но если сделать соединение через блютуз HC-06 на той же скорости в 57600, то начинаются странности. Данные ошушение что принимаются раз в полсекунды примерно. Причем они еще и где то буферизируются круто так потому что если слать много то они прийдут через несколько секунд. Подскажите куда копать чтобы данные принимались нормально? В чем загвоздка?
На всякий случай после каждого write() вызывал fsync() но ничего не изменилось. Не знаю куда теперь копать В чем вобше может быть проблема. Если задали скорость 57600 значит столько же и должно приходить по идее? А почему приходит в разы меньше? И где копится то что не приходит? Где то в недрах ОС или в самом модуле может?
у вас как всё подключено? HC06 на ардуине, а bluetooth-мастер где? в ноуте? Ну и скетч киньте на всякий случай
Да, HC-06 подключен к ардуине к пинам 0-1 (хардварный serial). Мастер не в ноутбуке, а в компьютере iMac 3,5 GHz Intel Core i7 Bluetooth Broadcom 20702B0. Вот короче подключаю по USB - все отлично. Не меняя код в ардуине подключаю блютуз и подключаюсь теперь к блютуз с компа. Теперь данные идут медленно причем где-то копятся потому что через несколько секунд но дойдут. В коде особо ничего необычного в этом плане нет. Код условно такой: 1. Программа на компьютере очень большая. Но основной код такой. Открытие девайса: Код (Text): - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { _device = [DeviceController sharedDevice]; if (![_device openPort:"/dev/cu.Light-DevB"]) // блютуз // if (![_device openPort:"/dev/cu.usbmodem1451"]) // usb { ... } ... } // DeviceController - (BOOL)openPort:(char *)bsdPath { speed_t baudRate = B57600; _serialFileDescriptor = open(bsdPath, O_RDWR | O_NOCTTY | O_NONBLOCK); if (_serialFileDescriptor == -1) { NSLog(@"Can't open device (%@)", [NSString stringWithUTF8String:bsdPath]); return NO; } ioctl(_serialFileDescriptor, TIOCEXCL); fcntl(_serialFileDescriptor, F_SETFL, 0); ioctl(_serialFileDescriptor, IOSSIOSPEED, &baudRate); return YES; } и в общем там смысл что на ардуину посылается набор цветов которые потом загораются на световой ленте: Код (Text): // просто посылка массива RGB значений цветов каждые 0.2 секунды write(*serial, *dataM.a, LEDS_COUNT * 3); В ардуине это все по сути зациклено примерно так: Код (Text): void setup() { Serial.begin(57600); } void loop() { Serial.readBytes((char *)pixels, PIXELS_COUNT * 3); pix(pixels, PIXELS_COUNT); // Тут зажигается лента теми данными что пришли } В общем в коде ничего такого нет особого только посылка данных и прием данных. Втыкаю усб - работает. Иду через блютуз - все медленно. Код главное один и тот же. Скорость одна и тажа.
всем привет, вопрос в тему, купил я этот HC-06. Передаю данные на COM через блютуз, с обратной стороны читаю данные с COM порта через адаптер USB-COM ( терминал PUTY, так же запустил PortMon). В общем отправляешь один байт , принимаешь почему-то совсем другой. Отправляю(символ в Putty) Принимаю байт (Hex, в PortMon) 1- 67h 2- 33h 3- 66h 4- 19h 5- 65h 6 - 32h в общем закономерность прослеживается. Соответственно ни на какие команды HC-06 не отвечает вообще Скорость 9600 Пробовал разную скорость обмена, но более менее адекватно отвечает только на 9600
если вопрос еще актуален ... Думаю проблемка в уровне логики. Вы подключаете HC-06 c 3х вольтовой транзисторной логикой к ком порту. Хорошо что порт ваш на юсб переходнике. Реальный компорт, скорее всего выпалил и НС-06 и сам бы сгорел. Микросхемка st3232 или подобная, в помощь, думаю самое то.
Спасибо за ответ. Да вопрос актуален до сих пор , т.к накупил этих HC-06 и как только не изголялся нефига не выходит. На реальный порт я тоже подключал, ничего не сгорело, происходит та же история. Посылаем одно, принимаем другое. Питание на HC-06 сделал с отдельного USB, там по схеме 5В, 3В должно быть что ли?
Питание можно и 5. Дело в самом сигнале. Ком порт отправляет\принимает 0 и 1 при помощи -15 и +15 вольт. НС-06 понимает 3х вольтовую транзисторную логику. Тоисть сигналы должны быть где-то в приделах 3х вольт. Подключать напрямую к ком порту НЕправильно. Если есть ардуино, можно подключить без проблем. Если нет то использовать st3232 с обвязкой. (Можно rx и tx на HC-06 замкнуть, подать питание, подключится через блютуз, послать в порт чего нить, должно вернутся.)
практически не проверял, я HC-06 использую с ардуино. Но думаю вот так работать должно. Сдесь на max3232. st3232 тоже пойдет, но их там куча модификаций, по последней букве, я не копался.
практически не проверял, я HC-06 использую с ардуино. Но думаю вот так работать должно. Сдесь на max3232. st3232 тоже пойдет, но их там куча модификаций, по последней букве, я не копался.[/quote] Ладно, спасибо, буду пробовать