Skip to content

Commit dced190

Browse files
Translation to brazilian portuguese
1 parent a0e8f7f commit dced190

File tree

1 file changed

+207
-0
lines changed

1 file changed

+207
-0
lines changed

translations/README-ptbr.md

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
# Arduino HomeKit ESP8266 (PT-BR)
2+
3+
**Original:** [Inglês](https://github.com/Mixiaoxiao/Arduino-HomeKit-ESP8266)
4+
5+
**Tradutor:** [Rodolfo Vieira](https://github.com/rodolfovieira95)
6+
## Biblioteca para ESP8266/ESP32 Arduino de um server de acessório para o Apple HomeKit
7+
8+
Essa biblioteca do Arduino é uma implementação para um acessório nativo do Apple HomeKit[ESP8266 Arduino core](https://github.com/esp8266/Arduino), e funciona sem uma "bridge" (ponte) adicional.
9+
10+
Este projeto é principalmente baseado no [esp-homekit](https://github.com/maximkulkin/esp-homekit) para [ESP-OPEN-RTOS](https://github.com/SuperHouse/esp-open-rtos).
11+
12+
Eu portei a implementação do RTOS-based do [esp-homekit](https://github.com/maximkulkin/esp-homekit) para o ambiente puro do Arduino, focado em uma build de projeto fácil e rápida usando a IDE do Arduino (ou Eclipse com sloeber, PlatformIO).
13+
14+
Aproveite a build "one-key", "one-key" upload, e trabalhe ligando diversas outras bibliotecas do Arduino com Apple HomeKit!
15+
16+
Aqui está a [discussão](https://github.com/HomeACcessoryKid/Arduino-HomeKit/issues/1) sobre a necessidade do RTOS para implementar o Apple HomeKit, e o projeto é a prova de conceito de que o Apple HomeKit pode ser implementado e funciona sem o RTOS.
17+
18+
A biblioteca foi feita com o ESP8266 Arduino Core 2.6.3. Versões anteriores podem compilar com erros.
19+
20+
21+
## ESP32 agora é suportado (2020-04-15)
22+
23+
Confira a pasta do "ESP32 HomeKit"
24+
25+
Isso é a versão "only-can-work" (apenas-pode-funcionar) para o ESP32 sem o merge na biblioteca original. Ainda há algumas melhorias a serem realizadas.
26+
27+
O `WolfSSL` usado para o ESP32 é baseado na versão `4.3.0-stable` sem **Suporte a Aceleração de Hardware**.
28+
29+
O HomeKit rodando no ESP32 tem uma **BOA PERFORMANCE** em que a configuração do pareamento pode ser feito em até ˜1,2s e a verificação do pareamento em < 0,1s (10x mais rápido que o ESP8266).
30+
31+
O armazenamento do HomeKit no ESP32 é baseado no `nvs`.
32+
33+
#### Performance COM a Aceleração de Hardware no ESP32
34+
35+
* Pré-inicialização: ~0.53s
36+
* Passo de Configuração do Pareamento 1/3: ~0s (A criptografia pesada é computada no passo de pré-inicialização)
37+
* Passo de Configuração do Pareamento 2/3: ~0.53s
38+
* Passo de Configuração do Pareamento 3/3: ~0.20s
39+
* Passo de Verificação do Pareamente 1/2: ~0.05s
40+
* Passo de Verificação do Pareamente 2/2: ~0.02s
41+
42+
#### Performance SEM a Aceleração de Hardware no ESP32
43+
44+
* Pré-inicialização: ~2.2s
45+
* Passo de Configuração 1/3: ~0s (A criptografia pesada é computada no passo de pré-inicialização)
46+
* Passo de Configuração do Pareamento 2/3: ~2.5s
47+
* Passo de Configuração do Pareamento 3/3: ~0.1s
48+
* Passo de Verificação 1/2 do Pareamente: ~0.06s
49+
* Passo de Verificação 2/2 do Pareamente: ~0.03s
50+
51+
## O conteúdo a seguir é apenas para o ESP8266
52+
53+
Este readme será refatorado na próxima versão.
54+
55+
## Preview
56+
57+
![Preview](https://raw.github.com/Mixiaoxiao/Arduino-HomeKit-ESP8266/master/extras/preview.jpg)
58+
59+
60+
## Código de configuração do sketch de exemplo
61+
62+
``111-11-111``
63+
64+
65+
## Usabilidade
66+
67+
1. Defina o seu acessório em um arquivo .c e aproveite a declaração da "Macro" convenientementeto estilizada. Você pode definir seu acessório em um arquivo .ino usando código C++.
68+
69+
```C
70+
homekit_accessory_t *accessories[] = ...
71+
homekit_server_config_t config = {
72+
.accessories = accessories,
73+
.password = "111-11-111",
74+
//.on_event = on_homekit_event, //opcional
75+
//.setupId = "ABCD" //opcional
76+
};
77+
```
78+
79+
2. No seu sketch
80+
```C
81+
#include <arduino_homekit_server.h>;
82+
83+
//access the config defined in C code
84+
extern "C" homekit_server_config_t config;
85+
86+
void setup() {
87+
WiFi.begin(ssid, password);
88+
arduino_homekit_setup(&config);
89+
}
90+
91+
void loop() {
92+
arduino_homekit_loop();
93+
}
94+
```
95+
Pronto.
96+
97+
## Performance
98+
99+
Aviso: Você deve definir a CPU do ESP8266 rodando em 160MHz (ao menos durante o processo de pareamento), para evitar que o tcp-socket disconecte do dispositivo iOS causado pelo timeout.
100+
101+
* Pré-inicialização: ~9,1s (Você pode ver o acessório no seu aplicativo CASA para iOS após a Pré-inicialização)
102+
* Passo de Configuração do Pareamento 1/3: ~0s (A criptografia pesada é computada no passo de pré-inicialização)
103+
* Passo de Configuração do Pareamento 2/3: ~12.1s
104+
* Passo de Configuração do Pareamento 3/3: ~0.8s (A configuração de pareamento apenas é precessada quando pareado a primeira vez com o dispositivo iOS)
105+
* Passo de Verificação do Pareamente 1/2: ~0.3s
106+
* Passo de Verificação do Pareamente 2/2: ~0.8s (O passo de verificação é requerido toda vez que o iOS conecta ou reconecta com o ESP8266 para estabelecer uma conexão segura)
107+
108+
Todo processo de pareamento leva ~14s após você inserir o código de configuração no seu iPhone. Note que a Pré-inicialização requer ~9s antes de iniciar o pareamento.
109+
110+
111+
## Heap (memória)
112+
113+
O heap é critico para o suporte do ESP8266 com TCP/IP completo. O ESP8266 trava facilmente quando a memória é inferior a ~5000.
114+
115+
Eu tentei fazer a criptografia do WolfSSL funcionar no ESP8266 com uma performance melhor e com um trade-off de memória menor. Veja em detalhes na próxima seção.
116+
117+
Aqui estão os valores de heap livres rodando o sketch:
118+
119+
* Inicialização (Boot): ~26000
120+
* Durante a pré-inicialização: ~22000
121+
* Pareamento: ~17000 (or even low when crypto computing)
122+
* Pareado e conectado com o dispositivo iOS: ~21700
123+
* Pareado e sem um device iOS conectado: ~23400
124+
125+
Após a otimização da memória na versão v1.1.0:
126+
127+
* Inicialização (Boot): ~46000
128+
* Durante a pré-inicialização: ~41000
129+
* Pareamento: ~37000 (ou ainda menor com criptografia computacional)
130+
* Pareado e conectado com o dispositivo iOS: ~41700
131+
* Pareado e sem um device iOS conectado: ~43000
132+
133+
134+
## WolfSSL
135+
136+
* Baseado no wolfssl-3.13.0-stable.
137+
* Código fonte limpo: os arquivos não utilizados foram removidos.
138+
* `CURVE25519_SMALL` e `ED25519_SMALL`: ESP8266 não consegue rodar diretamente sem o `SMALL` definido uma vez que a memória não seja suficiente. Mas a versão NÃO `SMALL` é mais rápida. Eu marquei o grande `ge_precomp base[32][8]` com PROGMEM para o armazenar na Flash (por volta de 70KB). O `ge_double_scalarmult_vartime` também pode não rodar pela falta de heap. Eu defini `ESP_GE_DOUBLE_SCALARMULT_VARTIME_LOWMEM` no `user_settings.h` para usar a versão LOWMEM do `ge_double_scalarmult_vartime` no `ge_low_mem.c`. Isso é um trade-off de performance e memória. Se você quiser mais espaço em Flash, você deve definir `CURVE25519_SMALL` e `ED25519_SMALL` e não definir `ESP_GE_DOUBLE_SCALARMULT_VARTIME_LOWMEM` no `user_settings.h` (isso fará com que os Passos de Verificação vão levar aproximadamente 1.2s + 0.9s)
139+
* `integer.c`(operaçoes com big integer): `MP_16BIT` e `ESP_FORCE_S_MP_EXPTMOD` são definidos para melhorar a performance no ESP8266. `ESP_INTEGER_WINSIZE` (o valor é 3) é definido para evitar o travamento por conta da exaustão da memória e os valores de {3, 4, 5} são de performance similar.
140+
141+
## Armazenamento
142+
143+
* O pareamente de dados é armazenado no endereço da `EEPROM` no ESP8266 Arduino core.
144+
* Esse projeto não utiliza a biblioteca `EEPROM` com cache de dados para reduzir o uso de memória (chama diretamente a leitura e escrita de flash)
145+
* O `EEPROM` é 4096B no ESP8266, esse projeto utiliza no máximo [0,1408B)
146+
* Veja os comentários no `storge.c` e [ESP8266-EEPROM-doc](https://arduino-esp8266.readthedocs.io/en/2.6.3/libraries.html#eeprom).
147+
* `EEPROM` de [1408, 4096) é mais seguro para você usar.
148+
* Esse projeto NÃO utiliza `FS(file system)`, então você pode utilizar `FS` livremente.
149+
150+
151+
## WatchDog
152+
153+
* Existem watchdogs via hardware e software no ESP8266 Arduino core. A criptografia computacional pesada levará o watchdog a resetar.
154+
* Existe uma API que habilita/desabilita o watchdog via software no ESP8266 Arduino core.
155+
* Eu encontrei o [esp_hw_wdt](https://github.com/ComSuite/esp_hw_wdt) para habilitar/desabilitar o watchdog via hardware.
156+
* Os dois watchdogs são desabilitados durante a `Pré-inicialização` e `Passo de Configuração do Pareamento 2/3`.
157+
158+
## Recomendação de configurações da IDE
159+
160+
* Placa: Generic ESP8266 Module (para habilitar todas as configurações)
161+
* Flash Size: ao menos 470KB para o sketch (veja a seção `WolfSSL` se quiser um sketch menor)
162+
* LwIP Variant: v2 Lower Memory (para menor uso de memória)
163+
* Debug Level: Nenhum (para menor uso de memória)
164+
* Espressif FW: nonos-sdk 2.2.1+119(191122) (o qual usei para rodar esse projeto)
165+
* SSL Support: Basic SSL ciphers (menor uso de ROM)
166+
* VTables: Flash (talvez não faça diferença)
167+
* Erase Flash: selecione `All Flash Contents` quando você fizer o upload pela primeira vez
168+
* CPU Frequency: 160MHz (OBRIGATÓRIO)
169+
170+
## Porta do Arduino
171+
172+
* `ESP8266WiFi` (WiFiServer e WiFiClient) são usadas para conexão tcp.
173+
* `ESP8266mDNS` é usado para advertising (Bonjour)
174+
175+
## TODO
176+
177+
* Versão do ESP32 Arduino (ESP32 Arduino é baseado no RTOS e não é difícil de portar).
178+
179+
180+
## Mais exemplos e demos
181+
182+
* Veja [esp-homekit-demo](https://github.com/maximkulkin/esp-homekit-demo)
183+
184+
## Troubleshooting
185+
186+
* Cheque a saída da sua porta serial com [example_serial_output.txt](https://raw.github.com/Mixiaoxiao/Arduino-HomeKit-ESP8266/master/extras/example_serial_output_v1.1.0.txt)
187+
188+
189+
## Change Log
190+
191+
#### v1.1.0
192+
* Otimização de memória: Constantes String/byte movidas o máximo possível para Flash. A seção `RODATA` do `bin` é de apenas 4672. Aproximadamente ~20K extra de free-heap está disponível nessa versão em comparação com a v1.0.1.
193+
* Upload [ESP8266WiFi_nossl_noleak](https://github.com/Mixiaoxiao/Arduino-HomeKit-ESP8266/tree/master/extras/ESP8266WiFi_nossl_noleak/), da versão `nossl` e `noleak` oficial da biblioteca `ESP8266WiFi` do Arduino Core 2.6.3. Remoção de todo código `SSL` para salvar memória(extra ~3K) sendo que o HomeKit não requer SSL. Coreção de memory-leak no `WiFiClinet.stop()` ao adicionar `tcp_abandon(_pcb, 0)` no `stop()`, baseado na ideia do[esp8266/Arduino/pull/2767](https://github.com/esp8266/Arduino/pull/2767).
194+
195+
#### v1.0.1
196+
* Redução do `winsize` de `3` para `2` (mesma performance) para diminuir o heap requirido. O pareamento consegue ser feito com diminuição de free-heap de ~14000.
197+
* Especificando o MDNS roda no IPAddress do STA para certificar que o HomeKit consegue trabalhar com alguma biblioteca SoftAp-based WiFi-Config.
198+
* Renomeado os`HTTP_METHOD`(s) no `http_parser.h` para evitar erros de multipla definição quando estiver usando o `ESP8266WebServer` em conjunto.
199+
200+
## Agradecimentos
201+
* [esp-homekit](https://github.com/maximkulkin/esp-homekit)
202+
* [esp-homekit-demo](https://github.com/maximkulkin/esp-homekit-demo)
203+
* [esp_hw_wdt](https://github.com/ComSuite/esp_hw_wdt)
204+
* [WolfSSL/WolfCrypt](https://www.wolfssl.com/products/wolfcrypt-2/)
205+
* [cJSON](https://github.com/DaveGamble/cJSON)
206+
* [cQueue](https://github.com/SMFSW/cQueue)
207+

0 commit comments

Comments
 (0)