Spisu treści:

Niski koszt automatyzacji z ESP01: 19 kroków
Niski koszt automatyzacji z ESP01: 19 kroków

Wideo: Niski koszt automatyzacji z ESP01: 19 kroków

Wideo: Niski koszt automatyzacji z ESP01: 19 kroków
Wideo: MySensors – Poradnik z przykładami przycisków monostabilnych oraz bistabilnych. 2024, Listopad
Anonim
Image
Image
MCP23016
MCP23016

Dzisiaj omówimy automatyzację za pomocą ESP01 z 16 przekaźnikami. Jest to bardzo tani model konstrukcyjny, w którym można zwielokrotnić moduły i uzyskać do 128 przekaźników, ponieważ w tym mikrokontrolerze można umieścić do ośmiu ekspanderów portów.

W naszym obwodzie będziesz miał aplikację na smartfonie, która komunikuje się z ESP01. Będzie posiadał ekspander z 16 portami, każdy podłączony do przekaźnika. Mamy również regulowane źródło 3v3. Będziemy więc sterować 16-kanałowym modułem przekaźnikowym za pomocą ESP01 poprzez aplikację na Androida, którą udostępniam.

Krok 1: Wskazówka do zapamiętania

Warto zauważyć, moi przyjaciele, że użyłem tego układu w obwodzie o nazwie MCP23016. Ważne jest również dla Was obejrzenie filmu EXPANSOR IOS DO ESP32, ESP8266 I ARDUINO, w którym testuję urządzenie i pokazuję, że działa z tymi trzema typami płytek.

Krok 2: MCP23016

Tutaj mamy obraz MCP23016, który jest chipem z 28 pinami. Warto wspomnieć, że istnieje również model MCP23017, który jest bardziej powszechny i nie potrzebuje rezystora i kondensatora, ponieważ ma wewnętrzny zegar. To ułatwia, ale jego przypinanie różni się od tego, co pokazujemy w tym filmie.

Krok 3: Adres

Adres
Adres

Do zdefiniowania adresu MCP23016 używamy pinów A0, A1 i A2. Możesz po prostu zostawić je na HIGH lub LOW, aby zmienić adres.

Adres zostanie utworzony w następujący sposób:

MCP_Address = 20 + (A2 A1 A0)

Gdzie A2 A1 A0 może przyjmować wartości HIGH / LOW, liczba binarna od 0 do 7 form.

Na przykład:

A2> GND, A1> GND, A0> GND (czyli 000, potem 20 + 0 = 20)

Lub w przeciwnym wypadku, A2> HIGH, A1> GND, A0> HIGH (czyli 101, potem 20 + 5 = 25)

Krok 4: Polecenia

Polecenia
Polecenia

Oto tabela z poleceniami do komunikacji:

Krok 5: Kategorie

GP0 / GP1 - Rejestry portów danych

Istnieją dwa rejestry, które zapewniają dostęp do dwóch portów GPIO.

Odczyt rejestru dostarcza stan pinów na tym porcie.

Bit = 1> WYSOKI Bit = 0> NISKI

IODIR0 / IODIR1

Istnieją dwa rejestry, które kontrolują tryb pin. (Wejście lub Wyjście)

Bit = 1> WEJŚCIE Bit = 0> WYJŚCIE

Krok 6: Struktura komunikacji

Struktura komunikacji
Struktura komunikacji

Tutaj mówimy o adresie chipa i uzyskujemy dostęp do polecenia i danych, co jest rodzajem protokołu, który należy wykonać, aby wysłać informacje.

Krok 7: Program

Program
Program

Zrobimy program, który polega na komunikacji ESP01 z MCP23016, aby mieć więcej GPIO do użycia. Tych 16 nowych GPIO, które będziemy mieć, będzie sterować 16-kanałowym modułem przekaźnikowym.

Polecenia będą wysyłane do ESP01 za pośrednictwem aplikacji na Androida.

Krok 8: MCP23016

MCP23016
MCP23016

Krok 9: ESP-01

ESP-01
ESP-01
ESP-01
ESP-01

To jest płyta z 16 przekaźnikami.

Krok 10: Montaż ESP01

Montaż ESP01
Montaż ESP01

Krok 11: Biblioteki i zmienne

Uwzględnimy biblioteki odpowiedzialne za komunikację i2c, tworzenie Access Pointa i webserwera. Definiujemy adres chipa i porty. Na koniec definiujemy zmienne do przechowywania wartości pinów MCP.

#include // respons a comunicação i2c.#include //responsável for criar o accesspoint eo webserver WiFiServer server(80);//webserver para acessarmos através do aplicativo //endereço I2C do MCP23016 #define Ç/MCPAddress 0 define GP0 0x00 // REJESTR PORTÓW DANYCH 0 #define GP1 0x01 // REJESTR PORTÓW DANYCH 1 #define IODIR0 0x06 // REJESTR KIERUNKU WE/WY 0 #define REJESTR KIERUNKU WE/WY 1 czy MCP uint8_t currentValueGP0 = 0; uint8_t bieżącaWartośćGP1 = 0;

Krok 12: Konfiguracja

Inicjujemy ESP01 i konfigurujemy porty. Konfigurujemy również Access Point i inicjujemy serwer.

void setup() { Serial.begin(9600); opóźnienie (1000); Wire.begin(0, 2); //ESP01 Wire.setClock (200000); configurePort(IODIR0, WYJŚCIE); configurePort(IODIR1, WYJŚCIE); writeBlockData(GP0, 0x00); writeBlockData(GP1, 0x00); konfiguracjaWiFi(); //konfiguracja punktu dostępowego server.begin();//inicjalizowanie serwera }

Krok 13: Pętla

Tutaj sprawdzam, czy do serwera podłączyli się jacyś klienci. Czytamy również pierwszą linię żądania. Wyodrębniamy dane do manipulacji, definiujemy domyślny nagłówek odpowiedzi i wysyłamy tę odpowiedź do klienta.

void loop() { Klient WiFiClient = server.available(); // Weryfikacja se um cliente foi conectado if (!client) { return; } String req = client.readStringUntil('\r');// Faz a leitura da primira linha da requisição /* /MR é o header prefixo para saber se a requisição é a esperada for relés */ if(req.indexOf ("/MR") != -1) { parserData(req); //partir da requisição extrai os dados para manipulação } else{ Serial.println("nieprawidłowe żądanie"); powrót; } klient.flush(); Ciąg s = "HTTP/1.1 200 OK\r\n"; // cabeçalho padrão de resosta klient.print(s); // envia a resposta para o cliente delay(1); } // koniec pętli

Krok 14: ParserData

Dane parsera
Dane parsera

Z zapytania szukamy danych związanych z przekaźnikami. Następnie przesyłamy dane do MCP23016.

//partir da requisição busca os dados referente aos relésvoid parserData(String data) { uint8_t relay = -1; uint8_t gp = -1; wartość uint8_t = -1; int index = data.indexOf("/MR"); //busca o index do prefixo MR if(data[index+5] == '/') // /MR01/1, onde 0 = GP; 1 = WYBÓR; 1 = ESTADO(wł./wył.) { gp = data[indeks+3]-'0'; przekaźnik = dane[indeks+4]-'0'; wartość = dane[indeks+6]-'0'; //wyślij dados do MCP23016 //[przekaźnik-1] przeprowadź MCP od 0 do 7 pinów writePinData(przekaźnik-1, wartość, gp); } }

Krok 15: Konfiguracja portu

Ustawiamy tryb pinów GPIO (GP0 lub GP1).

//konfiguruj tryb połączeń GPIO (GP0 lub GP1)//como parametro passamos: // port: GP0 lub GP1 // INPUT dla wszystkich połączeń jako porty do GP trabalharem como entrada // OUTPUT dla wszystkich jako porty do GP trabalharem como powiedział // niestandardowa wartość 0-255 oznaczona lub wybrana przez porty (1=WEJŚCIE, 0=WYJŚCIE) // np.: 0x01 lub B00000001 lub 1: wskazuje, jakie są apenas lub GPX.0 jest włączona, lub pozostała nieważna konfiguracja portu (port uint8_t, niestandardowy uint8_t) { if(custom == INPUT) { writeBlockData(port, 0xFF); } else if(custom == WYJŚCIE) { writeBlockData(port, 0x00); } else { writeBlockData(port, niestandardowy); } }

Krok 16: ZapiszPinData

W tej części kodu zmieniamy stan wybranego pinu i przesyłamy dane do MCP.

//muda o stan de um pino desejado, passando como parametro://pin = pino desejado; wartość = 0/1 (wł./wył.); gp = 0/1 (PORT do MCP) void writePinData(int pin, int value, uint8_t gp) { uint8_t statusGP = 0; if(gp == GP0) statusGP = aktualnaWartośćGP0; w przeciwnym razie statusGP = currentValueGP1; if (wartość == 0) { statusGP &= ~(B0000001 << (pin)); // muda o pino para LOW } else if (wartość == 1) { statusGP |= (B00000001 << (pin)); // muda o pino para HIGH } if(gp == GP0) currentValueGP0 = statusGP; w przeciwnym razie bieżącaWartośćGP1 = statusGP; //wyślij dados do MCP writeBlockData(gp, statusGP); opóźnienie(10); }

Krok 17: WriteBlockData i konfiguracjaWiFi

Tutaj przesyłamy dane do MCP23016 za pośrednictwem magistrali i2c. Następnie konfigurujemy właściwości, aby włączyć punkt dostępu. Na koniec skonfigurowaliśmy Wi-Fi dla trybu Access Point i stworzyliśmy AP z SSID i HASŁEM.

//envia dados para o MCP23016 através do barramento i2c//reg: REGISTRADOR //data: dados (0-255) void writeBlockData(uint8_t port, uint8_t data) { Wire.beginTransmission(MCPAddress); Wire.write(port); Drut.zapis(dane); Wire.endTransmission(); opóźnienie(10); }

//konfiguruj jako propriedades para habilitar o ACCESS POINTvoid setupWiFi() { WiFi.mode(WIFI_AP); WiFi.softAP("ESP01_RELAY", "12345678"); }

Krok 18: aplikacja

Aplikacja
Aplikacja
Aplikacja
Aplikacja
Aplikacja
Aplikacja
Aplikacja
Aplikacja

Do stworzenia aplikacji używamy MIT App Inventor 2, do której można uzyskać dostęp poprzez link:

ai2.appinventor.mit.edu/

Aplikacja składa się z dwóch ekranów zawierających po osiem par przycisków w każdym, wskazujących stan każdego przekaźnika.

Oto niektóre z użytych bloków programowania:

WAŻNE: Domyślny adres IP ESP, jako Punktu Dostępowego to 192.168.4.1

1. Podczas inicjalizacji ekranu zapisujemy IP w pamięci i wywołujemy procedurę przywrócenia stanu przycisków (ON/OFF).

2. Zadzwoń na drugi ekran

1. Klikając na przycisk ON jednego z przekaźników, dokonamy wizualnych zmian w przycisku (zielone bloki). WebViewer1. GoToUrl wysyła żądanie dla naszego ESP01, łącząc dane MR01 / 1 w adresie URL.

2. Klikając przycisk OFF jednego z przekaźników, dokonamy wizualnych zmian w przycisku (zielone bloki). WebViewer1. GoToUrl wysyła żądanie do naszego ESP01, łącząc dane MR01/0 w adresie URL.

Ta procedura służy do przywracania stanu przycisków (przekaźników), ponieważ przy zmianie ekranu powraca do wzorca tworzenia.

Żółty blok powtarza się dla każdej pary przycisków.

Krok 19: Pobierz

Oto pliki projektu do pobrania:

Plik projektu MIT App Inventor 2 - pobierz

Aplikacja APK do zainstalowania na Androidzie - pobierz

Pobierz inne pliki:

PDF

JA NIE

Zalecana: