이번엔 lan plug에 붙어있던것과 동일하게, wifi plug에도 터치센서를 붙여보자.
스케치를 열고 nodeMCU 소스 수정...
GPIO 5번을 터치센서 입력으로 선택하고, 간단 코딩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void setup() { // initialize digital pin LED_BUILTIN as an output. //pinMode(LED_BUILTIN, OUTPUT); pinMode(SWITCH, OUTPUT); pinMode(TOUCH, INPUT); ..... void loop() { if(digitalRead(TOUCH) == HIGH) { Serial.println("Touched"); digitalWrite(SWITCH, !digitalRead(SWITCH)); delay(500); } ..... | cs |
단 몇줄로 터치할때마다 plug를 toggle하도록 구현완료.
그러나 역시, 한가지 문제점은...
현재의 plug 상태가 아두이노, 라즈베리파이, 스마트폰 앱 위젯에 동기화되어야 한다는 것...
즉, 아두이노의 터치센서가 터치될 때마다 상태를 능동적으로 라즈베리파이에 보내는 코드가 추가되어야 한다.
그래서 아래와 같이 소스 수정.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void connectToPi() { WiFiClient client; IPAddress pi(192,168,0,8); if(client.connect(pi, 80)) { Serial.println("connected to pi"); if(digitalRead(SWITCH) == HIGH) { client.println("GET /wifiplugtouched?state=on HTTP/1.0"); } else { client.println("GET /wifiplugtouched?state=off HTTP/1.0"); } client.println(); } } // the loop function runs over and over again forever void loop() { if(digitalRead(TOUCH) == HIGH) { Serial.println("Touched"); digitalWrite(SWITCH, !digitalRead(SWITCH)); connectToPi(); delay(500); } | cs |
현재 상태가 toggle 될때마다 라즈베리파이에 클라이언트로 붙어서 상태를 업데이트 한다.
당연히, 라즈베리파이에서도 수정이 필요하다.
node.js 웹서버 소스 수정..
1 2 3 4 5 6 7 8 | app.get('/wifiplugtouched', function(req, res) { l("wifiplug touched!! state: " + req.query.state); if(req.query.state == "on") wifiplug_state = true; else wifiplug_state = false; send_push(); }); | cs |
wifi plug가 업데이트되면, 각 스마트폰 앱에 push를 보낸다.
대략 완성!!
아래 화면에서 스텐드 두 개를 각각 아두이노와 라즈베리파이에 연결된 플러그에 꽂아놓았다.
그리고, 각 위젯 버튼을 클릭할때마다 스탠드 두 개가 각각 작동한다.
관전포인트 1. 앱 위젯 추가할때에 lan plug와 wifi plug 선택 장면
관전포인트 2. 앱 위젯 아이콘 구분 (둘다 있을때에 구분을 위해 wifi plug에는 wifi 아이콘모양을 추가했다)
관전포인트 3. 터치센서로 아두이노를 켜고 끌때에 앱 위젯의 상태 색이 회색-주황색으로 동기화되는 장면
★ 이해가 안되시는 부분은 지난 블로깅을 보시면 도움이 됩니다.
2017/04/16 - [Raspberry pi] - 1편 스마트 콘센트? Smart Plug!
2017/04/16 - [Raspberry pi] - 2편 스마트 콘센트? Smart Plug!
2017/04/16 - [Raspberry pi] - 3편 스마트 콘센트? Smart Plug!
2017/04/18 - [Raspberry pi] - 4편 스마트 콘센트? Smart Plug! + 앱위젯
2017/04/19 - [Raspberry pi] - 5편 스마트 콘센트? Smart Plug! + 터치스위치
2017/04/25 - [Raspberry pi] - 6편 스마트 콘센트? Smart Plug! + Node.js Push 서버 (개요편)
2017/04/27 - [Raspberry pi] - 7편 스마트 콘센트? Smart Plug! + Node.js Push 서버 (Firebase 등록)
2017/05/03 - [Raspberry pi] - 8편 스마트 콘센트? Smart Plug! + Node.js Push 서버 (서버편)
2017/05/06 - [Raspberry pi] - 9편 스마트 콘센트? Smart Plug! + Node.js Push 서버 (App편)
2017/12/03 - [Arduino] - Wifi 스마트 콘센트 1
2017/12/09 - [Arduino] - Wifi 스마트 콘센트 2 + 라즈베리파이
2017/12/10 - [Arduino] - Wifi 스마트 콘센트 3 + 앱 위젯
'Arduino' 카테고리의 다른 글
아두이노 저전력 deepsleep 구현하기 - 아직 구현 중... (1) | 2022.03.19 |
---|---|
간접조명을 만들고 일몰시간에 자동으로 켜지게 할 수 있을까? #1 (0) | 2022.03.16 |
Wifi 스마트 콘센트 3 + 앱 위젯 (0) | 2017.12.10 |
Wifi 스마트 콘센트 2 + 라즈베리파이 (2) | 2017.12.09 |
Wifi 스마트 콘센트 1 (0) | 2017.12.03 |