- Požadované komponenty
- Modul Wi-Fi ESP8266
- Propojení LPC2148 s ESP8266 pro sériovou komunikaci
- Schéma zapojení a zapojení
- Kroky zapojené do programování UART0 v LPC2148 pro propojení ESP8266
- Ovládání LED pomocí webového serveru IoT ESP8266 s LPC2148
Transceiver Wi-Fi ESP8266 poskytuje způsob připojení mikrokontroléru k síti. Je široce používán v projektech IoT, protože je levný, malý a snadno použitelný. Dříve jsme jej použili k vytvoření webového serveru pomocí webového serveru Raspberry a webového serveru Arduino.
V tomto tutoriálu propojíme Wi-Fi modul ESP8266 s mikrokontrolérem ARM7-LPC2148 a vytvoříme webový server pro ovládání LED připojené k LPC2148. Pracovní postup bude vypadat takto:
- Odeslat AT příkazy z LPC2148 na ESP8266 pro konfiguraci ESP8266 v režimu AP
- Připojte notebook nebo počítač Wi-Fi k přístupovému bodu ESP8266
- Vytvořte webovou stránku HTML v počítači s IP adresou přístupového bodu webového serveru ESP8266
- Vytvořte program pro LPC2148 pro ovládání LED podle hodnoty přijaté z ESP8266
Pokud je váš modul Wi-Fi ESP8266 zcela nový, navštivte níže uvedené odkazy a seznamte se s modulem Wi-Fi ESP8266.
- Začínáme s vysílačem / přijímačem Wi-Fi ESP8266 (část 1)
- Začínáme s ESP8266 (část 2): Používání příkazů AT
- Začínáme s ESP8266 (část 3): Programování ESP8266 s Arduino IDE a blikáním paměti
Požadované komponenty
Hardware:
- ARM7-LPC2148
- Modul Wi-Fi ESP8266
- FTDI (USB na UART TTL)
- VEDENÝ
- IC regulátoru napětí 3,3 V
- Nepájivá deska
Software:
- KEIL uVision
- Flash Magic Tool
- Tmel
Modul Wi-Fi ESP8266
ESP8266 je nízkonákladový široce používaný modul Wi-Fi pro vestavěné projekty, který vyžaduje nízkou spotřebu 3,3 V. Pro sériovou komunikaci a přenos dat mezi ESP8266 a jakýmkoli mikrokontrolérem s portem UART používá pouze dva vodiče TX a RX.
Schéma kolíků pro modul Wi-Fi ESP8266
- GND, zem (0 V)
- TX, Přenos datového bitu X
- GPIO 2, univerzální vstup / výstup č. 2
- CH_PD, vypnutí čipu
- GPIO 0, univerzální vstup / výstup č. 0
- RST, Reset
- RX, příjem datového bitu X
- VCC, napětí (+3,3 V)
Nastavení desky plošných spojů ESP8266
ESP8266 vyžaduje stálé napájení 3,3 V a není přátelské k prkénku. Takže v našem předchozím výukovém programu ESP8266 jsme vytvořili desku plošných spojů pro ESP8266 s regulátorem napětí 3,3 V, tlačítkem RESET a nastavením propojky pro přepínání režimů (příkaz AT nebo režim blesku). Lze jej také nastavit na prkénko bez použití desky perf.
Zde jsme pájeli všechny komponenty na prkénku, abychom vytvořili vlastní desku Wi-Fi ESP8266
Naučte se propojovat ESP8266 s různými mikrokontroléry pomocí následujících odkazů:
- Začínáme s ESP8266 (část 3): Programování ESP8266 s Arduino IDE a blikáním paměti
- Propojení ESP8266 s STM32F103C8: Vytvoření webového serveru
- Odesílání e-mailů pomocí MSP430 Launchpad a ESP8266
- Propojení ESP8266 s mikrokontrolérem PIC16F877A
- Monitorování kontejnerů IOT na základě Arduino a ESP8266
Všechny projekty založené na ESP8266 najdete zde.
Propojení LPC2148 s ESP8266 pro sériovou komunikaci
Abychom mohli propojit ESP8266 s LPC2148, musíme mezi těmito dvěma zařízeními navázat sériovou komunikaci UART, abychom mohli odesílat AT příkazy z LPC2148 do ESP8266 pro konfiguraci modulu Wi-Fi ESP8266. Chcete-li se dozvědět více o příkazech ESP8266 AT, přejděte na odkaz.
Abychom mohli používat komunikaci UART v LPC2148, musíme inicializovat port UART v LPC2148. LPC2148 má dva vestavěné porty UART (UART0 a UART1).
UART piny v LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Inicializace UART0 v LPC2148
Jak víme, že piny LPC2148 jsou piny pro všeobecné použití, takže pro použití UART0 musíme použít registr PINSEL0. Před inicializací UART0 se dozvíte o těchto registrech UART používaných v LPC2148 pro použití funkce UART.
UART se registruje v LPC2148
Tabulka níže ukazuje některé důležité registry používané při programování. V našich budoucích výukových programech uvidíme stručně další registry používané pro UART v LPC2148.
x-0 pro UART0 a x-1 pro UART1:
REGISTROVAT |
REGISTROVAT JMÉNO |
POUŽITÍ |
UxRBR |
Přijměte registr vyrovnávací paměti |
Obsahuje nedávno přijatou hodnotu |
UxTHR |
Předejte holdingový registr |
Obsahuje data k přenosu |
UxLCR |
Line Control Register |
Obsahuje formát rámce UART (počet datových bitů, stop bit) |
UxDLL |
Západka rozdělovače LSB |
LSB hodnoty generátoru přenosové rychlosti UART |
UxDLM |
Rozdělovač Západka MSB |
MSB hodnoty generátoru přenosové rychlosti UART |
UxIER |
Přerušení Povolit registraci |
Používá se k povolení zdrojů přerušení UART0 nebo UART1 |
UxIIR |
Přerušení identifikačního registru |
Obsahuje stavový kód, který má prioritu a zdroj čekajících přerušení |
Schéma zapojení a zapojení
Níže je uvedeno připojení mezi LPC2148, ESP8266 a FTDI
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 je napájen přes regulátor napětí 3,3 V a FTDI a LPC2148 jsou napájeny z USB.
Proč je tu FTDI?V tomto tutoriálu jsme připojili RX pin FTDI (USB na UART TTL) k ESP8266 TX pin, který je dále připojen k LPC2148 RX pin, takže můžeme vidět odezvu modulu ESP8266 pomocí jakéhokoli terminálového softwaru, jako je tmel, Arduino IDE. Ale pro to nastavte přenosovou rychlost podle přenosové rychlosti Wi-Fi modulu ESP8266. (Moje přenosová rychlost je 9600).
Kroky zapojené do programování UART0 v LPC2148 pro propojení ESP8266
Níže jsou uvedeny kroky programování pro připojení ESP8266 k LPC2148, díky nimž bude kompatibilní s IoT.
Krok 1: - Nejprve musíme inicializovat piny UART0 TX & RX v registru PINSEL0.
(P0.0 jako TX a P0.1 jako RX) PINSEL0 = PINSEL0 - 0x00000005;
Krok 2: - Dále v U0LCR (Line Control Register) nastavte DLAB (Divisor Latch Access Bit) na 1, jak je povolí, a poté nastavte počet stop bitů na 1 a délku datového rámce na 8 bitů.
U0LCR = 0x83;
Krok 3: - Důležitým krokem je nyní nastavení hodnot U0DLL a U0DLM v závislosti na hodnotě PCLK a požadované přenosové rychlosti. Normálně pro ESP8266 používáme přenosovou rychlost 9600. Podívejme se tedy, jak nastavit přenosovou rychlost 9600 pro UART0.
Vzorec pro výpočet přenosové rychlosti:
Kde, PLCK: Periferní frekvence ve frekvenci (MHz)
U0DLM, U0DLL: registry děliče generátoru přenosové rychlosti
MULVAL, DIVADDVAL: Tyto registry jsou hodnoty generátoru zlomků
Pro přenosovou rychlost 9600 s PCLK = 15 MHz
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Takže U0DLM = 0 a dostaneme U0DLL = 97 (frakce není povolena)
Používáme tedy následující kód:
U0DLM = 0x00; U0DLL = 0x61; (Hexadecimální hodnota 97)
Krok 4: - Nakonec musíme v LCR nastavit deaktivaci DLA (Divisor Latch Access) na 0.
Takže máme
U0LCR & = 0x0F;
Krok 5: - Pro přenos znaku načtěte bajt, který má být odeslán, v U0THR a počkejte, dokud nebude bajt vyslán, což je indikováno tím, že se THRE stává HIGH.
void UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Krok 6: - Pro přenos řetězce se používá níže uvedená funkce. K postupnému odesílání dat řetězce jsme použili znakovou funkci z výše uvedeného kroku.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Krok 7: - Pro příjem řetězce se zde používá funkce přerušení servisní rutiny, protože Wi-Fi modul ESP8266 bude přenášet data zpět na pin RX LPC2148, kdykoli pošleme příkaz AT nebo kdykoli ESP8266 odešle data LPC2148, jako bychom poslali data na webový server ESP8266.
Příklad: Když pošleme příkaz AT na ESP8266 z LPC2148 („AT \ r \ n“), dostaneme odpověď „OK“ z modulu Wi-Fi.
Zde tedy používáme přerušení ke kontrole hodnoty přijaté z modulu Wi-Fi ESP8266, protože rutina služby přerušení ISR má nejvyšší prioritu.
Takže kdykoli ESP8266 odesílá data na RX pin LPC2148, je nastaveno přerušení a je provedena funkce ISR.
Krok 8: - Chcete - li povolit přerušení pro UART0, použijte následující kód
VICintEnable je vektorováno povolení přerušení registr slouží k aktivaci přerušení na UART0.
VICIntEnable - = (1 << 6);
VICVecCnt10 je vektorováno přerušení řídicí registr, který alokuje slot pro UART0.
VICVectCntl0 = (1 << 5) - 6;
Dále je VICVectaddr0 vektorován registr adres přerušení, který má adresu ISR rutiny služby přerušení.
VICVectAddr0 = (bez znaménka) UART0_ISR;
Pak musíme přiřadit přerušení registru RBR Receive bufferu. Takže v Interrupt enable register (U0IER) jsme nastavili pro RBR. Tato rutina přerušení služby (ISR) je volána, když přijímáme data.
U0IER = IER_RBR;
Konečně máme funkci ISR, která musí dělat určitý úkol, když přijímáme data z modulu Wi-Fi ESP8266. Zde jsme pouze načetli přijatou hodnotu z ESP8266, která je přítomna v U0RBR, a uložili jsme tuto hodnotu do UART0_BUFFER. Nakonec na konci ISR by měla být VICVectAddr nastavena na nulovou nebo fiktivní hodnotu.
void UART0_ISR () __irq { nepodepsaný 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: - Protože modul ESP8266 Wi-Fi by měl být nastaven v režimu AP, musíme poslat respektované AT příkazy z LPC2148 pomocí funkce UART0_SendString () .
Níže jsou uvedeny AT příkazy, které jsou odesílány do ESP8266 z LPC2148. Po odeslání každého AT příkazu ESP8266 odpoví „OK“
1. Odesílá AT na ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Odesílá AT + CWMODE = 2 (nastavení ESP8266 v režimu AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Odesílá AT + CIFSR (pro získání IP AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Odesílá AT + CIPMUX = 1 (pro vícenásobná připojení)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Odesílá AT + CIPSERVER = 1,80 (pro POVOLENÍ SERVERU ESP8266 s OTEVŘENÝM PORTEM)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Programování a blikání hexadecimálního souboru na LPC2148
K programování ARM7-LPC2148 potřebujeme nástroj Keil uVision & Flash Magic. Zde se používá USB kabel k programování ARM7 Stick přes micro USB port. Napíšeme kód pomocí Keila a vytvoříme hexadecimální soubor a poté se soubor HEX přenese na flash disk ARM7 pomocí Flash Magic. Chcete-li se dozvědět více o instalaci keil uVision a Flash Magic a o tom, jak je používat, přejděte na odkaz Začínáme s mikrokontrolérem ARM7 LPC2148 a naprogramujte jej pomocí Keil uVision.
Kompletní program je uveden na konci tutoriálu.
Poznámka: Při nahrávání souboru HEX na LPC2148 nesmíte napájet Wi-Fi modul ESP8266 a FTDI modul, který je připojen k LPC2148.
Ovládání LED pomocí webového serveru IoT ESP8266 s LPC2148
Krok 1: - Po nahrání souboru HEX do LPC2148 připojte modul FTDI k PC pomocí kabelu USB a otevřete software terminálního tmelu.
Vyberte Serial a poté vyberte port COM podle vašeho PC nebo dolu LAPTOP (COM3). Přenosová rychlost je 9600.
Krok 2: - Nyní resetujte modul Wi-Fi ESP8266 nebo jen VYPNĚTE a ZAPNĚTE jej znovu, terminál tmelu zobrazí odpověď modulu Wi-Fi ESP8266, jak je uvedeno níže. \
Krok 3: - Nyní stiskněte tlačítko RESET na LPC2148. Poté začne LPC2148 odesílat AT příkazy na ESP8266. Můžeme vidět reakci toho v terminálu tmelu.
Krok 4: - Jak vidíte na obrázku výše, ESP8266 je nastaven v REŽIMU 2, což je režim AP a adresa APIP je 192.168.4.1. Poznamenejte si tuto adresu, protože tato adresa bude pevně zakódována v kódu HTML webové stránky pro ovládání LED připojené k LPC2148.
Důležité : Když je ESP8266 v režimu AP, musíte připojit svůj PC k ESP8266 AP. Viz obrázek níže, můj modul ESP8266 zobrazuje AP ve jménu ESP_06217B (je otevřený a nemá heslo).
Krok 5: - Po připojení počítače k ESP8266 AP otevřete poznámkový blok a zkopírujte a vložte následující webovou stránku programu HTML. Nezapomeňte změnit adresu APIP podle svého modulu Wi-Fi ESP8266
Vítejte v Circuit Digest
ESP8266 Propojení s LPC2148: Vytvoření webového serveru pro ovládání LED
LED svítí LED nesvítíNa této stránce HTML jsme vytvořili dvě tlačítka s hypertextovým odkazem pro zapnutí a vypnutí LED z webové stránky.
Nakonec uložte dokument poznámkového bloku jako příponu .html
Webová stránka se ve webovém prohlížeči zobrazí níže.
Zde je adresa AP IP adresa 192.168.4.1 a my posíláme hodnoty @ a% pro zapnutí a vypnutí LED pomocí této logiky níže v LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logika pro nastavení LED ZAPNUTO nebo VYPNUTO v závislosti na přijaté hodnotě z ESP8266 { IOSET1 = (1 << 20); // Nastaví VÝSTUP VYSOKÝ delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Nastaví VÝSTUP NÍZKÝ delay_ms (100); } } }
Takto lze zařízení dálkově ovládat pomocí mikrokontroléru ESP8266 a ARM7 LPC2148. Kompletní kód a video s vysvětlením jsou uvedeny níže.