ESP8266-01은 IOT 프로젝트에 대한 우리의 모든 갈증을 해소하는 훌륭한 모듈이었습니다. 출시 이후 강력한 커뮤니티를 개발했으며 사용하기 쉽고 저렴하며 강력한 Wi-Fi 모듈 로 발전했습니다. 훨씬 더 인기있는 또 다른 오픈 소스 플랫폼은 Arduino입니다. 이미 수많은 프로젝트가 구축되어 있습니다. 이 두 플랫폼을 결합하면 많은 혁신적인 프로젝트의 문이 열리 므로이 튜토리얼 에서는 ESP8266-01 모듈을 Arduino와 인터페이스하는 방법을 배웁니다. 이렇게하면 Arduino와 인터넷간에 데이터를주고받을 수 있습니다.
이 튜토리얼 에서는 ESP8266-01과 함께 API를 사용 하여 인터넷에서 시간, 날짜, 온도 및 습도를 읽습니다. 그런 다음이 값을 Arduino 보드로 보내고 16 * 2 LCD 화면에 표시합니다. 멋지다! 그럼 시작하겠습니다.
필요한 재료:
- Arduino Board (모든 버전)
- ESP8266-01
- 3.3V 옵션이있는 FTDI 프로그래머 보드
- 16x2 LCD
- 전위차계
- 누름 단추
- 전선 연결
- 브레드 보드
어떻게 작동합니까?
들어가기 전에이 일이 실제로 어떻게 작동하는지 아는 것이 중요합니다. 기본적으로 ESP8266-01 모듈부터 시작해야합니다. Arduino IDE를 사용하여 ESP8266을 프로그래밍하고 API를 사용하여 http 요청을 통해 JSON 파일을 읽도록 코드를 작성합니다. 그런 다음 전체 JSON 파일에서 필요한 정보 만 추출하기 위해이 JSON 파일을 구 문화합니다.
정보가 표현되면 직렬 통신을 사용하여 인쇄합니다. 이 직렬 라인은 Arduino에 연결되어 Arduino가 ESP8266에서 보낸 정보를 읽을 수 있습니다. 정보를 읽고 처리하면 LCD 화면에 표시됩니다.
이 튜토리얼의 나머지 부분에서 똑같이 배우게 될 것이기 때문에 이것을 완전히 이해하지 못했다면 괜찮습니다.
ESP8266-01 프로그래밍:
이 자습서에서는 ESP8266 모듈에 대한 경험이 있다고 가정합니다. 그렇지 않은 경우 다음 세 가지 자습서를 읽고 완전히 이해하는 것이 좋습니다.
- ESP8266-01 시작하기
- AT 명령을 사용하여 ESP8266-01 프로그래밍
- Arduino IDE를 사용하여 ESP8266-01 프로그래밍 및 메모리 플래싱
여기에서 모든 ESP8266 프로젝트를 확인할 수도 있습니다.
여기서는 Arduino IDE를 사용하여 ESP8266-01 모듈을 프로그래밍 할 것입니다. 하드웨어의 경우 3.3V 의 FTDI 보드를 사용하여 ESP8266을 프로그래밍 합니다. 하드웨어를 훨씬 간단하게 만들 수 있기 때문입니다. ESP8266을 FTDI 보드와 연결하기위한 회로도는 아래와 같습니다.
다음 조건이 충족되는지 확인하십시오.
1. ESP8266-01은 3.3V 만 허용하므로 5V를 사용하지 마십시오. 따라서 3.3V 모드에서만 FTDI를 설정하십시오.
2. GPIO_0은 프로그래밍 모드를 위해 접지되어야합니다.
3. 리셋 핀은 버튼을 통해 접지 핀에 연결되어야합니다. 이 버튼은 코드를 업로드하기 직전에 눌러야합니다. 버튼을 누를 때마다 ESP8266-01 모듈의 파란색 LED가 높아져 모듈이 재설정되었음을 나타냅니다.
연결이 완료되면 Arduino IDE를 열고 샘플 프로그램을 성공적으로 업로드 할 수 있는지 확인하십시오. Arduino IDE를 사용하여 프로그램을 ESP8266에 업로드하는 방법을 모르는 경우 Arduino를 사용한 프로그래밍 ESP8266을 따라 학습하십시오. 이 시점에서 깜박임 프로그램을 성공적으로 업로드했다고 가정합니다.
. 전체 프로그램은이 페이지의 끝 부분에 나와 있습니다. 아래에서 작은 조각으로 설명하겠습니다. 이 프로그램은 또한 컴파일을 위해 Arduino JSON 라이브러리가 필요하므로 Arduino IDE에 라이브러리를 아직 추가하지 않은 경우 Github의 Arduino JSON 라이브러리에서 다운로드하여 추가하십시오.
ESP8266은 날짜, 시간, 온도 및 습도에 대한 데이터 를 얻으려면 인터넷에 연결해야합니다. 따라서 아래 줄에 SSID 및 비밀번호를 증명하여 Wi-Fi에 연결할 수 있도록 허용해야합니다.
const char * ssid = "JIO-Fi"; // Wi-Fi SSID를 입력합니다. const char * password = "Pas123"; // Wi-Fi 비밀번호 입력
setup () 함수 내에서 ESP가 Wi-Fi에 연결할 수 있는지 확인합니다. 그렇지 않으면 직렬 모니터에 "Connecting.."을 인쇄하여 영원히 기다리게됩니다.
while (WiFi.status ()! = WL_CONNECTED) {// Wi-Fi가 연결될 때까지 기다립니다 delay (1000); Serial.print ("연결 중.."); // Print Connecting.. 연결이 설정 될 때까지 }
다음 단계는 매우 중요한 단계입니다. Wi-Fi 연결에 성공하면 http get 요청을 호출하여 인터넷에서 JSON 파일을 읽어야합니다. 이 튜토리얼에서는 wunderground.com에서 제공하는 API를 사용하고 있습니다. 따라서 동일한 것을 사용하려는 경우 링크를 통해 무료 API 키에 가입하거나 원하는 API를 사용할 수 있습니다. API로 완료되면 아래와 같은 링크가 표시됩니다.
참고:이 링크의 API 키를 변경하여 작동하지 않습니다. API 키를 안전하게 보관하고 공유하지 마십시오.
여기 내 API는 첸나이의 날씨 데이터를 가져 오는 데 사용됩니다. 모든 API를 사용할 수 있습니다. 그러나 브라우저에서 API를로드하면 JSON 파일을 반환해야합니다. 예를 들어 내 API는 다음 JSON 파일을 반환합니다.
다른 데이터가있는 파일을 반환 할 수 있습니다. 이 JSON 파일을 읽고 다음 줄을 사용하여 직렬 모니터에 JSON을 인쇄 하여 ESP8266에서도 수신되는지 확인할 수 있습니다.
int httpCode = http.GET (); // get 요청 통과 if (httpCode> 0) {// 반환 코드 확인 // payload = http.getString (); // 디버깅을 위해 varibale Payload에 값을 저장합니다. // Serial.println (payload); // 디버깅을 위해 페이로드를 인쇄합니다. 그렇지 않으면 두 줄에 주석을 추가합니다.
테스트 용으로 만 필요하므로이 줄에 대해 설명했습니다. ESP8266이 JSON 데이터를 얻을 수 있는지 확인했으면 이제 데이터를 구문 분석 할 차례입니다. 보시다시피이 데이터는 방대하며 날짜, 시간, 온도 및 습도와 같이 우리에게 필요한 값을 제외하고 대부분의 값은 쓸모가 없습니다.
따라서 JSON Arduino 라이브러리를 사용하여 필요한 값 을 구분하고 변수에 저장합니다. 이는 JSON 파일의 값이 이름 값 쌍으로 할당되기 때문에 가능합니다. 따라서이 이름은 우리에게 필요한 값을 담을 문자열입니다.
이를 위해 JSON 파일을 분석하고 Arduino 코드를 제공하는 웹 사이트로 이동해야합니다. 예, 그렇게 쉽습니다. https://arduinojson.org/assistant/로 이동하여 브라우저에로드 한 JSON 파일을 붙여넣고 Enter 키를 누릅니다. 완료되면 다음과 같이 보입니다.
자동으로 생성되는 구문 프로그램을 보려면 조금 아래로 스크롤하십시오.
모두 당신이해야 할 것입니다 , 당신이 원하는 변수를 선택을 복사하여 아두 이노 IDE에 붙여 내가 여기했던 것처럼, / * JSON 라이브러리를 사용한 구문 데이터 * / //https://arduinojson.org/assistant/를 사용하여 JSON 문자열의 구문 값을 가져옵니다. const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * 구문 데이터 끝 * / // sin 값을 원하는 변수에 지정 JsonObject & current_observation = root; // current_observation 아래 JsonObject & current_observation_observation_location = current_observation; // observation_location 아래 const char * current_observation_station_id = current_observation; // "ICHENNAI1"// 위치 정보 가져 오기 const char * current_observation_local_time_rfc822 = current_observation; // 현지 시간 // 현지 시간을 얻습니다. const char * current_observation_ temperature_string = current_observation; // "90.7 F (32.6 C)"// 온도 값 가져 오기 const char * current_observation_relative_humidity = current_observation; // "73 %"// 습도 값 가져 오기
방금 current_observation_station_id, current_observation_local_time_rfc822, current_observation_ temperature_string 및 current_observation_relative_humidity 변수를 복사했습니다. 우리는 LCD 화면에이 네 가지 데이터 만 표시 할 계획이므로.
마지막으로 우리는 인터넷에서 필요한 데이터를 가져 와서 편안하게 사용할 수있는 변수로 저장했습니다. 이 데이터를 Arduino로 보내기 위해 직렬 모니터를 통해 직렬로 작성했습니다. 다음 줄은 똑같은 작업을 수행합니다.
// 시리얼 모니터를 통해 변수 출력 Serial.print (current_observation_station_id); // Arduino에 위치 정보 보내기 delay (100); // 안정성 지연 Serial.print (current_observation_local_time_rfc822); // Arduino에 현지 시간 세부 정보 보내기 delay (100); // 안정성 지연 Serial.print (current_observation_ temperature_string); // 온도 세부 정보를 Arduino delay (100); // 안정성 지연 Serial.print (current_observation_relative_humidity); // Arduino delay (100)에 습도 정보를 보냅니다 . // 안정성 지연
참고 내가 사용하는 것을 Serial.print () 하지 Serial.println을 () 명령 이후 Serial.println () 우리를 위해 필요하지 않은 데이터와 함께 / n 및 / R을 추가합니다. 또한 ESP가이 값을 10 초 간격으로 Arduino에 전송하도록 10 초 지연을 추가했습니다.
ESP8266-01을 Arduino와 연결:
지금까지 인터넷에서 필요한 데이터를 10 초 간격으로 읽고 직렬로 전송하도록 ESP8266-01을 프로그래밍했습니다. 이제이 직렬 데이터를 읽을 수 있도록 ESP를 Arduino와 인터페이스해야 합니다. 또한 ESP8266 모듈에서받은 데이터를 표시 할 수 있도록 16 * 2 LCD 디스플레이를 Arduino에 추가해야합니다. 회로도의 Arduino와 ESP8266 모듈 인터페이스하기 보다 도시
GPIO_0 핀이 비어 있는지 확인하고 Arduino의 3.3V 핀으로 만 모듈에 전원을 공급하고 푸시 버튼을 눌러 ESP 모듈을 작동 모듈에 넣습니다. 이제 ESP에 업로드 한 프로그램이 작동하기 시작했고 모듈은 직렬 핀을 통해 Arduino로 데이터를 전송해야합니다. 이 직렬 핀은 Arduino의 핀 번호 6과 7에 연결됩니다. 따라서 Arduino의 소프트웨어 직렬 옵션을 사용하여 핀에서 이러한 직렬 데이터를 읽을 수 있습니다.
Arduino 프로그램 및 작업:
전체 아두 이노 프로그램은이 페이지의 끝에서 ESP 코드와 함께 제공됩니다. 아래로 스크롤하여 프로그램을 보거나 프로그램을 이해하려면 더 읽을 수 있습니다.
인터페이스 프로그램은 매우 간단합니다. 소프트웨어 직렬 라이브러리를 사용하여 핀 6 및 7에서 데이터를 읽고 LCD 화면에 표시하면됩니다. 수신되는 데이터가 문자열 형식이므로 하위 문자열 옵션을 사용하여 페이로드를 요구 사항에 맞게 분리하거나 필요한 경우 정수로 변환해야합니다. 따라서 LCD가 연결된 핀을 정의하는 것으로 시작합니다.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // LCD가 연결된 핀 LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
우리는 연결 한 이후 6 및 7 ESP8266의 Rx 및 Tx는 핀을 일 아두 이노의 핀 우리는 초기화해야 할 소프트웨어 시리얼을 우리가.I, 당신이 할 수있는 ESP_Serial 등의 이름이이 그들로부터 시리얼 데이터를 수신 할 수 있도록하는 핀 당신이 원하는 이름을
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
setup () 함수 내에서 직렬 모니터 및 소프트웨어 직렬에 대한 직렬 통신 을 초기화합니다. 기억할 수 있다면 ESP 프로그램을 9600 전송 속도로 통신하도록 만들었으므로 소프트웨어 직렬 포트에 대해 동일한 전송 속도를 사용해야합니다. 또한 LCD에 2 초 동안 작은 소개 메시지를 표시합니다.
void setup () {lcd.begin (16, 2); // 16 * 2 LCD 디스플레이를 사용하고 있습니다. lcd.print ("Arduino & ESP"); // 인트로 메시지 표시 Serial.begin (115200); ESP_Serial.begin (9600); 지연 (2000); lcd.clear (); }
메인 loop () 함수 내에서 ESP8266이 무언가를 보내고 있는지 확인해야합니다. 그렇다면 ESP8266에서 문자열을 읽고 payload라는 변수에 저장합니다. 변수 페이로드는 문자열 유형이며 ESP8266 모듈에서 전송 된 전체 정보를 보유합니다.
while (ESP_Serial.available ()> 0) {페이로드 = ESP_Serial.readString ();
이제이 문자열을 작은 덩어리로 나누어서 우리 자신의 목적으로 사용할 수 있도록해야합니다.이 경우 LCD 화면에 표시하기 위해이 문자열 을 분할해야합니다. Arduino 의 하위 문자열 기능 을 사용하면 쉽게 수행 할 수 있습니다. 이 하위 문자열 기능 을 사용하려면 각 문자의 위치를 알아야합니다. 직렬 모니터에 페이로드를 인쇄하여 문자의 위치를 파악하고이를 사용하여 아래와 같이 하위 문자열을 분류 할 수 있습니다.
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); 온도 = payload.substring (48, 54); 습도 = payload.substring (55, 60);
이제이 변수를 사용하여 직렬 모니터에 인쇄하거나 LCD에 인쇄 할 수 있습니다. 그러나 직렬 모니터에 인쇄하면 하위 문자열이 올바르게 분할되었는지 확인하는 데 도움이됩니다. 다음으로 다음 줄을 사용하여 LCD 디스플레이에 인쇄합니다.
lcd.clear (); lcd.setCursor (1, 0); lcd.print (로컬 _ 날짜); lcd.setCursor (8, 0); lcd.print (로컬 _ 시간); lcd.setCursor (1, 1); lcd.print (온도); lcd.setCursor (10, 1); lcd.print (습도);
Arduino에 프로그램을 업로드하고 연결이 위의 회로도에 표시된 것과 같은지 확인하십시오. 사물이 선명하게 보일 때까지 LCD 디스플레이의 대비를 조정하십시오. LCD에 Intro 메시지가 표시되고 몇 초 후에 아래와 같이 LCD 화면에 날짜, 시간, 온도 및 습도와 같은 세부 정보가 표시됩니다.
또한 데이터가 들어올 때마다 ESP8266 의 파란색 LED가 깜박이 는 것을 볼 수 있습니다. 이것이 보이지 않는다면 ESP가 프로그래밍 모드에 있지 않다는 뜻입니다. Reset 버튼을 눌러 연결을 확인하십시오.
이와 유사하게 모든 API를 사용하여 인터넷에서 필요한 데이터를 가져와 Arduino에 공급하고 Arduino 작업을 처리 할 수 있습니다. 인터넷에서 사용할 수있는 수많은 API가 있으며 모든 API를 사용하여 무제한의 프로젝트를 만들 수 있습니다. 당신이 프로젝트를 이해하고 그것을 만드는 것을 즐겼기를 바랍니다. 문제가 발생한 경우 아래 댓글 섹션이나 포럼에 게시하십시오.
여기에서 모든 ESP8266 관련 프로젝트를 찾을 수 있습니다.