ESP32 Dev Module의 와이파이 이용 원격제어에 관해 살펴보겠다.
ESP32의 가변저항 및 LED 연결
#define get_ledPin 19 // 가변저항 제어권 표시
#define pwm_ledPin 18 // 아두이노 pwm핀(~ 핀)
analogRead() 핀으로 GPIO 34번 핀을 사용하였다.
ESP32는 총 10 개의 ADC 핀을 제공한다. 하지만 ESP32의 BLE기능 작동코드를 업로드하고 작동 시킨 뒤에는 ADC핀인 GPIO 2, 4, 15, 36, 39핀에서 가변저항을 통해 생성된 아날로그 값을 정상적으로 읽어오지 못했으며, 34번 핀에서 정상 작동하는 것을 확인했다. 나머지 핀은 확인해 보지 않았다(BLE 작동 코드없이 analogRead() 테스트에서는 정상 작동 되었었음).
ESP32 개발보드 버전별 구분법
* DEVKITC 개발보드의 구버전과 V4 신버전은 와이파이/블루투스 안테나의 노출 여부에 따른 외형상 차이로 구분할 수 있습니다.
* ESP32-WROOM-32D의 후속칩셋인 ESP32-WROOM-32E는 국내 전자파 인증( R-C-es5-ESP32WROOM32E )을 받은 모듈입니다.
* ESP32-WROOM-32D 또한 전자파 인증(R-CRM-es5-ESPWROOM32D)을 받았었으나 현재는 ESPRESSIF에서 단종되며 인증번호가 삭제되었습니다.
* ESP32-WROOM-32D와 ESP32-WROOM-32E의 차이는 보안 관련 이슈 해결 유무만 다르고 기존 펌웨어와 호환된다고 합니다.
두 모듈 모두 아래와 같은 위치에 KC 인증표시가 표시되어 있습니다.
ESP32 DEVKITC V4 ESP32-WROOM-32E 구입처: 알리익스프레스
ESP32 DEVKITC V4 ESP32-WROOM-32D 구입처: 알리익스프레스
ESP32 보드의 사용은 앞선 글에서 살펴본 NodeMcu ESP8266 보드 사용과 매우 비슷하다. 각종 라이브러리도 이름만 다를뿐 각 기능별로 대응되게 구성되어 있다.
앞선 예제에서는 NodeMcu의 와이파이를 사용하기 위해 "ESP8266WiFiAP.h", "WiFiClient.h", "WiFiServer.h"를 포함하고 있는 "ESP8266WiFi.h" 라이브러리 하나만을 사용했지만 ESP32에서는 각각 기능별 라이브러리를 사용해야 한다.
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
아래 ESP32 Dev Module의 soft AP 기본 코드를 업로드 해보자.
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
#define AP_SSID "Esp32"
#define AP_PASS "1234test"
String income_wifi = ""; // 와이파이 수신 스트링 저장 변수
WiFiServer server(80);
void setup() {
Serial.begin(115200);
WiFi.softAP(AP_SSID, AP_PASS); // WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
server.begin();
}
void loop() {
WiFiClient client = server.available(); // client 시작
if(client.available()) {
income_wifi = client.readStringUntil('\r');
Serial.println(income_wifi);
}
client.stop();
}
업로드 후 스마트폰에서 soft AP에 연결하고 웹브라우저 주소창에 192.168.4.1을 입력해보자.
아래 그림과 같이 아두이노 시리얼 모니터에 "GET / HTTP/1.1"이 표시 되고 192.168.4.1/hi를 입력하면 "GET /hi HTTP/1.1"이 출력되는것을 볼 수 있다.
ESP32 와이파이 이용 제어코드는 앞서 살펴본 NodeMcu ESP8266 보드의 제어코드와 거의 같다. 단지 analogWrite()의 대체 함수를 사용하는 것만 다를 뿐이다. 각가 코드의 설명은 앞선글을 참조하길 바란다.
NodeMcu ESP8266 보드의 제어코드 수정사항
pinMode(pwm_ledPin, OUTPUT); // PWM 제어 LED
ledcAttachPin(pwm_ledPin, pwm_channel); // Esp32 analogWrite
ledcSetup(pwm_channel, 5000, 8); // Esp32 analogWrite
analogWrite(pwm_ledPin, h_pwm); // 가변저항 LED 제어
ledcWrite(pwm_channel, h_pwm); // analogWrite() 대체함수 - 가변저항 LED 제어
analogWrite(pwm_ledPin, pwm1); // 가변저항 LED 제어
ledcWrite(pwm_channel, pwm1); // analogWrite() 대체함수 - 가변저항 LED 제어
코드 추가: 본래 client.stop() 함수를 사용해서 클라이언트 연결을 끊어주어야 한다. 하지만 NodeMcu ESP8266 보드 코드에서 client.stop() 함수를 사용하면 데이터 수신 및 전송이 안되어 삭제 했던 것이다.
client.stop();
이제 아래 전체 코드를 NodeMcu에 업로드 하고 arduino bluetooth controller PWM 안드로이드 앱을 통하여 제어를 해보자
스마트폰의 와이파이로 NodeMcu soft AP에 연결하거나 안드로이드 앱에서 와이파이 아이콘을 클릭하면 와이파이 세팅화면이 나오는데 여기에서 연결을 시켜준다.
arduino bluetooth controller PWM - 아두이노 원격제어 안드로이드 앱 버전 3.5 다운로드
arduino bluetooth controller PWM 매뉴얼
(*** 상기앱의 와이파이 연결은 안드로이드8 [갤럭시S7]이하 버전에서만 작동합니다 ***)
아래의 화면이 나오면 ip 입력창에 설정된 NodeMcu soft AP 주소를 입력하고 Confirm을 클릭한다.
Confirm을 클릭하면 안드로이드 앱은 soft AP주소로 100 밀리초마다 응답요청을 하게 되고 응답 수신을 하게 되면 와이파이 연결이 잘 되고 있는것으로 판단하고 연결된 soft AP 주소, 와이파이 원격제어 종료 아이콘 및 응답수신 진행 카운터를 표시하게 된다.
8초동안 응답요청에 대한 응답 수신을 받지 못 할경우 와이파이 연결이 끊긴것으로 보고 와이파이 연결 아이피 주소와 연결끊기 아이콘 및 응답수신 카운터는 표시가 되지 않는다.
안드로이드 앱의 와이파이 원격제어 프로세스를 정지시키고자 한다면 빨간색 플러그 아이콘을 클릭하면 스케쥴 응답요청 및 전송 프로세스는 모두 정지 된다.
최신 업데이트 유료앱(모든 안드로이드 버전 와이파이 연결 지원)
https://postpop.tistory.com/175
관련 글
[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 1편
[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 2편
[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 3편
[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 4편
[arduino] - 아두이노 - 안드로이드를 이용한 무선 원격제어 그리고 시리얼 통신 - 5편
[arduino] - 블루투스 4.0 BLE 이용 아두이노 및 ESP32 원격제어
[arduino] - 아두이노 - 시리얼통신 주요함수와 예제, String class
[arduino] - 아두이노 - ESP01 wifi 모듈 무선 원격제어 그리고 시리얼 통신 - 6편
[arduino] - ESP8266 - NodeMcu 1.0 와이파이 이용 원격제어(soft AP, wifi)
[arduino] - ESP32 - Dev Module 와이파이 이용 원격제어(soft AP, wifi)
'Arduino' 카테고리의 다른 글
NodeMcu(ESP8266)에서 DFplayer를 제어하는 코드 (0) | 2019.08.14 |
---|---|
DFplayer - 아두이노 사운드 모듈 (10) | 2019.06.13 |
아두이노 - 디지털 도어락 예제, delay() 함수 대체 방법 (14) | 2019.05.27 |
Esp8266 NodeMcu 및 ESP32 Dev Module, stack 오류 (0) | 2019.05.25 |
ESP8266 - NodeMcu 1.0 와이파이 이용 원격제어(soft AP, wifi) (0) | 2019.05.21 |
ESP32 블루투스 2.0 클래식 pin code 이용 페어링(비밀번호 사용 연결) 원격제어 (2) | 2019.05.18 |
ESP32 블루투스 4.0 BLE, 비밀번호(pin code) 이용 페어링 연결 (2) | 2019.05.17 |
아두이노 - 시리얼통신 주요함수와 예제, String class (0) | 2019.05.15 |