Sterowanie ESP za pomocą aplikacji na Androida część 1

Ten artykuł zaprezentuje Ci w jaki sposób można stworzyć prostą aplikację na Androida za pomocą narzędzia MIT APP INVENTOR oraz za pomocą tej aplikacji przesyłać dane do ESP.

Ja do prezentacji użyję klona płytki WeMos D1 Mini ale kod przedstawiony w tym poradniku będzie działać dla wszystkich płytek których sercem jest ESP8266, np WeMos D1, NodeMCU i wielu innych.

Lista potrzebnych elementów:

  • Płytka z ESP8266 (w przykładzie użyty WeMos D1 Mini)
  • Dowolne urządzenie z Androidem

A więc zaczniemy od tworzenia aplikacji, po zalogowaniu się wybieramy „Start new project” a następnie wpisujemy nazwę naszego projektu np. „LearnDuino”, po utworzeniu projektu ujrzymy takie oto okno:

Następnie utwórzmy przycisk, z lewego menu w zakładce „User Interface” wybieramy „Button” i przeciągamy na środek czyli widok naszej przyszłej aplikacji.

Teraz w prawym menu możemy zmienić wygląd naszego przycisku żeby stał się ładniejszy oraz zawierał taki napis jaki nas interesuje.

Teraz aby móc zobaczyć i przetestować naszą aplikację na żywo możemy pobrać MIT AI2 Companion na naszym urządzeniu z Androidem, ta aplikacja pozwoli nam na podgląd i przetestowanie naszej aplikacji bez konieczności instalowania po każdej zmianie od nowa naszej aplikacji.

Po zainstalowaniu aplikacji i jej włączeniu musimy wybrać na komputerze u góry zakładkę „Connect” a w niej „AI Companion”a następnie przepisać kod do aplikacji lub zeskanować kod QR.

           

Po połączeniu na naszym telefonie ujrzymy naszą aplikację.

Teraz nadszedł czas sprawić aby przycisk w naszej aplikacji zaczął robić coś więcej niż tylko być, aby tego dokonać na początek musimy dodać możliwość połączenia z serwerem, w lewym menu wybieramy zakładkę „Connectivity” i z niej dodajemy do naszej aplikacji „Web” i na razie nie zmieniamy żadnych jego ustawień, wrócimy do nich po wgraniu programu na ESP.

Aby przypisać teraz funkcję do przycisku musimy przejść do zakłądki „Blocks” w prawym górnym rogu:

A następnie musimy odpowiednio połączyć funkcje tak jak na poniższym zdjęciu aby móc wysyłać polecenia do naszego ESP

Teraz nadszedł czas aby napisać program dla naszego ESP:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
char* ssid = "nazwa_sieci_WiFi";
const char* password = "hasło_sieci_WiFi";
unsigned int i;
ESP8266WebServer server(80);

unsigned int exposure();
void handleRoot();
void handleNotFound();
int ZMIENNA;
void setup(void) {
	Serial.begin(115200);

	WiFi.begin(ssid, password);
	Serial.println("");
	while (WiFi.status() != WL_CONNECTED) {
		delay(500);
		Serial.print(".");
	}
	Serial.println("");
	Serial.print("Connected to ");
	Serial.println(ssid);
	Serial.print("IP address: ");
	Serial.println(WiFi.localIP());
	if (MDNS.begin("dslr")) {
		Serial.println("MDNS responder started");
	}

	server.on("/", handleRoot);

	server.begin();
	Serial.println("HTTP server started");
}
void loop(void) {
	server.handleClient();
}

void handleRoot() {
	if (server.arg("ZMIENNA") != NULL) {
		ZMIENNA = server.arg("ZMIENNA").toInt();
		Serial.println("Odebrano ZMIENNA:");
		Serial.println(ZMIENNA);
	}

	server.send(200, "text/html", "Ok");
}

Po wgraniu kodu w monitorze portu szeregowego ujrzymy:


Connected to ASUS                                      Informacja o tym z jaką siecią się połączyliśmy
IP address: 192.168.1.205                           Informacja o tym jakie IP nam przydzielił router, jest nam ono potrzebne do wpisania w aplikacji do czego przejdziemy w następnym kroku
MDNS responder started                            Informacja o poprawnym uruchomieniu MDNS
HTTP server started                                     Informacja o poprawnym uruchomieniu serwera HTTP

Teraz aby nasza aplikacja wiedziała do jakiego IP ma wysyłać informację o wciśnięciu przycisku musimy skonfigurować po powrocie do zakłądki „Designer”, „Web1” który znajdziemy po lewej stronie a następnie w lewej stronie w polu Url musimy wpisać „http://ip/” czyli w moim przypadku http://192.168.1.205/.

Teraz po wciśnięciu przycisku na urządzeniu w monitorze portu szeregowego ujrzymy:

Odebrano ZMIENNA:
1

Teraz możemy zmodyfikować nasz kod tak aby wciskanie przycisku powodowało gaśnięcie oraz zapalanie diody (w przykładzie diody wbudowanej w ESP)

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
char* ssid = "ASUS";
const char* password = "vy6ktgjjwg";
unsigned int i;
ESP8266WebServer server(80);

unsigned int exposure();
void handleRoot();
void handleNotFound();
int ZMIENNA;
void setup(void) {
	Serial.begin(115200);
	pinMode(D4, OUTPUT);
	WiFi.begin(ssid, password);
	Serial.println("");
	while (WiFi.status() != WL_CONNECTED) {
		delay(500);
		Serial.print(".");
	}
	Serial.println("");
	Serial.print("Connected to ");
	Serial.println(ssid);
	Serial.print("IP address: ");
	Serial.println(WiFi.localIP());
	if (MDNS.begin("dslr")) {
		Serial.println("MDNS responder started");
	}

	server.on("/", handleRoot);

	server.begin();
	Serial.println("HTTP server started");
}
void loop(void) {
	server.handleClient();
}

boolean led = false;
void handleRoot() {
	if (server.arg("ZMIENNA") != NULL) {
		ZMIENNA = server.arg("ZMIENNA").toInt();
		Serial.println("Odebrano ZMIENNA:");
		Serial.println(ZMIENNA);
		if (led == true)
		{
			digitalWrite(D4, LOW);
			led = false;
		}
		else
		{
			digitalWrite(D4, HIGH);
			led = true;
		}
	}
	server.send(200, "text/html", "Ok");
}