Spisu treści:
- Krok 1: Wskazówka do zapamiętania
- Krok 2: MCP23016
- Krok 3: Adres
- Krok 4: Polecenia
- Krok 5: Kategorie
- Krok 6: Struktura komunikacji
- Krok 7: Program
- Krok 8: MCP23016
- Krok 9: ESP-01
- Krok 10: Montaż ESP01
- Krok 11: Biblioteki i zmienne
- Krok 12: Konfiguracja
- Krok 13: Pętla
- Krok 14: ParserData
- Krok 15: Konfiguracja portu
- Krok 16: ZapiszPinData
- Krok 17: WriteBlockData i konfiguracjaWiFi
- Krok 18: aplikacja
- Krok 19: Pobierz
Wideo: Niski koszt automatyzacji z ESP01: 19 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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
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
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
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
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
Krok 9: ESP-01
To jest płyta z 16 przekaźnikami.
Krok 10: 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
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
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:
JA NIE
Zalecana:
„Sup – mysz dla osób z kwadryplegią – niski koszt i otwarte oprogramowanie: 12 kroków (ze zdjęciami)
Sup – mysz dla osób z kwadryplegią – niski koszt i otwarte oprogramowanie: Wiosną 2017 roku rodzina mojej najlepszej przyjaciółki zapytała mnie, czy chcę polecieć do Denver i pomóc im w projekcie. Mają przyjaciela, Allena, który w wyniku wypadku na rowerze górskim ma tetraplegię. Felix (mój przyjaciel) i ja zrobiliśmy szybką rese
Niski koszt zasilacza DIY: 5 kroków
Zrób to sam niskobudżetowy zasilacz: zasilacz jest najczęściej dostępny w każdym przyzwoitym laboratorium elektronicznym. w ramach naszego celu, jakim jest stworzenie domowego laboratorium o niskim poziomie odlewu, postanowiliśmy stworzyć własny spersonalizowany zasilacz, który jest nie tylko ekonomiczny pod względem kosztów, ale także zapewnia se
LM317 Niski koszt zasilacza stołowego: 6 kroków
Zasilacz stołowy LM317 Low Cost: Cześć chłopaki, to mój pierwszy projekt instruktażowy. tutaj pokażę, jak zrobiłem własny, tani zasilacz LM317 Bench. Mam nadzieję, że Ci się spodoba
Niski koszt separatora powietrza oleju.: 6 kroków
Niski koszt separatora powietrza oleju.: Zawór pcv w samochodzie mojej żony wypuścił znaczną ilość oleju do wlotu powietrza. Zainstalowanie nowego zaworu nie pomogło. Oto jak zrobiłem niedrogi separator oleju do jej pojazdu
Niski koszt generatora przebiegów (0 - 20 MHz): 20 kroków (ze zdjęciami)
Niski koszt generatora przebiegów (0 - 20 MHz): STRESZCZENIE Ten projekt wynika z konieczności uzyskania generatora fal o szerokości pasma powyżej 10 MHz i zniekształceniach harmonicznych poniżej 1%, a wszystko to przy niskiej cenie. Ten dokument opisuje projekt generatora fal o szerokości pasma przekraczającej