{"id":27173790,"url":"https://github.com/wenerrp/ble_wifi","last_synced_at":"2026-04-28T18:32:48.884Z","repository":{"id":283006253,"uuid":"949625446","full_name":"WenerrP/BLE_WIFI","owner":"WenerrP","description":"Provisionamiento dinámico de WiFi mediante la aplicación Mediwatch, conexión automática a un broker MQTT, habilitando la transmisión y recepción de datos en tiempo real, control y monitoreo de un dispensador de medicamentos, gestionando horarios y dosis.","archived":false,"fork":false,"pushed_at":"2025-03-31T19:46:21.000Z","size":80708,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-31T20:35:23.148Z","etag":null,"topics":["ble","esp32","esp32-idf","provisioning-connector"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WenerrP.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-16T21:20:38.000Z","updated_at":"2025-03-23T19:55:56.000Z","dependencies_parsed_at":"2025-03-18T05:34:09.876Z","dependency_job_id":null,"html_url":"https://github.com/WenerrP/BLE_WIFI","commit_stats":null,"previous_names":["wenerrp/ble_wifi"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WenerrP%2FBLE_WIFI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WenerrP%2FBLE_WIFI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WenerrP%2FBLE_WIFI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WenerrP%2FBLE_WIFI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WenerrP","download_url":"https://codeload.github.com/WenerrP/BLE_WIFI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248028580,"owners_count":21035833,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ble","esp32","esp32-idf","provisioning-connector"],"created_at":"2025-04-09T11:23:38.392Z","updated_at":"2026-04-28T18:32:48.845Z","avatar_url":"https://github.com/WenerrP.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"📡 ESP32 WiFi Provisioning \u0026 MQTT Communication for Smart Medicine Dispenser \u0026 Bangle.js 2\n\n    Este proyecto desarrollado en ESP-IDF permite:\n\n✅ Provisionamiento dinámico de WiFi mediante la aplicación Mediwatch (ESP BLE Provisioning).\n✅ Conexión automática a un broker MQTT, habilitando la transmisión y recepción de datos en tiempo real.\n✅ Control y monitoreo de un dispensador de medicamentos, gestionando horarios y dosis.\n✅ Integración con el smartwatch Bangle.js 2, para notificaciones, alertas y confirmación de toma de medicamentos.\n\nFuncionalidades principales:\n\n    Almacenamiento y gestión segura de credenciales WiFi.\n    Conexión robusta y reconexión automática a MQTT.\n    Envío de datos a la nube (estado del dispensador, registros de uso).\n    Recepción de comandos MQTT para activar el dispensador o actualizar parámetros.\n    Comunicación bidireccional con el smartwatch vía MQTT.\n    Manejo de errores y fallback automático a modo de provisión si se pierde conexión.\n🚀 Tecnologías utilizadas:\n\n    ESP-IDF vX.X\n    MQTT (compatible con brokers públicos o privados)\n    ESP BLE Provisioning\n    Comunicación con Bangle.js 2 vía MQTT / API\n    \n📂 Estructura principal:\n\n    /main – Lógica de provisión WiFi, conexión MQTT y control del dispensador.\n    /components – Módulos auxiliares (MQTT manager, provisioning, tareas FreeRTOS).\n    /flash – Archivos de configuración para ESP provisioning.\n    \n🛠 Próximas mejoras\n\n    Soporte para múltiples usuarios.\n    Almacenamiento local de historial de eventos.\n    Actualizaciones OTA.\n\n| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-S2 | ESP32-S3 |\n| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- |\n\n# Wi-Fi Provisioning Manager Example\n\n(See the README.md file in the upper level 'examples' directory for more information about examples.)\n\n`wifi_prov_mgr` example demonstrates the usage of `wifi_provisioning` manager component for building a provisioning application.\n\nFor this example, BLE is chosen as the default mode of transport, over which the provisioning related communication is to take place. NimBLE has been configured as the default host, but you can also switch to Bluedroid using menuconfig -\u003e Components -\u003e Bluetooth -\u003e Bluetooth Host.\n\n\u003e Note: Since ESP32-S2 does not support BLE, the SoftAP will be the default mode of transport in that case. Even for ESP32, you can change to SoftAP transport from menuconfig.\n\nIn the provisioning process the device is configured as a Wi-Fi station with specified credentials. Once configured, the device will retain the Wi-Fi configuration, until a flash erase is performed.\n\nRight after provisioning is complete, BLE is turned off and disabled to free the memory used by the BLE stack. Though, that is specific to this example, and the user can choose to keep BLE stack intact in their own application.\n\n`wifi_prov_mgr` uses the following components :\n* `wifi_provisioning` : provides manager, data structures and protocomm endpoint handlers for Wi-Fi configuration\n* `protocomm` : for protocol based communication and secure session establishment\n* `protobuf` : Google's protocol buffer library for serialization of protocomm data structures\n* `bt` : ESP32 BLE stack for transport of protobuf packets\n\nThis example can be used, as it is, for adding a provisioning service to any application intended for IoT.\n\n\u003e Note: If you use this example code in your own project, in BLE mode, then remember to enable the BT stack and BTDM BLE control settings in your SDK configuration (e.g. by using the `sdkconfig.defaults` file from this project).\n\n## How to use example\n\n### Hardware Required\n\nExample should be able to run on any commonly available ESP32/ESP32-S2 development board.\n\n### Application Required\n\nProvisioning applications are available for various platforms. See below\n\n#### Platform : Android\n\nFor Android, a provisioning application along with source code is available on GitHub : [esp-idf-provisioning-android](https://github.com/espressif/esp-idf-provisioning-android)\n\n#### Platform : iOS\n\nFor iOS, a provisioning application along with source code is available on GitHub : [esp-idf-provisioning-ios](https://github.com/espressif/esp-idf-provisioning-ios)\n\n#### Platform : Linux / Windows / macOS\n\nTo install the dependency packages needed, please refer to the top level [README file](../../README.md#running-test-python-script-pytest).\n\n`esp_prov` supports BLE and SoftAP transport for Linux, MacOS and Windows platforms. For BLE, however, if dependencies are not met, the script falls back to console mode and requires another application through which the communication can take place. The `esp_prov` console will guide you through the provisioning process of locating the correct BLE GATT services and characteristics, the values to write, and input read values.\n\n### Configure the project\n\n```\nidf.py menuconfig\n```\n* Set the BLE/Soft AP transport under \"Example Configuration\" options. ESP32-S2 will have only SoftAP option (SoftAP option cannot be used if IPv4 is disabled in lwIP)\n\n### Build and Flash\n\nBuild the project and flash it to the board, then run monitor tool to view serial output:\n\n```\nidf.py -p PORT flash monitor\n```\n\n(To exit the serial monitor, type ``Ctrl-]``.)\n\nSee the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.\n\n## Example Output\n\n```\nI (445) app: Starting provisioning\nI (1035) app: Provisioning started\nI (1045) wifi_prov_mgr: Provisioning started with service name : PROV_261FCC\n```\n\nMake sure to note down the BLE device name (starting with `PROV_`) displayed in the serial monitor log (eg. PROV_261FCC). This will depend on the MAC ID and will be unique for every device.\n\nIn a separate terminal run the `esp_prov.py` script under `$IDP_PATH/tools/esp_prov` directory (make sure to replace `myssid` and `mypassword` with the credentials of the AP to which the device is supposed to connect to after provisioning). Assuming default example configuration, which uses the protocomm security scheme 1 with PoP-based (proof-of-possession) authentication :\n\n```\npython esp_prov.py --transport ble --service_name PROV_261FCC --sec_ver 1 --pop abcd1234 --ssid myssid --passphrase mypassword\n```\n\nFor security version 2, the following command can be used:\n```\npython esp_prov.py --transport ble --service_name PROV_261FCC --sec_ver 2 --sec2_username wifiprov --sec2_pwd abcd1234 --ssid myssid --passphrase mypassword\n```\n\nAbove command will perform the provisioning steps, and the monitor log should display something like this :\n\n```\nI (39725) app: Received Wi-Fi credentials\n    SSID     : myssid\n    Password : mypassword\n.\n.\n.\nI (45335) esp_netif_handlers: sta ip: 192.168.43.243, mask: 255.255.255.0, gw: 192.168.43.1\nI (45345) app: Provisioning successful\nI (45345) app: Connected with IP Address:192.168.43.243\nI (46355) app: Hello World!\nI (47355) app: Hello World!\nI (48355) app: Hello World!\nI (49355) app: Hello World!\n.\n.\n.\nI (52315) wifi_prov_mgr: Provisioning stopped\n.\n.\n.\nI (52355) app: Hello World!\nI (53355) app: Hello World!\nI (54355) app: Hello World!\nI (55355) app: Hello World!\n```\n\n**Note:** For generating the credentials for security version 2 (`SRP6a` salt and verifier) for the device-side, the following example command can be used. The output can then directly be used in this example.\n\nThe config option `CONFIG_EXAMPLE_PROV_SEC2_DEV_MODE` should be enabled for the example and in `main/app_main.c`, the macro `EXAMPLE_PROV_SEC2_USERNAME` should be set to the same username used in the salt-verifier generation.\n\n```log\n$ python esp_prov.py --transport softap --sec_ver 2 --sec2_gen_cred --sec2_username wifiprov --sec2_pwd abcd1234\n==== Salt-verifier for security scheme 2 (SRP6a) ====\nstatic const char sec2_salt[] = {\n    0x03, 0x6e, 0xe0, 0xc7, 0xbc, 0xb9, 0xed, 0xa8, 0x4c, 0x9e, 0xac, 0x97, 0xd9, 0x3d, 0xec, 0xf4\n};\n\nstatic const char sec2_verifier[] = {\n    0x7c, 0x7c, 0x85, 0x47, 0x65, 0x08, 0x94, 0x6d, 0xd6, 0x36, 0xaf, 0x37, 0xd7, 0xe8, 0x91, 0x43,\n    0x78, 0xcf, 0xfd, 0x61, 0x6c, 0x59, 0xd2, 0xf8, 0x39, 0x08, 0x12, 0x72, 0x38, 0xde, 0x9e, 0x24,\n    .\n    .\n    .\n    0xe6, 0xf6, 0x53, 0xc8, 0x31, 0xa8, 0x78, 0xde, 0x50, 0x40, 0xf7, 0x62, 0xde, 0x36, 0xb2, 0xba\n};\n\n```\n\n### QR Code Scanning\n\nEnabling `CONFIG_EXAMPLE_PROV_SHOW_QR` will display a QR code on the serial terminal, which can be scanned from the ESP Provisioning phone apps to start the Wi-Fi provisioning process.\n\nThe monitor log should display something like this :\n\n```\nI (1462) app: Provisioning started\nI (1472) app: Scan this QR code from the provisioning application for Provisioning.\nI (1472) QRCODE: Encoding below text with ECC LVL 0 \u0026 QR Code Version 10\nI (1482) QRCODE: {\"ver\":\"v1\",\"name\":\"PROV_EA69FC\",\"pop\":\"abcd1234\",\"transport\":\"ble\"}\nGAP procedure initiated: advertise; disc_mode=2 adv_channel_map=0 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=256 adv_itvl_max=256\n\n  █▀▀▀▀▀█ ▀▀▀█▄█   ▀▀▄ █▄ ▀ █▀▀▀▀▀█\n  █ ███ █  ▀▄█ █▄ ▀▄█ ▄██ █ █ ███ █\n  █ ▀▀▀ █  ▄▀█▀▄▀ ▀█▄▀  ██  █ ▀▀▀ █\n  ▀▀▀▀▀▀▀ █▄▀ █▄█▄█ ▀ █ █ ▀ ▀▀▀▀▀▀▀\n  ▀▀ ▀▀ ▀  ▀▄ ▀▄ ▄▀▀▀█ ▀▄ ▀ ▀▄▄ ▄▄▀\n  ███▄█▄▀ █▀  ▀▀▀▀▄▄█   █▀ █  ▄█▄█▀\n  ▀███▀ ▀▄▄██ ▄▄██▄ ▀▀▀▀   ▄▀█ ▀▄▄▀\n  ▄███  ▀██▀▀ ▄ ▄█▄▀▀█▄ ▀▄▀▄▄█  ▄\n  ▀█▀ █▄▀▀ ▀▀█▀▀ █▀▄▀▄▀ ▄█  ███▄ ██\n  ██▀█  ▀▄█ █▄▀▄███▀▄▀█ ▀█ █▀▀ ▀▄▄▀\n  █▄▀▄█▀▀ ▀▄ ▀▄▄█▄▀▀█▄█▄█▀▀█ ▀▄ ▄▀\n  █ ▄█▄ ▀ ▄▀ █▄  ▀█▄█▄▀▀█▀█ ▄█ ▀▄▄█\n  ▀▀▀▀  ▀ █▀█▀▀▄▄██▄█▀█ ▀██▀▀▀█▄▄▀\n  █▀▀▀▀▀█   ▄█▀▀▀██ ▄▀▄ █▄█ ▀ █ ▄ ▄\n  █ ███ █ █ ▀▄█▀▀█▀▄█▄▄ ▀██▀▀▀▀▄▄▀▀\n  █ ▀▀▀ █ ▄█ ▀ ▄█▀█ █▀ ▀▀███▄▀█ █▄█\n  ▀▀▀▀▀▀▀ ▀  ▀  ▀▀ ▀     ▀▀▀▀▀▀\n\n\nI (1702) app: If QR code is not visible, copy paste the below URL in a browser.\nhttps://espressif.github.io/esp-jumpstart/qrcode.html?data={\"ver\":\"v1\",\"name\":\"PROV_EA69FC\",\"pop\":\"abcd1234\",\"transport\":\"ble\"}\n```\n\n\n### Wi-Fi Scanning\n\nProvisioning manager also supports providing real-time Wi-Fi scan results (performed on the device) during provisioning. This allows the client side applications to choose the AP for which the device Wi-Fi station is to be configured. Various information about the visible APs is available, like signal strength (RSSI) and security type, etc. Also, the manager now provides capabilities information which can be used by client applications to determine the security type and availability of specific features (like `wifi_scan`).\n\nWhen using the scan based provisioning, we don't need to specify the `--ssid` and `--passphrase` fields explicitly:\n\n```\npython esp_prov.py --transport ble --service_name PROV_261FCC --pop abcd1234\n```\n\nSee below the sample output from `esp_prov` tool on running above command:\n\n```\nConnecting...\nConnected\nGetting Services...\nSecurity scheme determined to be : 1\n\n==== Starting Session ====\n==== Session Established ====\n\n==== Scanning Wi-Fi APs ====\n++++ Scan process executed in 1.9967520237 sec\n++++ Scan results : 5\n\n++++ Scan finished in 2.7374596596 sec\n==== Wi-Fi Scan results ====\nS.N. SSID                              BSSID         CHN RSSI AUTH\n[ 1] MyHomeWiFiAP                      788a20841996    1 -45  WPA2_PSK\n[ 2] MobileHotspot                     7a8a20841996   11 -46  WPA2_PSK\n[ 3] MyHomeWiFiAP                      788a208daa26   11 -54  WPA2_PSK\n[ 4] NeighborsWiFiAP                   8a8a20841996    6 -61  WPA2_PSK\n[ 5] InsecureWiFiAP                    dca4caf1227c    7 -74  Open\n\nSelect AP by number (0 to rescan) : 1\nEnter passphrase for MyHomeWiFiAP :\n\n==== Sending Wi-Fi Credentials to Target ====\n==== Wi-Fi Credentials sent successfully ====\n\n==== Applying Wi-Fi Config to Target ====\n==== Apply config sent successfully ====\n\n==== Wi-Fi connection state  ====\n==== WiFi state: Connected ====\n==== Provisioning was successful ====\n```\n\n### Interactive Provisioning\n\n`esp_prov` supports interactive provisioning. You can trigger the script with a simplified command and input the necessary details\n(`Proof-of-possession` for security scheme 1 and `SRP6a username`, `SRP6a password` for security scheme 2) as the provisioning process advances.\n\nThe command `python esp_prov.py --transport ble --sec_ver 1` gives out the following sample output:\n\n```\nDiscovering...\n==== BLE Discovery results ====\nS.N. Name                              Address\n[ 1] PROV_4C33E8                       01:02:03:04:05:06\n[ 1] BT_DEVICE_SBC                     0A:0B:0C:0D:0E:0F\nSelect device by number (0 to rescan) : 1\nConnecting...\nGetting Services...\nProof of Possession required:\n\n==== Starting Session ====\n==== Session Established ====\n\n==== Scanning Wi-Fi APs ====\n++++ Scan process executed in 3.8695244789123535 sec\n++++ Scan results : 2\n\n++++ Scan finished in 4.4132080078125 sec\n==== Wi-Fi Scan results ====\nS.N. SSID                              BSSID         CHN RSSI AUTH\n[ 1] MyHomeWiFiAP                      788a20841996    1 -45  WPA2_PSK\n[ 2] MobileHotspot                     7a8a20841996   11 -46  WPA2_PSK\n\nSelect AP by number (0 to rescan) : 1\nEnter passphrase for myssid :\n\n==== Sending Wi-Fi Credentials to Target ====\n==== Wi-Fi Credentials sent successfully ====\n\n==== Applying Wi-Fi Config to Target ====\n==== Apply config sent successfully ====\n\n==== Wi-Fi connection state  ====\n==== WiFi state: Connected ====\n==== Provisioning was successful ====\n```\n\n### Sending Custom Data\n\nThe provisioning manager allows applications to send some custom data during provisioning, which may be\nrequired for some other operations like connecting to some cloud service. This is achieved by creating\nand registering additional endpoints using the below APIs\n\n```\nwifi_prov_mgr_endpoint_create();\nwifi_prov_mgr_endpoint_register();\n```\n\nIn this particular example, we have added an endpoint named \"custom-data\" which can be tested\nby passing the `--custom_data \u003cMyCustomData\u003e` option to the esp\\_prov tool. Following output is\nexpected on success:\n\n```\n==== Sending Custom data to esp32 ====\nCustomData response: SUCCESS\n```\n\n## Troubleshooting\n\n### Provisioning failed\n\nIt is possible that the Wi-Fi credentials provided were incorrect, or the device was not able to establish connection to the network, in which the the `esp_prov` script will notify failure (with reason). Serial monitor log will display the failure along with disconnect reason :\n\n```\nE (367015) app: Provisioning failed!\n    Reason : Wi-Fi AP password incorrect\n    Please reset to factory and retry provisioning\n```\n\nOnce credentials have been applied, even though wrong credentials were provided, the device will no longer go into provisioning mode on subsequent reboots until NVS is erased (see following section).\n\n### Provisioning does not start\n\nIf the serial monitor log shows the following :\n\n```\nI (465) app: Already provisioned, starting Wi-Fi STA\n```\n\nit means either the device has been provisioned earlier with or without success (e.g. scenario covered in above section), or that the Wi-Fi credentials were already set by some other application flashed previously onto your device. On setting the log level to DEBUG this is clearly evident :\n\n```\nD (455) wifi_prov_mgr: Found Wi-Fi SSID     : myssid\nD (465) wifi_prov_mgr: Found Wi-Fi Password : m********d\nI (465) app: Already provisioned, starting Wi-Fi STA\n```\n\nTo fix this we simple need to erase the NVS partition from flash. First we need to find out its address and size. This can be seen from the monitor log on the top right after reboot.\n\n```\nI (47) boot: Partition Table:\nI (50) boot: ## Label            Usage          Type ST Offset   Length\nI (58) boot:  0 nvs              WiFi data        01 02 00009000 00006000\nI (65) boot:  1 phy_init         RF data          01 01 0000f000 00001000\nI (73) boot:  2 factory          factory app      00 00 00010000 00124f80\nI (80) boot: End of partition table\n```\n\nNow erase NVS partition by running the following commands :\n\n```\n$IDF_PATH/components/esptool_py/esptool/esptool.py erase_region 0x9000 0x6000\n```\n\n### Bluetooth Pairing Request during provisioning\n\nESP-IDF now has functionality to enforce link encryption requirement while performing GATT write on characteristics of provisioning service. This will however result in a pairing pop-up dialog, if link is not encrypted. This feature is disabled by default. In order to enable this feature, please set `CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION=y` in the sdkconfig or select the configuration using \"idf.py menuconfig\" .\n\n```\nComponent Config --\u003e Wi-Fi Provisioning Manager --\u003e Force Link Encryption during Characteristic Read/Write\n\n```\nRecompiling the application with above changes should suffice to enable this functionality.\n\n\n### Unsupported platform\n\nIf the platform requirement, for running `esp_prov` is not satisfied, then the script execution will fallback to console mode, in which case the full process (involving user inputs) will look like this :\n\n```\n==== Esp_Prov Version: v1.0 ====\nBLE client is running in console mode\n    This could be due to your platform not being supported or dependencies not being met\n    Please ensure all pre-requisites are met to run the full fledged client\nBLECLI \u003e\u003e Please connect to BLE device `PROV_261FCC` manually using your tool of choice\nBLECLI \u003e\u003e Was the device connected successfully? [y/n] y\nBLECLI \u003e\u003e List available attributes of the connected device\nBLECLI \u003e\u003e Is the service UUID '0000ffff-0000-1000-8000-00805f9b34fb' listed among available attributes? [y/n] y\nBLECLI \u003e\u003e Is the characteristic UUID '0000ff53-0000-1000-8000-00805f9b34fb' listed among available attributes? [y/n] y\nBLECLI \u003e\u003e Is the characteristic UUID '0000ff51-0000-1000-8000-00805f9b34fb' listed among available attributes? [y/n] y\nBLECLI \u003e\u003e Is the characteristic UUID '0000ff52-0000-1000-8000-00805f9b34fb' listed among available attributes? [y/n] y\n\n==== Verifying protocol version ====\nBLECLI \u003e\u003e Write following data to characteristic with UUID '0000ff53-0000-1000-8000-00805f9b34fb' :\n    \u003e\u003e 56302e31\nBLECLI \u003e\u003e Enter data read from characteristic (in hex) :\n    \u003c\u003c 53554343455353\n==== Verified protocol version successfully ====\n\n==== Starting Session ====\nBLECLI \u003e\u003e Write following data to characteristic with UUID '0000ff51-0000-1000-8000-00805f9b34fb' :\n    \u003e\u003e 10015a25a201220a20ae6d9d5d1029f8c366892252d2d5a0ffa7ce1ee5829312545dd5f2aba057294d\nBLECLI \u003e\u003e Enter data read from characteristic (in hex) :\n    \u003c\u003c 10015a390801aa0134122048008bfc365fad4753dc75912e0c764d60749cb26dd609595b6fbc72e12614031a1089733af233c7448e7d7fb7963682c6d8\nBLECLI \u003e\u003e Write following data to characteristic with UUID '0000ff51-0000-1000-8000-00805f9b34fb' :\n    \u003e\u003e 10015a270802b2012212204051088dc294fe4621fac934a8ea22e948fcc3e8ac458aac088ce705c65dbfb9\nBLECLI \u003e\u003e Enter data read from characteristic (in hex) :\n    \u003c\u003c 10015a270803ba01221a20c8d38059d5206a3d92642973ac6ba8ac2f6ecf2b7a3632964eb35a0f20133adb\n==== Session Established ====\n\n==== Sending Wifi credential to esp32 ====\nBLECLI \u003e\u003e Write following data to characteristic with UUID '0000ff52-0000-1000-8000-00805f9b34fb' :\n    \u003e\u003e 98471ac4019a46765c28d87df8c8ae71c1ae6cfe0bc9c615bc6d2c\nBLECLI \u003e\u003e Enter data read from characteristic (in hex) :\n    \u003c\u003c 3271f39a\n==== Wifi Credentials sent successfully ====\n\n==== Applying config to esp32 ====\nBLECLI \u003e\u003e Write following data to characteristic with UUID '0000ff52-0000-1000-8000-00805f9b34fb' :\n    \u003e\u003e 5355\nBLECLI \u003e\u003e Enter data read from characteristic (in hex) :\n    \u003c\u003c 1664db24\n==== Apply config sent successfully ====\n\n==== Wifi connection state  ====\nBLECLI \u003e\u003e Write following data to characteristic with UUID '0000ff52-0000-1000-8000-00805f9b34fb' :\n    \u003e\u003e 290d\nBLECLI \u003e\u003e Enter data read from characteristic (in hex) :\n    \u003c\u003c 505f72a9f8521025c1964d7789c4d7edc56aedebd144e1b667bc7c0975757b80cc091aa9f3e95b06eaefbc30290fa1\n++++ WiFi state: connected ++++\n==== Provisioning was successful ====\n```\n\nThe write data is to be copied from the console output ```\u003e\u003e``` to the platform specific application and the data read from the application is to be pasted at the user input prompt ```\u003c\u003c``` of the console, in the format (hex) indicated in above sample log.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwenerrp%2Fble_wifi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwenerrp%2Fble_wifi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwenerrp%2Fble_wifi/lists"}