[아두이노#558] ESP32에 내장된 블루투스(bluetooth)를 이용해서 스마트폰으로 제어해보기!with appinventor(녹칸다ESP32#8)
프로그래밍/ESP32와 아두이노 2023. 4. 27. 23:09
https://youtube.com/live/sZSatfCLWwg
[아두이노#558] ESP32에 내장된 블루투스(bluetooth)를 이용해서 스마트폰으로 제어해보기!with appinventor(녹칸다ESP32#8)
녹칸다의 ESP32시리즈이다!
제목 그대로 과거의 녹칸다는 IoT보드로 ESP8266보드만 활용했다!
ESP32에 대한 수요도 늘어나는것 같고 제일 중요한 것은 지금의 녹칸다가 ESP32보드가 필요하게 되었다!
ESP8266으로 만들어진 예제들을 ESP32버전으로 바꾸는게 주요 주제라고 할 수 있다!
그와 동시에 약간의 설명도 첨가해서 이것저것 예제를 만들어보도록 하자!
(ESP8266과 ESP32의 차이점을 강조해서 진행해보도록함!)
(근데 거의 80~90%는 거기서 거기인듯!)
이번편은 ESP32만의 단독편이라고 할 수 있다!
현재 ESP32시리즈는 ESP8266에서 했던 내용을 ESP32에서 작동되도록 수정 보완하는 작업을 진행하고 있다!
그러나 ESP8266은 내장 블루투스가 없고 ESP32만 있다!
그러므로 이번편 예제는 ESP32에서 단독으로 진행하는 예제이다!
ESP32에는 블루투스2.0과 BLE가 모두 가능하다!
BLE는 다음에 하고 이번엔 블루트스 classic인 2.0버전으로 접근해보도록 한다!
기본적으로 ESP32예제에 블루투스 마스터/슬레이브 예제가 있다!
이것을 잘 활용하면 우리가 원하는 결과물을 만들어 낼 수 있다!
특별하지 않으면 ESP32는 블루투스 슬레이브로 동작하고 이때 제어를 하게될 장치가 마스터가 된다!
우리가 가지고 있는 제어장치는 스마트폰이 대표적이라 할 수 있다!
그럼 스마트폰이 마스터가되고 ESP32가 슬레이브가 되어서 상호간 통신이 가능하다!
마스터와 슬레이브의 구분은 누가 접속을 시도하고 누가 접속을 당하는가의 차이이다!
스마트폰에서 주변 블루투스 모듈을 검색해서 접속을 시도할때 ESP32가 접속되므로 마스터 슬레이브 관계가 성립한다!
연결은 간단히 가능한데 스마트폰에서 ESP32와 통신을 할만한 소프트웨어가 없는 상태이다!
앱스토어에서 블루투스 터미널 앱을 다운받아서 1차적으로 양방향 통신을 확인한다!
그리고 앱인벤터(app inventor)라는 툴을 이용해서 블루투스 통신을 할 수 있는 간단한 앱을 구현해보도록 한다!
마지막으로 ESP32보드간의 블루투스 통신도 해보도록 하자!
ESP32보드 2대를 준비해서 한쪽은 master, 다른 한쪽은 slave가 되어서 양방향으로 통신이 가능함을 보이는 것이다!
데이터를 주고받으면서 무엇을 어떻게 제어할지는 함께 해보도록 하자!
(참고자료1 ESP32핀맵)
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/user-guide-devkitm-1.html
(참고자료2 INPUT_PULLUP가능핀)
불가능 34,35,2,36,39
가능 32, 33,25,26,14,27,12,13,22,23,19,21,5,18,16,17,4,15
(참고자료3 ESP32의 I2C핀)
SDA : 21
SCL : 22
(참고자료4 ESP32의 SPI핀)
SCK : 18
MOSI : 23
MISO : 19
CS : 5
(참고자료5 ESP32의 Serial핀)
RX : 16
TX : 17
(참고자료6 녹칸다의 블루투스HC06 시리즈#72)
https://bota.tistory.com/1250
(참고자료7 블루투스간 마스터(HC06) 슬레이브(HC06) 통신하기#238)
https://bota.tistory.com/1542
(참고자료8 블루투스간 마스터(HC05) 슬레이브(HC06) 통신하기#239)
https://bota.tistory.com/1543
(참고자료9 녹칸다의 앱인벤터 시리즈#290)
https://bota.tistory.com/1648
(깨알지식)
1.ESP32는 블루투스 classic모듈이 내장되어있으므로 특별히 장치를 하지 않아도 스마트폰과 블루투스 통신이 가능하다!
2.블루투스 통신은 마스터와 슬레이브로 설정을 해야 상호간의 양방향 통신이 가능하다!
3.이때 주변 장치를 검색해서 연결을 하는쪽을 마스터, 연결을 당하는 쪽을 슬레이브라고 한다!
4.ESP32는 슬레이브가되고 스마트폰은 마스터가 되어야 일단 통신이 가능하겠다!
5.오늘 558편의 주요포인트는 아두이노의 시리얼통신을 얼마나 이해하고있는지에 달려있다!
6.앱인벤터(appinventor)를 이용하면 안드로이드용 앱을 아주 간단하게 블록코딩으로 구현해낼 수 있다!
7.앱인벤터의 listpicker에서 before picking(bp)과 after pickng(ap)이 있을때 리스트 피커를 눌렀을때를 bp라고 하고 그때 여러개 항목중에 선택할 수 있는 리스트뷰가 생성된다! 그 목록창에서 뭔가를 선택했을때 ap이 된다!
8.앱인벤터에서 지금 구현중인 어플을 테스트하기 위해서 AI컴패니언이 작동되어야하는데 PC와 스마트폰이 같은 공유기에 연결되어있어야한다!
9.앱인벤터에서는 블루투스데이터를 수신하는 수신이벤트가 구현되어있지 않아서 수신부 구현하는게 생각보다 어렵다!
10.ESP32에서 제공하는 마스터예제에서는 MAC주소로 접속하거나 디바이스명으로 접속하거나 디바이스명과 비밀번호로 접속하는 방법을 제시한다!
11.float는 아두이노에서 4byte의 크기이다!
12.무선통신에서 바이너리로 데이터를 주고받을때 가장 활용하기 좋은 기술은 구조체를 주고받는것이다!
13.로라, nRF24L01, 블루투스, CAN통신, RS485통신 등등 모든 통신은 아두이노에서 사용하는 함수가 동일하기 때문에 지금 활용하는 테크닉을 잘 활용하면 나중에 아주 편리하다!
14.우리가 버튼을 한번 누른다라고 해서 누르면 한번 눌러진것처럼 보이지만 실제로는 20~30번 눌러진것으로 인식된다(채터링현상)
(예제)
1.ESP32를 블루투스 슬레이브로 설정하고 스마트폰과 양방향통신으로 메시지를 주고받으시오!
2.ESP32에 스마트폰으로 명령어 단위로 뭔가를 전송하는 예시를 보이시오!
NOCKANDA1이라고 스마트폰으로 전송하면 ESP32는 녹칸다!를 출력하고 NOCKANDA2라고 전송하면 ESP32는 구독과좋아요!를 출력한다!
3.ESP32의 15번핀에 LED를 1개 연결하고 스마트폰에서 '0'을 전송하면 LED가 꺼지고 '1'을 전송하면 LED가 켜지도록 하시오!
4.(3예제에서) 스마트폰이 "LEDON"이라고 전송하면 LED가 켜지고 "LEDOFF"라고 전송하면 LED가 꺼지도록 하시오!
5.(4예제에서) ESP32가 "I'm ESP32!!" 라는 메시지를 2초간격으로 전송하는 예시를 구현하시오!
6.(4예제에서) ESP32의 18번핀에 온습도센서(DHT-11)을 연결하고 측정한 온도와 습도값을 블루투스통신으로 스마트폰으로 전송해서 출력하시오!
7.(예제6에서) 앱인벤터로 버튼 2개를 만들어서 LED를 ON/OFF하는 예시를 구현하시오!
8.ESP32가 전송하는 온도와습도값을 수신해서 화면에 출력하시오!(온습도 데이터는 CSV포멧으로 전송한다)
9.(예제8에서) ESP32보드를 한대더 추가해서 마스터로 설정하고 원래 있던 슬레이브에서 전송하던 온도와 습도값을 마스터의 시리얼모니터에 출력하시오!
10.슬레이브에 있는 온습도데이터를 문자열형태(휴먼리더블)의 데이터로 전송하는데 아니라 순수 데이터 자체를 byte배열(바이너리)에 담아서 전송하시오!
11.마스터쪽 ESP32의 18번,19번핀에 버튼을 1개씩 연결하고 18번버튼을 누르면 슬레이브의 LED가 켜지고 19번버튼을 누르면 LED가 꺼지도록 하시오!