{"id":20341931,"url":"https://github.com/douglaszuqueto/esp32-rpc","last_synced_at":"2025-04-11T23:34:18.820Z","repository":{"id":91302767,"uuid":"181722606","full_name":"douglaszuqueto/esp32-rpc","owner":"douglaszuqueto","description":"Comunicação remota utilizando RPC e ESP32","archived":false,"fork":false,"pushed_at":"2019-04-16T17:48:01.000Z","size":138,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T19:21:19.757Z","etag":null,"topics":["esp32","http","iot","mqtt","rpc"],"latest_commit_sha":null,"homepage":"https://github.com/douglaszuqueto/esp32-rpc","language":null,"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/douglaszuqueto.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":"2019-04-16T16:00:57.000Z","updated_at":"2023-07-14T00:47:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"c68ad148-a38b-4229-9312-b9f88a6546a8","html_url":"https://github.com/douglaszuqueto/esp32-rpc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fesp32-rpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fesp32-rpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fesp32-rpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fesp32-rpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/douglaszuqueto","download_url":"https://codeload.github.com/douglaszuqueto/esp32-rpc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248495104,"owners_count":21113570,"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":["esp32","http","iot","mqtt","rpc"],"created_at":"2024-11-14T21:29:46.599Z","updated_at":"2025-04-11T23:34:18.806Z","avatar_url":"https://github.com/douglaszuqueto.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# ESP32 RPC(Remote Procedure Call)\n\nComunicação remota utilizando RPC e ESP32.\n\n## Índice\n\n* [Introdução](#introdução)\n* [RPC](#rpc)\n* [Dashboard - Webapp](#dashboard---webapp)\n* [Comandos](#comandos)\n* [Arquitetura](#arquitetura)\n  * [HTTP](#http)\n  * [MQTT](#mqtt)\n* [Referências](#referências)\n\n## Introdução\n\nEsse projeto tem como objetivo estudar e explorar técnicas utilizando RPC como meio de comunicação em cima do ESP32.\n\nEssa vontade de implementar algo surgiu a algum tempo atrás quando testei o Mongoose-os no ESP32, onde esse meio de comunicação era disponível através do binário(mos) do serviço como também na dashboard do mesmo.\n\nPortanto resolvi pesquisar um pouco mais sobre o tema a fim de curiosidade e como de costume resolvi fazer algumas implementações simples porém com um contexto que case com a vida real.\n\n## RPC\n\nChamada remota de procedimento (RPC, acrônimo de Remote Procedure Call) é uma tecnologia de comunicação entre processos que permite a um programa de computador chamar um procedimento em outro espaço de endereçamento (geralmente em outro computador, conectado por uma rede). O programador não se preocupa com detalhes de implementação dessa interação remota: do ponto de vista do código, a chamada se assemelha a chamadas de procedimentos locais.\n\nRPC é uma tecnologia popular para a implementação do modelo cliente-servidor de computação distribuída. Uma chamada de procedimento remoto é iniciada pelo cliente enviando uma mensagem para um servidor remoto para executar um procedimento específico. Uma resposta é retornada ao cliente. Uma diferença importante entre chamadas de procedimento remotas e chamadas de procedimento locais é que, no primeiro caso, a chamada pode falhar por problemas da rede. Nesse caso, não há nem mesmo garantia de que o procedimento foi invocado.\n\nFonte: [Wikédia](https://pt.wikipedia.org/wiki/Chamada_de_procedimento_remoto)\n\n## Dashboard - webapp\n\nAssim que possível vou liberar o webapp no repositório citado abaixo para que fique mais fácil ver as coisas fluindo.\n\n[Repositório](https://github.com/douglaszuqueto/esp32-ota)\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/esp32-rpc/master/.github/webapp-v1.png)\n\n## Comandos\n\n    * ESP\n        * Info\n        * Reboot\n    * Wifi\n        * Info\n        * SetCredentials\n    * Led\n        * Write\n        * State\n        * Toggle\n    * OTA (não implementado)\n        * Update\n        * Commit\n        * Rollback\n    * Config\n        * Set\n        * Get\n    * Log\n        * All\n        * Get\n\n## Arquitetura\n\nA fins de estudo, este projeto terá suporte a 2 protocolos que uso no dia a dia, são eles: HTTP e MQTT\n\nToda requisição para um método RPC segue no formato JSON(assim como a resposta também).\n\n* Request\n```bash\n{\n  \"method\": \"Nome.Metodo\",\n  \"params\": {\n    \"key\": \"value\"\n  }\n}\n```\n\n* Response\n```bash\n{\n  \"method\": \"Nome.Metodo\",\n  \"data\": {\n    \"key\": \"value\"\n  }\n}\n```\n### HTTP\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/esp32-rpc/master/.github/esp32-rpc-http-v1.png)\n\n#### Firmware\n[Repositório](https://github.com/douglaszuqueto/esp32-rpc-http)\n\n#### Comandos\n\n* ESP.info\n```bash\ncurl --request POST \\\n  --url http://192.168.0.103:8080/rpc \\\n  --header 'content-type: application/json' \\\n  --data '{\n\t\"method\": \"ESP.Info\",\n\t\"params\": {}\n}'\n```\n\n* Wifi.SetCredentials\n```bash\ncurl --request POST \\\n  --url http://192.168.0.103:8080/rpc \\\n  --header 'content-type: application/json' \\\n  --data '{\n\t\"method\": \"Wifi.SetCredentials\",\n\t\"params\": {\n\t\t\"ssid\": \"YOUR_SSID\",\n\t\t\"password\": \"YOUR_PASSWORD\"\n\t}\n}'\n```\n\n* Led.Toggle\n```bash\ncurl --request POST \\\n  --url http://192.168.0.103:8080/rpc \\\n  --header 'content-type: application/json' \\\n  --data '{\n\t\"method\": \"Led.Toggle\",\n\t\"params\": {}\n}'\n```\n\n### MQTT\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/esp32-rpc/master/.github/esp32-rpc-mqtt-v1.png)\n\n#### Firmware\n[Repositório](https://github.com/douglaszuqueto/esp32-rpc-mqtt)\n\n#### Comandos\n\n* ESP.Info\n```bash\nmosquitto_pub -h 192.168.0.150 -t esp32/rpc/request -m '{\"method\":\"ESP.Info\",\"params\":{}}'\n```\n\n* Wifi.SetCredentials\n```bash\nmosquitto_pub -h 192.168.0.150 -t esp32/rpc/request -m '{\"method\":\"Wifi.SetCredentials\",\"params\":{\"ssid\":\"YOUR_SSID\",\"password\":\"YOUR_PASSWORD\"}}'\n```\n\n* Led.Toggle\n```bash\nmosquitto_pub -h 192.168.0.150 -t esp32/rpc/request -m '{\"method\":\"Led.Toggle\",\"params\":{}}'\n```\n\n## Referências\n\n* [Mongoose-os](https://mongoose-os.com/docs/mongoose-os/userguide/rpc.md)\n* [ThingsBoard](https://thingsboard.io/docs/user-guide/rpc/)\n* [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServe)\n* [ArduinoJSON](https://arduinojson.org/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglaszuqueto%2Fesp32-rpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdouglaszuqueto%2Fesp32-rpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglaszuqueto%2Fesp32-rpc/lists"}