Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.12 KB | None | 0 0
  1. /*
  2. Equivalencia das saidas Digitais entre NodeMCU e ESP8266 (na IDE do Arduino)
  3. NodeMCU - ESP8266
  4. D0 = 16;
  5. D1 = 5;
  6. D2 = 4;
  7. D3 = 0;
  8. D4 = 2;
  9. D5 = 14;
  10. D6 = 12;
  11. D7 = 13;
  12. D8 = 15;
  13. D9 = 3;
  14. D10 = 1;
  15. */
  16.  
  17. #include <FS.h> //Esta precisa ser a primeira referência, ou nada dará certo e sua vida será arruinada. kkk
  18. #include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
  19. #include <DNSServer.h>
  20. #include <ESP8266WebServer.h>
  21. #include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
  22. #include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson
  23. #include <PubSubClient.h>
  24. #include <Servo.h>
  25.  
  26. char strMacAddress[18];
  27.  
  28. #define DEBUG //Se descomentar esta linha vai habilitar a 'impressão' na porta serial
  29.  
  30. //Coloque os valores padrões aqui, porém na interface eles poderão ser substituídos.
  31. #define servidor_mqtt "m16.cloudmqtt.com" //URL do servidor MQTT
  32. #define servidor_mqtt_porta "17236" //Porta do servidor (a mesma deve ser informada na variável abaixo)
  33. #define servidor_mqtt_usuario "dudeznvi" //Usuário
  34. #define servidor_mqtt_senha "fhY4VcbP7Nx5" //Senha
  35. //#define mqtt_topico_pub "esp8266/pincmd" //Tópico para publicar o comando de inverter o pino do outro ESP8266
  36. char* mqtt_topico_pub = strMacAddress;//+"/alimentar";
  37.  
  38. WiFiClient espClient; //Instância do WiFiClient
  39. PubSubClient client(espClient); //Passando a instância do WiFiClient para a instância do PubSubClient
  40.  
  41. //bool statusAnt = 0; //Variável que armazenará o status anterior do pino
  42. bool precisaSalvar = false; //Flag para salvar os dados
  43.  
  44. Servo servo;
  45.  
  46.  
  47.  
  48. //Função para imprimir na porta serial
  49. void imprimirSerial(bool linha, String mensagem){
  50. #ifdef DEBUG
  51. if(linha){
  52. Serial.println(mensagem);
  53. }else{
  54. Serial.print(mensagem);
  55. }
  56. #endif
  57. }
  58.  
  59. //Função que reconecta ao servidor MQTT
  60. void reconectar() {
  61. //Repete até conectar
  62. while (!client.connected()) {
  63. imprimirSerial(false, "Tentando conectar ao servidor MQTT...");
  64.  
  65. //Tentativa de conectar. Se o MQTT precisa de autenticação, será chamada a função com autenticação, caso contrário, chama a sem autenticação.
  66. bool conectado = strlen(servidor_mqtt_usuario) > 0 ?
  67. client.connect("ESP8266Client", servidor_mqtt_usuario, servidor_mqtt_senha) :
  68. client.connect("ESP8266Client");
  69.  
  70. if(conectado) {
  71. imprimirSerial(true, "Conectado!");
  72. } else {
  73. imprimirSerial(false, "Falhou ao tentar conectar. Codigo: ");
  74. imprimirSerial(false, String(client.state()).c_str());
  75. imprimirSerial(true, " tentando novamente em 5 segundos");
  76. //Aguarda 5 segundos para tentar novamente
  77. delay(5000);
  78. }
  79. }
  80. }
  81.  
  82. void desconectar(){
  83. imprimirSerial(true, "Fechando a conexao com o servidor MQTT...");
  84. client.disconnect();
  85. }
  86.  
  87. //Função que envia os dados de umidade e temperatura.
  88. void recebeComando() {
  89. if (!client.connected()) {
  90. imprimirSerial(true, "MQTT desconectado! Tentando reconectar...");
  91. reconectar();
  92. }
  93.  
  94. client.loop();
  95.  
  96. //Publicando no MQTT
  97. imprimirSerial(true, "Fazendo a subscribe...");
  98. client.subscribe(mqtt_topico_pub);
  99. //Serial.println()
  100. }
  101.  
  102.  
  103. //Função inicial (será executado SOMENTE quando ligar o ESP)
  104. void setup() {
  105. #ifdef DEBUG
  106. Serial.begin(115200);
  107. #endif
  108. imprimirSerial(true, "...");
  109. byte mac[6];
  110. WiFi.macAddress(mac);
  111. MacAddress2Str(mac);
  112. WiFiManagerParameter paramMacAddress("macAddress", "MAC Address", strMacAddress, 18);
  113. servo.attach(5);
  114. servo.write(0);
  115.  
  116. //Inicialização do WiFiManager. Uma vez iniciado não é necessário mantê-lo em memória.
  117. WiFiManager wifiManager;
  118.  
  119.  
  120. wifiManager.addParameter(&paramMacAddress);
  121. wifiManager.startConfigPortal("AlimentaCao");
  122.  
  123.  
  124. //Se chegou até aqui é porque conectou na WiFi!
  125. imprimirSerial(true, "Conectado!! :)");
  126.  
  127. imprimirSerial(false, "IP: ");
  128. imprimirSerial(true, WiFi.localIP().toString());
  129.  
  130. //Informando ao client do PubSub a url do servidor e a porta.
  131. int portaInt = atoi(servidor_mqtt_porta);
  132. client.setServer(servidor_mqtt, portaInt);
  133. client.setCallback(recebePacote);
  134. }
  135.  
  136. //Função de repetição (será executado INFINITAMENTE até o ESP ser desligado)
  137. long lastMsg = 0;
  138. void loop() {
  139.  
  140. long now = millis();
  141. if (now - lastMsg > 500) {
  142. lastMsg = now;
  143. recebeComando();
  144. }
  145.  
  146. }
  147. void *MacAddress2Str(byte *_mac)
  148. {
  149. sprintf(strMacAddress, "%02x:%02x:%02x:%02x:%02x:%02x",
  150. _mac[0], _mac[1], _mac[2], _mac[3], _mac[4], _mac[5]);
  151. }
  152.  
  153. void recebePacote(char* topic, byte* payload, unsigned int length)
  154. {
  155. String msg;
  156.  
  157. //obtem a string do payload recebido
  158. for(int i = 0; i < length; i++)
  159. {
  160. char c = (char)payload[i];
  161. msg += c;
  162. }
  163. Serial.println("Subscribe recebido: "+msg);
  164. distribuiRacao(msg.toInt());
  165. }
  166.  
  167. void distribuiRacao(int tempo){
  168. servo.write(90);
  169. delay(tempo);
  170. servo.write(0);
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement