- 필요한 재료 :
- PIC 마이크로 컨트롤러 프로그래밍 :
- ESP8266 라이브러리의 기능 :
- 샘플 프로그램 :
- 시뮬레이션 출력 :
- 출력 확인 :
- ESP8266 라이브러리에 기능 추가 :
이 기사에서는 WIFI 모듈 ESP8266을 PIC 마이크로 컨트롤러와 인터페이스하는 방법에 대해 설명합니다. 지금까지 ESP8266 모듈을 독립형 마이크로 컨트롤러로 사용했거나 Arduino 라이브러리와 함께 사용했을 수 있습니다. 그러나 하드 코어 임베디드 시스템 프로젝트에 관해서는 PIC 마이크로 컨트롤러와 함께 사용하는 방법도 알아야합니다. 이것은 디자인 관점에서 프로젝트를 사용자 정의하는 동시에 저렴하게 만드는 데 도움이 될 것입니다.
ESP8266 모듈은 기본 펌웨어가로드 된 상태로 제공되므로 AT 명령을 사용하여 모듈을 프로그래밍 할 수 있습니다. 이러한 명령은 직렬 통신 채널을 통해 전송되어야합니다. 이 채널은 PIC 마이크로 컨트롤러의 USART 모듈을 사용하여 PIC와 ESP8266 모듈 사이에 설정 됩니다. 전체 작업은 16x2 LCD 디스플레이를 사용하여 모니터링되고 사용자에게보고됩니다. 따라서이 자습서에서는 PIC의 USART 모듈, PIC와 LCD 인터페이스 및 ESP8266에서 AT 명령 사용에 대한 몇 가지 기본 지식이 있다고 가정합니다. 그렇지 않은 경우 링크 된 자습서로 돌아가서 미리 배울 수 있습니다.
필요한 재료:
이 자습서를 완료하려면 다음 하드웨어가 필요합니다.
- PIC16F877A
- 20MHz 수정 발진기
- 7805
- LM317
- ESP8266
- 16 * 2 LCD 디스플레이
- PicKit3 프로그래머
- 저항기 (1K, 220ohm, 360ohm)
- 커패시터 (1uF, 0.1uF, 33pF)
- 점퍼 와이어
- PIC 및 ESP 모듈에 전원을 공급하는 12V 어댑터
하드웨어:
프로젝트의 전체 회로도가 아래에 나와 있습니다.
회로도는 두 개의 전압 조정기 회로로 구성되어 있는데, 하나는 PIC 마이크로 컨트롤러에 전원을 공급하는 데 사용되는 + 5V 조정기이고 다른 하나는 ESP8266 모듈에 전원을 공급하는 3.3V 조정기입니다. + 5V는 7805 (Linear Voltage Regulator IC)를 사용하여 조정됩니다. 3.3V는 LM317 (Variable Voltage Regulator)을 사용하여 조정됩니다. ESP8266 모듈은 많은 전류 (~ 800mA)를 소비하므로 자체 전원 공급 장치를 설계하는 경우 이러한 높은 전류를 소싱 할 수 있는지 확인하십시오. 또한 PIC와 ESP8266 모듈의 접지 핀이 함께 연결되어 있는지 확인하십시오.
이제 PIC가 + 5V에서 작동하고 ESP8266이 3.3V에서 작동한다는 것을 알고 있습니다. 이 두 모듈간에 USART 통신을 설정하려면 위 그림과 같이 5V-3.3V 로직 컨버터 회로가 필요합니다. 이 회로는 들어오는 + 5V를 3.3V로 간단히 변환하는 전위 분배기 일뿐입니다. 이렇게하면 ESP8266의 3.3V 허용 RX 핀이 + 5V가되는 것을 방지 할 수 있습니다.
이 튜토리얼에서 볼 수 있듯이 PIC 및 ESP 모듈을 두 개의 별도 성능 보드에 만들었습니다. 이렇게하면 더 비슷한 프로젝트에 보편적으로 사용할 수 있습니다.
- PIC를 사용하는 LED 하드웨어
- ESP8266 시작하기
동일한 방식을 따르거나 자신의 스타일로 자신의 보드를 만들거나 단순히 위의 회로를 브레드 보드에 연결할 수 있습니다.
PIC 마이크로 컨트롤러 프로그래밍:
USART를 사용하여 "AT 명령" 을 ESP8266 모듈에 직렬 로 보내도록 PIC 마이크로 컨트롤러 를 프로그래밍하려면 라이브러리를 사용해야합니다. 이 라이브러리는 ESP8266 명령 모듈을 사용하여 각각의 모든 AT 명령을 확인한 다음이를 ESP 모듈로 전송하는 방법을 찾는 것과 같이 많은 번거 로움을 덜어줍니다. 이 라이브러리는 원래 Camil Staps에서 개발 한 무료 소프트웨어이며 나중에 Circuit Digest에서 개선 및 수정하여 PIC16F877A 마이크로 컨트롤러와 함께 사용할 수 있습니다. 여기에서 다운로드 할 수 있습니다.
라이브러리는 아직 개발 중이지만 ESP8266 펌웨어에서 대부분의 중요한 AT 명령을 사용할 수 있습니다. 필요한 명령이 누락 된 경우 댓글 섹션에 알려 주시면 추가해 드리겠습니다. 이 튜토리얼은이 라이브러리를 통해 사용할 수있는 모든 명령 (지금까지)을 설명합니다. 또한 라이브러리에 고유 한 기능을 추가하도록 안내합니다.
ESP8266 라이브러리의 기능:
- Initialize_ESP8266 ():이 함수는 ESP8266 모듈과 통신하기 위해 PIC의 USART 모듈을 초기화합니다. 전송 속도를 115200으로 설정하고 USART 통신을 위해 PIC의 Rx 및 Tx 핀을 준비합니다.
- _esp8266_putch (): 이 함수는 단일 문자를 ESP8266 모듈에 직렬로 보내는 데 사용됩니다. 예를 들어, _esp8266_putch ('a') 는 문자 a를 ESP 모듈에 직렬로 보냅니다.
- _esp8266_getch (): 이 함수는 ESP 모듈에서 단일 문자를 가져 오는 데 사용됩니다. 예를 들어 ESP가 "OK"를 인쇄하고 char a = _esp8266_getch ()를 사용하는 경우. 그러면 문자 'o'가 변수 a에 저장됩니다.
- ESP8266_send_string (): 이 함수는 _esp8266_putch () 의 문자열 버전입니다. 하나의 완전한 문자열을 ESP8266 모듈로 보낼 수 있습니다. 예를 들어 ESP8266_send_string ("AT / r / n")은 "AT"명령을 ESP8266 모듈로 보냅니다.
- esp8266_isStarted (): PIC가 ESP 모듈과 통신 할 수 있는지 확인하는 데 사용됩니다. "AT"명령을 보내고 수신하면 "OK"를 기다립니다. true를 반환하고 그렇지 않으면 false를 반환합니다.
- esp8266_restart (): ESP8266 모듈을 재설정하고 true를 반환하면 성공적으로 재설정되고 실패하면 false를 반환합니다.
- esp8266_mode (): ESP8266 모듈의 작동 모드를 설정하는 데 사용됩니다. 우리가 알고 있듯이 세 가지 모드로 작동 할 수 있습니다.
스테이션 모드 |
|
소프트 AP 모드 |
|
스테이션 및 AP 모드 모두 |
- esp8266_connect (): Wi-Fi 신호에 연결할 수 있습니다. 예를 들어 esp8266_connect (“home”,”12345678”) 은 모듈이 암호가 12345678 인 home이라는 Wi-Fi 신호에 연결할 수 있도록합니다.
- esp8266_disconnect (): 이 함수는 이전에 연결된 Wi-Fi 연결에서 모듈 연결을 끊습니다.
- esp8266_ip (): IP 주소를 가져 와서 반환합니다. ESP8266 모듈의 IP 주소를 알고 싶다면이 기능을 사용하십시오.
- esp8266_start (): 이 함수는 TCP 또는 UDP 통신을 시작하는 데 사용됩니다. 예: esp8266_start ( "TCP", "192.168.101.110", 80) . 해당 IP 및 포트 80에서 TCP 네트워크를 시작합니다.
- esp8266_send (): 이 함수는 TCP / UDP 네트워크에 정보를 보내는 데 사용됩니다. HTML 스크립트는이 명령을 사용하여 전송됩니다. 그러면이 스크립트는 이전에 통신이 설정된 IP 주소에 나타납니다.
- esp8266_config_softAP (): 이 함수는 softAP를 구성하는 데 사용됩니다. 예: esp8266_config_softAP ("office", "12345678"); office라는 Wifi 신호를 생성하고 암호 12345678을 사용하여 액세스해야합니다.
- esp8266_get_stationIP (): 이 함수는 softAP에 연결된 클라이언트의 IP / MAC 주소를 반환합니다.
샘플 프로그램:
라이브러리의 모든 명령의 기능을 이해 했으므로 이제 작은 샘플 프로그램을 살펴 보겠습니다. 이 프로그램에서는 ESP8266과 PIC 간의 연결이 성공했는지 확인한 다음 선호하는 이름과 비밀번호로 WIFI 네트워크 (SoftAP)를 생성합니다. 전체 프로그램과 동일한 시뮬레이션이 이해를 돕기 위해 설명됩니다.
다시 말씀 드리지만, LCD 및 PIC USART와의 PIC 인터페이스 튜토리얼을 읽지 않았다면 계속하기 전에 읽어보십시오.
우리는 이제 막 ESP8266과 PIC를 연결하기 시작 했기 때문에 LCD를 사용하여 제대로 작동하는지 확인했습니다.
do {Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP를 찾을 수 없음"); } while (! esp8266_isStarted ()); // ESP가 "OK"를 다시 보낼 때까지 기다립니다. Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP가 연결됨"); __delay_ms (1500); Lcd_Clear ();
"AT"를 ESP8266 모듈로 보내면 "OK"로 응답합니다. 이렇게하면 ESP8266 모듈이 성공적으로 연결됩니다. esp8266_isStarted () 함수가 동일한 용도로 사용됩니다. PIC에서 신호 AT를 보내고 ESP 모듈이 활성화 될 때까지 기다렸다가 OK를 보냅니다. OK를 받으면 LCD에 "ESP가 연결되었습니다"라는 메시지가 표시됩니다.
esp8266_mode (2); Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP가 AP로 설정 됨"); __delay_ms (1500); Lcd_Clear ();
위의 코드 줄은 "소프트 AP"모드에서 작동하도록 ESP 모듈을 설정하는 데 사용됩니다. 함수 esp8266_mode (2); AT 명령 "AT + CWMODE = 3"을 모듈에 보내고 모듈이 "OK"로 응답 할 때까지 기다립니다.
/ * AP 이름 및 암호 구성 * / esp8266_config_softAP ("CircuitDigest", "619007123"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("AP 구성됨"); __delay_ms (1500); Lcd_Clear (); / * AP 구성됨 * /
이 코드 세그먼트는 softAP를 구성하는 데 사용됩니다. 여기서는 SSID를 "CircuitDigest"로, 암호를 "619007123"으로 지정했습니다. 프로세스가 완료되었음을 나타 내기 위해 모듈이 "OK"로 응답 할 때까지 기다린 다음 구성된 AP를 LCD 화면에 인쇄합니다.
이제 ESP8266 모듈을 PIC MCU와 인터페이스하고 선택한 이름과 암호로 softAP를 구성했습니다. 평소처럼이 코드를 시뮬레이션하고 작동 방식을 살펴 보겠습니다.
시뮬레이션 출력:
출력을 시뮬레이션하기 위해 Proteus 소프트웨어를 사용하고 있습니다. 동일한 디자인 파일은 첨부 파일에서 찾을 수 있습니다.
Proteus 라이브러리에 ESP8266 모듈이 없기 때문에 직렬 터미널을 사용하고 사용자로서 PIC 모듈에 응답합니다. 완료된 시뮬레이션 화면은 다음과 같습니다.
코드 출력은 가상 터미널에 표시됩니다. 시뮬레이션의 전체 작업은 아래 비디오에서 설명됩니다.
출력 확인:
시뮬레이션을 사용하여 프로그램이 검증되면 PIC 마이크로 컨트롤러에 덤프합니다. 위의 회로도 (하드웨어 섹션)에 표시된대로 연결합니다. LCD 디스플레이를 통해 진행 상황을 추적 할 수 있어야합니다.
LCD에 AP가 구성되었다고 표시되면 전화 또는 노트북의 WIFI 설정을 사용하여 확인할 수 있습니다. 내 노트북은 프로그램에 따라 다음 신호를 표시합니다.
이것이 바로 우리가 ESP8266 모듈을 PIC 마이크로 컨트롤러와 성공적으로 인터페이스 한 것입니다. 이것은 매우 기본적인 인터페이스이며 ESP8266을 사용하여 복잡한 프로젝트를 수행하려면 자체 라이브러리를 추가하거나 적어도 자체 기능을 추가해야 할 수 있습니다. 저를 믿으십시오. 그렇게하는 것은 매우 쉽습니다. 이에 대한 간략한 통찰력을 줄 것입니다.
ESP8266 라이브러리에 기능 추가:
고유 한 기능을 추가하면 "AT"명령을 ESP8266 모듈로 보내는 데 도움이됩니다. 계속하려면 ESP8266 모듈의 명령어 세트 문서를 읽어야합니다. 해당 지침 세트 매뉴얼에서 찾은 AT 명령을 직접 보낼 수 있습니다. 그러나 항상 모든 AT 명령 끝에 "/ r / n"을 추가하는 것을 잊지 마십시오. 예를 들어 ESP 모듈과 여러 연결을 설정하려는 경우. 그런 다음 명령 세트 문서를 열고 어떤 AT 명령이이 작업을 수행할지 찾으십시오. 여기서 "AT + CIPMUX = 1"명령을 사용하면 ESP 모듈과 여러 연결을 설정할 수 있습니다.
이제 직렬 포트를 사용하여이“AP + CIPMUX = 1”을 ESP8266 모듈로 전송하기 만하면됩니다. 이를 수행하는 하드 코어 방법은 단순히 다음 명령을 사용하는 것입니다.
_esp8266_print ("AT + CIPMUX = 1 \ r \ n" ")
이것은 작동하지만 최선의 방법은 아닙니다. ESP8266이 명령에 응답하는 내용을 다시 읽어야합니다. 우리의 경우 "OK"로 응답합니다. 따라서 ESP8266 모듈에서 들어오는 데이터를 읽고 "OK"인지 확인해야합니다. 또한 "1"또는 "0"을 인수로 전달할 수있는이 함수를 만들 수 있습니다.
계속해서 라이브러리를위한 고유 한 기능을 만들어보십시오. 하지만 도움이 필요하면 댓글 섹션을 이용해 주시기 바랍니다. 도와 드리겠습니다.