- Необходими компоненти
- ESP8266 Wi-Fi модул
- Свързване на LPC2148 с ESP8266 за последователна комуникация
- Електрическа схема и връзки
- Стъпки, включени в програмирането на UART0 в LPC2148 за свързване с ESP8266
- Управление на светодиода с помощта на ESP8266 IoT уеб сървър с LPC2148
ESP8266 Wi-Fi приемо-предавател осигурява начин за свързване на микроконтролер към мрежата. Той се използва широко в IoT проекти, тъй като е евтин, малък и лесен за използване. Преди това го използвахме за създаване на уеб сървър, използващ Raspberry уеб сървър и Arduino уеб сървър.
В този урок ще свържем Wi-Fi модул ESP8266 с микроконтролера ARM7-LPC2148 и ще създадем уеб сървър за управление на светодиода, свързан към LPC2148. Работният процес ще върви по следния начин:
- Изпратете AT команди от LPC2148 до ESP8266, за да конфигурирате ESP8266 в режим AP
- Свържете Wi-Fi на лаптопа или компютъра с точката за достъп ESP8266
- Създайте HTML страница в компютър с IP адрес на точката за достъп на уеб сървъра ESP8266
- Създайте програма за LPC2148 за управление на светодиода според стойността, получена от ESP8266
Ако вашият напълно нов за ESP8266 Wi-Fi модул, посетете връзките по-долу, за да се запознаете с ESP8266 Wi-Fi модула.
- Първи стъпки с Wi-Fi приемо-предавател ESP8266 (част 1)
- Първи стъпки с ESP8266 (част 2): Използване на AT команди
- Първи стъпки с ESP8266 (част 3): Програмиране на ESP8266 с Arduino IDE и мигане на паметта му
Необходими компоненти
Хардуер:
- ARM7-LPC2148
- ESP8266 Wi-Fi модул
- FTDI (USB към UART TTL)
- LED
- 3.3V регулатор на напрежение IC
- Макет
Софтуер:
- KEIL uVision
- Инструмент Flash Flash
- Шпакловка
ESP8266 Wi-Fi модул
ESP8266 е евтин широко използван Wi-Fi модул за вградени проекти, който изисква ниска мощност от 3.3V. Той използва само два проводника TX и RX за серийна комуникация и трансфер на данни между ESP8266 и всеки микроконтролер с UART порт.
Диаграма на щифтовете за Wi-Fi модул ESP8266
- GND, земя (0 V)
- TX, бит за предаване на данни X
- GPIO 2, Вход / изход за общо предназначение № 2
- CH_PD, изключване на чипа
- GPIO 0, Вход / изход за общо предназначение № 0
- RST, нулиране
- RX, Получаване на бит за данни X
- VCC, напрежение (+3.3 V)
Настройка на платка ESP8266
ESP8266 изисква постоянно захранване от 3.3V и не е приятелски настроен. Така че в нашия предишен урок за ESP8266, ние направихме платка за ESP8266 с регулатор на напрежение 3.3V, бутон RESET и настройка на джъмпер за превключване на режими (AT команда или режим на светкавица). Може да се настрои и на макет, без да се използва перф борд.
Тук спойкахме всички компоненти на макет, за да направим своя собствена Wi-Fi платка ESP8266
Научете взаимодействието на ESP8266 с различни микроконтролери, като следвате връзките по-долу:
- Първи стъпки с ESP8266 (част 3): Програмиране на ESP8266 с Arduino IDE и мигане на паметта му
- Свързване на ESP8266 със STM32F103C8: Създаване на уеб сървър
- Изпращане на имейл чрез MSP430 Launchpad и ESP8266
- Връзка ESP8266 с микроконтролер PIC16F877A
- IOT базиран Dumpster мониторинг с помощта на Arduino & ESP8266
Всички проекти, базирани на ESP8266, можете да намерите тук.
Свързване на LPC2148 с ESP8266 за последователна комуникация
За да свържем ESP8266 с LPC2148, трябва да установим UART серийна комуникация между тези две устройства за изпращане на AT команди от LPC2148 до ESP8266 за конфигуриране на Wi-Fi модула ESP8266. За да научите повече за командите ESP8266 AT, следвайте връзката.
Така че, за да използваме UART комуникация в LPC2148, трябва да инициализираме UART порта в LPC2148. LPC2148 има два вградени UART порта (UART0 и UART1).
UART щифтове в LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Инициализиране на UART0 в LPC2148
Тъй като знаем, че щифтовете на LPC2148 са щифтове с общо предназначение, затова трябва да използваме регистър PINSEL0 за използване на UART0. Преди инициализиране на UART0 уведомява за тези UART регистри, използвани в LPC2148 за използване на функцията UART.
UART се регистрира в LPC2148
Таблицата по-долу показва някои важни регистри, използвани при програмирането. В нашите бъдещи уроци ще видим накратко за други регистри, използвани за UART в LPC2148.
x-0 за UART0 и x-1 за UART1:
РЕГИСТРИРАМ |
РЕГИСТРИРАНЕ НА ИМЕ |
ИЗПОЛЗВАЙТЕ |
UxRBR |
Получаване на буферен регистър |
Съдържа наскоро получена стойност |
UxTHR |
Регистър за предаване на холдинг |
Съдържа данни за предаване |
UxLCR |
Регистър за контрол на линията |
Съдържа UART формат на кадъра (Брой битове за данни, стоп бит) |
UxDLL |
Делител Latch LSB |
LSB на стойността на генератора на скорост на предаване на UART |
UxDLM |
Делител Latch MSB |
MSB на стойността на генератора на скорост на предаване на UART |
UXIER |
Прекъсване Активиране на регистъра |
Използва се за активиране на източници на прекъсвания UART0 или UART1 |
UxIIR |
Регистър за идентификация на прекъсвания |
Той съдържа кода на състоянието, който има приоритет и източник на чакащи прекъсвания |
Електрическа схема и връзки
Връзките между LPC2148, ESP8266 и FTDI са показани по-долу
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 се захранва чрез 3.3V регулатор на напрежение, а FTDI и LPC2148 се захранват от USB.
Защо FTDI е тук?В този урок сме свързали RX пина на FTDI (USB към UART TTL) към пина ESP8266 TX, който е допълнително свързан към пина LPC2148 RX, така че да можем да видим отговора на модула ESP8266 с помощта на всеки терминален софтуер като шпакловка, Arduino IDE. Но за това задайте скоростта на предаване според скоростта на предаване на ESP8266 Wi-Fi модула. (Моята скорост на предаване е 9600).
Стъпки, включени в програмирането на UART0 в LPC2148 за свързване с ESP8266
По-долу са описани стъпките за програмиране за свързване на ESP8266 с LPC2148, което ще го направи съвместим с IoT.
Стъпка 1: - Първо трябва да инициализираме пиновете UART0 TX & RX в регистъра PINSEL0.
(P0.0 като TX и P0.1 като RX) PINSEL0 = PINSEL0 - 0x00000005;
Стъпка 2: - След това в U0LCR (Регистър за управление на линията), задайте DLAB (бит за достъпа до делител на разделител) на 1, тъй като ги позволява и след това задайте брой стоп битове като 1 и дължина на рамката за данни от 8 бита.
U0LCR = 0x83;
Стъпка 3: - Важна стъпка, която трябва да се отбележи, е да зададете стойностите на U0DLL и U0DLM в зависимост от стойността на PCLK и желаната скорост на предаване. Обикновено за ESP8266 използваме скорост на предаване 9600. Така че нека видим как да зададем 9600 скорост на предаване за UART0.
Формула за изчисляване на скоростта на предаване:
Където, PLCK: Честотен периферен часовник (MHz)
U0DLM, U0DLL: Регистри на делителя на генератор на скорост на предаване
MULVAL, DIVADDVAL: Тези регистри са стойности на генератора на фракции
За скорост на предаване 9600 с PCLK = 15MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Така че U0DLM = 0 и получаваме U0DLL = 97 (не се допуска дроб)
Затова използваме следния код:
U0DLM = 0x00; U0DLL = 0x61; (Шестнадесетична стойност 97)
Стъпка 4: - И накрая, трябва да направим деактивирането на DLA (Divisor Latch Access) зададено на 0 в LCR.
Така че имаме
U0LCR & = 0x0F;
Стъпка 5: - За предаване на символ, заредете байта, който трябва да бъде изпратен в U0THR, и изчакайте, докато байтът бъде предаден, което е обозначено с ТРЕ, ставайки HIGH.
void UART0_TxChar (char ch) { U0THR = ch; докато ((U0LSR & 0x40) == 0); }
Стъпка 6: - За предаване на низ се използва долната функция. За изпращане на низови данни един по един използвахме символната функция от горната стъпка.
void UART0_SendString (char * str) { uint8_t i = 0; докато (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Стъпка 7: - За получаване на низ тук се използва функция за прекъсване на услугата за прекъсване, тъй като Wi-Fi модул ESP8266 ще предава данни обратно към RX щифта на LPC2148, когато изпращаме AT команда или когато ESP8266 изпраща данни към LPC2148, както ние изпращаме данни към уеб сървър на ESP8266.
Пример: Когато изпратим AT команда към ESP8266 от LPC2148 („AT \ r \ n”), тогава получаваме отговор „OK“ от Wi-Fi модула.
Затова използваме прекъсване тук, за да проверим стойността, получена от Wi-Fi модула ESP8266, тъй като рутинната услуга за прекъсване ISR има най-висок приоритет.
Така че, когато ESP8266 изпраща данни към RX щифт на LPC2148, прекъсването се задава и функцията ISR се изпълнява.
Стъпка 8: - За да активирате прекъсвания за UART0, използвайте следния код
В VICintEnable е векторната прекъсване позволи Регистърът беше да се даде възможност за прекъсване на UART0.
VICIntEnable - = (1 << 6);
В VICVecCnt10 е векторната прекъсване регистър за контрол, която заделя слот за UART0.
VICVectCntl0 = (1 << 5) - 6;
След това VICVectaddr0 е векторен адресен регистър на прекъсванията, който има ISR адрес на рутинната услуга за прекъсване.
VICVectAddr0 = (неподписан) UART0_ISR;
След това трябва да присвоим прекъсване за буферния регистър на RBR Receive. Така че в регистъра за разрешаване на прекъсвания (U0IER) задаваме RBR. Така че тази рутинна услуга за прекъсване (ISR) се извиква, когато получаваме данни.
U0IER = IER_RBR;
И накрая, имаме функцията ISR, която трябва да изпълни определена задача, когато получим данни от Wi-Fi модула ESP8266. Тук просто четем получената стойност от ESP8266, която присъства в U0RBR и съхраняваме тази стойност в UART0_BUFFER. И накрая в края на ISR VICVectAddr трябва да бъде зададен с нулева или фиктивна стойност.
void UART0_ISR () __irq { неподписан char IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; ако (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; ако (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Стъпка 9: - Тъй като ESP8266 Wi-Fi модулът трябва да бъде настроен в режим AP, трябва да изпратим уважените AT команди от LPC2148, като използваме функцията UART0_SendString () .
На команди, на които се изпращат до ESP8266 от LPC2148 са споменати по-долу. След изпращане на всяка AT команда ESP8266 отговаря с „ОК“
1. Изпраща AT до ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Изпраща AT + CWMODE = 2 (Настройка на ESP8266 в режим AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Изпраща AT + CIFSR (за получаване на IP на AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Изпраща AT + CIPMUX = 1 (за многократни връзки)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Изпраща AT + CIPSERVER = 1,80 (За АКТИВИРАНЕ НА ESP8266 СЪРВЪР с ОТВОРЕН ПОРТ)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Програмиране и мигане на шестнадесетичен файл към LPC2148
За да програмираме ARM7-LPC2148, се нуждаем от инструмента keil uVision & Flash Magic. Тук се използва USB кабел за програмиране на ARM7 Stick чрез micro USB порт. Пишем код с помощта на Keil и създаваме шестнадесетичен файл и след това HEX файлът се мига на ARM7 стик с помощта на Flash Magic. За да научите повече за инсталирането на keil uVision и Flash Magic и как да ги използвате, следвайте връзката Първи стъпки с ARM7 LPC2148 Microcontroller и го програмирайте с Keil uVision.
Пълната програма е дадена в края на урока.
Забележка: Докато качвате HEX файл в LPC2148, не трябва да захранвате Wi-Fi модула ESP8266 и модула FTDI, който е свързан с LPC2148.
Управление на светодиода с помощта на ESP8266 IoT уеб сървър с LPC2148
Стъпка 1: - След качване на HEX файл в LPC2148, свържете модула FTDI към компютър чрез USB кабел и отворете софтуера на терминала за шпакловка.
Изберете Serial и след това изберете COM порта според вашия компютър или LAPTOP мина беше (COM3). Скоростта на предаване е 9600.
Стъпка 2: - Сега нулирайте Wi-Fi модула ESP8266 или просто POWER OFF и POWER ON отново, терминалът за шпакловка ще покаже отговора на Wi-Fi модула ESP8266, както е показано по-долу. \
Стъпка 3: - Сега натиснете бутона RESET на LPC2148. След това LPC2148 започва да изпраща AT команди до ESP8266. Можем да видим отговора на това в терминала за шпакловка.
Стъпка 4: - Както можете да видите на изображението по-горе, ESP8266 е настроен в РЕЖИМ 2, който е режим AP и адресът на APIP е 192.168.4.1. Обърнете внимание на този адрес, тъй като този адрес ще бъде кодиран трудно в HTML кода на уеб страницата, за да управлявате светодиода, свързан към LPC2148.
Важно : Когато ESP8266 е в режим AP, трябва да свържете компютъра си с ESP8266 AP. Вижте изображението под моя модул ESP8266 показва AP на името на ESP_06217B (Той е отворен и няма парола).
Стъпка 5: - След като свържете компютъра към ESP8266 AP, отворете бележник и копирайте и поставете следната уеб страница на HTML програма. Не забравяйте да промените APIP адреса според вашия Wi-Fi модул ESP8266
Добре дошли в Circuit Digest
ESP8266 Взаимодействие с LPC2148: Създаване на уеб сървър за управление на светодиод
LED ВКЛ. LED ИЗКЛВ тази HTML страница създадохме два бутона с хипервръзка за включване и изключване на светодиода от уеб страница.
Накрая запишете документа на бележника като разширение .html
Уеб страницата ще бъде показана по-долу в уеб браузъра.
Тук адресът е AP IP адресът 192.168.4.1 и ние изпращаме стойности @ и% за включване и изключване на светодиода, като използваме тази логика по-долу в LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; ако (COMMAND == LEDON) // Логика за задаване на LED ВКЛ или ИЗКЛ в зависимост от получената стойност от ESP8266 { IOSET1 = (1 << 20); // Задава OUTPUT HIGH delay_ms (100); } иначе ако (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Задава OUTPUT LOW delay_ms (100); } } }
Ето как дадено устройство може да се управлява дистанционно с помощта на микроконтролера ESP8266 и ARM7 LPC2148. Пълният код и видеото с обяснения са дадени по-долу.