codice mqtt caricabile da arduino

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();
+  
+}