
Hallo allemaal! In dit artikel wordt gedetailleerd uitgelegd en gedemonstreerd hoe je de ESP8266-module op afstand kunt bedienen met een app, en dat in slechts 20 minuten. Android via het MQTT-protocol.
Het idee van afstandsbediening en monitoring heeft altijd de hoofden van mensen enthousiast gemaakt die gepassioneerd zijn door elektronica en programmeren. De mogelijkheid om op ieder moment, ongeacht uw locatie, de benodigde gegevens te kunnen ontvangen of versturen, biedt volop mogelijkheden. In mijn eerdere artikelen ( и ) Ik heb geprobeerd verschillende toegankelijke en relatief eenvoudige opties te overwegen voor het implementeren van afstandsbediening van microcontrollers via internet. De tijd en de hele wereld staan echter niet stil: de vooruitgang zet zijn onverbiddelijke vooruitgang voort. Gedurende deze korte tijd is de esp8266-module enorm populair geworden, die dankzij de lage prijs en ingebouwde wifi een van de belangrijkste componenten van het Smart Home is geworden.
Op dit moment is MQTT het geavanceerde en populairste protocol voor gegevensoverdracht tussen individuele apparaten binnen Smart Home-systemen. Het heeft een aantal voordelen ten opzichte van andere protocollen:
— laag verkeersverbruik;
— de verbinding tussen de client en de server is altijd open;
— laadt het internetkanaal niet;
— geen vertragingen bij de gegevensoverdracht;
— handig systeem van abonnementen op onderwerpen;
Dit alles maakt het mogelijk om in realtime te monitoren en te controleren. MQTT heeft echter een eigen server nodig, die als tussenpersoon tussen netwerkclients fungeert. Er zijn hier twee opties: maak uw eigen server of gebruik services van derden.
Het beschreven besturingssysteem bestaat uit twee hoofdonderdelen: een MQTT-server (meestal slechts één) en clients, waarvan er meerdere kunnen zijn. In ons geval zullen de clients een applicatie zijn die draait op MQTT. Android en de ESP8266-module zelf.
Het systeembedieningsalgoritme is als volgt. Klanten maken verbinding met de server en onmiddellijk na het verbinden abonneert elk van hen zich op onderwerpen die voor hem interessant zijn. Alle communicatie tussen clients verloopt via de server, die gegevens doorstuurt naar andere clients op basis van hun abonnementen.
MQTT-server.
In ons geval maken we gebruik van een uiterst handige service die een gratis tariefplan heeft (Cute Cat), dat volledig de behoeften voor de implementatie van een klein eigen “smart home” -systeem zal dekken.

Laten we ons op de site registreren en de benodigde gegevens ontvangen om toegang te krijgen tot de server. Bij het configureren van clients moet u een gewone poort gebruiken (zonder SSL en TLS).

Aanvraag op Android.
Onze applicatie zal fungeren als controlepaneel voor de microcontroller en zal ook alle informatie ontvangen en weergeven die wordt ontvangen van de esp8266.
De applicatie wordt gebeld en is een kant-en-klare mqtt-client met een klein aantal zeer handige widgets. U kunt de video bekijken voor meer informatie over het gebruik van de applicatie.
Esp8266.
De module wordt geflashed in de Arduino-programmeeromgeving, maar ik wil er wel op wijzen dat de module problemen heeft met de firmware in de nieuwste versies van Arduino, dus ik raad aan om versie 1.6.4 te gebruiken.
Op de esp8266 zijn bijvoorbeeld een LED (5-pins) en een ds18b20-temperatuursensor (2-pins) aangesloten.
Omdat het voor het besturen van de LED noodzakelijk is om gegevens te ontvangen, moet de esp zich na het aansluiten op het overeenkomstige "test/led"-onderwerp abonneren, anders zullen alle verzonden gegevens door onze microcontroller passeren.
Voor het verzenden van temperatuurgegevens heeft u geen abonnement nodig, maar bij het verzenden van temperatuurwaarden moet u wel aangeven naar welk onderwerp deze gegevens gaan.
Hieronder vindt u een schets met gedetailleerd commentaar.
Schets Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину
#inclusief
#erbij betrekken
#erbij betrekken
#erbij betrekken
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperatuursensoren(&oneWire);
const char *ssid = "AIRPORT"; // Naam van het WiFi-toegangspunt
const char *pass = "WACHTWOORD"; // Wachtwoord van het toegangspunt
const char *mqtt_server = "server"; // MQTT-servernaam
const int mqtt_port = 11140; // Poort om verbinding te maken met de MQTT-server
const char *mqtt_user = "Login"; // Logs van de server
const char *mqtt_pass = "Pass"; // Serverwachtwoord
#define BUFFER_SIZE 100
bool LedState = false;
int tm=300;
vlottertemperatuur=0;
// Functie voor het ontvangen van gegevens van de server
void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // voer de onderwerpnaam uit naar de seriële poort
Serial.print(" => ");
Serial.print(pub.payload_string()); // voer de ontvangen datawaarde uit naar de seriële poort
String-payload = pub.payload_string();
if(String(pub.topic()) == "test/led") // controleer of de gegevens afkomstig zijn van het onderwerp dat we nodig hebben
{
int stled = payload.toInt(); // converteer de ontvangen gegevens naar een geheel getal
digitalWrite(5,stled); // zet de LED aan of uit, afhankelijk van de ontvangen datawaarden
}
}
WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_poort);
void setup () {
sensoren.begin();
Serial.begin (115200);
vertraging (10);
Serial.println ();
Serial.println ();
pinMode(5, UITGANG);
}
leegte lus () {
// verbinding maken met wifi
als (WiFi.status() != WL_CONNECTED) {
Serial.print("Verbinding maken met ");
Serieel.afdruk(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);
als (WiFi.waitForConnectResult() != WL_CONNECTED)
terug te keren;
Serial.println("WiFi verbonden");
}
// verbinding maken met MQTT-server
als (WiFi.status() == WL_CONNECTED) {
als (!client.connected()) {
Serial.println("Verbinding maken met MQTT-server");
als (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_gebruiker, mqtt_pass))) {
Serial.println("Verbonden met MQTT-server");
client.set_callback(callback);
client.subscribe("test/led"); // abonneer je op het onderwerp met gegevens voor de LED
} Else {
Serial.println("Kan geen verbinding maken met de MQTT-server");
}
}
als (client.connected()){
client.loop();
Tijdelijk verzenden();
}
}
} // einde van de hoofdlus
// Functie voor het verzenden van metingen van een temperatuursensor
ongeldige TempSend(){
als (tm==0)
{
sensors.requestTemperatures(); // we halen de temperatuurwaarde op van de sensor
vlottertemperatuur = sensoren.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // stuur de temperatuurwaarde naar het onderwerp voor de temperatuursensor
Serial.println (temp);
tm = 300; // pauze tussen het verzenden van temperatuurwaarden ongeveer 3 seconden
}
tm--;
vertraging (10);
}
Als gevolg hiervan krijgen we een handig hulpmiddel voor afstandsbediening en gegevensbewaking dat vrij eenvoudig te leren is en zelfs beginners kunnen gebruiken.
Video die de werking van het besturingssysteem demonstreert

Gedetailleerde video-instructies voor het instellen van het systeem

Een van de mogelijkheden om esp8266 te gebruiken is de besturing via het MQTT-protocol

LED-strip aansturen via internet

Als je vragen hebt over dit materiaal, raad ik je aan het tweede deel van de video te bekijken, waar het materiaal duidelijker wordt gepresenteerd.
Het archief bevat een schets en alle benodigde bibliotheken om de microcontroller te flashen met de schets uit het voorbeeld.
Houd er rekening mee dat de ESP8266WiFi.h-bibliotheek niet in dit archief is opgenomen; deze wordt geïnstalleerd via Boards Manager in de Arduino-omgeving.
MQTT-server -
IoT MQTT Dashboard-applink -
Bedankt allemaal voor uw aandacht.
Bron: www.habr.com
