Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Envio de dados de sensor PIR via MQTT
- Hardware Utilizado: Nodemcu v1.0, sensor de presença PIR
- Autor: Yhan Christian Souza Silva | Lucas de Barros Teixeira
- data criação: 01/12/2018
- data atualização: 04/12/2018
- const char *ssid = "2.4G_COTONETES";
- const char *password = "31012015anapaulalucas";
- const char* cloudMQTTServer = "m15.cloudmqtt.com";
- const char* cloudMQTTUser = "atatjgwy";
- const char* cloudMQTTPassword = "jtYMEoDzlXPs";
- const char* PIRTopic = "pir";
- const int cloudMQTTPort = 11158;
- Acesso ao eclipse
- MQTT: iot.eclipse.org:1883
- topic: smartworkingroom
- */
- // -- Bibliotecas Auxiliares --
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- // -- Hardware -- Sensor Presença
- #define sensorPIR D4
- // -- Definições de Rede e conexão MQTT / Tópico a ser publicado --
- // -- Utilizando o hivemq como broker
- // -- Não é preciso senha e usuário para o acesso
- const char *ssid = "2.4G_COTONETES";
- const char *password = "31012015anapaulalucas";
- const char* cloudMQTTServer = "broker.mqttdashboard.com";
- const char* cloudMQTTUser = "";
- const char* cloudMQTTPassword = "";
- const char* PIRTopic = "testeMRobot2";
- const int cloudMQTTPort = 1883;
- // -- Instância objetos --
- WiFiClient myClient;
- PubSubClient client(myClient);
- // -- Variáveis e constantes --
- // -- 60 seg. para calibragem do sensor
- // -- 10 seg. de intervalo para o sensor pir
- long lastMillis;
- const long interval = 3000;
- const int calibratePIR = 60;
- // -- Protótipo de funções auxiliares --
- void connectToWiFi();
- void connectToBrokerMQTT();
- void reconnectToBrokerMQTT();
- void sendSensorData();
- // -- Setup --
- void setup() {
- Serial.begin(115200);
- pinMode(sensorPIR, INPUT);
- for (uint8_t i = 0; i < calibratePIR; i++) {
- Serial.print(".");
- delay(1000);
- }
- connectToWiFi();
- connectToBrokerMQTT();
- }
- void loop() {
- if (!client.connected()) reconnectToBrokerMQTT();
- if (millis() - lastMillis >= interval) {
- sendSensorData();
- lastMillis = millis();
- }
- client.loop();
- }
- // -- Funções auxiliares --
- // -- Fornece as credenciais e conecta a rede --
- void connectToWiFi() {
- Serial.println("Conectando a rede: ");
- Serial.println(ssid);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("Conectado!");
- Serial.print("IP: ");
- Serial.println(WiFi.localIP());
- delay(1000);
- }
- // -- Realiza a primeira conexão ao Broker --
- void connectToBrokerMQTT() {
- client.setServer(cloudMQTTServer, cloudMQTTPort);
- while (!client.connected()) {
- Serial.println("Conectando ao broker MQTT");
- if (client.connect("NodeMCU Client", cloudMQTTUser, cloudMQTTPassword)) Serial.println("Conectado com sucesso!");
- else {
- Serial.print("Falha estado: ");
- Serial.println(client.state());
- delay(3000);
- }
- }
- }
- // -- Reconecta ao Broker e verifica mensagens de erro --
- void reconnectToBrokerMQTT() {
- while (!client.connected()) {
- Serial.println("Tentando conexão ao broker MQTT");
- boolean connectedToBroker = strlen(cloudMQTTUser) > 0 ?
- client.connect("NodeMCU Client", cloudMQTTUser, cloudMQTTPassword) :
- client.connect("NodeMCU Client");
- if (connectedToBroker) Serial.println("Conectado com sucesso!");
- else {
- Serial.println("Falha durante a conexão erro#code: ");
- Serial.println(String(client.state()).c_str());
- Serial.println("Tentando conexão novamente em 15s");
- delay(15000);
- }
- }
- }
- // -- Envio dos dados do sensor
- // -- "1" quando houver presença detectada
- // -- "0" quando não houver presença
- void sendSensorData() {
- char msgMQTTPIR[2];
- boolean PIRState;
- PIRState = digitalRead(sensorPIR);
- Serial.print("Leitura PIR: ");
- Serial.println(PIRState);
- Serial.print("O estado do sensor pir eh: ");
- Serial.println(PIRState);
- dtostrf(PIRState, 2, 0, msgMQTTPIR);
- client.publish(PIRTopic, msgMQTTPIR);
- }
Add Comment
Please, Sign In to add comment