- Wymagane składniki
- Moduł Wi-Fi ESP8266
- Łączenie LPC2148 z ESP8266 w celu komunikacji szeregowej
- Schemat obwodu i połączenia
- Kroki związane z programowaniem UART0 w LPC2148 w celu połączenia ESP8266
- Sterowanie diodą LED za pomocą ESP8266 IoT Webserver z LPC2148
Transceiver Wi-Fi ESP8266 umożliwia podłączenie mikrokontrolera do sieci. Jest szeroko stosowany w projektach IoT, ponieważ jest tani, mały i łatwy w użyciu. Wcześniej wykorzystaliśmy go do stworzenia serwera WWW przy użyciu serwera Raspberry i serwera WWW Arduino.
W tym samouczku połączymy moduł Wi-Fi ESP8266 z mikrokontrolerem ARM7-LPC2148 i utworzymy serwer sieciowy do sterowania diodą LED podłączoną do LPC2148. Przepływ pracy będzie wyglądał następująco:
- Wyślij polecenia AT z LPC2148 do ESP8266, aby skonfigurować ESP8266 w trybie AP
- Podłącz laptopa lub komputer Wi-Fi do punktu dostępowego ESP8266
- Utwórz stronę internetową HTML na komputerze z adresem IP punktu dostępu serwera sieciowego ESP8266
- Utwórz program dla LPC2148 do sterowania diodą LED zgodnie z wartością otrzymaną z ESP8266
Jeśli jesteś zupełnie nowym modułem Wi-Fi ESP8266, odwiedź poniższe linki, aby zapoznać się z modułem Wi-Fi ESP8266.
- Pierwsze kroki z urządzeniem nadawczo-odbiorczym Wi-Fi ESP8266 (część 1)
- Pierwsze kroki z ESP8266 (Część 2): Używanie poleceń AT
- Pierwsze kroki z ESP8266 (część 3): Programowanie ESP8266 z Arduino IDE i flashowanie jego pamięci
Wymagane składniki
Sprzęt komputerowy:
- ARM7-LPC2148
- Moduł Wi-Fi ESP8266
- FTDI (USB na UART TTL)
- DOPROWADZIŁO
- 3.3 V Regulator napięcia IC
- Płytka prototypowa
Oprogramowanie:
- KEIL uVision
- Flash Magic Tool
- Kit
Moduł Wi-Fi ESP8266
ESP8266 to tani i szeroko stosowany moduł Wi-Fi do projektów wbudowanych, który wymaga niskiego zasilania 3,3 V. Wykorzystuje tylko dwa przewody TX i RX do komunikacji szeregowej i przesyłania danych między ESP8266 a dowolnym mikrokontrolerem posiadającym port UART.
Schemat pinów modułu Wi-Fi ESP8266
- GND, uziemienie (0 V)
- TX, bit transmisji danych X
- GPIO 2, wejście / wyjście ogólnego przeznaczenia nr 2
- CH_PD, wyłączenie chipa
- GPIO 0, wejście / wyjście ogólnego przeznaczenia nr 0
- RST, Resetuj
- RX, Odbierz bit danych X
- VCC, napięcie (+3,3 V)
Konfigurowanie płytki drukowanej ESP8266
ESP8266 wymaga stałego zasilania 3,3 V i nie jest przyjazny dla płytki prototypowej. W naszym poprzednim samouczku dotyczącym ESP8266 stworzyliśmy płytkę drukowaną dla ESP8266 z regulatorem napięcia 3,3 V, przyciskiem RESET i ustawieniami zworek do przełączania trybów (polecenie AT lub tryb flash). Można go również ustawić na płytce stykowej bez użycia płyty perf.
Tutaj przylutowaliśmy wszystkie komponenty na płytce stykowej, aby stworzyć własną płytkę Wi-Fi ESP8266
Dowiedz się interfejs ESP8266 z różnymi mikrokontrolerami, korzystając z poniższych linków:
- Pierwsze kroki z ESP8266 (część 3): Programowanie ESP8266 z Arduino IDE i flashowanie jego pamięci
- Łączenie ESP8266 z STM32F103C8: tworzenie serwera WWW
- Wysyłanie wiadomości e-mail za pomocą Launchpad MSP430 i ESP8266
- Połączenie ESP8266 z mikrokontrolerem PIC16F877A
- Monitorowanie Dumpster na podstawie IOT przy użyciu Arduino i ESP8266
Wszystkie projekty oparte na ESP8266 można znaleźć tutaj.
Łączenie LPC2148 z ESP8266 w celu komunikacji szeregowej
Aby połączyć ESP8266 z LPC2148, musimy ustanowić komunikację szeregową UART między tymi dwoma urządzeniami, aby wysłać polecenia AT z LPC2148 do ESP8266, aby skonfigurować moduł Wi-Fi ESP8266. Aby dowiedzieć się więcej o poleceniach ESP8266 AT, kliknij łącze.
Aby więc korzystać z komunikacji UART w LPC2148, musimy zainicjalizować port UART w LPC2148. LPC2148 ma dwa wbudowane porty UART (UART0 i UART1).
Piny UART w LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Inicjalizacja UART0 w LPC2148
Ponieważ wiemy, że piny LPC2148 są pinami ogólnego przeznaczenia, musimy użyć rejestru PINSEL0 do korzystania z UART0. Przed inicjalizacją UART0 poinformuj o tych rejestrach UART używanych w LPC2148 do korzystania z funkcji UART.
Rejestry UART w LPC2148
Poniższa tabela przedstawia kilka ważnych rejestrów używanych w programowaniu. W naszych przyszłych samouczkach zobaczymy pokrótce inne rejestry używane do UART w LPC2148.
x-0 dla UART0 i x-1 dla UART1:
ZAREJESTROWAĆ |
NAZWA REJESTRACJI |
POSŁUGIWAĆ SIĘ |
UxRBR |
Otrzymaj rejestr bufora |
Zawiera ostatnio otrzymaną wartość |
UxTHR |
Transmisja rejestru holdingowego |
Zawiera dane do przesłania |
UxLCR |
Rejestr kontroli linii |
Zawiera format ramki UART (liczba bitów danych, bit stopu) |
UxDLL |
Dzielnik zatrzaskowy LSB |
LSB wartości generatora szybkości transmisji UART |
UxDLM |
Dzielnik zatrzask MSB |
MSB wartości generatora szybkości transmisji UART |
UxIER |
Rejestracja przerwania aktywacji |
Służy do włączania źródeł przerwań UART0 lub UART1 |
UxIIR |
Rejestr identyfikacji przerwań |
Zawiera kod statusu, który ma priorytet i źródło oczekujących przerwań |
Schemat obwodu i połączenia
Poniżej pokazano połączenia między LPC2148, ESP8266 i FTDI
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 jest zasilany przez regulator napięcia 3,3 V, a FTDI i LPC2148 są zasilane z USB.
Dlaczego FTDI jest tutaj?W tym samouczku połączyliśmy pin RX FTDI (USB to UART TTL) z pinem ESP8266 TX, który jest dalej połączony z pinem LPC2148 RX, dzięki czemu możemy zobaczyć odpowiedź modułu ESP8266 za pomocą dowolnego oprogramowania terminala, takiego jak kit, Arduino IDE. Ale w tym celu ustaw szybkość transmisji zgodnie z szybkością transmisji modułu Wi-Fi ESP8266. (Moja prędkość transmisji to 9600).
Kroki związane z programowaniem UART0 w LPC2148 w celu połączenia ESP8266
Poniżej znajdują się kroki programowania, aby połączyć ESP8266 z LPC2148, co zapewni zgodność z IoT.
Krok 1: - Najpierw musimy zainicjalizować piny UART0 TX i RX w rejestrze PINSEL0.
(P0.0 jako TX i P0.1 jako RX) PINSEL0 = PINSEL0 - 0x00000005;
Krok 2: - Następnie w U0LCR (Line Control Register) ustaw DLAB (Divisor Latch Access Bit) na 1, ponieważ umożliwia to, a następnie ustaw liczbę bitów stopu na 1 i długość ramki danych na 8 bitów.
U0LCR = 0x83;
Krok 3: - Teraz ważnym krokiem, na który należy zwrócić uwagę, jest ustawienie wartości U0DLL i U0DLM w zależności od wartości PCLK i żądanej szybkości transmisji. Zwykle dla ESP8266 używamy szybkości transmisji 9600. Zobaczmy więc, jak ustawić szybkość transmisji 9600 dla UART0.
Wzór na obliczenie szybkości transmisji:
Gdzie, PLCK: częstotliwość zegara peryferyjnego (MHz)
U0DLM, U0DLL: Rejestry dzielnika generatora szybkości transmisji
MULVAL, DIVADDVAL: Te rejestry są wartościami generatora frakcji
Dla szybkości transmisji 9600 z PCLK = 15 MHZ
MULVAL = 1 i DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Więc U0DLM = 0 i otrzymujemy U0DLL = 97 (ułamek niedozwolony)
Używamy więc następującego kodu:
U0DLM = 0x00; U0DLL = 0x61; (Wartość szesnastkowa 97)
Krok 4: - Na koniec musimy ustawić DLA (Divisor Latch Access) wyłączone na 0 w LCR.
Więc mamy
U0LCR & = 0x0F;
Krok 5: - Aby przesłać znak, załaduj bajt, który ma być wysłany w U0THR i poczekaj, aż bajt zostanie przesłany, co jest wskazywane przez przejście THRE na HIGH.
void UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Krok 6: - Do przesyłania łańcucha używana jest poniższa funkcja. Aby wysłać dane łańcuchowe jeden po drugim, użyliśmy funkcji znakowej z powyższego kroku.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Krok 7: - W celu odebrania ciągu, używana jest tutaj funkcja obsługi przerwań , ponieważ moduł Wi-Fi ESP8266 przesyła dane z powrotem do styku RX LPC2148 za każdym razem, gdy wysyłamy polecenie AT lub gdy ESP8266 wysyła dane do LPC2148, tak jak wysyłamy dane na serwer sieciowy ESP8266.
Przykład: Kiedy wyślemy polecenie AT do ESP8266 z LPC2148 („AT \ r \ n”), otrzymamy odpowiedź „OK” z modułu Wi-Fi.
Więc używamy tutaj przerwania, aby sprawdzić wartość otrzymaną z modułu Wi-Fi ESP8266, ponieważ procedura obsługi przerwania ISR ma najwyższy priorytet.
Więc ilekroć ESP8266 wysyła dane do styku RX LPC2148, przerwanie jest ustawiane i wykonywana jest funkcja ISR.
Krok 8: - Aby włączyć przerwania dla UART0, użyj następującego kodu
VICintEnable jest Vectored przerwania rejestru włączania służy do włączania przerwań dla UART0.
VICIntEnable - = (1 << 6);
VICVecCnt10 jest Vectored przerwania rejestr sterujący, który przydziela gniazdo UART0.
VICVectCntl0 = (1 << 5) - 6;
Następnie VICVectaddr0 jest rejestrowanym adresem przerwania wektorowego, który ma adres ISR procedury obsługi przerwań.
VICVectAddr0 = (bez znaku) UART0_ISR;
Następnie musimy przypisać przerwanie dla rejestru bufora RBR Receive. Tak więc w rejestrze włączania przerwań (U0IER) ustawiliśmy RBR. Tak więc ta procedura obsługi przerwań (ISR) jest wywoływana, gdy otrzymujemy dane.
U0IER = IER_RBR;
Wreszcie mamy funkcję ISR, która musi wykonać określone zadanie, gdy otrzymamy dane z modułu Wi-Fi ESP8266. Tutaj po prostu odczytujemy otrzymaną wartość z ESP8266, która jest obecna w U0RBR i przechowujemy tę wartość w UART0_BUFFER. Wreszcie na końcu ISR VICVectAddr należy ustawić na zero lub wartość zastępczą .
void UART0_ISR () __irq { unsigned char IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; if (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; if (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Krok 9: - Ponieważ moduł Wi-Fi ESP8266 powinien być ustawiony w trybie AP, musimy wysłać odpowiednie polecenia AT z LPC2148 za pomocą funkcji UART0_SendString () .
Do komend AT, które są wysyłane do ESP8266 z LPC2148 są wymienione poniżej. Po wysłaniu każdego polecenia AT ESP8266 odpowiada „OK”
1. Wysyła AT do ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Wysyła AT + CWMODE = 2 (ustawienie ESP8266 w trybie AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); opóźnienie_ms (3000);
3. Wysyła AT + CIFSR (w celu uzyskania adresu IP AP)
UART0_SendString ("AT + CIFSR \ r \ n"); opóźnienie_ms (3000);
4. Wysyła AT + CIPMUX = 1 (dla wielu połączeń)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); opóźnienie_ms (3000);
5. Wysyła AT + CIPSERVER = 1,80 (dla WŁĄCZENIA SERWERA ESP8266 z OPEN PORT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); opóźnienie_ms (3000);
Programowanie i flashowanie pliku szesnastkowego do LPC2148
Aby zaprogramować ARM7-LPC2148 potrzebujemy narzędzia keil uVision & Flash Magic. Kabel USB służy tutaj do programowania pamięci ARM7 Stick przez port micro USB. Piszemy kod za pomocą Keila i tworzymy plik hex, a następnie plik HEX jest sflashowany do pendrive'a ARM7 przy użyciu Flash Magic. Aby dowiedzieć się więcej o instalacji keil uVision i Flash Magic oraz o tym, jak z nich korzystać, kliknij łącze Pierwsze kroki z mikrokontrolerem ARM7 LPC2148 i zaprogramuj go za pomocą Keil uVision.
Kompletny program jest podany na końcu samouczka.
Uwaga: podczas ładowania pliku HEX do LPC2148 nie wolno zasilać modułu Wi-Fi ESP8266 ani modułu FTDI, który jest połączony z LPC2148.
Sterowanie diodą LED za pomocą ESP8266 IoT Webserver z LPC2148
Krok 1: - Po załadowaniu pliku HEX do LPC2148, podłącz moduł FTDI do komputera za pomocą kabla USB i otwórz oprogramowanie terminala putty.
Wybierz Serial, a następnie wybierz port COM zgodnie z twoim komputerem lub moim LAPTOPEM (COM3). Szybkość transmisji wynosi 9600.
Krok 2: - Teraz zresetuj moduł Wi-Fi ESP8266 lub po prostu WYŁĄCZ i WŁĄCZ go ponownie, terminal putty pokaże odpowiedź modułu Wi-Fi ESP8266, jak pokazano poniżej. \
Krok 3: - Teraz naciśnij przycisk RESET na LPC2148. Następnie LPC2148 zaczyna wysyłać polecenia AT do ESP8266. Możemy zobaczyć odpowiedź na to w terminalu kitu.
Krok 4: - Jak widać na powyższym obrazku, ESP8266 jest ustawiony w TRYBIE 2, czyli w trybie AP, a adres APIP to 192.168.4.1. Zanotuj ten adres, ponieważ będzie on na stałe zakodowany w kodzie HTML strony internetowej, aby sterować diodą LED podłączoną do LPC2148.
Ważne : Kiedy ESP8266 jest w trybie AP, musisz podłączyć komputer do AP ESP8266. Zobacz obrazek poniżej, mój moduł ESP8266 pokazuje AP w nazwie ESP_06217B (jest otwarty i nie ma hasła).
Krok 5: - Po podłączeniu komputera do AP ESP8266 otwórz notatnik i skopiuj i wklej następującą stronę internetową programu HTML. Pamiętaj, aby zmienić adres APIP zgodnie z modułem Wi-Fi ESP8266
Witamy w Circuit Digest
ESP8266 Połączenie z LPC2148: Tworzenie serwera WWW do sterowania diodą LED
LED ON LED OFFNa tej stronie HTML stworzyliśmy dwa przyciski z hiperłączami do włączania i wyłączania diody LED na stronie internetowej.
Na koniec zapisz dokument notatnika jako rozszerzenie .html
Strona internetowa zostanie wyświetlona w przeglądarce internetowej jak poniżej.
Tutaj adres jest adresem IP punktu dostępowego 192.168.4.1 i wysyłamy wartości @ i%, aby włączać i wyłączać diodę LED, korzystając z poniższej logiki w LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logika do włączania lub wyłączania diody LED w zależności od otrzymanej wartości z ESP8266 { IOSET1 = (1 << 20); // Ustawia WYSOKI WYJŚCIE delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Ustawia OUTPUT LOW delay_ms (100); } } }
W ten sposób można zdalnie sterować urządzeniem za pomocą mikrokontrolera ESP8266 i ARM7 LPC2148. Pełny kod i film objaśniający znajduje się poniżej.