codice mqtt caricabile da arduino
Diff: mqttesp.txt
- Revision:
- 0:e2bf9b74b3a4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mqttesp.txt Mon Feb 20 11:41:59 2017 +0000 @@ -0,0 +1,82 @@ + +#include <ESP8266WiFi.h> +#include <PubSubClient.h> + + +const char* ssid = "WIND-WiFi-D67E"; //ssid al quale si vuole connettere +const char* password = ""; //password del wifi +const char* mqtt_server = "192.168.8.102";// indirrizzo ip della macchina sulla quale si ha il broker mqtt +const char* clientID = "esp"; +const char* outTopic = "NodeMCUout"; //topic dal quale i messaggi vengono scritti dall' arduino +const char* inTopic = "NodeMCUin";// messaggio dal quale +String messaggio; + +WiFiClient espClient; +PubSubClient client(espClient); +char msg[50]; + +void setup_wifi() { //permette la connessione alla rete wifi + + Serial.println(); + Serial.print("Connessione a "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + Serial.println("non sono connesso"); + delay(1000); + } + + Serial.println(""); + Serial.println("WiFi connesso"); + Serial.println("indirizzo IP: "); + Serial.println(WiFi.localIP()); +} + +void callback(char* topic, byte* payload, unsigned int length) { // all' arrivo di un messaggio sull topic al quale ci siamo iscritti entriamo in questa funzione + payload[length] = '\0'; //converte char in una stringa perchè il terminatore di stringa è \0 + String message = (char*)payload; + + Serial.print("Messaggio arrivato sull' arduino:"); + Serial.println(message); + if(message == "prova\n") + client.publish(outTopic, "ok"); //publicca un messaggio su topic outtopic +} + +void reconnect() { + while (!client.connected()) { + Serial.print("tentativo di connessione al servere MQTT"); + if (client.connect(clientID)) { + Serial.println("connesso"); + client.publish(outTopic, clientID); //pubblico il mio id per vedere se davvero mi sono connesso + client.subscribe(inTopic); //mi sottoscrivo al topic dal quale aspetto comandi + } else { + Serial.println("riprovo a connettermi"); + delay(1000); + } + } +} + +void setup() { + Serial.begin(9600); + setup_wifi(); //connetto al wifi + client.setServer(mqtt_server, 1883); //setto server mqtt + client.setCallback(callback); //setto la funzione che si avvia alla ricezione di un messaggio su questo topic +} + +void loop() { + + if (!client.connected()) { + reconnect(); //mi fa connettere al client mqtt + } + if(Serial.available()) + { + messaggio=Serial.readString(); + messaggio.toCharArray(msg,6);// la uso perchè publish accetta solo char + Serial.print(messaggio); + client.publish(outTopic, msg); + } + client.loop(); + +}