Het arduino script om in ESP8266-EVB het relais om te schakelen mbv de Adafruit MQTT broker
Stappenplan
1) download Adafruit MQTT library , unzip de lib en plaats deze in de map arduino-1.6.xx/libraries en herstart de IDE.
2) Maak een account aan voor de Adafruit broker Als je hier vervolgens inlog kom je in je account profiel. en ben je ingelogd in de Adafruit shop.
3) Inloggen in je mqtt dashboard De URL naar je dasboard is https://io.adafruit.com/je_gebruikersnaam/dashboards
4) Ga in het dashboard naar Feeds, klik op actions --> Create a New Feed, en voer als naam onof in.
5) klik op dashboards --> actions --> Create New Dashboard geef de aangemaakte dashboard een naam en
klik na opslaan op deze naam.
6) Je zie nu de dashboardknoppen, Klik op het blauwe + knopje om een aan/uit knop op het dashboard te plaatsen
7) De knop verder editen.
Koppel de knop aan de onof feed en geef in blok settings de knop een nam en voer de aan en uit tekst in.
8) Klik op het sleuteltje om de AIO_KEY aan te maken
9) Copieer onderstaande script, plak het in de arduino IDE en voer de juiste WIFI naam, WPA sleutel,
gebruikersnaam voor de broker, en de aangemaakte AIO_Key in.
Zie ook de tutorial op de site. Lady Ada. Zij heeft ook een video van de tutorial op youtube geplaatst.
Je kan geen gebruik maken van PROGMEM want dat werkt niet bij de nieuwere versie van de lib.
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/************************* WiFi Access Point *********************************/
#define WLAN_SSID "WIFI naam"
#define WLAN_PASS "WPA sleutel"
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME "Gebruikersnaam"
#define AIO_KEY "Sleutel"
int relaisPin = 5;
/************ Global State (you don't need to change this!) ******************/
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
/****************************** Feeds ***************************************/
//In het onderstaande deel wordt de subscribe onof gemaakt naar het topic of feed gebruikersnaam/feeds/onof
//Adafruit_MQTT_Subscribe is hier een object. de objectnaam is de aangemaakte feed: onof.
Adafruit_MQTT_Subscribe onof = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/onof");
/*************************** Sketch Code ************************************/
void setup() {
Serial.begin(57600);
delay(10);
//De relais pin confugureren
pinMode(relaisPin, OUTPUT);
digitalWrite(relaisPin, LOW);
Serial.println(F("Adafruit MQTT demo")); //De F betekend dat de string geen gebruik maakt van het RAM geheugen.
// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Met WIFI verbonden ");
Serial.print("Het IP adres is: "); Serial.println(WiFi.localIP());
// Setup MQTT subscription for onoff feed, dit is het topic. de broker weet dan van welk topic de client is.
// Als er meerdere topics zijn kan je dat hier aangeven met mqtt.subscribe(&feedobject)
// Bij default is het max aantal subscriptions 5
mqtt.subscribe(&onof); //onof is de aangemaakte feed
}
/*************************** verbinding met de broker maken ************************************/
void MQTT_connect() {
uint8_t ret; //uint8_t is een type of unsigned integer of length 8 bits
// Terug naar de loop als er een verbinding is
if (mqtt.connected()) {
return;
}
Serial.print("Verbinden met de MQTT broker... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
while (1);
}
}
Serial.println("verbonden met de MQTT broker");
}
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription; //is een pointer naar het Adafruit_MQTT_Subscribe object
while ((subscription = mqtt.readSubscription(5000))) { //een wachttijd van 5 seconden
if (subscription == &onof) { //onof is de aangemaakte feed
Serial.print(F("De schakelaar staat: "));
Serial.println((char *)onof.lastread);
//Adafruit.io publiceerd de data als een string mbv strcmp (string compare).
//Bij success van de vergelijking word er een 0 teruggestuurd.
if (strcmp((char *)onof.lastread, "aan") == 0) { //aan is de aangemaakte knoptekst
digitalWrite(relaisPin, LOW);
}
if (strcmp((char *)onof.lastread, "uit") == 0) { //uit is de aangemaakte knoptekst
digitalWrite(relaisPin, HIGH);
}
}
}
}