Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Post your project for free and start receiving proposals from freelancers within minutes after publication!

Transmission from STM32 via BLE information to PC (Python, Bleak library)

Translated87 USD

  • Oleksii Mamontov
    23 April 2024, 9:33 |

    Чат бот Sage  або GPT  вам допоможуть.

    Спробуйте) це не жарт.

  • Kostyantin Korchahin
    23 April 2024, 12:02 |

    Зробіть це і заробіть 100$.

  • Aleksey Prisyazhnoy
    24 April 2024, 6:33 |

    Возможность удаленной отладки на вашем устройстве возможна?

  • Oleksii Mamontov
    23 April 2024, 21:08 |

    https://poe.com  ))


    Нам потрібна функція на С для мікроконтролера NUCLEO-WB55RG STM32WB Nucleo-64, яка надійно і досить швидко (за 1-5 секунд) може передавати повідомлення розміром в районі 15 КБ. Прийом повідомлення відбувається на ПК у мові Python, бібліотека Bleak



    Assistant


    Poe

    Ось приклад функції на мові С, яка може передавати повідомлення розміром близько 15 КБ з мікроконтролера NUCLEO-WB55RG STM32WB Nucleo-64 до комп'ютера з використанням бібліотеки Bleak у мові Python:


    #include "ble.h"

    #include "ble_gattc.h"

    #include "ble_hci.h"

    #include "ble_srv_common.h"


    #define BLE_UUID_MY_CUSTOM_SERVICE 0x1234

    #define BLE_UUID_MY_CUSTOM_CHAR    0x5678


    static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID;  // Зберігає дескриптор підключення


    // Ініціалізація BLE сервісів та характеристик

    static void services_init(void)

    {

        uint32_t            err_code;

        ble_uuid_t          service_uuid;

        ble_uuid128_t       base_uuid = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x00, 0x00};

        ble_gatts_service_t my_service;

        ble_uuid_t          char_uuid;

        ble_gatts_char_md_t char_md;

        ble_gatts_attr_md_t cccd_md;

        ble_gatts_attr_md_t attr_md;

        ble_gatts_attr_t    attr_char_value;


        // Ініціалізуємо сервіс

        memset(&my_service, 0, sizeof(my_service));

        service_uuid.uuid              = BLE_UUID_MY_CUSTOM_SERVICE;

        err_code = sd_ble_uuid_vs_add(&base_uuid, &service_uuid.type);

        APP_ERROR_CHECK(err_code);

        my_service.uuid                = service_uuid;

        my_service.type                = BLE_GATTS_SVC_TYPE_PRIMARY;

        my_service.char_num            = 1;

        my_service.chars               = &char_md;

        err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &my_service, &m_service_handle);

        APP_ERROR_CHECK(err_code);


        // Ініціалізуємо характеристику

        memset(&char_md, 0, sizeof(char_md));

        char_uuid.uuid                 = BLE_UUID_MY_CUSTOM_CHAR;

        err_code = sd_ble_uuid_vs_add(&base_uuid, &char_uuid.type);

        APP_ERROR_CHECK(err_code);

        char_md.char_props.read         = 1;

        char_md.char_props.write        = 1;

        char_md.p_char_user_desc        = NULL;

        char_md.p_char_pf               = NULL;

        char_md.p_user_desc_md          = NULL;

        char_md.p_cccd_md               = &cccd_md;

        char_md.p_sccd_md               = NULL;

        err_code = sd_ble_gatts_characteristic_add(m_service_handle, &char_md, &attr_char_value, &m_char_handles);

        APP_ERROR_CHECK(err_code);

    }


    // Обробник події BLE GATT зчитування

    static void on_read(ble_evt_t const * p_ble_evt)

    {

        uint32_t err_code;

        ble_gatts_evt_read_t const * p_evt_read = &p_ble_evt->evt.gatts_evt.params.read;


        if (p_evt_read->handle == m_char_handles.value_handle)

        {

            // Зчитування характеристики

            // Розмір повідомлення буде міститися у p_evt_read->len

        }

    }


    // Обробник події BLE GATT запису

    static void on_write(ble_evt_t const * p_ble_evt)

    {

        uint32_t err_code;

        ble_gatts_evt_write_t const * p_evt_write = &p_ble_evt->evt.gatts_evt.params.write;


        if (p_evt_write->handle == m_char_handles.value_handle)

        {

            // Запис характеристики

            // Повідомлення буде міститися у p_evt_write->data та його розмір у p_evt_write->len


            // Відправка повідомлення до ПК через Bleak

        }

    }


    //Продовження коду:


    // Функція ініціалізації BLE модуля

    static void ble_stack_init(void)

    {

        uint32_t err_code;


        err_code = nrf_sdh_enable_request();

        APP_ERROR_CHECK(err_code);


        err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);

        APP_ERROR_CHECK(err_code);


        err_code = nrf_sdh_ble_enable(&ram_start);

        APP_ERROR_CHECK(err_code);


        ble_conn_state_init();

    }


    // Обробник BLE подій

    static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)

    {

        switch (p_ble_evt->header.evt_id)

        {

            case BLE_GAP_EVT_CONNECTED:

                m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;

                break;


            case BLE_GAP_EVT_DISCONNECTED:

                m_conn_handle = BLE_CONN_HANDLE_INVALID;

                break;


            case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST:

                on_rw_authorize_request(p_ble_evt);

                break;


            case BLE_GATTS_EVT_READ:

                on_read(p_ble_evt);

                break;


            case BLE_GATTS_EVT_WRITE:

                on_write(p_ble_evt);

                break;


            default:

                // Інші події можна обробити за необхідністю

                break;

        }

    }


    // Функція ініціалізації BLE модуля та сервісів

    void ble_init(void)

    {

        ble_stack_init();

        gap_params_init();

        gatt_init();

        services_init();

        advertising_init();

        conn_params_init();

        peer_manager_init();


        // Реєстрація обробника подій BLE

        NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);

    }


    // Основна функція

    int main(void)

    {

        // Ініціалізація мікроконтролера та BLE

        // ...


        // Очікування передачі повідомлення

        while (true)

        {

            // Отримання повідомлення для передачі до ПК

            // ...


            // Виконання передачі повідомлення

            // ...

        }

    }


  • Oleksii Mamontov
    23 April 2024, 21:11 |

    Нам потрібно:


    Створити проєкт у STM32Cube.


    Надати С-функцію, яка надійно відправляє кілька повідомлень із випадковими даними.


    Функція на Python, яка приймає ці дані та виводить їх у консоль.


    Додаткова інформація:


    У нас уже є код, який надсилає такі повідомлення по BLE. Але пакети часто губляться і повідомлення приходять часто невалідні. Нам потрібен код, який підтримує повторну передачу пакетів, щоб повідомлення приходили валідні.



    Assistant


    Poe

    Розумію ваші вимоги. Ось пояснення крок за кроком для виконання вашого завдання:


    Крок 1: Створення проєкту у STM32Cube


    Відкрийте STM32CubeIDE і створіть новий проєкт для вашого мікроконтролера NUCLEO-WB55RG.


    Виберіть потрібні налаштування для вашого проєкту, такі як тип мікроконтролера, системний тактовий джерело, налаштування GPIO, налаштування BLE і т.д. Виберіть бібліотеку STM32Cube HAL для роботи з BLE.


    Після створення проєкту ви отримаєте початковий код для створення програми на мікроконтролері.


    Крок 2: С-функція для надсилання повідомлень


    Ось приклад C-функції, яка надійно відправляє кілька повідомлень з випадковими даними через BLE:


    c

    Copy

    #include "ble.h"

    #include "ble_gattc.h"

    #include "ble_hci.h"

    #include "ble_srv_common.h"


    #define BLE_UUID_MY_CUSTOM_SERVICE 0x1234

    #define BLE_UUID_MY_CUSTOM_CHAR    0x5678


    static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID;  // Зберігає дескриптор підключення


    // Функція для надсилання повідомлень через BLE

    void send_messages(void)

    {

        // Отримання випадкових даних для повідомлень

        // ...


        // Повторення надсилання повідомлень, поки не будуть надіслані всі повідомлення

        while (!all_messages_sent)

        {

            // Надсилання кожного повідомлення

            for (int i = 0; i < num_messages; i++)

            {

                bool message_sent = false;


                while (!message_sent)

                {

                    // Надсилання повідомлення

                    // ...


                    // Очікування підтвердження передачі

                    // ...


                    if (confirmation_received)

                    {

                        message_sent = true;

                    }

                    else

                    {

                        // Повторна передача повідомлення

                        // ...

                    }

                }

            }

        }

    }

    У цьому прикладі функція send_messages() використовує цикли для повторної передачі повідомлень, поки всі повідомлення не будуть успішно надіслані. Ви повинні додати власну логіку для отримання випадкових даних для повідомлень та надсилання повідомлень через BLE.


    Крок 3: Функція Python для прийому повідомлень


    Ось приклад функції на мові Python, яка приймає дані через BLE і виводить їх у консоль:


    python

    Copy

    import asyncio

    from bleak import BleakClient


    async def receive_messages():

        async with BleakClient("device_address") as client:

            while True:

                # Очікування отримання повідомлення

                message = await client.read_gatt_char("characteristic_uuid")


                # Обробка отриманого повідомлення

                process_message(message)


    asyncio.run(receive_messages())

    В цьому прикладі ви повинні замінити "device_address" на адресу вашого мікроконтролера та "characteristic_uuid" на UUID характеристики, через яку ви надсилаєте повідомлення.


    Цей код використовує бібліотеку bleak, яка надає можливість здійснювати з'єднання з BLE-пристроями та отримувати дані з характеристик. Ви повинні встановити цю бібліотеку, використовуючи pip install bleak.


    Будь ласка, зверніть увагу, що код, наведений вище, є загальним прикладом і має бути адаптований до вашої конкретної апаратної і програмної конфігурації.

