Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Author: Helder Rodrigues
- * MQTT connecion using PubSubClient library and Arduino Shield Ethernet
- */
- #include <SPI.h>
- #include <Ethernet.h>
- #include <PubSubClient.h>
- #define sensor_pin A0
- //Servidor referente ao broker MQTT utilizado.
- const char *broker = "meioseletronicos.pad.lsi.usp.br";
- //Declaracao da porta de conexao para o protocolo MQTT.
- int server_port = 1883;
- //declaracao do usuario e senha para autenticacao no broker MQTT.
- const char *user = "aula_psi";
- const char *pass = "psi2016";
- /*
- IMPORTANTE!
- O ID do cliente não pode repitir dentro do contexto (mesmo usuário) no broker
- Portanto é necessario que cada grupo coloque um ID distinto
- Por exemplo: arduino-grupoX, onde X é o numero dogrupo
- */
- const char *clientID = "Slife2.0";
- //declaracao dos topicos exemplo para publicacao e inscricao
- const char *sub_topic = "/pad/intel-galileo/temperatura";
- const char *pub_topic = "/Slife2.0";
- // definicao do MAC address do dispositivo. Os shields ethernet mais modernos possuem
- // endereço MAC escritos na placa de rede. Caso nao haja MAC definido, basta colocar
- // qualquer endereço que nao conflite com dispositivos da rede local.
- byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
- // declaracao do IP estatico para o dispositivo
- IPAddress ip(172, 25, 10, 10); //172.25.10.11
- // Define uma referencia para o socket de rede
- EthernetClient client_ethernet;
- PubSubClient client_mqtt;
- void callback (char* topic,byte* payload, unsigned int len){
- Serial.println("Nova mensagem");
- for (int i = 0; i< len; i++){
- Serial.print((char)payload[i]);
- }
- Serial.println();
- }
- void setup() {
- // Define o numero de tentativas para se conectar com o broker MQTT
- int attempts = 5;
- // Inicializa a comunicação serial do arduino (pinos TX e RX). Tem como parametro o baud rate
- Serial.begin(9600);
- Serial.println("Connecting with ethernet...");
- // inicializa a conexao ethernet
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Failed to configure Ethernet using DHCP");
- // Caso haja falha na utilizacao do DHCP, efetua-se a conexao com IP estatico
- Ethernet.begin(mac, ip);
- }
- Serial.print("The local IP address is: ");
- //Obtem o endereço IP atual do dispositivo
- Serial.println(Ethernet.localIP());
- delay(1000);
- client_mqtt.setClient(client_ethernet);
- client_mqtt.setServer(broker, 1883);
- client_mqtt.setCallback(&callback);
- int i;
- //Executa um loop para efetuar a conexão com o broker MQTT
- //5 tentativas de conexão ocorrem, caso a conexão não ocorra
- //com sucesso uma mensagem indicando o código de erro será exibida.
- Serial.println("Trying to connect with broker...");
- for(i = 0; i < attempts;i++){
- if(client_mqtt.connect(clientID, user,pass)){
- Serial.println("Conectado...");
- break;
- }
- else{
- Serial.println("Conexão falhou");
- }
- }
- //Verifica se a placa foi realmente conectada, ou se as tentativas de conexão acabaram.
- if(!client_mqtt.connected() && i > attempts){
- Serial.println("Connection attempts failed");
- Serial.println("Try to reset your board, or verify the server authentication");
- while(1);
- }
- Serial.print("Subscribing in topic: ");
- client_mqtt.subscribe(sub_topic, 1);
- Serial.println();//quebra de linha
- }
- void loop() {
- //efetua a leitura do sensor analógico e atribui o resultado para uma variável inteira
- int temp = analogRead(sensor_pin);
- char msg[80];
- sprintf(msg, "{\"Luminosidade\":\"%d\"}", temp);
- client_mqtt.publish("/Slife2.0",msg,false);
- delay(500);
- //Mantém o sistema de gerenciamento de callback ativo
- client_mqtt.loop();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement