Wiki ADA

Projetos em Engenharia de Computação

Ferramentas do usuário

Ferramentas do site


esp

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
esp [2019/01/02 23:15]
forfs [Exemplos de código]
esp [2019/01/08 12:10] (atual)
forfs [Pinout dos microcontroladores]
Linha 33: Linha 33:
 |Temperatura de funcionamento|-40ºC até 125ºC|-40ºC até 125ºC| |Temperatura de funcionamento|-40ºC até 125ºC|-40ºC até 125ºC|
 </​dtable>​ </​dtable>​
 +
 +----
 +=====Pinout dos microcontroladores=====
 +
 +As imagens abaixo mostram a pinagem do **ESP8266** e do **ESP32** respectivamente.
 +
 +{{:​esp8266-pinout.png|}}
 +
 +Fonte: [[https://​circuits4you.com/​2017/​12/​31/​nodemcu-pinout/​]]
 +
 +{{:​esp32-pinout.jpg|}}
 +
 +Fonte: [[https://​circuits4you.com/​2018/​12/​31/​esp32-devkit-esp32-wroom-gpio-pinout/​]]
  
 ---- ----
Linha 83: Linha 96:
 ---- ----
 =====Exemplos de código===== =====Exemplos de código=====
 +
 +====Conexão WiFi====
  
 O ícone do **ESP32** e do **ESP8266** é o módulo WiFi integrado, facilitando a criação de protótipos que se conectem à internet. Os códigos abaixo, em C++ e em Lua, mostram como que é feita a conexão a um WiFi específico,​ com SSID "​ADAWiFi"​ e senha "​12345678"​. O ícone do **ESP32** e do **ESP8266** é o módulo WiFi integrado, facilitando a criação de protótipos que se conectem à internet. Os códigos abaixo, em C++ e em Lua, mostram como que é feita a conexão a um WiFi específico,​ com SSID "​ADAWiFi"​ e senha "​12345678"​.
  
 Em C++ ([[IDE Arduino|IDE do Arduino]]): Em C++ ([[IDE Arduino|IDE do Arduino]]):
-<code c>+<file c espwifi.c>
 #include <​WiFiClient.h>​ #include <​WiFiClient.h>​
 #include <​ESP8266WiFi.h>​ #include <​ESP8266WiFi.h>​
Linha 152: Linha 167:
      //​Aqui você faz seu código ​          //​Aqui você faz seu código ​    
 } }
-</code>+</file>
  
 Em Lua (interface do ChilliPeppr):​ Em Lua (interface do ChilliPeppr):​
-<code lua>+<file lua espwifi.lua>
  
 --Nova tabela que guardará os dados do WiFi --Nova tabela que guardará os dados do WiFi
Linha 182: Linha 197:
     end     end
 end) end)
-</code>+</file> 
 + 
 +====MQTT==== 
 + 
 +Não basta apenas conectar seu ESP à internet: deve-se também usar um protocolo de comunicação para que ela possa ser usufruída, como o [[MQTT|MQTT]]. Abaixo há um exemplo de uma implementação do protocolo [[MQTT|MQTT]] em C++ ([[IDE Arduino|IDE do Arduino]]) em que o ESP se subscreve em um tópico, fazendo o papel de //​subscriber//,​ e logo em seguida que é recebida uma mensagem num tópico, é publicada uma outra mensagem em outro tópico, fazendo o papel de //​publisher//​. 
 + 
 +<file c espmqtt.c>​ 
 + 
 +#include <​WiFiClient.h>​ 
 +#include <​MQTT.h>​ 
 +#include <​PubSubClient.h>​ 
 + 
 +//​----Configuração Serial---- 
 +#define SERIAL_SPEED ​       115200 
 + 
 +//​----Configuração do WiFi---- 
 +#define WIFI_SSID ​          "​ADAWiFi"​ 
 +#define WIFI_PASSWD ​        "​12345678"​ 
 +#define MAX_WIFI_INIT_RETRY 10 
 +#define WIFI_RETRY_DELAY ​   500 
 + 
 +//​----Configuração do MQTT---- 
 +#define MQTT_CLIENT_ID ​     "​ADA"​ 
 +#define MQTT_SERVER ​        "​broker.do.seu.mqtt"​ //Já usamos este: https://​www.cloudmqtt.com/​ 
 +#define MQTT_UNAME ​         "​usuariomqtt"​ 
 +#define MQTT_PASSW ​         "​senhamqtt"​ 
 +#define MQTT_BROKER_PORT ​   18002                //A porta depende de seu broker! 
 +#define MQTT_TOPIC_1 ​       "​esp/​topic1"​ 
 +#define MQTT_TOPIC_2 ​       "​esp/​topic2"​ 
 + 
 +WiFiClient wifi_client;​ 
 +PubSubClient mqtt_client(wifi_client,​ MQTT_SERVER,​ MQTT_BROKER_PORT);​ 
 +bool mqtt_status;​ 
 + 
 +//A função de callback do MQTT é chamada em cada mensagem recebida através do MQTT 
 +//num tópico em que se está subscrito 
 +void mqtt_callback(const MQTT::​Publish&​ pub){ 
 +     ​Serial.println("​Do tópico " + pub.topic() + ", foi recebida a mensagem: " + 
 +                      pub.payload_string() + "​...\n"​);​ 
 +     ​mqtt_client.publish(MQTT_TOPIC_2,​ "​Publicando no topico!"​);​ 
 +
 + 
 +int MQTT_init(){ 
 +     ​Serial.println("​Inicializando comunicação MQTT........."​);​ 
 + 
 +     //​Colocando uma função de "​callback"​ quando uma mensagem chega no tópico em que se está subscrito 
 +     ​mqtt_client.set_callback(mqtt_callback);​ 
 +      
 +     //​Máximo de tentativas para se conectar ao broker 
 +     ​mqtt_client.set_max_retries(255);​ 
 +         
 +     //​Conectando ao broker do MQTT 
 +     if (mqtt_client.connect( 
 +        MQTT::​Connect(MQTT_CLIENT_ID).set_keepalive(20000).set_auth(String(MQTT_UNAME),​ String(MQTT_PASSW)) 
 +     )) { 
 +          Serial.println("​Sucesso ao conectar ao Broker.........."​);​ 
 +          //Tenta se subscrever a um tópico específico 
 +          if (mqtt_client.subscribe(MQTT_TOPIC_1)) { 
 +               ​Serial.println("​Subscrição ao tópico do MQTT [" + String(MQTT_TOPIC_1) + "] 
 +                               bem sucedida........."​);​ 
 +          }                 
 +          else { 
 +               ​Serial.println("​Não foi possível se subscrever ao tópico [" + String(MQTT_TOPIC_1) + 
 +                              "​]........."​);​ 
 +               ​mqtt_client.disconnect();​ 
 +               ​return false; 
 +          } 
 +     }  
 +     else { 
 +          Serial.println("​Erro ao se conectar ao Broker.........."​);​ 
 +     } 
 +         
 +     ​return mqtt_client.connected();​ 
 +
 + 
 +//Função de inicialização do WiFi 
 +int WiFi_init(const char* wifi_ssid, const char* wifi_passwd){ 
 + 
 +     int retries = 0; 
 + 
 +     ​Serial.print("​Conectando ao WiFi "); 
 +     ​Serial.print(wifi_ssid);​ 
 +     ​Serial.println("​.........."​);​ 
 + 
 +     //​Colocando o WiFi no modo station (ele se conecta aos WiFis) 
 +     ​WiFi.mode(WIFI_STA);​ 
 + 
 +     //​Começa a se conectar no WiFi 
 +     ​WiFi.begin(wifi_ssid,​ wifi_passwd);​ 
 +         
 +     //​Checa o estado da conexão. Se for WL_CONNECTED,​ então está conectado 
 +     while ((WiFi.status() != WL_CONNECTED) && (retries < MAX_WIFI_INIT_RETRY)) { 
 +          retries++;​ 
 +          delay(WIFI_RETRY_DELAY);​ 
 +          Serial.println("#"​);​ 
 +     } 
 + 
 +     //​Retorna o estado da conexão 
 +     ​return WiFi.status();​ 
 +
 + 
 +void setup() { 
 +     //​Configurando o monitor serial 
 +     ​Serial.begin(SERIAL_SPEED);​ 
 +     ​delay(100);​ 
 +      
 +     //A variável mqtt_status é pré-definida para ser falsa 
 +     ​mqtt_status = false; 
 +      
 +     //​Tenta se conectar ao WiFi até que realmente esteja conectado 
 +     ​while(WiFi.status() != WL_CONNECTED){ 
 +          Serial.println("​Nova tentativa de se conectar ao WiFi:"​);​ 
 +          delay(500);​ 
 +          if (WiFi_init(WIFI_SSID,​ WIFI_PASSWD) != WL_CONNECTED) { 
 +               ​Serial.println("​Erro ao se conectar ao WiFi...."​);​ 
 +          } 
 +          else { 
 +               //Se conectado, irá mostrar o IP da conexão 
 +               ​Serial.print("​Conexão WiFi ok com o IP "); 
 +               ​Serial.print(String(WiFi.localIP()[0]) + "​."​ + String(WiFi.localIP()[1]) + "​."​ +  
 +                              String(WiFi.localIP()[2]) + "​."​ + String(WiFi.localIP()[3]));​ 
 +               ​Serial.println("​...."​);​ 
 +                
 +               //A partir daqui, podemos nos conectar ao broker do MQTT 
 +               //mas sempre devemos checar se ainda há conexão com o WiFi 
 +               ​while(WiFi.status() == WL_CONNECTED && mqtt_status == false){ 
 +                    //​Inicialização da conexão ao broker do MQTT 
 +                    Serial.println("​Nova tentativa de se conectar ao broker do MQTT:"​);​ 
 +                    mqtt_status = MQTT_init();​ 
 +       
 +                    //"​mqtt_status = true" significa sucesso 
 +                    if (!mqtt_status) 
 +                         ​Serial.println("​Erro na conexão MQTT...."​);​ 
 +                    else 
 +                         ​Serial.println("​Conexão MQTT ok...."​);​ 
 +               } 
 +          } 
 + 
 +          delay(2000);​ 
 +     } 
 +
 + 
 +void loop() { 
 +     //​Aqui você faz seu código ​     
 +
 + 
 +</​file>​ 
 + 
 +Até agora, não trabalhamos com o protocolo [[MQTT|MQTT]] em Lua na ADA, mas você pode implementar [[https://​www.foobarflies.io/​a-simple-connected-object-with-nodemcu-and-mqtt/​|utilizando este tutorial]] ou [[https://​nodemcu.readthedocs.io/​en/​master/​en/​modules/​mqtt/​|acessando a documentação oficial]].
  
 ---- ----
Linha 191: Linha 354:
   * [[https://​makeradvisor.com/​esp32-vs-esp8266/​|Maker Advisor - ESP32 vs ESP8266]]   * [[https://​makeradvisor.com/​esp32-vs-esp8266/​|Maker Advisor - ESP32 vs ESP8266]]
   * [[https://​www.cnx-software.com/​2016/​03/​25/​esp8266-and-esp32-differences-in-one-single-table/​|CNXSOFT - ESP8266 and ESP32 differences in one single table]]   * [[https://​www.cnx-software.com/​2016/​03/​25/​esp8266-and-esp32-differences-in-one-single-table/​|CNXSOFT - ESP8266 and ESP32 differences in one single table]]
 +  * [[http://​www.robertprice.co.uk/​robblog/​nodemcu-wifi-setup/​|Robert Price - NodeMCU WiFi setup]]
esp.1546478151.txt.gz · Última modificação: 2019/01/02 23:15 por forfs