[아두이노#207] esp8266wifi MQTT로 (4x4키패드/IR리모컨) 제어해보기!(wemos d1r1/사물인터넷(iot)시리즈#46/녹칸다/포로리야공대가자)
프로그래밍/ESP8266 MQTT 2021. 1. 4. 22:18
esp8266wifi MQTT로 (4x4키패드/IR리모컨) 제어해보기!(wemos d1r1/사물인터넷(iot)시리즈#46/녹칸다/포로리야공대가자)
-4x4키패드와 IR리모컨&IR수신기를 사물인터넷보드(wemos d1r1)에 연결해서 사용해보자!
-이번편의 핵심과제는 사물인터넷보드에서 사용가능한 인터페이스를 확보해보는 것이다!
-4x4키패드와 적외선리모컨에서 입력한 값을 MQTT로 publish 해보자!
-녹칸다의 openapi예제를보면 LCD모듈과 SD카드모듈을 연결하는데 뭔가 액션을 주기에는 여분의 디지털핀이 부족하다!
-그렇다면 뭔가 입력을 할 수있는 도구가 필요한데, 현재는 버튼(택트스위치)만 활용하고 있다!
-사물인터넷보드에서 유저에게 4자리숫자를 입력받아서 인터넷정보를 가져온다고 할때, 입력인터페이스를 구현해보자!
-아무래도 이번편은 사물인터넷보드와 호환성여부를 중점적으로 확인해보는 것이고 MQTT라이브러리와 웹클라이언트 라이브러리에서 호환성을 중점적으로 본다!
-4x4키패드는 디지털핀 8개가 필요해서 아무래도 적외선리모컨이 딱좋아 보이긴 한다!
예제 207-1 사물인터넷보드(wemos d1r1)에 4x4키패드를 어떻게든?연결해보자!
일단 녹칸다의 솔루션으로는 4x4전체를 활용하기는 어렵고 숫자부분인 4x3부분만 활용가능하다!
핀번호는 {R1R2R3R4}={D9D8D7D6}, {C1C2C3} = {D5D2D0} 이렇게 연결하라!
예제의 기능적 동작으로는 유저가 입력한 숫자가 하나씩 늘어나고 길이가 16을 초과하게되면 제일 과거의값을 1개씩 지운다!
그리고 *모양 버튼을 누르면 제일 최근입력한 문자가 하나 지워진다(백스페이스)
마지막으로 #버튼을 누르면 지운다(clear)
예제 207-2 직전예제에 1602LCD에 i2c모듈이 장착된 LCD모듈을 연결한다!
i2c통신을 사용하므로 sda핀을 D4에 연결하고 scl핀을 D3에 연결하라!
직전예제의 결과를 LCD화면에 띄워보자!
예제 207-3 직전예제에 사물인터넷보드에 MQTT기능을 추가해보자!
유저가 16개의 숫자를 입력하고 #버튼을 누르게되면 MQTT로 publish해보자!
이때 topic은 nockanda/number로 publish해보자!
직전 예제와 기능상의 차이는 1도없음!
예제207-4 사물인터넷보드(wemos d1r1)에 IR리모컨 수신부를 D5에 연결했다!
리모컨의 특정한 버튼을 눌렀을때 3바이트로 구성된 ID값을 시리얼모니터에 출력해보라!
라이브러리가 esp8266전용으로 별도로 존재한다!
사용안되는 핀이 있을 수도 있다(예를들면 D2)
녹칸다가 사용하는 리모컨은 FF0000~FFFFFF 까지가 유효한 ID인것 같아서 그부분만 필터링했다!
ID가 다른분들은 지우고 활용하시길!
예제207-5 직전예제에 1602LCD에 i2c모듈이 추가된 LCD모듈을 이용해서
리모컨을 눌렀을때 ID값을 LCD화면에 띄워보시오!
이때 LCD의 SDA핀을 D4에 SCL핀을 D3에 연결하시오!(i2c 고정핀)
예제 207-6 직전예제에서 사물인터넷보드가 MQTT 메시지를 publish할 수 있도록해보자!
유저가 리모컨으로 key값을 날리면 key값을 MQTT로 publish하자!
topic은 nockanda/remote로 하자!
관련라이브러리(keypad)
https://github.com/Chris--A/Keypad
관련라이브러리(IRremote_esp8266)
https://github.com/crankyoldgit/IRremoteESP8266
관련라이브러리(LiquidCrystal_I2C)
https://github.com/johnrickman/LiquidCrystal_I2C
관련라이브러리(pubsubclient)