Advertisement
Guest User

AULACODIGO

a guest
Jun 30th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. /*
  2. * Author: Helder Rodrigues
  3. * MQTT connecion using PubSubClient library and Arduino Shield Ethernet
  4. */
  5.  
  6. #include <SPI.h>
  7. #include <Ethernet.h>
  8. #include <PubSubClient.h>
  9.  
  10. #define sensor_pin A0
  11.  
  12. //Servidor referente ao broker MQTT utilizado.
  13. const char *broker = "meioseletronicos.pad.lsi.usp.br";
  14.  
  15. //Declaracao da porta de conexao para o protocolo MQTT.
  16. int server_port = 1883;
  17.  
  18. //declaracao do usuario e senha para autenticacao no broker MQTT.
  19. const char *user = "aula_psi";
  20. const char *pass = "psi2016";
  21.  
  22. /*
  23. IMPORTANTE!
  24. O ID do cliente não pode repitir dentro do contexto (mesmo usuário) no broker
  25. Portanto é necessario que cada grupo coloque um ID distinto
  26. Por exemplo: arduino-grupoX, onde X é o numero dogrupo
  27. */
  28. const char *clientID = "Slife2.0";
  29.  
  30. //declaracao dos topicos exemplo para publicacao e inscricao
  31. const char *sub_topic = "/pad/intel-galileo/temperatura";
  32. const char *pub_topic = "/Slife2.0";
  33.  
  34. // definicao do MAC address do dispositivo. Os shields ethernet mais modernos possuem
  35. // endereço MAC escritos na placa de rede. Caso nao haja MAC definido, basta colocar
  36. // qualquer endereço que nao conflite com dispositivos da rede local.
  37. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  38.  
  39. // declaracao do IP estatico para o dispositivo
  40. IPAddress ip(172, 25, 10, 10); //172.25.10.11
  41.  
  42. // Define uma referencia para o socket de rede
  43. EthernetClient client_ethernet;
  44.  
  45. PubSubClient client_mqtt;
  46.  
  47.  
  48.  
  49. void callback (char* topic,byte* payload, unsigned int len){
  50.  
  51. Serial.println("Nova mensagem");
  52. for (int i = 0; i< len; i++){
  53. Serial.print((char)payload[i]);
  54. }
  55. Serial.println();
  56. }
  57.  
  58.  
  59. void setup() {
  60.  
  61. // Define o numero de tentativas para se conectar com o broker MQTT
  62. int attempts = 5;
  63. // Inicializa a comunicação serial do arduino (pinos TX e RX). Tem como parametro o baud rate
  64. Serial.begin(9600);
  65. Serial.println("Connecting with ethernet...");
  66. // inicializa a conexao ethernet
  67. if (Ethernet.begin(mac) == 0) {
  68. Serial.println("Failed to configure Ethernet using DHCP");
  69. // Caso haja falha na utilizacao do DHCP, efetua-se a conexao com IP estatico
  70. Ethernet.begin(mac, ip);
  71. }
  72.  
  73. Serial.print("The local IP address is: ");
  74.  
  75. //Obtem o endereço IP atual do dispositivo
  76. Serial.println(Ethernet.localIP());
  77.  
  78. delay(1000);
  79.  
  80. client_mqtt.setClient(client_ethernet);
  81.  
  82. client_mqtt.setServer(broker, 1883);
  83.  
  84. client_mqtt.setCallback(&callback);
  85.  
  86.  
  87. int i;
  88. //Executa um loop para efetuar a conexão com o broker MQTT
  89. //5 tentativas de conexão ocorrem, caso a conexão não ocorra
  90. //com sucesso uma mensagem indicando o código de erro será exibida.
  91. Serial.println("Trying to connect with broker...");
  92. for(i = 0; i < attempts;i++){
  93.  
  94. if(client_mqtt.connect(clientID, user,pass)){
  95. Serial.println("Conectado...");
  96. break;
  97. }
  98. else{
  99. Serial.println("Conexão falhou");
  100. }
  101. }
  102.  
  103. //Verifica se a placa foi realmente conectada, ou se as tentativas de conexão acabaram.
  104. if(!client_mqtt.connected() && i > attempts){
  105. Serial.println("Connection attempts failed");
  106. Serial.println("Try to reset your board, or verify the server authentication");
  107. while(1);
  108. }
  109.  
  110.  
  111. Serial.print("Subscribing in topic: ");
  112.  
  113. client_mqtt.subscribe(sub_topic, 1);
  114.  
  115. Serial.println();//quebra de linha
  116. }
  117.  
  118. void loop() {
  119.  
  120. //efetua a leitura do sensor analógico e atribui o resultado para uma variável inteira
  121. int temp = analogRead(sensor_pin);
  122.  
  123. char msg[80];
  124.  
  125. sprintf(msg, "{\"Luminosidade\":\"%d\"}", temp);
  126.  
  127. client_mqtt.publish("/Slife2.0",msg,false);
  128.  
  129. delay(500);
  130. //Mantém o sistema de gerenciamento de callback ativo
  131. client_mqtt.loop();
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement