/* Basic ESP8266 MQTT example This sketch demonstrates the capabilities of the pubsub library in combination with the ESP8266 board/library. It connects to an MQTT server then: - publishes "hello world" to the topic "outTopic" every two seconds - subscribes to the topic "inTopic", printing out any messages it receives. NB - it assumes the received payloads are strings not binary - If the first character of the topic "inTopic" is an 1, switch ON the ESP Led, else switch it off It will reconnect to the server if the connection is lost using a blocking reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to achieve the same result without blocking the main loop. To install the ESP8266 board, (using Arduino 1.6.4+): - Add the following 3rd party board manager under "File -> Preferences -> Additional Boards Manager URLs": http://arduino.esp8266.com/stable/package_esp8266com_index.json - Open the "Tools -> Board -> Board Manager" and click install for the ESP8266" - Select your ESP8266 in "Tools -> Board" api https://pubsubclient.knolleary.net/api.html Test med broker.hivemq.com broker. Debug med MQTTBox windows app ESP sender 'Hei' til topic 'pubsub-ut' ESP abonerer på topic 'pubsub-led'. Led går styres med msg '0' / '1'. Sender data til min paho Real Time webside.(Bitnami) serveren) topic til "peres/stue" havner i tabel celle med id=peres/stue arduino kobler seg til mqtt protocoll, mens webclient bruker ws for realtime */ #include #include // WIFI SETUP const char* ssid = "x"; const char* password = "x"; //BROKER SERVER PORT + URL const unsigned int mqttport = 1883; //const char* mqtt_server = "broker.mqtt-dashboard.com"; //const char* mqtt_server = "broker.hivemq.com"; //const char* mqtt_server = "192.168.70.108"; const char* mqtt_server = "iot.eclipse.org"; //BROKER USER + PASSWORD IF NEEDED //#define mpttuser "user" //comment if anonymous login //#define mpttpass "useralow" //comment if anonymous login // MQTT TOPICS char publishTopic[] = "peres/arduino"; //publish funk tar kun char, ikke string char subscribeTopic[] = "peres/arduino/led"; WiFiClient espClient; PubSubClient client(espClient); unsigned long lastTime = 0; //timer til sendings intervall unsigned int msIntervall = 2000; //MESSAGE INTERVAL char msg[50]; //buffer til melding unsigned int counter = 0; //teller byte ledpin = 2; void setup() { pinMode(ledpin, OUTPUT); // Initialize the BUILTIN_LED pin as an output Serial.begin(115200); delay(1000); setup_wifi(); client.setServer(mqtt_server, mqttport); client.setCallback(callback); Serial.println("PubSub Mqtt paho Real Time demo started"); } void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); // Switch on the LED if an 1 was received as first character if ((char)payload[0] == '1') { digitalWrite(ledpin, LOW); // Turn the LED on (Note that LOW is the voltage level // but actually the LED is on; this is because // it is acive low on the ESP-01) } else { digitalWrite(ledpin, HIGH); // Turn the LED off by making the voltage HIGH } } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Connecting broker "); Serial.print(mqtt_server); Serial.print("..."); // Attempt to connect #ifdef mpttuser if (client.connect("ESP8266Client", mpttuser, mpttpass)) { // med passord #else if(client.connect("ESP8266Client")) { // anonym påloggingi #endif Serial.println("connected"); // Once connected, publish an announcement... client.publish(publishTopic, "Connected!"); // ... and resubscribe client.subscribe(subscribeTopic); } else { Serial.print("failed to connect client, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); long timeNow = millis(); // run on intervall: if (timeNow - lastTime > msIntervall) { lastTime = timeNow; // publish to topic publishTopic ++counter; //snprintf (msg, 75, "Hei Per #%ld", counter); //sumer sammen string og teller i meldings buffer itoa(counter, msg, 10); //number to char buffer Serial.print("Publish message: "); Serial.println(msg); client.publish(publishTopic, msg); } }