Библиотека предназначена для работы с Bluetooth-модулем HC-05 и реализует все 36 функций, описанных в документации (datasheet) к модулю от компании Wavesen, в виде класса Bluetooth_HC05 и его методов. Почти все методы принимают в качестве последнего агрумента тайм-аут на чтение ответа от модуля (в миллисекундах). К класс Bluetooth_HC05 реализует интерфейс Print так что вы можете посылать данные, пользуясь методом print(), как в объект класса Serial. В качестве источника информации был использован китайский даташит с кучей ошибок и неясностей - такие места я буду обозначать специальным значком: 狗屁. Если вы видите этот значок в описании - значит, я ничерта не понял из документации и объяснить не могу.
По умолчанию скорость работы модуля - 38400 бод. Для правильной инициализации модуля требуется примерно 700 мс, так что сразу после вызова метода begin() желательно выдержать паузу в 1 секунду для гарантии.
void begin(Подключает модуль HC-05
unsigned baud_rate = 38400,
uint8_t reset_pin = 0xFF,
uint8_t mode_pin = 0xFF,
HC05_Mode mode = HC05_MODE_DATA
);
bool probe(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Простой тест работоспособности модуля путём посылки команды AT.
void hardReset();Перезагружает модуль, прижимая его вывод RESET к 0 на 6 мс. Пин для управления выводом RESET задаётся в методе begin().
bool softReset(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Перезагружает модуль, посылая команду AT+RESET. Разумеется, это менее надёжно, чем управление выводом RESET.
bool getVersion(Запрашивает версию и кладёт её в массив buffer размера buffer_size. Если размер буфера слишком мал, занесётся только влезающая по размеру часть версии.
char *buffer,
size_t buffer_size,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool restoreDefaults(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Восстанавливает заводские настройки: тип устройства 0 (неизвестное устрйоство), код опроса IAC - 0x009e8b33, роль - slave, соединение - по заданному адресу, скорость 38400 бод, 1 стоп-бит, без бита чётности, пароль - 1234, имя модуля - H-C-2010-06-01
bool getAddress(Возвращает Bluetooth-адрес модуля в address.
BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getName(Возвращает имя модуля в buffer, размер которого должен быть не менее HC05_NAME_BUFSIZE.
char *buffer,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setName(Устанавливает имя модуля.
const char *name,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getRemoteDeviceName(Возвращает имя устройства с адресом address в buffer размером buffer_size.
const BluetoothAddress &address,
char *buffer,
size_t buffer_size,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getRole(Возвращает текущую роль модуля в role.
HC05_Role &role,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setRole(Устанавливает роль модуля.
HC05_Role role,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getDeviceClass(Возвращает класс устройства в device_class.
uint32_t &device_class,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setDeviceClass(Устанавливает класс устройства
uint32_t device_class,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getInquiryAccessCode(Возвращает в iac код опроса IAC.
uint32_t &iac,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setInquiryAccessCode(Устанавливает IAC.
uint32_t iac,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getInquiryMode(Возвращает настройки опроса (inquiry): режим опроса в inq_mode, максимальное число опрашиваемых устройств в max_devices, максимальную длительность в max_duration (в интервалах по 1.28 с 狗屁).
HC05_InquiryMode &inq_mode,
int16_t &max_devices,
uint8_t &max_duration,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setInquiryMode(Устанавливает настройки опроса.
HC05_InquiryMode inq_mode,
int16_t max_devices,
uint8_t max_duration,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getPassword(Возвращает пароль в buffer, который должет иметь размер не менее HC05_PASSWORD_BUFSIZE.
char *buffer,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setPassword(Устанавливает новый пароль.
const char *password,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getSerialMode(Возвращает настройки UART: скорость в speed, число стоп-битов в stop_bits, настройки чётности в parity.
uint32_t &speed,
uint8_t &stop_bits,
HC05_Parity &parity,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setSerialMode(Устанавливает настройки UART.
uint32_t speed,
uint8_t stop_bits,
HC05_Parity parity,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getConnectionMode(Возвращает режим соединения в connection_mode.
HC05_Connection &connection_mode,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setConnectionMode(Устанавливает режим соединения.
HC05_Connection connection_mode,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool bind(Привязывает модуль к устройству с адресом address. Адрес 00:00:00:00:00:00 означает, что модуль не привязан к конкретному устройству.
const BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getAddressBound(Возвращает адрес, к которуму привязан модуль, в address.
BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getLeds(Возвращает состояния (включен/выключен) индикаторов (светодиодов) статуса (PIO8) в led_status и соединения (PIO9) в led_connection.
bool &led_status,
bool &led_connection,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setLeds(Устанавливает состояния индикаторов статуса и соединения.
bool led_status,
bool led_connection,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setPortState(Задаёт состояние port_num порта PIO с номером port_state.
uint8_t port_num,
uint8_t port_state,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getMultiplePorts(Возвращает состояния портов PIO в port_states в виде битовой маски: например, результат 0x008 (1 << 3) означает, что на PIO3 - логическая 1, а на остальных - 0.
uint16_t &port_states,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setMultiplePorts(Устанавливает состояние портов PIO.
uint16_t port_states,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getInquiryAndPagingParams(Возвращает интервалы и длительности опроса и какого-то paging 狗屁
uint16_t &inquiry_interval,
uint16_t &inquiry_duration,
uint16_t &paging_interval,
uint16_t &paging_duration,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setInquiryAndPagingParams(Устанавливает параметры, которые возвращает getInquiryAndPagingParams() 狗屁
uint16_t inquiry_interval,
uint16_t inquiry_duration,
uint16_t paging_interval,
uint16_t paging_duration,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getSniffParams(Возвращает параметры энергосберегающего (?) режима 狗屁
uint16_t &max_time,
uint16_t &min_time,
uint16_t &retry_interval,
uint16_t &sniff_timeout,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setSniffParams(Устанавливает параметры, которые возвращает getSniffParams() 狗屁
uint16_t max_time,
uint16_t min_time,
uint16_t retry_interval,
uint16_t sniff_timeout,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool enterSniffMode(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Войти в режим энергосбережения (?) 狗屁
bool exitSniffMode(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Выйти и режима энергосбережения (?) 狗屁
bool getSecurityAndEncryption(Возвращает в security настройки безопасности соединения, а в encryption - настройки шифрования.
HC05_Security &security,
HC05_Encryption &encryption,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool setSecurityAndEncryption(Устаннавливает настройки безопасности и шифрования соединения.
HC05_Security security,
HC05_Encryption encryption,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool deleteDeviceFromList(Удаляет устройство с адресом address из списка авторизованных.
const BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool deleteAllDevicesFromList(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Удаляет все адреса устройств из списка авторизованных (оцищает список).
bool findDeviceInList(Ищет устройство с адресом address в списке авторизованных. Возвращает true, если устройство в списке.
const BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool countDevicesInList(Возвращает длину списка авторизованных устройств.
uint8_t &device_count,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getLastAuthenticatedDevice(Возвращает адрес последнего авторизованного устройства в address.
BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool getState(Возвращает текущее состояние модуля в state.
HC05_State &state,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool initSerialPortProfile(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Инициализирует профиль последовательного порта. Только после этого модуль сможет устанавливать соединения.
bool inquire(Опрашивает Bluetooth-устройства в эфире. В качестве аргумента callback нужно передать адрес функции, принимающей Bluetooth-адрес - inquire() будет вызывать её каждый раз при обнаружении нового устройства в эфире.
InquiryCallback callback,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool cancelInquiry(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Останавливает опрос устройств.
bool pair(Образует пару с указанным устройством (address).
const BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool connect(Образует соединение с указанным устройством (address).
const BluetoothAddress &address,
unsigned long timeout = HC05_DEFAULT_TIMEOUT
);
bool disconnect(unsigned long timeout = HC05_DEFAULT_TIMEOUT);Разрывает соединение.
HC05_Result getLastError();Возвращает код результата последней выполненной команды.
HC05_DEFAULT_TIMEOUT
Тайм-аут по умолчанию для большинства команд.
HC05_INQUIRY_DEFAULT_TIMEOUT
Тайм-аут по умолчанию для опроса (inquiry) Bluetooth-устройств.
HC05_PAIRING_DEFAULT_TIMEOUT
Тайм-аут по умолчанию для образования пары (pairing) между устройствами.
HC05_PASSWORD_MAXLEN
Максимальная длина пароля (PIN-кода), которую позволяет задать модуль.
HC05_PASSWORD_BUFSIZE
Размер буфера, способного вместить самый длинный пароль.
HC05_NAME_MAXLEN
Максимальная длина имени устройства.
HC05_NAME_BUFSIZE
Размер буфера для имени устройства.
HC05_ADDRESS_MAXLEN
Максимальная длина строкового представления адреса Bluetooth-устройства.
HC05_ADDRESS_BUFSIZE
Размер буфера для строкового представления Bluetooth-адреса.
HC05_MODE_DATA
приём-передача данныхHC05_MODE_COMMAND
управление AT-командами
HC05_ROLE_SLAVE
Пассивное подключение (к модулю можно подключаться)HC05_ROLE_MASTER
Активное подключение (модуль сам подключается к устройствам)HC05_ROLE_SLAVE_LOOP
Пассивное подключение с эхом: все принятые данные передаются обратно
HC05_INQUIRY_STANDARD
Обычный (все устройства)HC05_INQUIRY_RSSI
Только устройства с RSSI
HC05_NO_PARITY
Без бита чётностиHC05_PARITY_ODD
НечётныйHC05_PARITY_EVEN
Чётный
HC05_CONNECT_BOUND
Принимать соединение только от устройства с определённым адресом, задаваемым методом bind()HC05_CONNECT_ANY
Принимать соединения от любых устройствHC05_CONNECT_SLAVE_LOOP
slave-loop?狗屁
HC05_SEC_OFF
Выключено?狗屁HC05_SEC_NON_SECURE
Незащищённое соединениеHC05_SEC_SERVICE
Защита на сервисном уровне (service-level)HC05_SEC_LINK
Защита на уровне соединения (link-level)HC05_SEC_UNKNOWN
Неизвестный режим?狗屁
HC05_ENC_OFF
Без шифрованияHC05_ENC_PTP
Шифруется только трафик PTP (point-to-point)HC05_ENC_PTP_BROADCAST
Шифруется весь трафик
HC05_INITIALIZED
ИнициализированHC05_READY
Готов. К чему?狗屁HC05_PAIRABLE
Готов к образованию парыHC05_PAIRED
Образована параHC05_INQUIRING
Опрашивает устройстваHC05_CONNECTING
СоединяетсяHC05_CONNECTED
СоединёнHC05_DISCONNECTED
ОтсоединёнHC05_UNKNOWN
Неизвестное состояние?狗屁
HC05_OK
Команда выполнена успешноHC05_FAIL
Ошибка выполнения, причина неизвестна狗屁HC05_ERR_TIMEOUT
Вышло время ожидания ответа от модуляHC05_ERR_ARGUMENT
Методу переданы неверные аргументыHC05_ERR_DISC_LINK_LOSS
Связь с устройсвом потерянаHC05_ERR_DISC_NO_SLC
狗屁HC05_ERR_DISC_TIMEOUT
Тайм-аут отсоединения?狗屁HC05_ERR_DISC_ERROR
Ошибка отсоединения?狗屁HC05_ERR_AT_COMMAND
Ошибка синтаксиса AT-командыHC05_ERR_DEFAULT_RESULT
Результат по умолчанию?狗屁HC05_ERR_PSKEY_WRITE
Ошибка сохранения пароляHC05_ERR_DEVICE_NAME_TOO_LONG
Слишком длиное имя устройстваHC05_ERR_NO_DEVICE_NAME
Имя устройства не указаноHC05_ERR_NAP_TOO_LONG
Часть адреса NAP слишком длиннаяHC05_ERR_UAP_TOO_LONG
Часть адреса UAP слишком длиннаяHC05_ERR_LAP_TOO_LONG
Часть адреса LAP слишком длиннаяHC05_ERR_NO_PIO_MASK
Не указана маска портовHC05_ERR_NO_PIO_NUMBER
Не указан номер портаHC05_ERR_NO_DEVICE_TYPE
Не указан класс устройстваHC05_ERR_DEVICE_TYPE_TOO_LONG
Слишком длинное значение класса устройстваHC05_ERR_NO_IAC
Пустой код опроса IAC (Inquire Access Code)HC05_ERR_IAC_TOO_LONG
Слишком длинный IACHC05_ERR_INVALID_IAC
Недопустимый IACHC05_ERR_NO_PASSWORD
Пароль пустHC05_ERR_PASSWORD_TOO_LONG
Слишком длинный парольHC05_ERR_INVALID_MODULE_ROLE
Неверная роль устройстваHC05_ERR_INVALID_BAUD_RATE
Недопустимая скорость передачиHC05_ERR_INVALID_STOP_BITS
Недопустимая настройка стоп-битовHC05_ERR_INVALID_PARITY_BITS
Недопустимая настройка бита чётностиHC05_ERR_DEVICE_NOT_IN_LIST
Устройство не в списке авторизованныхHC05_ERR_SPP_NOT_INITIALIZED
Профиль последовательного порта (SPP, Serial Port Profile) не инициализированHC05_ERR_SPP_REINIT
Повторная инициализация SPPHC05_ERR_INVALID_INQUIRY_MODE
Недопустимый режим опросаHC05_ERR_INQUIRY_TIMEOUT_TOO_LONG
Слишком большой тайм-аут опросаHC05_ERR_NO_BLUETOOTH_ADDRESS
Не указан Bluetooth-адресHC05_ERR_SECURITY_MODE
Недопустимый режим безопасностиHC05_ERR_ENCRYPTION_MODE
Недопустимый режим шифрования