Last active
May 21, 2017 17:04
-
-
Save valdiney/2bafd2893f81a861d7ec2b92059e0606 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> | |
#include <PubSubClient.h> | |
///////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// YOUR SESSION ID CONFIGURATION | |
#define ID_MQTT " " | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// SUBSCRIBE AND PUBLISH AREA | |
// LED1 | |
#define TOPIC_SUBSCRIBE_LED1 "" | |
// LED2 | |
#define TOPIC_SUBSCRIBE_LED2 "" | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// YOUR WIFI CONFIGURATION | |
const char* SSID = ""; | |
const char* PASSWORD = ""; | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// MQTT HOST AND MQTT PORT NUMBER | |
const char* BROKER_MQTT = "iot.eclipse.org"; | |
int BROKER_PORT = 1883; | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// VINCULATION OF THE WIFI CONNECTION TO THE MQTT OBJECT | |
WiFiClient espClient; | |
PubSubClient MQTT(espClient); | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// FUNCTION DECLARATION | |
void initSerial(); | |
void initWiFi(); | |
void initMQTT(); | |
void reconectWiFi(); | |
void mqtt_callback(char* topic, byte* payload, unsigned int length); | |
void VerifyMqttWifiConnection(void); | |
void InitOutput(void); | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
void setup() | |
{ | |
// CALL THE FUNCTIONS | |
InitOutput(); | |
initSerial(); | |
initWiFi(); | |
initMQTT(); | |
} | |
void initSerial() | |
{ | |
Serial.begin(115200); | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// CONNECTION WITH THE WIFI | |
void initWiFi() | |
{ | |
delay(10); | |
Serial.println("------Conexao WI-FI------"); | |
Serial.print("Conectando-se na rede: "); | |
Serial.println(SSID); | |
Serial.println("Aguarde"); | |
reconectWiFi(); | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// CONNECTION WITH THE MQTT | |
void initMQTT() | |
{ | |
MQTT.setServer(BROKER_MQTT, BROKER_PORT); | |
MQTT.setCallback(mqtt_callback); | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// KEPPING THE BROKER RECONNECTION | |
void reconnectMQTT() | |
{ | |
while ( ! MQTT.connected()) { | |
Serial.print("* Tentando se conectar ao Broker MQTT: "); | |
Serial.println(BROKER_MQTT); | |
if (MQTT.connect(ID_MQTT)) { | |
Serial.println("Conectado com sucesso ao broker MQTT!"); | |
Subscribe_sign(); | |
} else { | |
Serial.println("Falha ao reconectar no broker."); | |
Serial.println("Havera nova tentatica de conexao em 2s"); | |
delay(2000); | |
} | |
} | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// KEPPING THE WIFI RECONNECTION | |
void reconectWiFi() | |
{ | |
if (WiFi.status() == WL_CONNECTED) { | |
return; | |
} | |
WiFi.begin(SSID, PASSWORD); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(100); | |
Serial.print("."); | |
} | |
Serial.println(); | |
Serial.print("Conectado com sucesso na rede "); | |
Serial.print(SSID); | |
Serial.println("IP obtido: "); | |
Serial.println(WiFi.localIP()); | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// VERIFY THE MQTT AND WIFI CONNECTION | |
void VerifyMqttWifiConnection(void) | |
{ | |
if ( ! MQTT.connected()) { | |
reconnectMQTT(); | |
} | |
reconectWiFi(); | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// PIN CONFIGURATION | |
int led1 = 5; | |
int led2 = 4; | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// WILL BE CALLED WHEN SOME SUBSCRIBER INFORMATION COMES | |
void mqtt_callback(char* topic, byte* payload, unsigned int length) | |
{ | |
String msg; | |
////////////////////////////////////// | |
// GET THE PAYLOAD INFORMATION | |
for(int i = 0; i < length; i++) { | |
char c = (char)payload[i]; | |
msg += c; | |
} | |
//////////////////////////////////// | |
/////////////////// LED 1 ////////////////////////////////////// | |
if (msg.equals("L_24")) { | |
digitalWrite(led1, HIGH); | |
Serial.println("Led ligado"); | |
} | |
if (msg.equals("D_24")) { | |
digitalWrite(led1, LOW); | |
Serial.println("Led desligado"); | |
} | |
/////////////////// LED 2 ////////////////////////////////////// | |
if (msg.equals("L_52")) { | |
digitalWrite(led2, HIGH); | |
Serial.println("Led2 ligado"); | |
} | |
if (msg.equals("D_52")) { | |
digitalWrite(led2, LOW); | |
Serial.println("Led2 desligado"); | |
} | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// SUBSCRIBE TO THEIR TOPICS | |
void Subscribe_sign(void) | |
{ | |
MQTT.subscribe(TOPIC_SUBSCRIBE_LED1); | |
MQTT.subscribe(TOPIC_SUBSCRIBE_LED2); | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
// INITIALIZE YOUR OUTPUT | |
void InitOutput(void) | |
{ | |
pinMode(led1, OUTPUT); | |
digitalWrite(led1, LOW); | |
pinMode(led2, OUTPUT); | |
digitalWrite(led2, LOW); | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
void loop() | |
{ | |
VerifyMqttWifiConnection(); | |
// THE MQTT KEEP ALIVE | |
MQTT.loop(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment