Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
esp [2019/01/03 01:40] forfs [MQTT] |
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 89: | Linha 102: | ||
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 154: | 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 184: | Linha 197: | ||
end | end | ||
end) | end) | ||
- | </code> | + | </file> |
====MQTT==== | ====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 em C++ em que o ESP se subscreve em um tópico, fazendo o papel de //subscriber//, e logo em seguida publica uma mensagem em outro tópico, fazendo o papel de //publisher//. | + | 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 199: | 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]] |