
Witajcie wszyscy! W tym artykule szczegółowo wyjaśnimy i pokażemy, jak skonfigurować zdalne sterowanie modułem esp8266 za pomocą aplikacji, zajmując zaledwie 20 minut wolnego czasu. Android poprzez protokół MQTT.
Idea zdalnego sterowania i monitoringu od zawsze fascynowała ludzi, którzy pasjonują się elektroniką i programowaniem. W końcu możliwość otrzymywania lub wysyłania niezbędnych danych w dowolnym momencie, niezależnie od lokalizacji, daje ogromne możliwości. W moich poprzednich artykułach и ) Próbowałem rozważyć kilka niedrogich i stosunkowo prostych opcji realizacji zdalnego sterowania mikrokontrolerami przez Internet. Jednak czas i cały świat nie stoi w miejscu - postęp kontynuuje swój nieubłagany ruch do przodu. W ciągu tego krótkiego czasu dużą popularność zyskał moduł esp8266, który dzięki niskiej cenie oraz wbudowanemu wi-fi stał się jednym z głównych elementów Smart Home.
Obecnie MQTT to zaawansowany i najpopularniejszy protokół przesyłania danych pomiędzy poszczególnymi urządzeniami w ramach systemów Smart Home. Ma kilka zalet w porównaniu z innymi protokołami:
— niskie zużycie ruchu;
- połączenie między klientem a serwerem jest zawsze otwarte;
- nie ładuje kanału internetowego;
— brak opóźnień w transmisji danych;
— wygodny system subskrypcji tematów;
Wszystko to sprawia, że możliwe jest monitorowanie i sterowanie w czasie rzeczywistym. MQTT wymaga jednak własnego serwera, który pełni rolę pośrednika między klientami sieciowymi. Istnieją dwa sposoby na utworzenie własnego serwera lub skorzystanie z usług stron trzecich.
Opisany system sterowania składa się z dwóch głównych części: serwera MQTT (zazwyczaj tylko jednego) oraz klientów, których może być całkiem sporo. W naszym przypadku klientami będzie aplikacja działająca na Android i sam moduł esp8266.
Algorytm działania systemu jest następujący. Klienci łączą się z serwerem i zaraz po połączeniu każdy z nich zapisuje się na interesujące go tematy. Cała komunikacja między klientami przechodzi przez serwer, który przekierowuje dane do innych klientów na podstawie ich subskrypcji.
Serwer MQTT.
W naszym przypadku skorzystamy z niezwykle wygodnej usługi która posiada bezpłatny plan taryfowy (Cute Cat), który w pełni pokryje potrzeby wdrożenia małego wewnętrznego systemu inteligentnego domu.

Zarejestrujmy się na stronie i zdobądźmy dane niezbędne do uzyskania dostępu do serwera. Podczas konfigurowania klientów należy użyć zwykłego portu (bez SSL i TLS).

Aplikacja na Android.
Nasza aplikacja będzie pełniła rolę panelu kontrolnego dla mikrokontrolera, a także będzie odbierać i wyświetlać wszystkie informacje otrzymane z esp8266.
Aplikacja nazywa się i jest gotowym klientem mqtt z niewielką liczbą bardzo przydatnych widżetów. Możesz obejrzeć wideo, aby uzyskać więcej informacji na temat korzystania z aplikacji.
es8266.
Moduł jest flashowany w środowisku programowania Arduino, jednak chcę zauważyć, że moduł ma problemy z oprogramowaniem układowym w najnowszych wersjach Arduino, dlatego zalecam użycie wersji 1.6.4.
Na przykład dioda LED (8266 pinów) i czujnik temperatury ds5b18 (20 piny) są podłączone do esp2.
Ponieważ konieczne jest odbieranie danych do sterowania diodą LED, po podłączeniu, esp musi zapisać się do odpowiedniego tematu „test / led”, w przeciwnym razie wszystkie przesłane dane przejdą przez nasz mikrokontroler.
Nie potrzebujesz abonamentu, aby przesyłać dane o temperaturze, ale wysyłając wartości temperatur, musisz określić temat, do którego te dane trafią.
Poniżej szkic ze szczegółowymi komentarzami.
Szkic Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину
#włączać
#włączać
#włączać
#włączać
#define ONE_WIRE_BUS 2
Jeden przewód jeden przewód(JEDEN_PRZEWÓD_MAGISTRALA);
DallasCzujniki temperatury(&oneWire);
const char *ssid = "LOTNISKO"; // Nazwa punktu dostępu WiFi
const char *pass = "HASŁO"; // Hasło z punktu dostępowego
const char *mqtt_server = "serwer"; // Nazwa serwera MQTT
stała int mqtt_port = 11140; // Port do łączenia się z serwerem MQTT
const char *mqtt_user = "Zaloguj się"; // Logi z serwera
const char *mqtt_pass = "Przejście"; // Hasło serwera
#zdefiniuj ROZMIAR_BUFERA 100
bool LedState = fałsz;
liczba całkowita tm=300;
float temp=0;
// Funkcja do odbierania danych z serwera
void wywołanie zwrotne(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // wyprowadź nazwę tematu na port szeregowy
Serial.print(" => ");
Serial.print(pub.payload_string()); // wyprowadza wartość otrzymanych danych na port szeregowy
Ładunek ciągu = pub.payload_string();
if(String(pub.topic()) == "test/led") // sprawdź, czy dane pochodzą z tematu, którego potrzebujemy
{
int stled = payload.toInt(); // przekonwertuj otrzymane dane na typ całkowity
cyfrowyWrite(5,stled); // włącz lub wyłącz diodę LED w zależności od otrzymanych wartości danych
}
}
Klient WiFi wclient;
Klient PubSubClient(wclient, mqtt_server, mqtt_port);
void setup () {
czujniki.begin();
Serial.begin (115200);
opóźnienie (10);
Serial.println ();
Serial.println ();
pinMode(5, WYJŚCIE);
}
void loop () {
// połącz się z Wi-Fi
jeśli (WiFi.status() != WL_CONNECTED) {
Serial.print("Łączenie z ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);
jeśli (WiFi.waitForConnectResult() != WL_CONNECTED)
powrotu;
Serial.println("Połączono z siecią Wi-Fi");
}
// połącz się z serwerem MQTT
jeśli (WiFi.status() == WL_CONNECTED) {
jeśli (!client.connected()) {
Serial.println("Łączenie z serwerem MQTT");
jeśli (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(użytkownik_mqtt, hasło_mqtt))) {
Serial.println("Połączono z serwerem MQTT");
klient.set_callback(wywołanie zwrotne);
klient.subskrybuj("test/led"); // zapisz się do tematu z danymi dla diody LED
} Else {
Serial.println("Nie można połączyć się z serwerem MQTT");
}
}
jeśli (client.connected()){
klient.pętla();
Wyślij tymczasową();
}
}
} // koniec pętli głównej
// Funkcja wysyłania odczytów z czujnika temperatury
pusta TempSend(){
jeśli (tm==0)
{
czujniki.requestTemperatures(); // pobieramy wartość temperatury z czujnika
float temp = czujniki.getTempCByIndex(0);
klient.publish("test/temp",String(temp)); // wyślij wartość temperatury do tematu dla czujnika temperatury
Serial.println(temp);
tm = 300; // przerwa między wysyłaniem wartości temperatury około 3 sekundy
}
tm--;
opóźnienie (10);
}
W efekcie otrzymujemy wygodne narzędzie do zdalnego sterowania i monitorowania danych, które jest dość łatwe do opanowania i poradzi sobie nawet początkujący.
Film demonstrujący działanie systemu sterowania

Szczegółowe instrukcje wideo dotyczące konfiguracji systemu

Jedna z opcji wykorzystania sterowania esp8266 poprzez protokół MQTT

Internetowe sterowanie taśmą LED

Jeśli masz jakieś pytania dotyczące tego materiału, to polecam obejrzenie drugiej części filmu, gdzie materiał jest przedstawiony bardziej przejrzyście.
Archiwum zawiera szkic oraz wszystkie potrzebne biblioteki do flashowania mikrokontrolera ze szkicem z przykładu.
Należy pamiętać, że biblioteka ESP8266WiFi.h nie jest zawarta w tym archiwum, jest instalowana za pośrednictwem menedżera płytek w środowisku Arduino.
Serwer MQTT -
Łącze do aplikacji pulpitu nawigacyjnego IoT MQTT −
Dziękuję wszystkim za uwagę.
Źródło: www.habr.com
