Оглавление:
- Шаг 1. Что вам понадобится
- Шаг 2: решение
- Шаг 3. За кулисами…
- Шаг 4: Дальнейшее чтение / Возможности улучшения
Видео: Восстановление неправильно настроенного модуля Bluetooth HC-06: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Из чистого максимализма я настроил свой модуль Bluetooth HC-06 (подчиненный) на скорость передачи 1, 382, 400 бод с помощью команды AT + BAUDC. С тех пор, как подключенный к нему Arduino не смог использовать модуль с библиотекой SoftwareSerial. Я безуспешно пытался восстановить скорость передачи данных с помощью аппаратного последовательного порта Arduino (контакты 0 и 1).
Я тоже пробовал погуглить тему, но сносного решения не нашел. Возможно, использование встроенного последовательного порта компьютера могло бы стать решением (с изменением логического уровня с 12 В на 3 В 3), но у моего компьютера нет этого устаревшего порта, поэтому мне пришлось придумать другое решение.
Шаг 1. Что вам понадобится
- Плата Arudino / Genuino с микроконтроллером Atmel ATMEGA328P-PU по умолчанию (@ 16 МГц).
- Bluetooth-модуль HC-06, прослушивающий 1, 382, 400 бод
- Базовая IDE для arduino с
Шаг 2: решение
Обратите внимание, что это руководство и решение предназначено для сценария 1, 382, 400 бод (AT + BAUDC). Решение не будет работать для других скоростей передачи. Чтобы справиться с другими случаями, обратитесь к шагам, начиная с шага 3.
Решение действительно простое.
- Подключите вывод VCC HC-06 к выводу 5V Arduino.
- Подключите вывод GND HC-06 к выводу GND Arduino.
- Подключите вывод RXD HC-06 к выводу 2 Arduino.
- Оставьте контакт TXD HC-06 неподключенным (или подключите к контакту 8).
- Загрузите скетч hc06reset.ino.
- Программа установит HC-06 в режим 115, 200 бод (AT + BAUD8).
- Используйте восстановленный модуль HC-06, как раньше.
Шаг 3. За кулисами…
Библиотека SoftwareSerial, поставляемая с Arduino IDE, способна передавать не более 115 200 бит в секунду, поэтому ее недостаточно для связи на желаемой скорости 1, 382, 400 бод. Учитывая, что плата Arduino по умолчанию работает на частоте 16 МГц, теоретический максимальный битрейт без сжатия составляет 16 000 000 бит / сек. Пока у нас все хорошо!
Основываясь на моем понимании SoftwareSerial.cpp, обмен данными осуществляется путем установки высокого (= 1) или низкого (= 0) вывода вывода в зависимости от задержки (которая зависит от скорости передачи данных) между изменениями.
- Выходной контакт по умолчанию высокий (означает отсутствие данных), затем
- передается стартовый бит (который переводит контакт в низкий уровень), затем
- 8 бит данных, передаваемых от LSB к MSB (+ 5V, когда бит 1 и 0 в противном случае), тогда
- Передается стоповый бит (который подтягивает контакт высоко)
Таким образом, 1 байт передается с использованием 10 бит.
Мы должны отправить сообщение AT + BAUD8 (без / n, / r в конце). Эта команда устанавливает для HC-06 скорость 115 200 бод, которая может обрабатываться обычными библиотеками.
Чтобы отправлять биты со скоростью 1, 382, 400 бит / сек, для каждого бита у нас есть время 1/1, 382, 400 секунд (это примерно 723,38 нс) для каждого бита. Arduino работает на частоте 16 000 000 МГц, поэтому каждый цикл длится 1/16 000 000 секунд, то есть 62,5 нс на цикл.
Используя ассемблерный код AVR, мы можем использовать команду OUT для установки высокого или низкого уровня выходного контакта и NOP, чтобы ждать ровно один цикл процессора. Обе команды съедают ровно 1 цикл процессора. Таким образом, битовое время 723,38 нс может быть покрыто 11–12 инструкциями Arduino на передаваемый бит. Одна вещь, которую следует учитывать: команда OUT устанавливает сразу весь байт, поэтому мы должны выбрать PORTx, где это не проблема. Использование ATMEGA328P-PU, например, PORTD (контакты 0-7 Arduino) идеально подходит для этого условия. После установки бита должно пройти только надлежащее время, которое составляет от 10 до 11 NOP, и все.
Вы можете найти подробные сведения о расчетах в файле Excel ниже. Этот файл сгенерировал необходимые инструкции по сборке для программы. После вставки сгенерированного кода потребовалось выполнить лишь несколько замен.
Шаг 4: Дальнейшее чтение / Возможности улучшения
- Возможно, можно создать более быструю библиотеку SoftwareSerial, используя технику, описанную в предыдущем шаге.
- FedericoK2 создал отличный инструмент, который генерирует код восстановления HC-06 для всех возможных битрейтов. Войдите на сайт здесь: https://tools.krum.com.ar/save_your_hc-06/ Спасибо, FedericoK2
Рекомендуемые:
Восстановление питания старой радиосхемы (питание от батареек): 4 шага
Восстановление питания старой радиосистемы (питание от батарей): когда-нибудь было старое радио, которое питается только от сети переменного тока и не имеет батареи внутри? Сегодня я покажу вам, как питать старое радио от аккумулятора и полезно, если есть питание. отключение питания, и мощность вашего радио зависела от батареи без подключения
Восстановление рабочего состояния мультиметра времен Второй мировой войны: 3 шага
Восстановление рабочего состояния мультиметра времен Второй мировой войны. Несколько лет назад я приобрел в свою коллекцию этот ранний мультиметр Simpson Electric. Он был в черном кожаном футляре, который был в отличном состоянии, учитывая его возраст. Патентное ведомство США патентовало механизм счетчика в 1936 г
Восстановление вашего ПК: 3 шага
Respring Your PC: если ваш компьютер с Windows зависает, вам нужно его перезагрузить, или Windows / File Explorer не загружается или не отображается должным образом, попробуйте использовать эти идеи для перезапуска проводника, по сути, перезагружая ваш компьютер. Я сделал это еще в 2017 году и не публиковал
Разрушение кольцевого солнечного знака: я сделал это неправильно, поэтому вам не нужно: 11 шагов
Разрушение кольцевого солнечного знака: я сделал это неправильно, поэтому вам не нужно: у меня есть звонок в дверь, который довольно крутой. Ура для кольца. Затем я получил камеру для наклеек на кольцо, когда шли все онлайн-продажи в честь Дня Благодарения. Скидка 50 долларов, и они прислали мне БЕСПЛАТНО этот изящный солнечный знак «Кольцо» (всего за 49 долларов!). Я уверен
NODEMcu Usb-порт не работает? Загрузите код с помощью модуля USB в TTL (FTDI) всего за 2 шага: 3 шага
NODEMcu Usb-порт не работает? Загрузите код с помощью модуля USB в TTL (FTDI) всего за 2 шага: устали подключаться ко многим проводам от модуля USB к TTL к NODEMcu, следуйте этой инструкции, чтобы загрузить код всего за 2 шага. NODEMcu не работает, тогда не паникуйте. Это просто микросхема драйвера USB или разъем USB