- Componente necesare
- Modul Wi-Fi ESP8266
- Conectarea LPC2148 cu ESP8266 pentru comunicare în serie
- Diagrama circuitului și conexiunile
- Pași implicați în programarea UART0 în LPC2148 pentru interfața ESP8266
- Controlul LED-ului folosind ESP8266 IoT Webserver cu LPC2148
Transmițătorul Wi-Fi ESP8266 oferă o modalitate de a conecta un microcontroler la rețea. Este utilizat pe scară largă în proiectele IoT, deoarece este ieftin, mic și ușor de utilizat. L-am folosit anterior pentru a crea server web folosind serverul web Raspberry și serverul web Arduino.
În acest tutorial vom interfața un modul ESP8266 Wi-Fi cu microcontrolerul ARM7-LPC2148 și vom crea un server web pentru a controla LED-ul conectat la LPC2148. Fluxul de lucru va merge astfel:
- Trimiteți comenzi AT de la LPC2148 la ESP8266 pentru a configura ESP8266 în modul AP
- Conectați laptopul sau computerul Wi-Fi la punctul de acces ESP8266
- Creați o pagină web HTML în computer cu adresa IP a punctului de acces al serverului web ESP8266
- Creați un program pentru LPC2148 pentru a controla LED-ul în funcție de valoarea primită de la ESP8266
Dacă sunteți complet nou pentru modulul ESP8266 Wi-Fi, vizitați linkurile de mai jos pentru a vă familiariza cu modulul ESP8266 Wi-Fi.
- Noțiuni introductive despre transmițătorul Wi-Fi ESP8266 (partea 1)
- Noțiuni introductive despre ESP8266 (Partea 2): Utilizarea comenzilor AT
- Noțiuni introductive despre ESP8266 (Partea 3): Programarea ESP8266 cu Arduino IDE și intermiterea memoriei sale
Componente necesare
Hardware:
- ARM7-LPC2148
- Modul Wi-Fi ESP8266
- FTDI (USB către UART TTL)
- LED
- CI regulator de tensiune 3.3V
- Breadboard
Software:
- KEIL uVision
- Instrument Flash Magic
- Chit
Modul Wi-Fi ESP8266
ESP8266 este un modul Wi-Fi utilizat pe scară largă pentru proiecte încorporate, care necesită o putere redusă de 3,3V. Folosește doar două fire TX și RX pentru comunicații seriale și transfer de date între ESP8266 și orice microcontroler care are port UART.
Diagrama pin pentru modulul Wi-Fi ESP8266
- GND, la sol (0 V)
- TX, Transmite bitul de date X
- GPIO 2, intrare / ieșire de uz general nr. 2
- CH_PD, oprire chip
- GPIO 0, intrare / ieșire de uz general nr. 0
- RST, Resetare
- RX, Primiți bitul de date X
- VCC, tensiune (+3,3 V)
Configurarea plăcii de circuite ESP8266
ESP8266 necesită o sursă constantă de 3,3V și nu este compatibil cu panourile. Deci, în tutorialul nostru anterior privind ESP8266, am realizat o placă de circuit pentru ESP8266 cu regulator de tensiune de 3,3 V, un buton RESET și configurare jumper pentru moduri de comutare (comanda AT sau modul bliț). Poate fi, de asemenea, configurat pe panou fără a utiliza placa de perf.
Aici am lipit toate componentele de pe panou pentru a crea propria noastră placă Wi-Fi ESP8266
Aflați interfața ESP8266 cu diferite microcontrolere urmând linkurile de mai jos:
- Noțiuni introductive despre ESP8266 (Partea 3): Programarea ESP8266 cu Arduino IDE și intermiterea memoriei sale
- Conectarea ESP8266 cu STM32F103C8: Crearea unui Webserver
- Trimiterea e-mailului utilizând MSP430 Launchpad și ESP8266
- Interfațarea ESP8266 cu microcontrolerul PIC16F877A
- Monitorizare bazată pe IOT folosind Arduino și ESP8266
Toate proiectele bazate pe ESP8266 pot fi găsite aici.
Conectarea LPC2148 cu ESP8266 pentru comunicare în serie
Pentru a interfața ESP8266 cu LPC2148 trebuie să stabilim o comunicație serială UART între aceste două dispozitive pentru a trimite comenzi AT de la LPC2148 la ESP8266 pentru a configura modulul Wi-Fi ESP8266. Pentru a afla mai multe despre comenzile ESP8266 AT, urmați linkul.
Deci, pentru a utiliza comunicația UART în LPC2148, trebuie să inițializăm portul UART în LPC2148. LPC2148 are două porturi UART încorporate (UART0 și UART1).
Pinii UART în LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Inițializarea UART0 în LPC2148
După cum știm că pinii LPC2148 sunt pini de uz general, așa că trebuie să utilizăm registrul PINSEL0 pentru utilizarea UART0. Înainte de inițializarea UART0 vă informăm despre aceste registre UART utilizate în LPC2148 pentru utilizarea caracteristicii UART.
Înregistrări UART în LPC2148
Tabelul de mai jos prezintă câteva registre importante utilizate în programare. În viitorele noastre tutoriale vom vedea pe scurt despre alte registre utilizate pentru UART în LPC2148.
x-0 pentru UART0 și x-1 pentru UART1:
INREGISTREAZA-TE |
NUME ÎNREGISTRARE |
UTILIZARE |
UxRBR |
Primiți registrul tampon |
Conține valoare primită recent |
UxTHR |
Transmite Registrul deținerii |
Conține date de transmis |
UxLCR |
Registrul de control al liniei |
Conține format de cadru UART (numărul de biți de date, bit de oprire) |
UxDLL |
Divizor Latch LSB |
LSB a valorii generatorului de viteze în baud UART |
UxDLM |
Divizor Latch MSB |
MSB al valorii generatorului de viteze în baud UART |
UxIER |
Întrerupeți activarea înregistrării |
Este utilizat pentru a activa sursele de întrerupere UART0 sau UART1 |
UxIIR |
Registrul de identificare a întreruperii |
Acesta conține codul de stare care are prioritate și sursă de întreruperi în așteptare |
Diagrama circuitului și conexiunile
Conexiunile dintre LPC2148, ESP8266 și FTDI sunt prezentate mai jos
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 este alimentat printr-un regulator de tensiune de 3,3V, iar FTDI și LPC2148 sunt alimentate de la USB.
De ce FTDI este aici?În acest tutorial am conectat pinul RX al FTDI (USB la UART TTL) la pinul ESP8266 TX care este conectat în continuare la pinul RPC LPC2148, astfel încât să putem vedea răspunsul modulului ESP8266 folosind orice software terminal cum ar fi chit, Arduino IDE. Dar pentru aceasta setați rata de transmisie în funcție de rata de transmisie a modulului Wi-Fi ESP8266. (Rata mea în Baud este de 9600).
Pași implicați în programarea UART0 în LPC2148 pentru interfața ESP8266
Mai jos sunt pașii de programare pentru conectarea ESP8266 cu LPC2148, ceea ce îl va face compatibil cu IoT.
Pasul 1: - Mai întâi trebuie să inițializăm pinii UART0 TX & RX în registrul PINSEL0.
(P0.0 ca TX și P0.1 ca RX) PINSEL0 = PINSEL0 - 0x00000005;
Pasul 2: - Apoi în U0LCR (Line Control Register), setați DLAB (Divisor Latch Access Bit) la 1, deoarece le permite și apoi setați numărul de biți de oprire ca 1 și lungimea cadrului de date de 8 biți.
U0LCR = 0x83;
Pasul 3: - Acum pasul important care trebuie remarcat este setarea valorilor U0DLL și U0DLM în funcție de valoarea PCLK și de rata de transmisie dorită. În mod normal pentru ESP8266 folosim baud rate de 9600. Deci, să vedem cum să setăm 9600 baud rate pentru UART0.
Formula pentru calculul ratei de transmisie:
Unde, PLCK: Ceas periferic în frecvență (MHz)
U0DLM, U0DLL: Registre de divizare a generatorului Baud Rate
MULVAL, DIVADDVAL: Aceste registre sunt valori ale generatorului de fracții
Pentru Baud Rate 9600 cu PCLK = 15MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Deci U0DLM = 0 și obținem U0DLL = 97 (Fracția nu este permisă)
Deci, folosim următorul cod:
U0DLM = 0x00; U0DLL = 0x61; (Valoare hexazecimală de 97)
Pasul 4: - În cele din urmă, trebuie să facem DLA (Divisor Latch Access) dezactivat setat la 0 în LCR.
Deci avem
U0LCR & = 0x0F;
Pasul 5: - Pentru transmiterea unui caracter, încărcați octetul care urmează să fie trimis în U0THR și așteptați până când octetul este transmis, ceea ce este indicat de faptul că THRE devine HIGH.
void UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Pasul 6: - Pentru transmiterea unui șir, este utilizată funcția de mai jos. Pentru a trimite date șir unul câte unul, am folosit funcția de caracter de la pasul de mai sus.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Pasul 7: - Pentru primirea unui șir, funcția de rutină a serviciului de întrerupere este utilizată aici, deoarece un modul Wi-Fi ESP8266 va transmite datele înapoi la pinul RX al LPC2148 ori de câte ori trimitem comanda AT sau ori de câte ori un ESP8266 trimite date către LPC2148, așa cum trimitem noi date către un server web ESP8266.
Exemplu: Când trimitem comanda AT către ESP8266 din LPC2148 („AT \ r \ n”), atunci vom primi un răspuns „OK” din modulul Wi-Fi.
Deci, folosim o întrerupere aici pentru a verifica valoarea primită de la modulul ESP8266 Wi-Fi, deoarece rutina de servicii de întrerupere ISR are cea mai mare prioritate.
Deci, ori de câte ori un ESP8266 trimite date către pinul RX al LPC2148, întreruperea este setată și funcția ISR este executată.
Pasul 8: - Pentru a activa întreruperile pentru UART0, utilizați următorul cod
VICintEnable este vectorizat de întrerupere permite registrului utilizat pentru a activa întrerupe pentru UART0.
VICIntEnable - = (1 << 6);
VICVecCnt10 este vectorizat registru de control întrerupere care alocă slot pentru UART0.
VICVectCntl0 = (1 << 5) - 6;
Apoi, VICVectaddr0 este un registru de adrese de întrerupere vectorizate care are adresa ISR de rutină de întrerupere a serviciului.
VICVectAddr0 = (nesemnat) UART0_ISR;
Apoi trebuie să atribuim întreruperea pentru registrul tampon de primire RBR. Deci, în Întrerupere activare registru (U0IER) am setat pentru RBR. Deci, rutina de servicii de întrerupere (ISR) este apelată atunci când primim date.
U0IER = IER_RBR;
În cele din urmă, avem funcția ISR care trebuie să îndeplinească anumite sarcini atunci când primim date de la modulul Wi-Fi ESP8266. Aici citim doar valoarea primită de la ESP8266 care este prezentă în U0RBR și stocăm acea valoare în UART0_BUFFER. În cele din urmă, la sfârșitul ISR, VICVectAddr ar trebui setat cu o valoare zero sau falsă.
void UART0_ISR () __irq { unsigned char IIRValue; IIRValue = U0IIR; IIRValue >> = 1; Valoarea IIR & = 0x02; if (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; if (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Pasul 9: - Deoarece modulul ESP8266 Wi-Fi ar trebui setat în modul AP, trebuie să trimitem comenzile AT respectate de la LPC2148 utilizând funcția UART0_SendString () .
De comenzi AT, care sunt trimise la ESP8266 din LPC2148 sunt menționate mai jos. După trimiterea fiecărei comenzi AT ESP8266 răspunde cu „OK”
1. Trimite AT la ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Trimite AT + CWMODE = 2 (Setarea ESP8266 în modul AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Trimite AT + CIFSR (pentru obținerea IP-ului AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Trimite AT + CIPMUX = 1 (Pentru conexiuni Mutliple)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Trimite AT + CIPSERVER = 1,80 (Pentru ENABLING SERVER ESP8266 with OPEN PORT)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programarea și intermitentul fișierului hexagonal către LPC2148
Pentru a programa ARM7-LPC2148 avem nevoie de instrumentul keil uVision și Flash Magic. Un cablu USB este utilizat aici pentru a programa stick-ul ARM7 prin portul micro USB. Scriem cod folosind Keil și creăm un fișier hexagonal și apoi fișierul HEX este afișat pe stick-ul ARM7 folosind Flash Magic. Pentru a afla mai multe despre instalarea keil uVision și Flash Magic și despre modul de utilizare, urmați linkul Noțiuni introductive despre microcontrolerul ARM7 LPC2148 și programați-l folosind Keil uVision.
Programul complet este dat la sfârșitul tutorialului.
Notă: În timp ce încărcați fișierul HEX pe LPC2148 nu trebuie să alimentați modulul Wi-Fi ESP8266 și modulul FTDI care este conectat cu LPC2148.
Controlul LED-ului folosind ESP8266 IoT Webserver cu LPC2148
Pasul 1: - După încărcarea fișierului HEX în LPC2148, conectați modulul FTDI la computer prin cablu USB și deschideți software-ul terminalului de chit.
Selectați Serial și apoi Selectați portul COM în funcție de PC-ul dvs. sau de LAPTOP al meu (COM3). Rata de transmisie este de 9600.
Pasul 2: - Acum resetați modulul ESP8266 Wi-Fi sau doar POWER OFF și POWER ON din nou, terminalul de chit va afișa răspunsul modulului ESP8266 Wi-Fi așa cum se arată mai jos.
Pasul 3: - Apăsați acum butonul RESET de pe LPC2148. După aceea, LPC2148 începe să trimită comenzi AT către ESP8266. Putem vedea răspunsul la terminalul de chit.
Pasul 4: - După cum puteți vedea în imaginea de mai sus, ESP8266 este setat în MODUL 2, care este modul AP și adresa APIP este 192.168.4.1. Rețineți această adresă, deoarece această adresă va fi codificată în codul HTML al paginii web pentru a controla LED-ul conectat la LPC2148.
Important : Când ESP8266 este în modul AP, trebuie să vă conectați computerul la ESP8266 AP. Vedeți imaginea de mai jos modulul meu ESP8266 arată AP în numele ESP_06217B (Este deschis și nu are parolă).
Pasul 5: - După conectarea PC-ului la ESP8266 AP, deschideți un blocnotes și copiați-lipiți următoarea pagină web a programului HTML. Asigurați-vă că modificați adresa APIP în funcție de modulul dvs. Wi-Fi ESP8266
Bine ați venit la Circuit Digest
ESP8266 Interfață cu LPC2148: Crearea Webserver pentru a controla un LED
LED ON LED OFFÎn această pagină HTML, am creat două butoane cu hyperlink pentru a porni și opri LED-ul de pe pagina web.
În cele din urmă, salvați documentul notepad ca extensie .html
Pagina web va fi afișată ca mai jos în browserul web.
Aici adresa este adresa IP a AP 192.168.4.1 și trimitem valori @ și% pentru a porni și opri LED-ul folosind această logică de mai jos în LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logică pentru a seta LED-ul ON sau OFF în funcție de valoarea primită de la ESP8266 { IOSET1 = (1 << 20); // Setează OUTPUT HIGH delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Setează OUTPUT LOW delay_ms (100); } } }
Acesta este modul în care un dispozitiv poate fi controlat de la distanță folosind microcontrolerul ESP8266 și ARM7 LPC2148. Codul complet și videoclipul explicativ sunt prezentate mai jos.