- Componenti richiesti
- Modulo Wi-Fi ESP8266
- Collegamento di LPC2148 con ESP8266 per la comunicazione seriale
- Schema elettrico e collegamenti
- Passaggi coinvolti nella programmazione di UART0 in LPC2148 per l'interfacciamento di ESP8266
- Controllo del LED utilizzando ESP8266 IoT Webserver con LPC2148
Il ricetrasmettitore Wi-Fi ESP8266 fornisce un modo per collegare un microcontrollore alla rete. È ampiamente utilizzato nei progetti IoT in quanto è economico, piccolo e facile da usare. Lo abbiamo già utilizzato per creare un server web utilizzando il server web Raspberry e il server web Arduino.
In questo tutorial interfacciamo un modulo Wi-Fi ESP8266 con il microcontrollore ARM7-LPC2148 e creeremo un webserver per controllare il LED connesso a LPC2148. Il flusso di lavoro andrà così:
- Invia comandi AT da LPC2148 a ESP8266 per configurare ESP8266 in modalità AP
- Connetti il laptop o il computer Wi-Fi al punto di accesso ESP8266
- Creare una pagina Web HTML nel PC con l'indirizzo IP del punto di accesso del server Web ESP8266
- Creare un programma per LPC2148 per controllare il LED in base al valore ricevuto da ESP8266
Se sei completamente nuovo al modulo Wi-Fi ESP8266, visita i collegamenti seguenti per familiarizzare con il modulo Wi-Fi ESP8266.
- Guida introduttiva al ricetrasmettitore Wi-Fi ESP8266 (Parte 1)
- Introduzione a ESP8266 (parte 2): utilizzo dei comandi AT
- Guida introduttiva a ESP8266 (parte 3): programmazione di ESP8266 con IDE Arduino e flashing della memoria
Componenti richiesti
Hardware:
- ARM7-LPC2148
- Modulo Wi-Fi ESP8266
- FTDI (da USB a UART TTL)
- GUIDATO
- 3.3V regolatore di tensione IC
- Breadboard
Software:
- KEIL uVision
- Strumento Flash Magic
- Putty
Modulo Wi-Fi ESP8266
ESP8266 è un modulo Wi-Fi a basso costo ampiamente utilizzato per progetti embedded che richiede una bassa potenza di 3,3 V. Utilizza solo due fili TX e RX per la comunicazione seriale e il trasferimento dati tra ESP8266 e qualsiasi microcontrollore dotato di porta UART.
Diagramma dei pin per il modulo Wi-Fi ESP8266
- GND, terra (0 V)
- TX, trasmissione dati bit X
- GPIO 2, ingresso / uscita per scopi generici n. 2
- CH_PD, spegnimento del chip
- GPIO 0, input / output generico n. 0
- RST, ripristino
- RX, Ricevi dati bit X
- VCC, tensione (+3,3 V)
Impostazione del circuito ESP8266
ESP8266 richiede un'alimentazione costante di 3,3 V e non è compatibile con la breadboard. Quindi nel nostro precedente tutorial su ESP8266, abbiamo realizzato un circuito stampato per ESP8266 con regolatore di tensione 3,3 V, un pulsante RESET e configurazione jumper per le modalità di commutazione (comando AT o modalità flash). Può anche essere impostato su breadboard senza utilizzare perf board.
Qui abbiamo saldato tutti i componenti sulla breadboard per creare la nostra scheda Wi-Fi ESP8266
Impara l'interfacciamento di ESP8266 con vari microcontrollori seguendo i link seguenti:
- Guida introduttiva a ESP8266 (parte 3): programmazione di ESP8266 con IDE Arduino e flashing della memoria
- Connessione di ESP8266 con STM32F103C8: creazione di un server web
- Invio di e-mail utilizzando MSP430 Launchpad e ESP8266
- Interfacciamento di ESP8266 con microcontrollore PIC16F877A
- Monitoraggio di dumpster basato su IOT utilizzando Arduino e ESP8266
Tutti i progetti basati su ESP8266 possono essere trovati qui.
Collegamento di LPC2148 con ESP8266 per la comunicazione seriale
Per interfacciare ESP8266 con LPC2148 è necessario stabilire una comunicazione seriale UART tra questi due dispositivi per inviare comandi AT da LPC2148 a ESP8266 per configurare il modulo Wi-Fi ESP8266. Per saperne di più sui comandi AT ESP8266 seguire il collegamento.
Quindi, per utilizzare la comunicazione UART in LPC2148, è necessario inizializzare la porta UART in LPC2148. LPC2148 dispone di due porte UART integrate (UART0 e UART1).
Pin UART in LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Inizializzazione di UART0 in LPC2148
Poiché sappiamo che i pin di LPC2148 sono pin di uso generale, dobbiamo utilizzare il registro PINSEL0 per utilizzare UART0. Prima di inizializzare UART0 consente di conoscere questi registri UART utilizzati in LPC2148 per l'utilizzo della funzione UART.
Registri UART in LPC2148
La tabella seguente mostra alcuni importanti registri utilizzati nella programmazione. Nei nostri tutorial futuri vedremo brevemente gli altri registri utilizzati per UART in LPC2148.
x-0 per UART0 e x-1 per UART1:
REGISTRATI |
NOME REGISTRAZIONE |
USO |
UxRBR |
Ricevi registro buffer |
Contiene valore ricevuto di recente |
UxTHR |
Trasmetti Holding Register |
Contiene dati da trasmettere |
UxLCR |
Registro di controllo di linea |
Contiene il formato frame UART (numero di bit di dati, bit di stop) |
UxDLL |
Divisor Latch LSB |
LSB del valore del generatore di baud rate UART |
UxDLM |
Divisor Latch MSB |
MSB del valore del generatore di baud rate UART |
UxIER |
Interrupt Enable Register |
Viene utilizzato per abilitare le sorgenti di interrupt UART0 o UART1 |
UxIIR |
Registro di identificazione degli interrupt |
Contiene il codice di stato che ha la priorità e l'origine degli interrupt in sospeso |
Schema elettrico e collegamenti
Di seguito sono illustrati i collegamenti tra LPC2148, ESP8266 e FTDI
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 è alimentato tramite un regolatore di tensione 3,3 V e FTDI e LPC2148 sono alimentati da USB.
Perché FTDI è qui?In questo tutorial abbiamo collegato il pin RX di FTDI (USB to UART TTL) al pin TX ESP8266 che è ulteriormente connesso al pin RX LPC2148, in modo da poter vedere la risposta del modulo ESP8266 utilizzando qualsiasi software terminale come putty, Arduino IDE. Ma per quello impostare la velocità di trasmissione in base alla velocità di trasmissione del modulo Wi-Fi ESP8266. (La mia velocità di trasmissione è 9600).
Passaggi coinvolti nella programmazione di UART0 in LPC2148 per l'interfacciamento di ESP8266
Di seguito sono riportati i passaggi di programmazione per collegare ESP8266 con LPC2148 che lo renderanno compatibile con l'IoT.
Passaggio 1: - Per prima cosa dobbiamo inizializzare i pin UART0 TX e RX nel registro PINSEL0.
(P0.0 come TX e P0.1 come RX) PINSEL0 = PINSEL0 - 0x00000005;
Passaggio 2: - Successivamente in U0LCR (registro di controllo della linea), impostare il DLAB (Divisor Latch Access Bit) su 1 in quanto li abilita e quindi impostare il numero di bit di stop su 1 e la lunghezza del frame di dati di 8 bit.
U0LCR = 0x83;
Passaggio 3: - Ora il passaggio importante da notare è impostare i valori di U0DLL e U0DLM a seconda del valore PCLK e della velocità di trasmissione desiderata. Normalmente per ESP8266 usiamo baud rate di 9600. Vediamo quindi come impostare 9600 baud rate per UART0.
Formula per il calcolo del baud rate:
Dove, PLCK: orologio periferico in frequenza (MHz)
U0DLM, U0DLL: registri del divisore del generatore di baud rate
MULVAL, DIVADDVAL: questi registri sono valori generatori di frazioni
Per Baud Rate 9600 con PCLK = 15 MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Quindi U0DLM = 0 e otteniamo U0DLL = 97 (Frazione non consentita)
Quindi usiamo il seguente codice:
U0DLM = 0x00; U0DLL = 0x61; (Valore esadecimale di 97)
Passaggio 4: - Infine, dobbiamo impostare la disabilitazione DLA (Divisor Latch Access) su 0 in LCR.
Quindi abbiamo
U0LCR & = 0x0F;
Passaggio 5: - Per la trasmissione di un carattere, caricare il byte da inviare in U0THR e attendere che venga trasmesso il byte, che viene indicato dal TRE che diventa HIGH.
void UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Passaggio 6: - Per la trasmissione di una stringa, viene utilizzata la funzione di seguito. Per inviare i dati delle stringhe uno per uno abbiamo utilizzato la funzione carattere dal passaggio precedente.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Passaggio 7: - Per ricevere una stringa, qui viene utilizzata la funzione di routine del servizio di interruzione perché un modulo Wi-Fi ESP8266 trasmetterà i dati al pin RX di LPC2148 ogni volta che inviamo un comando AT o ogni volta che un ESP8266 invia dati a LPC2148, come se inviamo dati a un server web di ESP8266.
Esempio: quando inviamo il comando AT a ESP8266 da LPC2148 ("AT \ r \ n"), otteniamo una risposta "OK" dal modulo Wi-Fi.
Quindi utilizziamo un interrupt qui per controllare il valore ricevuto dal modulo Wi-Fi ESP8266 poiché la routine del servizio di interrupt ISR ha la priorità più alta.
Pertanto, ogni volta che un ESP8266 invia dati al pin RX di LPC2148, viene impostato l'interrupt e viene eseguita la funzione ISR.
Passaggio 8: - Per abilitare gli interrupt per UART0, utilizzare il codice seguente
Il VICintEnable è un registro di abilitazione degli interrupt vettoriale utilizzato per abilitare l'interrupt per UART0.
VICIntEnable - = (1 << 6);
Il VICVecCnt10 è un registro di controllo degli interrupt vettoriale che alloca lo slot per UART0.
VICVectCntl0 = (1 << 5) - 6;
Successivamente il VICVectaddr0 è un registro di indirizzi di interrupt vettoriale che ha l'indirizzo ISR della routine di servizio di interrupt.
VICVectAddr0 = (non firmato) UART0_ISR;
Quindi dobbiamo assegnare l'interrupt per il registro del buffer di ricezione RBR. Quindi nel registro di abilitazione interrupt (U0IER) impostiamo RBR. Quindi quella routine di servizio di interrupt (ISR) viene chiamata quando riceviamo dati.
U0IER = IER_RBR;
Infine, abbiamo la funzione ISR che deve svolgere determinate attività quando riceviamo dati dal modulo Wi-Fi ESP8266. Qui leggiamo semplicemente il valore ricevuto dall'ESP8266 che è presente nell'U0RBR e memorizziamo quel valore nell'UART0_BUFFER. Infine, alla fine dell'ISR, VICVectAddr dovrebbe essere impostato con valore zero o fittizio.
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; }
Passaggio 9: - Poiché il modulo Wi-Fi ESP8266 deve essere impostato in modalità AP, è necessario inviare i comandi AT rispettati da LPC2148 utilizzando la funzione UART0_SendString () .
I comandi AT inviati a ESP8266 da LPC2148 sono menzionati di seguito. Dopo aver inviato ogni comando AT, ESP8266 risponde con "OK"
1. Invia AT a ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Invia AT + CWMODE = 2 (impostazione di ESP8266 in modalità AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Invia AT + CIFSR (per ottenere l'IP dell'AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Invia AT + CIPMUX = 1 (per connessioni multiple)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Invia AT + CIPSERVER = 1,80 (per ABILITAZIONE ESP8266 SERVER con PORTA APERTA)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
File esadecimale di programmazione e lampeggiamento su LPC2148
Per programmare ARM7-LPC2148 abbiamo bisogno dello strumento keil uVision e Flash Magic. Un cavo USB viene utilizzato qui per programmare ARM7 Stick tramite la porta micro USB. Scriviamo il codice usando Keil e creiamo un file esadecimale, quindi il file HEX viene aggiornato su ARM7 stick usando Flash Magic. Per saperne di più sull'installazione di keil uVision e Flash Magic e su come usarli, segui il link Primi passi con il microcontrollore ARM7 LPC2148 e programmalo usando Keil uVision.
Il programma completo è fornito alla fine del tutorial.
Nota: durante il caricamento del file HEX su LPC2148 non è necessario alimentare il modulo Wi-Fi ESP8266 e il modulo FTDI che è connesso con LPC2148.
Controllo del LED utilizzando ESP8266 IoT Webserver con LPC2148
Passaggio 1: - Dopo aver caricato il file HEX su LPC2148, collegare il modulo FTDI al PC tramite cavo USB e aprire il software del terminale putty.
Seleziona Seriale, quindi seleziona la porta COM in base al tuo PC o il mio LAPTOP era (COM3). La velocità di trasmissione è 9600.
Passaggio 2: - Ora resetta il modulo Wi-Fi ESP8266 o semplicemente SPEGNERE e ACCENDERLO di nuovo, il terminale putty mostrerà la risposta del modulo Wi-Fi ESP8266 come mostrato di seguito.
Passaggio 3: - Ora premere il pulsante RESET sull'LPC2148. Successivamente LPC2148 inizia a inviare comandi AT a ESP8266. Possiamo vedere la risposta di ciò nel terminale del mastice.
Passaggio 4: - Come puoi vedere nell'immagine sopra, l'ESP8266 è impostato nella MODALITÀ 2 che è la modalità AP e l'indirizzo dell'APIP è 192.168.4.1. Annotare questo indirizzo perché questo indirizzo sarà codificato nel codice HTML della pagina Web per controllare il LED collegato a LPC2148.
Importante : quando ESP8266 è in modalità AP, è necessario collegare il PC all'AP ESP8266. Guarda l'immagine sotto il mio modulo ESP8266 mostra AP nel nome di ESP_06217B (è aperto e non ha password).
Passaggio 5: - Dopo aver collegato il PC all'AP ESP8266, aprire un blocco note e copiare e incollare la seguente pagina Web del programma HTML. Assicurati di cambiare l'indirizzo APIP in base al tuo modulo Wi-Fi ESP8266
Benvenuto in Circuit Digest
ESP8266 Interfacciamento con LPC2148: creazione di un server web per controllare un LED
LED ACCESO LED SPENTOIn questa pagina HTML, abbiamo creato due pulsanti con collegamento ipertestuale per accendere e spegnere il LED dalla pagina web.
Infine salva il documento del blocco note come estensione .html
La pagina web verrà mostrata come di seguito nel browser web.
Qui l'indirizzo è l'indirizzo IP dell'AP 192.168.4.1 e inviamo i valori @ e% per accendere e spegnere il LED utilizzando questa logica di seguito in LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logica per impostare LED ON o OFF a seconda del valore ricevuto da ESP8266 { IOSET1 = (1 << 20); // Imposta OUTPUT HIGH delay_ms (100); } altrimenti se (COMANDO == LEDOFF) { IOCLR1 = (1 << 20); // Imposta OUTPUT LOW delay_ms (100); } } }
È così che un dispositivo può essere controllato a distanza utilizzando ESP8266 e il microcontrollore ARM7 LPC2148. Di seguito vengono forniti il codice completo e il video esplicativo.