Если у вас нет stm32 (в трёх разных окнах терминала) (для использования Serial порта самой stm32 используйте код с ветки USB_Serial):
-
python3 python_prototype_socket/message_receiver.py
-
python3 python_prototype_socket/programm.py
-
python3 python_prototype_socket/message_sender.py
Если у вас есть stm32 (команды также в разных окнах терминала):
-
Залейте код
UART_message_transformer.ino
в микроконтроллер (например, Nucleo-F031K4). В этом файле простейший пример использования либы. Да, она имеет максимально простой интерфейс. -
Настройте пины вывода, идущие к ble HM-10 (по умолчанию 2 и 3).
-
python3 python_bluetooth_tester/bluetooth_and_socket_sender.py
-
python3 python_bluetooth_tester/serial_receiver.py
Опционально можно запустить этот же код на python для сравнения значений:
-
python3 python_prototype_socket/programm.py
https://vk.com/video252833211_456239726
Частота 1/3 Гц. Тест корректности работы.
https://vk.com/video252833211_456239725
Частота 100 Гц. Тест скорости работы.
https://github.com/d3dx13/UART_message_transformer/tree/main/doc/html
Задача – сделать прием пакетов по BT (uart), распарсить их по формату, сформировать команду в другом формате и отправить в uart (9600). Использовать свободные ножки микроконтроллера на стенде.
От BT приходят посылки (массив байт) следующего формата: В пакете данных старший бит первого байта равен 1, во всех остальных байтах старший бит равен нулю.
Номер байта | Описание |
---|---|
1 | Маркер начала пакета данных, bit 7 = 1, bit 6 - 0 = Adr (Адрес модуля) |
2 | Циклический контрольный счетчик передаваемого пакета данных. Изменяется от 0 до 0x7F. Увеличивается на 1 при передаче каждого пакета данных. Для контроля потерь данных при передаче. Bit 7 = 0, bit 6 - 0 - counter++ |
3 | Cтаршая часть номера команды. Bit 7 = 0, bit 6 - 0 – биты 13 – 7 команды |
4 | Младшая часть номера команды. Bit 7 = 0, bit 6 - 0 – биты 6 – 0 команды |
5 | Контрольная сумма XOR первых 4 байтов с обнуленным старшим битом: bit 7 = 0, bit 6 – 0 = (byte0 ^ byte1 ^ byte2 ^ byte3) & 0x7F; |
На основе полученной посылки если контрольная сумма сошлась формируется другая посылка по следующему формату:
Номер байта | Описание |
---|---|
1 | 0xFF |
2 | 0x02 |
3 | 0x14 |
4 | Команда, полученная по BT. Младший байт. |
5 | Контрольная сумма первых 4 байт. Алгоритм приведен ниже. |
Функция расчета CRC:
char crc(unsigned char *pcBlock, int len)
{
unsigned char crc = 0xFF;
unsigned int i;
while (len--)
{
crc ^= *pcBlock++;
for (i = 0; i < 8; i++) crc = crc & 0x80 ? (crc << 1) ^ 0x31 : crc << 1;
}
return crc;
}
Полученный массив из 5 байт необходимо отправить по Uart порту 3 раза с промежутком 100мс.
Если полученная посылка по BT прошла контрольную сумму - сделать отправку этого же пакета обратно по BT. Создать эхо.