- Необходимые компоненты
- Модуль Wi-Fi ESP8266
- Подключение LPC2148 к ESP8266 для последовательной связи
- Принципиальная схема и подключения
- Шаги, связанные с программированием UART0 в LPC2148 для взаимодействия с ESP8266
- Управление светодиодом с помощью ESP8266 IoT Webserver с 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.
Если вы совершенно не знакомы с модулем Wi-Fi ESP8266, перейдите по ссылкам ниже, чтобы ознакомиться с модулем 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.3V
- Макетная плата
Программного обеспечения:
- KEIL uVision
- Инструмент Flash Magic
- Шпатлевка
Модуль Wi-Fi ESP8266
ESP8266 - это недорогой, широко используемый модуль Wi-Fi для встроенных проектов, для которого требуется низкое энергопотребление 3,3 В. Он использует только два провода TX и RX для последовательной связи и передачи данных между ESP8266 и любым микроконтроллером, имеющим порт UART.
Схема контактов для модуля Wi-Fi ESP8266
- GND, Земля (0 В)
- TX, бит передачи данных X
- GPIO 2, Универсальный ввод / вывод № 2
- CH_PD, отключение питания микросхемы
- GPIO 0, универсальный вход / выход № 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 для настройки модуля ESP8266 Wi-Fi. Чтобы узнать больше об AT-командах ESP8266, перейдите по ссылке.
Таким образом, чтобы использовать связь 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 |
Защелка делителя LSB |
LSB значения генератора скорости передачи UART |
UxDLM |
Защелка делителя 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,3 В, а FTDI и LPC2148 питаются от USB.
Почему FTDI здесь?В этом руководстве мы подключили контакт RX FTDI (USB к UART TTL) к контакту ESP8266 TX, который дополнительно подключен к контакту RX LPC2148, чтобы мы могли видеть ответ модуля ESP8266 с помощью любого терминального программного обеспечения, такого как замазка, Arduino IDE.. Но для этого установите скорость передачи в соответствии со скоростью передачи модуля Wi-Fi ESP8266. (Моя скорость передачи данных 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, и подождите, пока байт не будет передан, на что указывает значение THRE, которое становится 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»), мы получаем ответ «ОК» от модуля 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. Итак, в регистре разрешения прерывания (U0IER) мы устанавливаем RBR. Так что эта процедура обслуживания прерывания (ISR) вызывается, когда мы получаем данные.
U0IER = IER_RBR;
Наконец, у нас есть функция ISR, которая должна выполнять определенную задачу, когда мы получаем данные от модуля Wi-Fi ESP8266. Здесь мы просто читаем полученное значение от ESP8266, которое присутствует в U0RBR, и сохраняем это значение в UART0_BUFFER. Наконец, в конце ISR VICVectAddr должен быть установлен с нулевым или фиктивным значением.
void UART0_ISR () __irq { unsigned 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: - Поскольку модуль Wi-Fi ESP8266 должен быть установлен в режим AP, нам нужно отправить уважаемые 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 в режиме 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 и создаем шестнадцатеричный файл, а затем шестнадцатеричный файл записывается на карту ARM7 с помощью Flash Magic. Чтобы узнать больше об установке keil uVision и Flash Magic и их использовании, перейдите по ссылке «Начало работы с микроконтроллером ARM7 LPC2148 и запрограммируйте его с помощью Keil uVision».
Полная программа представлена в конце урока.
Примечание. При загрузке файла HEX в LPC2148 вы не должны включать модуль Wi-Fi ESP8266 и модуль FTDI, подключенный к LPC2148.
Управление светодиодом с помощью ESP8266 IoT Webserver с LPC2148
Шаг 1: - После загрузки файла HEX в LPC2148 подключите модуль FTDI к ПК через USB-кабель и откройте программное обеспечение терминала замазки.
Выберите Serial, а затем выберите COM-порт в соответствии с вашим ПК или моим ноутбуком (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 находится в режиме AP, вы должны подключить свой компьютер к ESP8266 AP. См. Изображение ниже, что мой модуль ESP8266 показывает AP с именем ESP_06217B (он открыт и не имеет пароля).
Шаг 5: - После подключения ПК к точке доступа ESP8266 откройте блокнот и скопируйте и вставьте следующую веб-страницу программы HTML. Обязательно измените адрес APIP в соответствии с вашим модулем Wi-Fi ESP8266
Добро пожаловать в Circuit Digest
ESP8266 Взаимодействие с LPC2148: создание веб-сервера для управления светодиодом
Светодиод горит светодиод не горитНа этой HTML-странице мы создали две кнопки с гиперссылками для включения и выключения светодиода на веб-странице.
Наконец, сохраните документ блокнота как расширение .html.
Веб-страница будет отображаться в веб-браузере, как показано ниже.
Здесь адресом является IP-адрес точки доступа 192.168.4.1, и мы отправляем значения @ и% для включения и выключения светодиода, используя следующую логику в LPC2148.
while (1) { if (uart0_count! = 0) { КОМАНДА = UART0_BUFFER; if (COMMAND == LEDON) // Логика для включения или выключения светодиода в зависимости от полученного значения от ESP8266 { IOSET1 = (1 << 20); // Устанавливает ВЫСОКИЙ ВЫХОД delay_ms (100); } иначе, если (КОМАНДА == LEDOFF) { IOCLR1 = (1 << 20); // Устанавливает НИЗКИЙ ВЫХОД delay_ms (100); } } }
Таким образом можно дистанционно управлять устройством с помощью микроконтроллера LPC2148 ESP8266 и ARM7. Полный код и видео с пояснениями приведены ниже.