- Потрібні компоненти
- ESP8266 модуль Wi-Fi
- Підключення LPC2148 до ESP8266 для послідовного зв’язку
- Схема та з'єднання
- Етапи програмування UART0 в LPC2148 для взаємодії з ESP8266
- Керування світлодіодом за допомогою веб-сервера IoT ESP8266 з LPC2148
Трансивер Wi-Fi ESP8266 забезпечує спосіб підключення мікроконтролера до мережі. Він широко використовується в проектах IoT, оскільки він дешевий, крихітний і простий у використанні. Раніше ми використовували його для створення веб-сервера за допомогою веб-серверів Raspberry та Arduino.
У цьому посібнику ми взаємодіємо з модулем Wi-Fi ESP8266 з мікроконтролером ARM7-LPC2148 та створимо веб-сервер для управління світлодіодом, підключеним до LPC2148. Робочий процес буде виглядати так:
- Надішліть команди AT з LPC2148 на ESP8266, щоб налаштувати ESP8266 у режимі точки доступу
- Підключіть ноутбук або комп’ютер Wi-Fi до точки доступу ESP8266
- Створіть веб-сторінку HTML на ПК з IP-адресою точки доступу веб-сервера ESP8266
- Створіть програму для LPC2148 для управління світлодіодом відповідно до значення, отриманого від ESP8266
Якщо ваш абсолютно новий для ESP8266 модуль Wi-Fi відвідає посилання нижче, щоб ознайомитися з модулем Wi-Fi ESP8266.
- Початок роботи з трансивером Wi-Fi ESP8266 (частина 1)
- Початок роботи з ESP8266 (Частина 2): Використання команд AT
- Початок роботи з ESP8266 (частина 3): Програмування ESP8266 за допомогою Arduino IDE та перепрошивка його пам'яті
Потрібні компоненти
Обладнання:
- ARM7-LPC2148
- Модуль Wi-Fi ESP8266
- FTDI (USB до UART TTL)
- СВІТЛОДІОДНИЙ
- Схема регулятора напруги 3,3 В
- Макет
Програмне забезпечення:
- KEIL uVision
- Інструмент Flash Magic
- Шпаклівка
ESP8266 модуль Wi-Fi
ESP8266 - це недорогий широко використовуваний модуль Wi-Fi для вбудованих проектів, який вимагає низької потужності 3,3 В. Він використовує лише два дроти TX і RX для послідовного зв'язку та передачі даних між ESP8266 та будь-яким мікроконтролером, що має порт UART.
Схема контактів для модуля Wi-Fi ESP8266
- GND, земля (0 В)
- TX, передавати біт даних X
- GPIO 2, вхід / вихід загального призначення No2
- CH_PD, відключення живлення чіпа
- GPIO 0, вхід / вихід загального призначення No 0
- RST, скидання
- RX, отримання даних біт X
- VCC, напруга (+3,3 В)
Налаштування друкованої плати ESP8266
ESP8266 вимагає постійного живлення 3,3 В, і це не зручно. Отже, у нашому попередньому підручнику з ESP8266 ми створили друковану плату для ESP8266 з регулятором напруги 3,3 В, кнопкою RESET та налаштуванням перемички для перемикання режимів (AT команда або режим спалаху). Його також можна встановити на макеті без використання дошки для перфорації.
Тут ми припаяли всі компоненти на макетній платі, щоб зробити власну плату Wi-Fi ESP8266
Дізнайтеся про взаємодію ESP8266 з різними мікроконтролерами, перейшовши за посиланнями нижче:
- Початок роботи з ESP8266 (частина 3): Програмування ESP8266 за допомогою Arduino IDE та перепрошивка його пам'яті
- Підключення ESP8266 до STM32F103C8: Створення веб-сервера
- Надсилання електронної пошти за допомогою панелі запуску MSP430 та ESP8266
- Зв'язок ESP8266 з мікроконтролером PIC16F877A
- Моніторинг смітників на основі IOT за допомогою 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 є шпильками загального призначення, тому для використання UART0 нам потрібно використовувати регістр PINSEL0. Перед ініціалізацією UART0 повідомте про ці регістри UART, що використовуються в LPC2148 для використання функції UART.
Реєстрація UART у LPC2148
У таблиці нижче наведено деякі важливі регістри, що використовуються при програмуванні. У наших майбутніх підручниках ми коротко побачимо інші регістри, що використовуються для UART в LPC2148.
x-0 для UART0 та x-1 для UART1:
РЕЄСТРУЙТЕСЯ |
РЕЄСТРУЙСЯ НАЗВА |
ВИКОРИСТАННЯ |
UxRBR |
Отримати буферний реєстр |
Містить нещодавно отриману вартість |
UxTHR |
Реєстр холдингових передач |
Містить дані, що передаються |
UxLCR |
Реєстр управління лінією |
Містить формат кадру UART (кількість бітів даних, стоп-біт) |
UxDLL |
Дільник Засувка LSB |
LSB значення генератора швидкості передачі даних UART |
UxDLM |
Дільник Засувка MSB |
MSB значення генератора швидкості передачі даних UART |
КОРІШЕ |
Реєстр увімкнення переривань |
Він використовується для ввімкнення джерел переривань UART0 або UART1 |
UxIIR |
Реєстр ідентифікації переривань |
Він містить код стану, який має пріоритет та джерело очікуваних переривань |
Схема та з'єднання
Зв'язки між LPC2148, ESP8266 та FTDI показано нижче
LPC2148 |
ESP8266 |
ПІІ |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 живиться через регулятор напруги 3,3 В, а FTDI та LPC2148 живляться від USB.
Чому тут прямі інвестиції?У цьому підручнику ми підключили 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: Частота периферійних тактових частот (МГц)
U0DLM, U0DLL: регістри дільника генератора швидкості передачі
MULVAL, DIVADDVAL: Ці регістри є значеннями генератора дробу
Для швидкості передачі даних 9600 з PCLK = 15 МГц
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, і зачекайте, поки байт не буде переданий, що позначається ТРИ, що стає ВИСОКИМ.
void UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Крок 6: - Для передачі рядка використовується нижченаведена функція. Для надсилання рядкових даних по черзі ми використовували функцію символу з верхнього кроку.
void UART0_SendString (char * str) { uint8_t i = 0; while (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 { непідписаний символ 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: - Оскільки модуль Wi-Fi ESP8266 повинен бути встановлений у режимі точки доступу, нам потрібно надіслати відповідні AT-команди з LPC2148 за допомогою функції UART0_SendString () .
Команди AT, які надсилаються на ESP8266 від LPC2148, згадані нижче. Після відправки кожної команди AT ESP8266 відповідає “ОК”
1. Надсилає AT на ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Надсилає AT + CWMODE = 2 (налаштування ESP8266 у режимі точки доступу).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Відправляє AT + CIFSR (для отримання IP точки доступу)
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 і створюємо шістнадцятковий файл, а потім шістнадцятковий файл перепрошивається на ARM7 за допомогою Flash Magic. Щоб дізнатись більше про встановлення keil uVision та Flash Magic та їх використання, перейдіть за посиланням Початок роботи з мікроконтролером ARM7 LPC2148 та запрограмуйте його за допомогою Keil uVision.
Повна програма подана в кінці підручника.
Примітка: Під час завантаження файлу HEX на LPC2148 ви не повинні живити модуль Wi-Fi ESP8266 та модуль FTDI, підключений до LPC2148.
Керування світлодіодом за допомогою веб-сервера IoT ESP8266 з LPC2148
Крок 1: - Після завантаження файлу HEX на LPC2148 підключіть модуль FTDI до ПК за допомогою USB-кабелю та відкрийте програмне забезпечення терміналу шпаклівки.
Виберіть Серійний, а потім Виберіть COM-порт відповідно до Вашого ПК або LAPTOP mine (COM3). Швидкість передачі даних становить 9600.
Крок 2: - Тепер скиньте модуль Wi-Fi ESP8266 або просто ВИМКНІТЬ ВИМКНЕННЯ та ВИКЛЮЧІТЬ його знову, термінал шпаклівки покаже відповідь модуля Wi-Fi ESP8266, як показано нижче. \
Крок 3: - Тепер натисніть кнопку RESET на LPC2148. Після цього LPC2148 починає надсилати AT-команди на ESP8266. Ми можемо побачити відповідь цього в терміналі шпаклівки.
Крок 4: - Як ви можете бачити на зображенні вище, ESP8266 встановлено в РЕЖИМ 2, що є режимом AP, а адреса APIP - 192.168.4.1. Зверніть увагу на цю адресу, оскільки ця адреса буде жорстко закодована в HTML-коді веб-сторінки для управління світлодіодом, підключеним до LPC2148.
Важливо : Коли ESP8266 перебуває в режимі точки доступу, ви повинні підключити свій ПК до точки доступу ESP8266. Дивіться зображення нижче, на моєму модулі ESP8266 зображена точка доступу на ім’я ESP_06217B (він відкритий і не має пароля).
Крок 5: - Після підключення ПК до точки доступу ESP8266 відкрийте блокнот і скопіюйте та вставте наступну веб-сторінку програми HTML. Не забудьте змінити адресу APIP відповідно до вашого модуля Wi-Fi ESP8266
Ласкаво просимо до Circuit Digest
ESP8266 Взаємодія з LPC2148: Створення веб-сервера для управління світлодіодом
Світлодіод увімкнено Світлодіод вимкненоНа цій HTML-сторінці ми створили дві кнопки з гіперпосиланням для увімкнення та вимкнення світлодіода з веб-сторінки.
Нарешті збережіть документ блокнота як розширення .html
Веб-сторінка відображатиметься у веб-браузері, як показано нижче.
Тут адресою є IP-адреса AP 192.168.4.1, і ми надсилаємо значення @ та%, щоб увімкнути та вимкнути світлодіод, використовуючи цю логіку в LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Логіка, щоб встановити світлодіод увімкнено або вимкнено залежно від отриманого значення від ESP8266 { IOSET1 = (1 << 20); // Встановлює ВИХІД ВИСОКИЙ delay_ms (100); } інакше якщо (КОМАНДА == LEDOFF) { IOCLR1 = (1 << 20); // Встановлює OUTPUT LOW delay_ms (100); } } }
Ось як пристроєм можна дистанційно керувати за допомогою мікроконтролера ESP8266 та ARM7 LPC2148. Повний код та відео з поясненнями наведено нижче.