Current freelance projects in the category Desktop Apps

Need an Airtable architect to build a relational schema and a new clean Airtable base.

Need help rethinking and building a clean relational schema for an internal operational system on Airtable. The current database is already in use by the team, but it has grown organically: the structure is partially flat, some tables/views are actively used, while others are…

Databases & SQLDesktop Apps ∙ 2 days 15 hours back ∙ 9 proposals

Creation of software for generating cutting files for wooden puzzles

We are looking for a developer to create software that automates the process of building cutting files for wooden jigsaw puzzles. Current Process Currently, each file is created manually by a designer in Adobe Illustrator. The file contains: the outer contour of the puzzle in…

Desktop Apps ∙ 2 days 19 hours back ∙ 14 proposals

Small edit on the website

16 USD

Need to update the offer agreement in the footer to a new one, the company has changed its regulations Task will take 20 minutes

Web ProgrammingDesktop Apps ∙ 3 days 21 hours back ∙ 110 proposals

Account reconciliation tool with the bank, cards, and accountant

Technical Assignment: Tool for Reconciling Accounts with Bank, Cards, and AccountantGeneral Goal A local tool (script/small application in Python) is needed, which is manually run once every 1-2 months on my computer and performs reconciliation between: Invoices I issued to…

PythonDesktop Apps ∙ 6 days 4 hours back ∙ 43 proposals

Add pauses of 10-30 seconds between sending emails.

Hello! I am looking for an experienced 1C / BAS (BAF) programmer to promptly resolve a technical issue with email distribution.Problem essence: We use the accounting program BAF (Business Automation Framework), version 2.0. Once a month, there is a need to send about 300 emails…

Web ProgrammingDesktop Apps ∙ 11 days 20 hours back ∙ 10 proposals

Client
Kostyantin Korchahin
Ukraine Ukraine  6  0
Project published
2 years back
42 views