Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- #include <BlynkSimpleEsp8266.h>
- #include <WiFiClientSecure.h>
- #include <SPI.h>
- #include <MFRC522.h>
- #define BLYNK_PRINT Serial
- #define D0 16
- #define D1 5
- #define D2 4
- #define D3 0
- #define D4 2
- #define D5 14
- #define D6 12
- #define D7 13
- #define D8 15
- #define D9 3
- #define D10 1
- WiFiClient client;
- int libera = 0;
- /*
- //Wifi Arruda
- char ssid[] = "brisa-484946";
- char pass[] = "hlr046f3";
- */
- //Wifi 4x
- char ssid[] = "Redmi";
- char pass[] = "12345678";
- /*
- //wifi Rhuan
- char ssid[] = "brisa-485118";
- char pass[] = "nhih5zei";
- */
- /*
- //WiFi Willian
- char ssid[] = "brisa-136570";
- char pass[] = "dufnz7tf";
- */
- MFRC522 mfrc522(D4, D3); // Create MFRC522 instance.
- int statuss = 0;
- int out = 0;
- //============== cloudmqtt ===================//
- PubSubClient psClient(client);
- const char* mqttServer = "m14.cloudmqtt.com"; // endereço do seu servidor cloudmqtt
- const int mqttPort = 13622; // porta cloudmqtt
- const char* mqttUser = "bdsmhayc"; //nome de usuario cloudmqtt
- const char* mqttPassword = "lj5yHr1o6v6v"; // senha cloudmqtt
- void callback(char* topic, byte* payload, unsigned int length); //prototipo da funcao para ser chamada dentro do setup() o corpo da funcao esta mais embaixo
- //============= pushbullet ===============//
- const char* host = "api.pushbullet.com";
- const int httpsPort = 443;
- //const char* PushBulletAPIKEY = "o.iZSbVRUcs2WAvQTuWQfTBDdM9uBlNdKR"; //Chave do Rhuan
- const char* PushBulletAPIKEY = "o.AuIPPIgHEu8eoIYfzgZZRCe9XmtrRyic";
- //========= ThingSpeak ==========//
- const char* TS_SERVER = "api.thingspeak.com";
- //String TS_API_KEY ="7G5M4S0FUZF9S0OC"; //Rhuan
- String TS_API_KEY = "OTAXWFEUKPYACY0X"; //Willian
- //================ Blynk ==================//
- char auth[] = "227a5ae01f044e5086b34214067c90d5"; //Auth Token Bylink Willian
- //char auth[] = "dcd3b6114e61432b840ab702702a72d2"; //Auth Token Blynk Rhuan
- BLYNK_CONNECTED() {
- Blynk.syncAll();
- }
- int but0, but1, but2, but3; // Variaveis que recebem os valores dos BOTOES VIRTUAIS do Blynk para pausar os sensores
- int sensorPin = A0;
- int sensor1 = D1;
- int sensor2 = D2;
- int sensor3 = D8;
- int sensorValue1 = 0; //potenciomentro
- int sensorValue2 = 0; //temperatura
- int sensorValue3 = 0; //luminosidade
- BLYNK_WRITE(V0) { //Esse botão vai bloquear o sensoriamento
- but0 = param.asInt(); //but0 recebendo o valor da Porta Virtual 0
- }
- BLYNK_WRITE(V1) {
- but1 = param.asInt(); //but1 recebendo o valor da Porta Virtual 1
- }
- BLYNK_WRITE(V2) {
- but2 = param.asInt(); //but2 recebendo o valor da Porta Virtual 2
- }
- BLYNK_WRITE(V3) {
- but3 = param.asInt(); //but2 recebendo o valor da Porta Virtual 3
- }
- BlynkTimer timer;
- void setup()
- {
- //Blynk.virtualWrite(V0, 1);
- pinMode(sensor1, OUTPUT);
- pinMode(sensor2, OUTPUT);
- pinMode(sensor3, OUTPUT);
- Serial.begin(115200);
- Blynk.begin(auth, ssid, pass);
- Serial.println();
- Serial.print("connecting to ");
- Serial.println(ssid);
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, pass);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("WiFi connected");
- //Serial.print("IP address: "); Serial.println(WiFi.localIP());
- //Serial.print("MAC: "); Serial.println(WiFi.macAddress());
- //Serial.print("Gateway:"); Serial.println(WiFi.gatewayIP());
- //Serial.print("AP MAC:"); Serial.println(WiFi.BSSIDstr());
- notificar("Programa Iniciou");
- psClient.setServer(mqttServer, mqttPort);
- psClient.setCallback(callback);
- while (!psClient.connected()) {
- Serial.println("Connecting to MQTT...");
- if (psClient.connect("ESP8266Client", mqttUser, mqttPassword )) {
- Serial.println("connected to MQTT");
- } else {
- Serial.print("failed with state ");
- Serial.print(psClient.state());
- delay(500);
- }
- }
- psClient.publish("liga", "desliga");
- psClient.subscribe("SENSOR");
- Serial.println("----------------------------------------");
- Serial.println();
- }
- //FUNLÃO QUE ENVIA A NOTIFICAÇÃO PARA O PUSHBULLET
- void notificar(String message) {
- // Use WiFiClientSecure class to create TLS connection
- WiFiClientSecure client;
- Serial.print("connecting to ");
- Serial.println(host);
- if (!client.connect(host, httpsPort)) {
- Serial.println("connection failed");
- return;
- }
- String url = "/v2/pushes";
- String messagebody = "{\"type\": \"note\", \"title\": \"Trabalho IoT\", \"body\": \""+message+"\"}\r\n";
- //messagebody += String(message);
- //messagebody += "\"}\r\n";
- client.print(String("POST ") + url + " HTTP/1.1\r\n" +
- "Host: " + host + "\r\n" +
- "Authorization: Bearer " + PushBulletAPIKEY + "\r\n" +
- "Content-Type: application/json\r\n" +
- "Content-Length: " +
- String(messagebody.length()) + "\r\n\r\n");
- client.print(messagebody);
- Serial.println("Requisicao enviada, verifique o celular");
- }
- void lerDados() {
- if (but0 != 0) {
- libera = 0; //Se o botao 0 for apertado libera recebe 0 e a funcao liberaRFI() eh chamada, consequentemente o sensoriamente eh bloaqueado
- Blynk.virtualWrite(V0, 1);
- }
- if (libera == 0) {
- Blynk.virtualWrite(V0, 1);
- but0 = 1;
- } else if (libera == 1) {
- Blynk.virtualWrite(V0, 0);
- but0 = 0;
- }
- delay(100);
- if (but1 != 0) { // Lê os valores do sensor 1 se o Botão Virtual 1 no Blynk estiver ativo
- digitalWrite(sensor1, HIGH); //passa corrente para o sensor 1
- sensorValue1 = analogRead(sensorPin);
- Serial.print("Temperatura: ");
- Serial.println(sensorValue1);
- digitalWrite(sensor1, LOW); //Desliga a corrente do sensor 1 para começar a passar para o proximo sensor
- } else { //Se o botão não estiver ativo a variavel do valor lido recebe zero o sensor eh pausado
- sensorValue1 = 0;
- Serial.println("Temperatura: Pausado");
- digitalWrite(sensor1, LOW); //Se o botao no Blynk estiver desligado nao eh passada corrente para o sensor
- }
- delay(100);
- if (but2 != 0) { // Lê os valores do sensor 2 se o Botão Virtual 2 no Blynk estiver ativo
- digitalWrite(sensor2, HIGH);
- sensorValue2 = analogRead(sensorPin);
- Serial.print("Potenciômetro: ");
- Serial.println(sensorValue2);
- digitalWrite(sensor2, LOW);
- } else { //Se o botão não estiver ativo a variavel do valor lido recebe zero o sensor eh pausado
- sensorValue2 = 0;
- digitalWrite(sensor2, LOW);
- Serial.println("Potenciômetro: Pausado");
- }
- delay(100);
- if (but3 != 0) { //Lê os valores do sensor 3 se o Botão Virtual 3 no Blynk estiver ativo
- digitalWrite(sensor3, HIGH);
- sensorValue3 = analogRead(sensorPin);
- Serial.print("Luminosidade: ");
- Serial.println(sensorValue3);
- digitalWrite(sensor3, LOW);
- } else { //Se o botão não estiver ativo a variavel do valor lido recebe zero o sensor eh pausado
- sensorValue3 = 0;
- Serial.println("Luminosidade: Pausado");
- digitalWrite(sensor3, LOW);
- }
- delay(500);
- }
- //float temp = sensorValue1;
- //float potenciometro = sensorValue2;
- //float luminosidade = sensorValue3;
- //FUNÇÃO QUE ENVIA OS DADOS PARA O APLICATIVO BLYNK
- void enviaBlynk() {
- //Os botoes virtuais do Blynk estao utilizando as portas viruais 1, 2 e 3.
- //Para o valores do grafico que eh exibido no proprio aplicativo foram utilizadas as portas viruais 4, 5 e 6
- Blynk.virtualWrite(V4, sensorValue1); //Envia os dados do sensor 1 para a porta Vitual 4
- Blynk.virtualWrite(V5, sensorValue2); //Envia os dados do sensor 1 para a porta Vitual 5
- Blynk.virtualWrite(V6, sensorValue3); //Envia os dados do sensor 1 para a porta Vitual 6
- }
- //FUNÇÃO QUE ENVIA OS VALORES PARA O THINGSPEAK
- //Funcao tirada das aulas praticas da disciplina de IoT
- void enviaThingSpeak(int sensorValue1, int sensorValue2, int sensorValue3)
- {
- WiFiClient client;
- if (client.connect(TS_SERVER, 80)) { // use ip 184.106.153.149 or api.thingspeak.com
- Serial.println("WiFi Client connected ");
- String postStr = TS_API_KEY;
- postStr += "&field1=";
- postStr += String(sensorValue1);
- postStr += "&field2=";
- postStr += String(sensorValue2);
- postStr += "&field3=";
- postStr += String(sensorValue3);
- postStr += "\r\n\r\n";
- client.print("POST /update HTTP/1.1\n");
- client.print("Host: api.thingspeak.com\n");
- client.print("Connection: close\n");
- client.print("X-THINGSPEAKAPIKEY: " + TS_API_KEY + "\n");
- client.print("Content-Type: application/x-www-form-urlencoded\n");
- client.print("Content-Length: ");
- client.print(postStr.length());
- client.print("\n\n");
- client.print(postStr);
- }//end if
- client.stop();
- delay(500);
- }
- //FUNCAO QUE DESLIGA OU LIGA OS SENSORES DE ACORDO COM A MENSAGEM RECEBIDA DO CLOUDMQTT
- void callback(char* topic, byte* payload, unsigned int length) {
- Serial.print("Mensagem recebida no topico: ");
- Serial.println(topic);
- Serial.print("Mensagem:");
- for (int i = 0; i < length; i++) {
- Serial.print((char)payload[i]);
- String msg;
- //obtem a string do payload recebido
- for (int i = 0; i < length; i++)
- {
- char c = (char)payload[i];
- msg += c;
- }
- Serial.println();
- //verifica se deve colocar nivel alto de tensão na saída se enviar L e digito, ou nivel baixo se enviar D e digito no topíco SENSOR
- if (msg.equals("L1"))
- {
- Blynk.virtualWrite(V1, 1); //liga o Botao Virtual 1 do Blynk
- but1 = 1; //Ativa o sensor 1 na funcao lerDados()
- notificar("Sensor 1 ligado pelo CloudMQTT");
- }
- if (msg.equals("D1"))
- {
- but1 = 0; //Pausa o sensor na funcao lerDados()
- Blynk.virtualWrite(V1, 0); //desliga o Botao Virtual 1 do Blynk
- notificar("Sensor 1 desligado pelo CloudMQTT");
- }
- if (msg.equals("L2"))
- {
- but2 = 1; //Ativa o sensor 2 na funcao lerDados()
- Blynk.virtualWrite(V2, 1); //liga o Botao Virtual 2 do Blynk
- notificar("Sensor 2 ligado pelo CloudMQTT");
- }
- if (msg.equals("D2"))
- {
- but2 = 0; //Pausa o sensor 2 na funcao lerDados()
- Blynk.virtualWrite(V2, 0); //desliga o Botao Virtual 2 do Blynk
- notificar("Sensor 2 desligado pelo CloudMQTT");
- }
- if (msg.equals("L3"))
- {
- but3 = 1; //Ativa o sensor 3 na funcao lerDados()
- Blynk.virtualWrite(V3, 1); //liga o Botao Virtual 3 do Blynk
- notificar("Sensor 3 ligado pelo CloudMQTT");
- }
- if (msg.equals("D3"))
- {
- but3 = 0; //Pausa o sensor 3 na funcao lerDados()
- Blynk.virtualWrite(V3, 0); //desliga o Botao Virtual 3 do Blynk
- notificar("Sensor 3 desligado pelo CloudMQTT");
- }
- // Liga todos os sensores se enviar LT no topico SENSOR
- if (msg.equals("LT"))
- {
- //Ativa todos os sensores na funcao lerDados()
- but1 = 1;
- but2 = 1;
- but3 = 1;
- //liga todos Botos Virtuais do Blynk
- Blynk.virtualWrite(V1, 1);
- Blynk.virtualWrite(V2, 1);
- Blynk.virtualWrite(V3, 1);
- notificar("Todos os sensores foram ligados pelo CloudMQTT");
- }
- // Desliga todos os sensores se enviar DT com o topico SENSOR
- if (msg.equals("DT"))
- {
- //Pausa todos os sensores na funcao lerDados
- but1 = 0;
- but2 = 0;
- but3 = 0;
- //Desliga todos os botoes Virtuais do Blynk
- Blynk.virtualWrite(V1, 0);
- Blynk.virtualWrite(V2, 0);
- Blynk.virtualWrite(V3, 0);
- notificar("Todos os sensores foram desligados pelo CloudMQTT");
- }
- //Bloqueia o sensores com o RFID
- if (msg.equals("B"))
- {
- notificar("Os sensores foram bloqueados pelo CloudMQTT! Aproxime o Cartão RFID para desbloquear!!!");
- libera = 0;
- Blynk.virtualWrite(V0, 1);
- but0 = 1;
- }
- }
- delay(500);
- Serial.println();
- Serial.println("=================");
- }
- //======= FUNCAO PARA DESBLOQUAR O SENSORIAMENTO PELO RFID ===========//
- //Adaptada do site: http://www.instructables.com/id/MFRC522-RFID-Reader-Interfaced-With-NodeMCU/
- void liberaRFID() {
- //Enquanto estiver bloqueado o botao Virtual 0 permanecerá ligado
- if (libera == 0) {
- Blynk.virtualWrite(V0, 1);
- but0 = 0;
- }
- SPI.begin(); // Initiate SPI bus
- mfrc522.PCD_Init(); // Initiate MFRC522
- // Procura por cartoes
- if ( ! mfrc522.PICC_IsNewCardPresent())
- {
- return;
- }
- // Seleciona apenas um dos cartoes, caso haja mais de um
- if ( ! mfrc522.PICC_ReadCardSerial())
- {
- return;
- }
- Serial.println();
- Serial.print("UID tag : ");
- String content = "";
- byte letter;
- for (byte i = 0; i < mfrc522.uid.size; i++) {
- Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
- Serial.print(mfrc522.uid.uidByte[i], HEX);
- content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
- content.concat(String(mfrc522.uid.uidByte[i], HEX));
- }
- content.toUpperCase();
- Serial.println();
- if (content.substring(1) == "3E 52 B4 79") //change UID of the card that you want to give access
- {
- Serial.println("Acesso Liberado!!! ");
- Serial.println("Bem vindo!");
- libera = 1;
- Blynk.virtualWrite(V0, 0); //Quando for desbloqueado o botao virtual 0 sera desligado
- but0 == 0;
- Serial.println();
- notificar("Sensores desbloqueados");
- //statuss = 1;
- } else {
- Serial.println("Acesso Negado!!! ");
- Serial.println("Tente Novamente!!! ");
- Blynk.virtualWrite(V0, 1);
- but0 == 1;
- libera = 0;
- delay(500);
- }
- }
- void loop()
- {
- liberaRFID();
- while (libera != 0) {
- Blynk.run();
- psClient.loop();
- lerDados();
- //Enviamos os dados lidos para o Blynk
- timer.setInterval(1000L, enviaBlynk);
- //Serial.println("Dados enviados para o Thingspeak");
- //Enviamos os dados lidos para o ThingSpeak
- enviaThingSpeak(sensorValue1, sensorValue2, sensorValue3);
- //Serial.println("Dados enviados para o Thingspeak");
- //timer.run();
- Serial.println("----------------------------------------");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement