{"id":23176692,"url":"https://github.com/marcin-filipiak/deviceconfigjson","last_synced_at":"2025-08-22T00:07:05.300Z","repository":{"id":204701185,"uuid":"712474882","full_name":"marcin-filipiak/DeviceConfigJSON","owner":"marcin-filipiak","description":"DeviceJsonConfigurator is a C++ library that enables device configuration using JSON. It allows for easy customization of settings like Wi-Fi, communication parameters, and more via simple JSON commands. Ideal for configuring ESP32 devices via Bluetooth from Android app.","archived":false,"fork":false,"pushed_at":"2024-01-23T14:38:03.000Z","size":71,"stargazers_count":4,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-13T03:33:31.927Z","etag":null,"topics":["arduino-library","configuration-management","iot"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcin-filipiak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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,"zenodo":null},"funding":{"github":["marcin-filipiak"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2023-10-31T14:41:18.000Z","updated_at":"2024-07-07T14:56:20.000Z","dependencies_parsed_at":"2025-05-13T03:05:22.399Z","dependency_job_id":"45a3b35f-ecc3-4487-91e4-33ac50196c40","html_url":"https://github.com/marcin-filipiak/DeviceConfigJSON","commit_stats":null,"previous_names":["marcin-filipiak/deviceconfigjson"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/marcin-filipiak/DeviceConfigJSON","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcin-filipiak%2FDeviceConfigJSON","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcin-filipiak%2FDeviceConfigJSON/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcin-filipiak%2FDeviceConfigJSON/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcin-filipiak%2FDeviceConfigJSON/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcin-filipiak","download_url":"https://codeload.github.com/marcin-filipiak/DeviceConfigJSON/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcin-filipiak%2FDeviceConfigJSON/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271565326,"owners_count":24781732,"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","status":"online","status_checked_at":"2025-08-21T02:00:08.990Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["arduino-library","configuration-management","iot"],"created_at":"2024-12-18T06:19:05.003Z","updated_at":"2025-08-22T00:07:05.270Z","avatar_url":"https://github.com/marcin-filipiak.png","language":"C++","funding_links":["https://github.com/sponsors/marcin-filipiak"],"categories":[],"sub_categories":[],"readme":"# Library Name: DeviceConfigJSON\n\n* \u003ca href=\"https://github.com/marcin-filipiak/DeviceConfigJSON#description\"\u003eDescription\u003c/a\u003e\n* \u003ca href=\"https://github.com/marcin-filipiak/DeviceConfigJSON#how-it-works\"\u003eHow it works?\u003c/a\u003e\n* \u003ca href=\"https://github.com/marcin-filipiak/DeviceConfigJSON#field-types\"\u003eField types\u003c/a\u003e\n* \u003ca href=\"https://github.com/marcin-filipiak/DeviceConfigJSON#json-format\"\u003eJSON Format\u003c/a\u003e\n* \u003ca href=\"https://github.com/marcin-filipiak/DeviceConfigJSON#gui-for-easy-configuration\"\u003eGUI for easy configuration (also for Android)\u003c/a\u003e\n\n\n## Description\n\nDeviceConfigJSON is a C++ library that enables device configuration for ESP32 using the JSON format. This versatile library can serve configuration protocol for interacting with ESP32 devices through Bluetooth from (for example) an Android application. It allows users to dynamically customize their ESP32 settings, such as Wi-Fi network, communication parameters, and other options, using straightforward and intuitive JSON commands.\n\nKey features of the DeviceConfigJSON library:\n* Easy integration with ESP32 projects, enabling quick and flexible device configuration.\n* JSON protocol support, providing a readable and understandable configuration format for users.\n* Compatibility with Android applications, allowing configuration through a mobile interface.\n* Support for various configuration parameters and options, making it adaptable for a wide range of use cases.\n* Capability to manage and store configurations in JSON files.\n\nDeviceConfigJSON is the ideal tool for IoT project creators, offering convenient device configuration while in use without the need to modify the source code.\n\nhttps://www.arduino.cc/reference/en/libraries/deviceconfigjson/\n\n## How it works?\n\nWith the DeviceConfigJSON library, you can create an object where you define the parameters you want to configure while specifying how they will be displayed on the interface. You can determine whether it's a simple message, a toggle switch, a password field, or other input types. In a way, you are defining an HTML-like form, which will be formatted into JSON.\n\nThis JSON format can be transmitted to various destinations via serial ports, Bluetooth, or network connections. The JSON data can also include information about the current settings in these fields. Sending back the formatted JSON allows for the retrieval of new settings.\n\nIn essence, this library provides a versatile and efficient means to configure and manage ESP32 devices, making it easy to adjust and exchange device settings through different communication channels.\n\nHere you can find some example projects in Arduino: https://github.com/marcin-filipiak/DeviceConfigJSON/tree/main/examples\n\n## Field types\n\nThe DeviceConfigJSON library offers a range of field types for configuring device settings, each serving a specific purpose:\n* Label: This field is used for displaying textual information or descriptions.\n* Text Field: Ideal for entering text, this field allows users to input custom values.\n* Password Field: Specifically designed for entering passwords, such as for Wi-Fi networks, to ensure security.\n* State: This field conveys logical states, providing information on whether a particular feature or condition is currently active.\n* Binary Switch: A binary switch is a two-state toggle switch. It allows users to turn something on or off, providing a simple way to enable or disable a feature.\n* Select: The select field enables users to choose from a list of predefined options. It's particularly useful when selecting from available Wi-Fi networks or other multiple-choice scenarios.\n\nWith these diverse field types, the library facilitates the creation of versatile and user-friendly configuration interfaces for ESP32 devices, ensuring that each setting can be configured in a way that best suits its purpose.\n\n\n## JSON format\n\nI suggest you to explore the structure of the JSON format used for configuring the device. The method of transmission is identical for both sending data to the device and receiving data from it. This JSON format should include descriptions of what is being configured and the corresponding settings. This approach allows for a clear and consistent configuration process for your ESP32 devices.\n\nBy defining a well-structured JSON format for configuration, you can ensure that the information is transmitted accurately and can be easily understood by both the sender and the receiver. Here's a basic example of what the JSON format might look like:\n\n```cpp\n{\n  \"forms\": [\n    {\n      \"name\": \"test_form\",\n      \"title\": \"Example Form\",\n\n      \"members\": [\n        {\n          \"type\": \"label\",\n          \"name\": \"temperature\",\n          \"value\": \"25*C\"\n        },\n        {\n          \"type\": \"text\",\n          \"label\": \"Question\",\n          \"name\": \"name_text\",\n          \"value\": \"here is default text\"\n        },\n        {\n          \"type\": \"password\",\n          \"label\": \"Password:\",\n          \"name\": \"name_password\",\n          \"value\": \"secret password\"\n        },\n        {\n          \"type\": \"state\",\n          \"label\": \"Power is:\",\n          \"name\": \"name_state\",\n          \"value\": true\n        },\n        {\n          \"type\": \"binswitch\",\n          \"label\": \"Lamp:\",\n          \"name\": \"name_binswitch\",\n          \"set\": true,\n          \"autosend\": true\n        },\n        {\n          \"type\": \"select\",\n          \"label\": \"Please select\",\n          \"name\": \"name_option\",\n          \"set\": 0,\n          \"value\": [\n            {\n              \"value\": \"option0\",\n              \"label\": \"option zero\"\n            },\n            {\n              \"value\": \"option1\",\n              \"label\": \"option one\"\n            },\n            {\n              \"value\": \"option2\",\n              \"label\": \"option two\"\n            }\n          ]\n        }\n      ],\n      \"button\": [\n        {\n          \"type\": \"save\",\n          \"label\": \"Click to save\",\n          \"name\": \"save\"\n        },\n        {\n          \"type\": \"reset\",\n          \"label\": \"Click to reset\",\n          \"name\": \"reset\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n## GUI for easy configuration\n\nIn development, there are several programs that will facilitate easy device configuration using this protocol and Bluetooth communication. Keep an eye on this section to stay up-to-date with the list of compatible programs.\n\n### Android (bluetooth client):\n\nhttps://github.com/marcin-filipiak/IoT_Configurator\n\n\u003ca href=\"https://play.google.com/store/apps/details?id=com.iot_config\u0026pcampaignid=web_share\" target=\"_blank\"\u003e\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/7/78/Google_Play_Store_badge_EN.svg\"\u003e\u003c/a\u003e\n\n### Python (bluetooth client):\n\nhttps://github.com/marcin-filipiak/PyClientDeviceConfigJSON\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcin-filipiak%2Fdeviceconfigjson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcin-filipiak%2Fdeviceconfigjson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcin-filipiak%2Fdeviceconfigjson/lists"}