- Potrebne komponente
- ESP8266 Wi-Fi modul
- Povezava LPC2148 z ESP8266 za serijsko komunikacijo
- Shema vezja in povezave
- Koraki, povezani s programiranjem UART0 v LPC2148 za povezovanje ESP8266
- Upravljanje LED z uporabo spletnega strežnika ESP8266 IoT z LPC2148
ESP8266 oddajnik Wi-Fi omogoča povezavo mikrokrmilnika z omrežjem. Veliko se uporablja v IoT projektih, saj je poceni, majhen in enostaven za uporabo. Pred tem smo ga že uporabljali za ustvarjanje spletnega strežnika z uporabo spletnega strežnika Raspberry in Arduino.
V tej vadnici bomo povezali Wi-Fi modul ESP8266 z mikrokrmilnikom ARM7-LPC2148 in ustvarili spletni strežnik za nadzor LED, priključene na LPC2148. Potek dela bo potekal tako:
- Pošljite ukaze AT iz LPC2148 na ESP8266, da konfigurirate ESP8266 v načinu AP
- Prenosni ali računalniški Wi-Fi povežite z dostopno točko ESP8266
- Ustvarite spletno stran HTML v računalniku z IP naslovom dostopne točke spletnega strežnika ESP8266
- Ustvarite program za LPC2148 za nadzor LED glede na vrednost, prejeto od ESP8266
Če je vaš popolnoma nov modul ESP8266 Wi-Fi, obiščite spodnje povezave in se seznanite z modulom ESP8266 Wi-Fi.
- Kako začeti z oddajnikom Wi-Fi ESP8266 (1. del)
- Uvod v ESP8266 (2. del): Uporaba ukazov AT
- Uvod v ESP8266 (3. del): Programiranje ESP8266 z Arduino IDE in utripanje njegovega pomnilnika
Potrebne komponente
Strojna oprema:
- ARM7-LPC2148
- ESP8266 Wi-Fi modul
- FTDI (USB do UART TTL)
- LED
- 3.3V napetostni regulator IC
- Breadboard
Programska oprema:
- KEIL uVision
- Flash Magic Tool
- Kit
ESP8266 Wi-Fi modul
ESP8266 je poceni modul Wi-Fi, ki se pogosto uporablja za vdelane projekte in zahteva nizko moč 3,3 V. Za serijsko komunikacijo in prenos podatkov med ESP8266 in katerim koli mikrokrmilnikom, ki ima vrata UART, uporablja samo dve žici TX in RX.
Shema pin za modul Wi-Fi ESP8266
- GND, tla (0 V)
- TX, prenos podatkovnega bita X
- GPIO 2, vhod / izhod za splošno uporabo št
- CH_PD, izklop čipa
- GPIO 0, vhod / izhod za splošno uporabo št
- RST, ponastavi
- RX, Sprejem podatkovnega bita X
- VCC, napetost (+3,3 V)
Nastavitev vezja ESP8266
ESP8266 zahteva stalno napajanje 3,3 V in ni prijazen do plošče. Tako smo v prejšnji vadnici o ESP8266 izdelali vezje za ESP8266 z regulatorjem napetosti 3,3 V, gumbom RESET in nastavitvijo mostička za preklapljanje med načini (AT ukaz ali način bliskavice). Nastavite ga lahko tudi na plošči, ne da bi uporabljali ploščo za perf.
Tu smo spajali vse komponente na plošči in izdelali lastno ploščo ESP8266 Wi-Fi
Naučite se povezovanja ESP8266 z različnimi mikrokrmilniki po spodnjih povezavah:
- Uvod v ESP8266 (3. del): Programiranje ESP8266 z Arduino IDE in utripanje njegovega pomnilnika
- Povezava ESP8266 s STM32F103C8: Ustvarjanje spletnega strežnika
- Pošiljanje e-pošte z uporabo lansirne ploščice MSP430 in ESP8266
- Povezava ESP8266 z mikrokrmilnikom PIC16F877A
- Nadzor smetnjakov na osnovi IOT z uporabo Arduino in ESP8266
Vse projekte, ki temeljijo na ESP8266, najdete tukaj.
Povezava LPC2148 z ESP8266 za serijsko komunikacijo
Za povezavo ESP8266 z LPC2148 moramo vzpostaviti serijsko komunikacijo UART med tema dvema napravama za pošiljanje ukazov AT iz LPC2148 na ESP8266 za konfiguracijo modula Wi-Fi ESP8266. Če želite izvedeti več o ukazih ESP8266 AT, sledite povezavi.
Za uporabo komunikacije UART v LPC2148 moramo torej v LPC2148 inicializirati vrata UART. LPC2148 ima dva vgrajena vrata UART (UART0 in UART1).
Zatiči UART v LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0,0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Inicializacija UART0 v LPC2148
Ker vemo, da so zatiči LPC2148 splošni zatiči, moramo za uporabo UART0 uporabiti register PINSEL0. Preden začnete UART0 seznaniti s temi registri UART, ki se uporabljajo v LPC2148 za uporabo funkcije UART.
Registri UART v LPC2148
Spodnja tabela prikazuje nekatere pomembne registre, ki se uporabljajo pri programiranju. V naših prihodnjih vajah bomo na kratko videli druge registre, ki se uporabljajo za UART v LPC2148.
x-0 za UART0 in x-1 za UART1:
PRIJAVITE SE |
PRIJAVITE IME |
UPORABA |
UxRBR |
Prejmite vmesni register |
Vsebuje nedavno prejeto vrednost |
UxTHR |
Register prenosa imetništva |
Vsebuje podatke za prenos |
UxLCR |
Linijski nadzorni register |
Vsebuje obliko okvirja UART (št. Podatkovnih bitov, stop bit) |
UxDLL |
Zapornik delilnika LSB |
LSB vrednosti generatorja hitrosti prenosa UART |
UxDLM |
Ločilnik zapaha MSB |
MSB vrednosti generatorja hitrosti prenosa UART |
UXIER |
Prekinitev omogoči registracijo |
Uporablja se za omogočanje virov prekinitev UART0 ali UART1 |
UxIIR |
Register identifikacije prekinitev |
Vsebuje statusno kodo, ki ima prednost in vir čakajočih prekinitev |
Shema vezja in povezave
Povezave med LPC2148, ESP8266 in FTDI so prikazane spodaj
LPC2148 |
ESP8266 |
FTDI |
TX (P0,0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 se napaja preko 3.3V napetostnega regulatorja, FTDI in LPC2148 pa iz USB-ja.
Zakaj je tu FTDI?V tej vadnici smo RX pin FTDI (USB do UART TTL) povezali s pinom ESP8266 TX, ki je nadalje povezan s pinom LPC2148 RX, tako da lahko vidimo odziv modula ESP8266 s katero koli terminalno programsko opremo, kot je kit, Arduino IDE. Toda za to nastavite hitrost prenosa v skladu s hitrostjo prenosa v modulu ESP8266 Wi-Fi. (Moja hitrost prenosa je 9600).
Koraki, povezani s programiranjem UART0 v LPC2148 za povezovanje ESP8266
Spodaj so programirani koraki za povezavo ESP8266 z LPC2148, zaradi česar bo IoT združljiv.
1. korak: - Najprej moramo inicializirati zatiče UART0 TX & RX v registru PINSEL0.
(P0.0 kot TX in P0.1 kot RX) PINSEL0 = PINSEL0 - 0x00000005;
Korak 2: - Nato v U0LCR (Register za nadzor vrstic) nastavite DLAB (Bit za dostop do zaklepa delitve) na 1, ko jim to omogoča, nato pa nastavite število zaustavitvenih bitov kot 1 in dolžino podatkovnega okvira 8-bitnih.
U0LCR = 0x83;
3. korak: - Pomemben korak, ki ga je treba opozoriti, je nastavitev vrednosti U0DLL in U0DLM, odvisno od vrednosti PCLK in želene hitrosti prenosa. Običajno za ESP8266 uporabljamo hitrost prenosa 9600. Torej poglejmo, kako nastaviti hitrost prenosa 9600 prenosa za UART0.
Formula za izračun hitrosti prenosa:
Kje, PLCK: frekvenčna periferna ura (MHz)
U0DLM, U0DLL: Registrski delilniki generatorja hitrosti prenosa
MULVAL, DIVADDVAL: Ti registri so vrednosti generatorja ulomkov
Za hitrost prenosa 9600 s PCLK = 15 MHz
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Torej U0DLM = 0 in dobimo U0DLL = 97 (ulomek ni dovoljen)
Torej uporabljamo naslednjo kodo:
U0DLM = 0x00; U0DLL = 0x61; (Šestnajstiška vrednost 97)
4. korak: - Nazadnje moramo v LCR onemogočiti nastavitev DLA (Divisor Latch Access) onemogočeno.
Tako smo
U0LCR & = 0x0F;
5. korak: - Za prenos znaka naložite bajt, ki ga želite poslati v U0THR, in počakajte, da se bajt prenese, kar je označeno s THRE postaja HIGH.
void UART0_TxChar (char ch) { U0THR = ch; medtem ko ((U0LSR & 0x40) == 0); }
6. korak: - Za prenos niza se uporablja spodnja funkcija. Za pošiljanje nizovnih podatkov enega za drugim smo uporabili funkcijo znakov iz zgornjega koraka.
void UART0_SendString (char * str) { uint8_t i = 0; medtem ko (str! = '\ 0') { UART0_TxChar (str); i ++; } }
7. korak: - Za sprejemanje niza se tukaj uporablja funkcija prekinitvene rutinske funkcije, ker modul Wi-Fi ESP8266 pošlje podatke nazaj na pin RX LPC2148, kadar koli pošljemo ukaz AT ali kadar ESP8266 pošlje podatke LPC2148, kot pošljemo podatke na spletni strežnik ESP8266.
Primer: Ko pošljemo ukaz AT na ESP8266 iz LPC2148 (»AT \ r \ n«), dobimo odgovor »V redu« od modula Wi-Fi.
Torej tukaj uporabljamo prekinitev za preverjanje vrednosti, prejete od modula Wi-Fi ESP8266, saj ima rutina prekinitvenih storitev ISR največjo prednost.
Torej, kadar koli ESP8266 pošlje podatke na RX pin LPC2148, se prekinitev nastavi in se izvrši funkcija ISR.
8. korak: - Če želite omogočiti prekinitve za UART0, uporabite naslednjo kodo
VICintEnable je Vektorsko prekinitev omogočajo register uporablja, da bi prekinitev za UART0.
VICIntEnable - = (1 << 6);
VICVecCnt10 je Vektorsko prekinitev krmilnega registra, da je reža razporeja za UART0.
VICVectCntl0 = (1 << 5) - 6;
Nato je VICVectaddr0 vektorski register naslovov prekinitev, ki ima naslov ISR rutinske storitve prekinitve.
VICVectAddr0 = (nepodpisano) UART0_ISR;
Nato moramo dodeliti prekinitev za vmesni register RBR Receive. Tako smo v registru za omogočanje prekinitev (U0IER) nastavili na RBR. Torej, ko prejmemo podatke, se pokliče prekinitvena rutina (ISR).
U0IER = IER_RBR;
Na koncu imamo še funkcijo ISR, ki mora opraviti določeno nalogo, ko prejmemo podatke iz modula Wi-Fi ESP8266. Tu pravkar preberemo prejeto vrednost iz ESP8266, ki je prisotna v U0RBR, in shranimo to vrednost v UART0_BUFFER. Na koncu je treba na koncu ISR nastaviti VICVectAddr z nič ali navidezno vrednostjo.
void UART0_ISR () __irq { nepodpisani znak IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; če (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; če (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
9. korak: - Ker bi moral biti modul Wi-Fi ESP8266 nastavljen v načinu AP, moramo poslati spoštovane ukaze AT iz LPC2148 s funkcijo UART0_SendString () .
V ukazi AT, ki se pošiljajo na ESP8266 od LPC2148 so navedeni v nadaljevanju. Po pošiljanju vsakega ukaza AT ESP8266 odgovori z "OK"
1. Pošlje AT na ESP8266
UART0_SendString ("AT \ r \ n"); zamuda_ms (3000);
2. Pošlje AT + CWMODE = 2 (nastavitev ESP8266 v načinu AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); zamuda_ms (3000);
3. Pošlje AT + CIFSR (za pridobitev IP-ja AP)
UART0_SendString ("AT + CIFSR \ r \ n"); zamuda_ms (3000);
4. Pošlje AT + CIPMUX = 1 (za večkratne povezave)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); zamuda_ms (3000);
5. Pošlje AT + CIPSERVER = 1,80 (ZA Omogočanje strežnika ESP8266 z ODPRTIM PORTOM)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); zamuda_ms (3000);
Programiranje in utripanje šestnajstiške datoteke na LPC2148
Za programiranje ARM7-LPC2148 potrebujemo orodje keil uVision & Flash Magic. Tukaj se uporablja USB kabel za programiranje ARM7 Stick prek vrat micro USB. Kodo napišemo s pomočjo Keila in ustvarimo šestnajstiško datoteko, nato pa datoteko HEX z Flash Magic utripnemo na ARM7. Če želite izvedeti več o namestitvi keil uVision in Flash Magic ter kako jih uporabljati, sledite povezavi Uvod v mikrokrmilnik ARM7 LPC2148 in ga programirajte s pomočjo Keil uVision.
Celoten program je podan na koncu vaje.
Opomba: Med nalaganjem datoteke HEX na LPC2148 ne smete napajati brezžičnega modula ESP8266 in modula FTDI, ki je povezan z LPC2148.
Upravljanje LED z uporabo spletnega strežnika ESP8266 IoT z LPC2148
1. korak: - Po nalaganju datoteke HEX na LPC2148 povežite modul FTDI z računalnikom prek kabla USB in odprite programsko opremo terminala za kite.
Izberite Serial in nato izberite COM vrata glede na vaš PC ali LAPTOP mine (COM3). Hitrost prenosa je 9600.
2. korak: Zdaj ponastavite modul Wi-Fi ESP8266 ali pa ga preprosto IZKLOPITE in znova vklopite, terminal za kiti bo prikazal odziv modula Wi-Fi ESP8266, kot je prikazano spodaj.
3. korak: - Zdaj pritisnite gumb RESET na LPC2148. Po tem LPC2148 začne pošiljati ukaze AT na ESP8266. Odziv tega lahko vidimo v terminalu za kite.
4. korak: - Kot lahko vidite na zgornji sliki, je ESP8266 nastavljen v MODE 2, ki je način AP, naslov APIP pa 192.168.4.1. Upoštevajte ta naslov, ker bo ta naslov v kodi HTML spletne strani težko kodiran za nadzor LED, priključene na LPC2148.
Pomembno : Ko je ESP8266 v načinu AP, morate svoj računalnik povezati z ESP8266 AP. Glej sliko pod mojim modulom ESP8266 prikazuje AP v imenu ESP_06217B (odprt je in nima gesla).
5. korak: - Po povezavi računalnika z dostopno točko ESP8266 odprite beležko in kopirajte in prilepite naslednjo spletno stran programa HTML. Spremenite naslov APIP v skladu z modulom Wi-Fi ESP8266
Dobrodošli v Circuit Digest
ESP8266 Vmesnik z LPC2148: Ustvarjanje spletnega strežnika za nadzor LED
LED VKLOP LED IZKLOPLJENNa tej strani HTML smo ustvarili dva hiperpovezana gumba za vklop in izklop LED s spletne strani.
Končno shranite dokument beležnice kot končnico .html
Spletna stran bo v spletnem brskalniku prikazana kot spodaj.
Tu je naslov IP naslov IP 192.168.4.1 in pošljemo vrednosti @ in%, da vklopimo in izklopimo LED s pomočjo spodnje logike v LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logika za nastavitev LED VKLOP ali IZKLOP glede na prejeto vrednost iz ESP8266 { IOSET1 = (1 << 20); // nastavi OUTPUT HIGH delay_ms (100); } sicer če (UKAZ == LEDOFF) { IOCLR1 = (1 << 20); // nastavi OUTPUT LOW delay_ms (100); } } }
Tako lahko napravo upravljate na daljavo z mikrokrmilnikom ESP8266 in ARM7 LPC2148. Celotna koda in video z obrazložitvijo je spodaj.