https://github.com/douglaszuqueto/esp32-rpc
Comunicação remota utilizando RPC e ESP32
https://github.com/douglaszuqueto/esp32-rpc
esp32 http iot mqtt rpc
Last synced: about 2 months ago
JSON representation
Comunicação remota utilizando RPC e ESP32
- Host: GitHub
- URL: https://github.com/douglaszuqueto/esp32-rpc
- Owner: douglaszuqueto
- Created: 2019-04-16T16:00:57.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-04-16T17:48:01.000Z (about 6 years ago)
- Last Synced: 2025-03-25T19:21:19.757Z (2 months ago)
- Topics: esp32, http, iot, mqtt, rpc
- Homepage: https://github.com/douglaszuqueto/esp32-rpc
- Size: 135 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ESP32 RPC(Remote Procedure Call)
Comunicação remota utilizando RPC e ESP32.
## Índice
* [Introdução](#introdução)
* [RPC](#rpc)
* [Dashboard - Webapp](#dashboard---webapp)
* [Comandos](#comandos)
* [Arquitetura](#arquitetura)
* [HTTP](#http)
* [MQTT](#mqtt)
* [Referências](#referências)## Introdução
Esse projeto tem como objetivo estudar e explorar técnicas utilizando RPC como meio de comunicação em cima do ESP32.
Essa 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.
Portanto 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.
## RPC
Chamada 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.
RPC é 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.
Fonte: [Wikédia](https://pt.wikipedia.org/wiki/Chamada_de_procedimento_remoto)
## Dashboard - webapp
Assim que possível vou liberar o webapp no repositório citado abaixo para que fique mais fácil ver as coisas fluindo.
[Repositório](https://github.com/douglaszuqueto/esp32-ota)

## Comandos
* ESP
* Info
* Reboot
* Wifi
* Info
* SetCredentials
* Led
* Write
* State
* Toggle
* OTA (não implementado)
* Update
* Commit
* Rollback
* Config
* Set
* Get
* Log
* All
* Get## Arquitetura
A fins de estudo, este projeto terá suporte a 2 protocolos que uso no dia a dia, são eles: HTTP e MQTT
Toda requisição para um método RPC segue no formato JSON(assim como a resposta também).
* Request
```bash
{
"method": "Nome.Metodo",
"params": {
"key": "value"
}
}
```* Response
```bash
{
"method": "Nome.Metodo",
"data": {
"key": "value"
}
}
```
### HTTP
#### Firmware
[Repositório](https://github.com/douglaszuqueto/esp32-rpc-http)#### Comandos
* ESP.info
```bash
curl --request POST \
--url http://192.168.0.103:8080/rpc \
--header 'content-type: application/json' \
--data '{
"method": "ESP.Info",
"params": {}
}'
```* Wifi.SetCredentials
```bash
curl --request POST \
--url http://192.168.0.103:8080/rpc \
--header 'content-type: application/json' \
--data '{
"method": "Wifi.SetCredentials",
"params": {
"ssid": "YOUR_SSID",
"password": "YOUR_PASSWORD"
}
}'
```* Led.Toggle
```bash
curl --request POST \
--url http://192.168.0.103:8080/rpc \
--header 'content-type: application/json' \
--data '{
"method": "Led.Toggle",
"params": {}
}'
```### MQTT

#### Firmware
[Repositório](https://github.com/douglaszuqueto/esp32-rpc-mqtt)#### Comandos
* ESP.Info
```bash
mosquitto_pub -h 192.168.0.150 -t esp32/rpc/request -m '{"method":"ESP.Info","params":{}}'
```* Wifi.SetCredentials
```bash
mosquitto_pub -h 192.168.0.150 -t esp32/rpc/request -m '{"method":"Wifi.SetCredentials","params":{"ssid":"YOUR_SSID","password":"YOUR_PASSWORD"}}'
```* Led.Toggle
```bash
mosquitto_pub -h 192.168.0.150 -t esp32/rpc/request -m '{"method":"Led.Toggle","params":{}}'
```## Referências
* [Mongoose-os](https://mongoose-os.com/docs/mongoose-os/userguide/rpc.md)
* [ThingsBoard](https://thingsboard.io/docs/user-guide/rpc/)
* [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServe)
* [ArduinoJSON](https://arduinojson.org/)