- 필요한 구성 요소
- ESP8266 Wi-Fi 모듈
- 직렬 통신을 위해 LPC2148과 ESP8266 연결
- 회로도 및 연결
- ESP8266 인터페이스를 위해 LPC2148에서 UART0 프로그래밍에 관련된 단계
- LPC2148과 함께 ESP8266 IoT 웹 서버를 사용하여 LED 제어
ESP8266 Wi-Fi 트랜시버는 마이크로 컨트롤러를 네트워크에 연결하는 방법을 제공합니다. 저렴하고 작고 사용하기 쉽기 때문에 IoT 프로젝트에서 널리 사용됩니다. 이전에 Raspberry 웹 서버와 Arduino 웹 서버를 사용하여 웹 서버를 생성하는 데 사용했습니다.
이 튜토리얼에서는 ESP8266 Wi-Fi 모듈을 ARM7-LPC2148 마이크로 컨트롤러 와 인터페이스하고 LPC2148에 연결된 LED를 제어하는 웹 서버를 생성합니다. 워크 플로는 다음과 같이 진행됩니다.
- LPC2148에서 ESP8266으로 AT 명령을 보내 AP 모드에서 ESP8266을 구성합니다.
- ESP8266 액세스 포인트에 노트북 또는 컴퓨터 Wi-Fi 연결
- ESP8266 웹 서버의 액세스 포인트 IP 주소로 PC에서 HTML 웹 페이지 생성
- ESP8266에서받은 값에 따라 LED를 제어하는 LPC2148 용 프로그램을 만듭니다.
ESP8266 Wi-Fi 모듈을 완전히 처음 사용하는 경우 아래 링크를 방문하여 ESP8266 Wi-Fi 모듈에 익숙해 지십시오.
- ESP8266 Wi-Fi 트랜시버 시작하기 (1 부)
- ESP8266 시작하기 (2 부): AT 명령 사용
- ESP8266 시작하기 (3 부): Arduino IDE로 ESP8266 프로그래밍 및 메모리 플래싱
필요한 구성 요소
하드웨어:
- ARM7-LPC2148
- ESP8266 Wi-Fi 모듈
- FTDI (USB to UART TTL)
- LED
- 3.3V 전압 조정기 IC
- 브레드 보드
소프트웨어:
- 케이 일유 비전
- 플래시 매직 도구
- 퍼티
ESP8266 Wi-Fi 모듈
ESP8266은 3.3V의 저전력이 필요한 임베디드 프로젝트에 널리 사용되는 저가형 Wi-Fi 모듈입니다. 직렬 통신 및 ESP8266과 UART 포트가있는 모든 마이크로 컨트롤러 간의 데이터 전송을 위해 TX 및 RX 두 와이어 만 사용합니다.
ESP8266 Wi-Fi 모듈 용 핀 다이어그램
- GND, 접지 (0V)
- TX, 데이터 전송 비트 X
- GPIO 2, 범용 입력 / 출력 2 번
- CH_PD, 칩 전원 차단
- GPIO 0, 범용 입 / 출력 번호 0
- RST, 재설정
- RX, 데이터 수신 비트 X
- VCC, 전압 (+ 3.3V)
ESP8266 회로 기판 설정
ESP8266은 3.3V의 일정한 전원을 필요로하며 브레드 보드 친화적이지 않습니다. 따라서 ESP8266에 대한 이전 자습서에서 3.3V 전압 조정기, RESET 푸시 버튼 및 전환 모드 (AT 명령 또는 플래시 모드)를위한 점퍼 설정이있는 ESP8266 용 회로 기판을 만들었습니다. 또한 성능 보드를 사용하지 않고 브레드 보드에 설정할 수도 있습니다.
여기에서 브레드 보드의 모든 구성 요소를 납땜하여 자체 ESP8266 Wi-Fi 보드를 만들었습니다.
아래 링크를 통해 ESP8266과 다양한 마이크로 컨트롤러의 인터페이스에 대해 알아보십시오.
- ESP8266 시작하기 (3 부): Arduino IDE로 ESP8266 프로그래밍 및 메모리 플래싱
- ESP8266과 STM32F103C8 연결: 웹 서버 생성
- MSP430 Launchpad 및 ESP8266을 사용하여 이메일 보내기
- ESP8266과 PIC16F877A 마이크로 컨트롤러 인터페이스
- Arduino 및 ESP8266을 사용한 IOT 기반 쓰레기 수거통 모니터링
모든 ESP8266 기반 프로젝트는 여기에서 찾을 수 있습니다.
직렬 통신을 위해 LPC2148과 ESP8266 연결
위해에 인터페이스 ESP8266와 LPC2148 우리가 ESP8266 와이파이 모듈을 구성하는 ESP8266에 LPC2148에서 AT 명령을 보내려면이 두 장치 사이의 UART 시리얼 통신을 설정해야합니다. ESP8266 AT 명령에 대해 자세히 알아 보려면 링크를 따르십시오.
따라서 LPC2148에서 UART 통신을 사용하려면 LPC2148에서 UART 포트를 초기화해야합니다. LPC2148에는 2 개의 내장 UART 포트 (UART0 및 UART1)가 있습니다.
LPC2148의 UART 핀
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
LPC2148에서 UART0 초기화
LPC2148의 핀은 범용 핀이므로 UART0을 사용하려면 PINSEL0 레지스터를 사용해야합니다. UART0을 초기화하기 전에 UART 기능을 사용하기 위해 LPC2148에서 사용되는 이러한 UART 레지스터에 대해 알 수 있습니다.
LPC2148의 UART 레지스터
아래 표는 프로그래밍에 사용되는 몇 가지 중요한 레지스터를 보여줍니다. 향후 튜토리얼에서는 LPC2148에서 UART에 사용되는 다른 레지스터에 대해 간략하게 살펴볼 것입니다.
UART0의 경우 x-0 및 UART1의 경우 x-1:
레지스터 |
등록 이름 |
사용하다 |
UxRBR |
수신 버퍼 레지스터 |
최근받은 값 포함 |
UxTHR |
보류 등록 전송 |
전송할 데이터 포함 |
UxLCR |
라인 제어 레지스터 |
UART 프레임 형식 포함 (데이터 비트 수, 정지 비트) |
UxDLL |
제수 래치 LSB |
UART 전송 속도 생성기 값의 LSB |
UxDLM |
제수 래치 MSB |
UART 전송 속도 생성기 값의 MSB |
UxIER |
인터럽트 활성화 레지스터 |
UART0 또는 UART1 인터럽트 소스를 활성화하는 데 사용됩니다. |
UxIIR |
인터럽트 식별 레지스터 |
우선 순위와 보류중인 인터럽트의 소스가있는 상태 코드를 포함합니다. |
회로도 및 연결
LPC2148, ESP8266 및 FTDI 간의 연결은 다음과 같습니다.
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
체크 안함 |
RX (P0.1) |
TX |
RX |
ESP8266은 3.3V 전압 조정기를 통해 전원이 공급되고 FTDI 및 LPC2148은 USB에서 전원이 공급됩니다.
FTDI가 여기에있는 이유는 무엇입니까?이 튜토리얼에서는 FTDI (USB to UART TTL)의 RX 핀을 LPC2148 RX 핀에 추가로 연결된 ESP8266 TX 핀에 연결하여 putty, Arduino IDE와 같은 터미널 소프트웨어를 사용하여 ESP8266 모듈의 응답을 볼 수 있습니다.. 그러나이를 위해 ESP8266 Wi-Fi 모듈의 전송 속도에 따라 전송 속도를 설정합니다. (내 Baud Rate는 9600입니다).
ESP8266 인터페이스를 위해 LPC2148에서 UART0 프로그래밍에 관련된 단계
다음은 ESP8266을 LPC2148과 연결하여 IoT와 호환되는 프로그래밍 단계입니다.
1 단계: 먼저 PINSEL0 레지스터에서 UART0 TX 및 RX 핀을 초기화해야합니다.
(TX는 P0.0, RX는 P0.1) PINSEL0 = PINSEL0-0x00000005;
2 단계:- 다음으로 U0LCR (Line Control Register)에서 DLAB (Divisor Latch Access Bit)를 활성화 할 때 1로 설정 한 다음 정지 비트 수를 1로 설정하고 데이터 프레임 길이를 8 비트로 설정합니다.
U0LCR = 0x83;
3 단계: 이제 주목해야 할 중요한 단계는 PCLK 값과 원하는 전송 속도에 따라 U0DLL 및 U0DLM의 값을 설정하는 것입니다. 일반적으로 ESP8266의 경우 9600의 전송 속도를 사용합니다. 따라서 UART0에 대해 9600의 전송 속도를 설정하는 방법을 살펴 보겠습니다.
전송 속도 계산 공식:
어디, PLCK: 주파수의 주변 클럭 (MHz)
U0DLM, U0DLL: 보레이트 생성기 분배기 레지스터
MULVAL, DIVADDVAL:이 레지스터는 분수 생성기 값입니다.
PCLK = 15MHZ 인 Baud Rate 9600의 경우
MULVAL = 1 및 DIVADDVAL = 0
256 * U0DLM + U0DLL = 97.65
따라서 U0DLM = 0이고 U0DLL = 97 (분수 허용되지 않음)을 얻습니다.
따라서 다음 코드를 사용합니다.
U0DLM = 0x00; U0DLL = 0x61; (16 진수 값 97)
4 단계: 마지막으로 LCR에서 DLA (Divisor Latch Access) 비활성화를 0으로 설정해야합니다.
그래서 우리는
U0LCR & = 0x0F;
5 단계: 문자 전송의 경우 U0THR로 전송할 바이트를로드하고 바이트가 전송 될 때까지 기다립니다. 이는 THRE가 HIGH가됨을 나타냅니다.
무효 UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
6 단계: 문자열 전송을 위해 아래 기능이 사용됩니다. 문자열 데이터를 하나씩 보내기 위해 위 단계의 문자 함수를 사용했습니다.
무효 UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
7 단계:- 문자열 수신을 위해 여기서는 인터럽트 서비스 루틴 기능이 사용됩니다. ESP8266의 웹 서버에 데이터를 전송합니다.
예: LPC2148 ("AT \ r \ n")에서 ESP8266으로 AT 명령을 보내면 Wi-Fi 모듈에서 "OK"라는 응답을받습니다.
따라서 여기서 인터럽트를 사용하여 ISR 인터럽트 서비스 루틴이 가장 높은 우선 순위를 갖기 때문에 ESP8266 Wi-Fi 모듈에서 수신 한 값을 확인합니다.
따라서 ESP8266이 LPC2148의 RX 핀으로 데이터를 보낼 때마다 인터럽트가 설정되고 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;
마지막으로 ESP8266 Wi-Fi 모듈에서 데이터를 수신 할 때 특정 작업을 수행해야하는 ISR 기능이 있습니다. 여기서는 U0RBR에있는 ESP8266에서받은 값을 읽고 해당 값을 UART0_BUFFER에 저장합니다. 마지막으로 ISR이 끝날 때 VICVectAddr 는 0 또는 더미 값으로 설정되어야합니다.
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; }
9 단계: ESP8266 Wi-Fi 모듈은 AP 모드로 설정되어야하므로 UART0_SendString () 함수를 사용하여 LPC2148에서 존중되는 AT 명령을 전송해야 합니다.
LPC2148 ESP8266에서 AT로 전송되는 명령은 아래에 언급된다. 각 AT 명령을 보낸 후 ESP8266은 "OK"로 응답합니다.
1. ESP8266에 AT를 보냅니다.
UART0_SendString ("AT \ r \ n"); 지연 _ms (3000);
2. AT + CWMODE = 2를 전송합니다 (AP 모드에서 ESP8266 설정).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); 지연 _ms (3000);
3. AT + CIFSR 전송 (AP의 IP를 얻기 위해)
UART0_SendString ("AT + CIFSR \ r \ n"); 지연 _ms (3000);
4. AT + CIPMUX = 1을 보냅니다 (다중 연결의 경우).
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); 지연 _ms (3000);
5. AT + CIPSERVER = 1,80 전송 (열린 포트로 ESP8266 서버를 활성화하는 경우)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); 지연 _ms (3000);
16 진수 파일을 LPC2148로 프로그래밍 및 플래싱
ARM7-LPC2148을 프로그래밍하려면 keil uVision 및 Flash Magic 도구가 필요합니다. 여기에서 USB 케이블은 마이크로 USB 포트를 통해 ARM7 Stick을 프로그래밍하는 데 사용됩니다. Keil을 사용하여 코드를 작성하고 16 진수 파일을 만든 다음 Flash Magic을 사용하여 HEX 파일을 ARM7 스틱에 플래시합니다. keil uVision 및 Flash Magic 설치 및 사용 방법에 대한 자세한 내용은 ARM7 LPC2148 마이크로 컨트롤러 시작하기 링크를 클릭하고 Keil uVision을 사용하여 프로그래밍하십시오.
튜토리얼이 끝나면 완전한 프로그램 이 제공됩니다.
참고: HEX 파일을 LPC2148에 업로드하는 동안 LPC2148에 연결된 ESP8266 Wi-Fi 모듈 및 FTDI 모듈에 전원을 공급하지 않아야합니다.
LPC2148과 함께 ESP8266 IoT 웹 서버를 사용하여 LED 제어
1 단계: HEX 파일을 LPC2148에 업로드 한 후 USB 케이블을 통해 FTDI 모듈을 PC에 연결하고 퍼티 터미널 소프트웨어를 엽니 다.
직렬을 선택한 다음 PC 또는 LAPTOP 광산에 따라 COM 포트를 선택하십시오 (COM3). 전송 속도는 9600입니다.
2 단계:- 이제 ESP8266 Wi-Fi 모듈을 재설정하거나 전원을 껐다가 다시 켜면 퍼티 터미널에 아래와 같이 ESP8266 Wi-Fi 모듈의 응답이 표시됩니다. \
3 단계:- 이제 LPC2148의 RESET 버튼을 누릅니다. 그 후 LPC2148은 ESP8266에 AT 명령을 보내기 시작합니다. 퍼티 터미널에서 그 응답을 볼 수 있습니다.
4 단계: 위 이미지에서 볼 수 있듯이 ESP8266은 AP 모드 인 MODE 2로 설정되고 APIP의 주소는 192.168.4.1입니다. 이 주소는 LPC2148에 연결된 LED를 제어하기 위해 웹 페이지 HTML 코드에 하드 코딩되므로이 주소를 기록해 두십시오.
중요 : ESP8266이 AP 모드에있을 때 PC를 ESP8266 AP에 연결해야합니다. 내 ESP8266 모듈 아래 이미지는 ESP_06217B의 이름으로 AP를 보여줍니다 (열려 있고 암호가 없음).
5 단계: PC를 ESP8266 AP에 연결 한 후 메모장을 열고 다음 HTML 프로그램 웹 페이지를 복사하여 붙여 넣습니다. ESP8266 Wi-Fi 모듈에 따라 APIP 주소를 변경하십시오.
Circuit Digest에 오신 것을 환영합니다
ESP8266 LPC2148과 인터페이스: LED를 제어하기위한 웹 서버 생성
LED 켜짐 LED 꺼짐이 HTML 페이지에서는 웹 페이지에서 LED를 켜고 끄는 두 개의 하이퍼 링크 단추를 만들었습니다 .
마지막으로 메모장 문서를.html 확장자 로 저장하십시오.
웹 브라우저에 다음과 같이 웹 페이지가 표시됩니다.
여기서 주소는 AP IP 주소 192.168.4.1이며 LPC2148에서 아래의이 로직을 사용하여 LED를 켜고 끄는 값 @ 및 %를 보냅니다.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // ESP8266에서받은 값에 따라 LED를 켜거나 끄는 로직 { IOSET1 = (1 << 20); // OUTPUT HIGH를 설정합니다. delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // OUTPUT LOW를 설정합니다. delay_ms (100); } } }
ESP8266 및 ARM7 마이크로 컨트롤러 LPC2148을 사용하여 장치를 원격으로 제어 할 수있는 방법입니다. 완전한 코드와 설명 비디오가 아래에 제공됩니다.