Advertisement
Guest User

Untitled

a guest
Aug 1st, 2015
7,140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.33 KB | None | 0 0
  1. #include <SoftwareSerial.h>
  2. #include <OneWire.h>
  3. #include <DallasTemperature.h>
  4. #include <Wire.h>  
  5.  
  6. #define DEBUG true
  7.  
  8.  
  9. //Cria o objeto para usar a biblioteca Sotfware Serial
  10. //RX do arduino é o pino 2
  11. //TX do arduino é o pino 3
  12. //O TX do esp8266 deve ser ligado no pino 2 do arduino
  13. //O RX do esp8266 deve ser ligado no pino 3 do arduino
  14.  
  15. SoftwareSerial esp8266(2,3);
  16.  
  17. //Define o Pino do sensor ds18b20
  18. #define ONE_WIRE_BUS 7
  19.  
  20. //Cria o objeito para a biblioteca do sensor ds18b20
  21. OneWire oneWire(ONE_WIRE_BUS);
  22. //ria o objeito para a biblioteca do sensor Dallas
  23. DallasTemperature sensors(&oneWire);
  24.  
  25. //Variaveis de controle de iluminosidade e temperatura
  26. double leituraSensor=0;
  27. String valorSensorSTR="";
  28.  
  29.  //Pino analógico em que o sensor está conectado o LDR.
  30. int sensor = 0;    
  31. //Variaveis usada para ler o valor do sensor em tempo real.
  32. int valorSensor = 0;
  33. String valorLDRSTR ="";
  34.  
  35. void setup()
  36. {
  37.   //um pequeno delay no arduino
  38.   //para evitar que envie comandos antes do esp8266 dar o start
  39.   delay(500);
  40.   //Seta ambas seriais para a velocidade de 9600
  41.   Serial.begin(9600);
  42.   //(em alguns casos a velocidade do seu esp8266 pode estar diferente desta)
  43.   esp8266.begin(9600);
  44.  
  45.  
  46.   //Envia o comandos AT
  47.  
  48.   // reseta o modulo
  49.   sendData("AT+RST\r\n",2000,DEBUG);
  50.   // configure as access point e estação (ambos)
  51.   sendData("AT+CWMODE=3\r\n",1000,DEBUG);
  52.   //conecta ao roteador com a senha  
  53.   //(esta configuração deve ser feita, pois o seu roteador tem nome diferente do meu e senha)
  54.   sendData("AT+CWJAP=\"SEUROTEADOR\",\"SUASENHA\"r\n",10000,DEBUG);
  55.   //Retorna o IP ao qual está conectado e o IP de Station
  56.   sendData("AT+CIFSR\r\n",1000,DEBUG);
  57.   //Habilita multiplas conexões
  58.   sendData("AT+CIPMUX=1\r\n",1000,DEBUG);
  59.   //Habilita ao servidor a porta 80
  60.   sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG);
  61. }
  62.  
  63. void loop()
  64. {
  65.   //Limpa as variaveis para receber os dados (temperatura e iluminosidade)
  66.   valorSensorSTR ="";
  67.   valorLDRSTR ="";
  68.  
  69.   //inicia a leitura do sensor de temperatura
  70.   sensors.requestTemperatures();
  71.   //grava na variavel leitura sensor
  72.   leituraSensor =sensors.getTempCByIndex(0);
  73.  
  74.   //verifica se o esp8266 esta enviando mensagem e esta disponivel
  75.   if(esp8266.available())
  76.   {
  77.  
  78.    
  79.     if(esp8266.find("+IPD,"))
  80.     {
  81.  
  82.     //Converte o valor de temperatura em String para exibir na pagina web  
  83.     valorSensorSTR+=String(int(leituraSensor))+ "."+String(getDecimal(leituraSensor)); //combining both whole and decimal part in string with a fullstop between them
  84.     Serial.println("Arduino Temperatura : "+valorSensorSTR);              //display string value
  85.    
  86.    
  87.     //Lendo o valor do sensor LDR.
  88.     int valorSensor = analogRead(sensor);
  89.     //Convere o valor e string para exibir na pagina web
  90.     valorLDRSTR = String(valorSensor);
  91.      
  92.  
  93.     // subtrai 48, por que o metodo read() retorna os valores ASCII, o primeiro numero decimal começa em 48
  94.      int connectionId = esp8266.read()-48;
  95.      
  96.      //Inicia a montagem da pagina web
  97.      //criando a variavel webpage e armazenando os dados nela
  98.      String webpage = "<head><meta http-equiv=""refresh"" content=""5""></head>";
  99.      webpage+="<h1>Ola Mundo</h1><h2> Esp8266</h2></br><h3>Temperatura : ";
  100.      //Envia o valor lido do sensor de temperatura
  101.      webpage+= valorSensorSTR;
  102.      webpage+=" </br> Iluminosidade : ";
  103.        //Envia o valor lido do sensor de ldr
  104.       webpage+=valorLDRSTR + " </h3>";
  105.      
  106.      //cria uma variavel para enviar o comando até
  107.      //que enviará as informações para o modulo esp8266
  108.      String cipSend = "AT+CIPSEND=";
  109.      
  110.      
  111.      cipSend += connectionId;
  112.      cipSend += ",";
  113.      cipSend +=webpage.length();
  114.      cipSend +="\r\n";
  115.      
  116.      //Envia os comandos para o modulo
  117.      sendData(cipSend,1000,DEBUG);
  118.      sendData(webpage,1000,DEBUG);
  119.      
  120.      //Encerra os comandos
  121.      String closeCommand = "AT+CIPCLOSE=";
  122.      closeCommand+=connectionId;
  123.      closeCommand+="\r\n";
  124.      
  125.      //Envia os comandos de encerramento
  126.      sendData(closeCommand,2000,DEBUG);
  127.      
  128.      delay(5000);
  129.     }
  130.   }
  131. }
  132.  
  133.  
  134.  //Metodo que envia os comandos para o esp8266
  135. String sendData(String command, const int timeout, boolean debug)
  136. {
  137.     //variavel de resposta do esp8266
  138.     String response = "";
  139.    
  140.     // send a leitura dos caracteres para o esp8266
  141.     esp8266.println(command);
  142.    
  143.     long int time = millis();
  144.    
  145.     while( (time+timeout) > millis())
  146.     {
  147.       while(esp8266.available())
  148.       {
  149.        
  150.  
  151.         //Concatena caracter por caractere recebido do modulo esp8266
  152.         char c = esp8266.read();
  153.         response+=c;
  154.       }  
  155.     }
  156.    
  157.     //debug de resposta do esp8266
  158.     if(debug)
  159.     {
  160.       //Imprime o que o esp8266 enviou para o arduino
  161.       Serial.println("Arduino : " + response);
  162.     }
  163.    
  164.     return response;
  165. }
  166.  
  167.  
  168.  
  169. //Metodo que converte float em string
  170. long getDecimal(float val)
  171. {
  172.   //converte o float para inteiro
  173.   int intPart = int(val);
  174.  
  175.   //multiplica por 100
  176.   //precisão de 2 casas decimais
  177.   long decPart = 100*(val-intPart);
  178.  
  179.   //Se o valor for maior que 0 retorna
  180.   if(decPart>0)
  181.   //retorna a variavel decPart
  182.   return(decPart);          
  183.  
  184.   //caso contrario retorna o valor 0
  185.   else if(decPart=0)
  186.      return(00);          
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement