분명 고3일 때 하라는 공부는 안 하고 블로그에 글을 쓰고 있었는데, 정신차려보니 어느덧 군 복무도 끝나가고 있습니다.
    새로운 마음으로 공부하고 작업한 내용을 기록하고자 새 Jekyll 블로그를 만들었습니다.

    댓글을 쓰셔도 보기가 어려우니, 불편하시더라도 궁금한 점은 옮긴 새 블로그에 댓글로 달아 주시면 성심성의껏 답변해 드리겠습니다. 감사합니다.
    2021년 2월 14일

    새 블로그 주소는 https://luftaquila.io입니다.
     

    LUFT - AQUILA

    A sky sailing Electron.

    luftaquila.io




    블로그를 이전하면서 글도 같이 옮기고 있습니다.

    블로그 이전 공지 : https://luftaquila.tistory.com/56

     

    이 글은

    https://luftaquila.io/blog/diy/esp12-iot-switch/

     

    ESP12 IoT 전등 스위치 만들기

    지구 반대편에서도 끄고 켜는 초특급 와이파이 스위치!

    luftaquila.io

    로 이동되었습니다!


    댓글을 쓰셔도 보기가 어려우니, 불편하시더라도 궁금한 점은 옮긴 새 블로그에 댓글로 달아 주시면 성심성의껏 답변해 드리겠습니다.

     

     

    원래 글을 보려면 더 보기를 누르세요

    더보기

    침대에 누워있다 일어서서 불 끄고 다시 눕기가 귀찮아서 시작한 원격 전등 제어 장치 만들기

    그 유구한 역사(?)는 무려 3년 전으로 거슬러 올라갑니다.

     

     

    막 아두이노의 존재를 깨달았던 2015년에 만든 최초 버전을 시작으로

    어유 이건 뭐 폭탄도 아니고

     

    블루투스 페어링 시간 기다리는게 귀찮아서 바꾼 433MHz & 적외선 통신 버전,

     

    여기까진 뭐... 조잡하기 짝이 없었습니다만. 작년에 의미있는 변화를 만들어 냈죠!

     

    바로 아두이노 사물인터넷 - 블루투스 전등 제어 장치 제작기!

     

    물리 스위치와 무선제어가 서로 연동되어 문제없이 동작하는 가장 완성도 있는 버전이었습니다.

    그리고 거의 1년 반 동안 계속 사용해 왔던 친구고요.

     

    하지만 역시 걸리적거리기 짝이 없던 페어링 대기 시간..

    명색이 무선 제어인데 통신거리 10m의 한계로 급하게 집을 나가면서 끄지 못한 전등을 밖에서 끌 수도 없었습니다.

     

    그래서 기존 기능을 전부 유지하면서도 이런 한계점을 다 때려잡기 위해 새 버전 개발에 착수했습니다.

     

    바로 ESP8266 와이파이 모듈을 이용한 와이파이 제어 전등 스위치!

    갑자기 커진 글씨 크기에 놀라셨다면 죄송합니다.

     

     

    -----------------------------------------------------------------------------------------------

     

     

    준비물 : ESP8266 보드(ESP-12 사용) 1개, 릴레이 1개, 1MΩ 저항 1개, FTDI 모듈 1개, NPN 트랜지스터 1개(2N3904 사용) 등등.

     

    하드웨어 자체는 보드가 아두이노에서 ESP8266으로 바뀌고 블루투스 통신을 위한 HC-06이 없어진 것만 제외하면 이전 아두이노 사물인터넷 - 블루투스 전등 제어 장치 제작기와 거의 똑같으니 여기서 별도의 설명을 하지는 않겠습니다.

     

    하드웨어는 링크된 글을 참고해 주세요. 다만 릴레이 연결에서 바뀐 부분이 있습니다!

    보통 우리가 사용하는 릴레이는 로직 레벨이 5V인데, ESP8266은 로직 레벨이 3.3V입니다.

     

    그런 관계로 릴레이의 신호 핀에 3.3V로 열심히 HIGH, LOW 줘봤자 제대로 작동을 안 해요.

    물론 로직 레벨 컨버터를 사용하면 됩니다만, 컨버터는 손톱만한 주제에 몇천원씩이나 해요...ㅠ 50원짜리 트랜지스터로 대체가 가능합니다.

     

     

    이렇게 배선해 주세요. 신호선은 항상 5V와 연결해 HIGH 상태로 유지하고, 트랜지스터의 스위칭으로 릴레이 전원을 제어하는 방식입니다.

     

    트랜지스터의 스위칭 관련한 내용은 아래 포스팅에서 이미 한 번 언급한 적이 있으니 참고하세요!

    아두이노 사물인터넷 - 핸드폰으로 선풍기 제어(블루투스)

     

     

    제 코드에서 릴레이 제어 핀은 GPIO13이고 정전용량 센서가 연결될 핀은 GPIO4와 GPIO5입니다. 개인적으로 원하는 핀을 사용하셔도 무방합니다만 그럴 경우 아래 코드에서 핀번호를 수정해 주세요.

     

    그리고 GPIO0, GPIO2, GPIO15는 사용하지 않는걸 추천드립니다.

    다른 용도로 이미 사용되는 핀이라서 사용할 경우에 에러가 생길 확률이 높습니다.

     

     

    와이파이, 즉 인터넷 연결을 통해 제어하는 방식이기 때문에 서버가 필요한데, 이거 하자고 없는 분이 태반인 개인 서버를 떡하니 차려놓을 순 없는 노릇 아니겠습니까?! Blynk라는 유용하기 그지없는 서비스를 이용해 보겠습니다!

     

    ESP8266 코딩은 여러 플랫폼에서 가능하지만 저는 익숙한 아두이노 IDE를 사용하겠습니다. 사실 할 줄 아는게 이거밖에 없다.

    ESP8266을 아두이노IDE에서 돌리려면 사전 세팅이 조금 필요합니다.

     

     

    먼저 툴 - 보드 - 보드 매니저... 에서 ESP8266을 검색합니다.

     

     

    나오는 ESP8266 패키지를 설치해주시면 됩니다. 그리고 파일 - 환경설정에 들어가셔서

     

     

    저어기 밑에 추가적인 보드 매니저 URLs라고 적힌 곳에 다음 내용을 추가해 주세요.

    http://arduino.esp8266.com/stable/package_esp8266com_index.json

     

    이제 ESP8266을 사용하기 위한 소프트웨어 준비는 끝났습니다! 만,

    Blynk를 사용하기 위해 Blynk 라이브러리도 설치해 주시고요.

    https://github.com/blynkkk/blynk-library

    에서 다운로드하실 수 있습니다.

     

    제어할 스마트폰에서도 Blynk 앱을 다운받고 간단하게 회원가입을 해 주세요.

     

     

    --------------------------------------------------------------------------------------------------

     

     

    다음은 ESP8266에 아두이노 코딩이 가능하게 만들기 위한 펌웨어 업데이트입니다.

    ESP8266 모듈과 FTDI모듈, 적절한 3.3V 전원공급원이 필요합니다.

     

    ESP8266의 TX, RX 핀을 각각 FTDI의 RX, TX와 교차하게 연결해 주시고, CH_PD와 VCC는 3.3V 전원 공급을, GND는 FTDI의 GND와 전원공급원의 GND에 연결해 주세요. GPIO0번 핀 또한 GND에 연결해 주셔야 합니다.

     

     

    ESP-12E의 핀 배열은 다음과 같습니다. 만 핀 피치가 아두이노와 호환되는 2.54mm가 아니니 개당 천원 정도에 파는 흰색 어댑터 보드를 사용하시면 편리합니다. 어댑터 보드 후면에 662k 3.3V 레귤레이터 부착하고 앞면에 0이라고 적힌 smd 저항 제거하면 vcc에 5V 공급해도 모듈에는 3.3V가 들어가요.

     

    이 때 FTDI의 로직 레벨 또한 3.3V여야 합니다. 5V로 돌려봤는데 문제는 없었습니다만 설계전압이 3V3이니 무시해서 좋을 건 없겠...죠?

    3V3 FTDI가 없으면 전압 분배 회로를 이용해서 5V를 3.3V로 낮춰 주시면 됩니다.

     

    배선이 끝났으면 FTDI모듈을 컴퓨터와 연결하고 아래 두 파일을 다운로드해 주세요.

     

    esp8266_flasher.exe
    다운로드
    v0.9.2.2 AT Firmware.bin
    다운로드

     

    다운하신 후 esp8266 flasher 파일을 실행하셔서 Bin 클릭, 같이 다운로드한 .bin확장자 파일을 선택하세요.

    그리고 COM1이라고 적힌 부분은 장치 관리자(윈도우 키 누르고 devmgmt.msc 검색하시면 나옵니다.)의 포트 탭에서 FTDI의 포트 번호를 찾아 해당 번호로 바꿔 주세요. 그리고 Download 버튼을 누르시면 펌웨어 업데이트를 시작합니다.

     

    펌웨어 업데이트가 끝났으면 이제 코딩만 남았습니다!

     

    우선 스마트폰의 Blynk 앱에서 프로젝트를 하나 생성하시고 가운데 푸쉬 버튼을 하나 배치해 주세요.

     

     

    이렇게요. 그리고 버튼 세팅의 OUTPUT 탭에서 Select pin - Virtual - V0을 선택해 주세요. 모드는 SWITCH이고요.

     

    프로젝트 생성할 때 알려준 Auth Token이 있습니다. 이걸 베껴 적으시든(?) 이메일 전송 기능을 이용해서 보내시든 해서 컴퓨터로 옮겨 주세요. 생성할 때 안 적어 두셨으면 프로젝트 설정에서 이메일로 보낼 수 있습니다.

     

    이제 남은건 소프트웨어 코딩밖에 안 남았습니다!

    그리고 머리아픈 소스코드 전에 잠시 광고를 보고 오면서(?) 머리를 식히겠습니다!!! 와!!!!

     

     

     

     

    죄송합니다(,,,,)

     

    #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <CapacitiveSensor.h> CapacitiveSensor CS = CapacitiveSensor(4, 5); char auth[] = "Auth Token"; char ssid[] = "SSID NAME"; char pass[] = "Password"; boolean RLY; void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); RLY = false; Serial.begin(9600); Blynk.begin(auth, ssid, pass); } void loop() { Blynk.run(); long TCH = CS.capacitiveSensorRaw(30); if(TCH > 10000) { if(RLY == true) { digitalWrite(13, LOW); Blynk.virtualWrite(V0, 0); RLY = false; delay(200); } else if(RLY == false) { digitalWrite(13, HIGH); Blynk.virtualWrite(V0, 1); RLY = true; delay(200); } } } BLYNK_WRITE(V0) { int rcv = param.asInt(); if(rcv == 1) { digitalWrite(13, HIGH); RLY = true; } else if(rcv == 0) { digitalWrite(13, LOW); RLY = false; } } BLYNK_CONNECTED() { Blynk.syncVirtual(V0); } BLYNK_APP_CONNECTED() { if(RLY == true) Blynk.virtualWrite(V0, 1); else if(RLY == false) Blynk.virtualWrite(V0, 0); }

    코드에서 char auth[] = "Auth Token"; 자리에 아까 Blynk 프로젝트 생성할 때 나왔던 Auth Token을 입력해 주세요.

    마찬가지로 SSID NAME 자리에는 연결할 와이파이의 이름을, Password에는 비밀번호를 입력해 주시면 됩니다.

    공개 와이파이의 경우에는 Password부분을 공란으로 남겨두시면 돼요.

     

    위에서도 말씀드렸지만 코드상에서 릴레이 제어 핀은 GPIO13, 정전용량 센서 핀은 GPIO4, 5입니다.

    코드에 궁금한 점이 있으시면 언제든 댓글 주세요. 답변 바로바로 드리겠습니다.

     

    그리고 이제 이 코드를 ESP8266에 업로드해야 하는데, 이 친구는 조금 귀찮은 감이 있습니다.

    NodeMCU같은 개발보드들은 해당사항이 없습니다만, 그냥 ESP-12 등등은 업로드하려면 펌웨어 업데이트 모드로 부팅시켜야 해요.

     

    모듈에 전원을 공급하기 전에, GPIO0을 GND와 연결해 LOW상태로 만든 후에 전원을 주면 펌웨어 업데이트 모드가 됩니다.

    이 경우에만 코드 업로드가 가능해요. GPIO0을 LOW로 안 만들고 업로드를 누르면 업로드 에러 납니다.

     

    그리고 작동 영상!

     

     

    이제 이걸 방 스위치 떼어내고 쑤셔박기만 하면 됩니다. 작업할 땐 항상 차단기 내리기!

     

     

     

    완성!

    문제는 이놈의 전원 공급인데, 배터리로 굴릴 전력소모가 아니라서 아직도 충전기 어댑터에서 전원을 끌어다 쓰고 있습니다.

    언젠간 배터리로 돌릴 수 있도록 다시 한 번 업데이트 해보도록 하겠습니다...

     

     



     

     

    Posted by LUFT - AQUILA
    • kyet
      2018.05.19 13:17

      내용 잘 보았습니다. 상용 제품들은 전등 불은 안켜지되 작은 회로는 구동할 수 있을 만큼만 미소전류를 끌어다 쓰는 형태로 하더군요. 별도의 전원이나 별도의 배터리가 필요 없어서 좋습니다. 그런데 국내 시판중인 제품들은(아성 비올라 등) IR로 하는 것 밖에 없어서 제가 하나 사서 회로 분석 후 BLE module을 달아보았는데 잘 작동이 안되더군요. ㅎㅎ
      중국에는 433MHz로 구동하는 제품들도 팔긴 하더라구요. 433MHz면 signal reverse engineering 하는게 쉬우니까 리모콘 없이 입맛에 맞게 제어할 수는 있을 텐데 현재 상태를 읽어오는 (get state) 기능은 없는 것 같더라구요.
      https://www.aliexpress.com/item/-/32850224443.html
      https://www.aliexpress.com/item/2016-New-US-AU-Type-Broadlink-TC2-170-240V-Smart-Home-Domotica-Wifi-3-Gang-Remote/32662506820.html

      • BlogIcon LUFT - AQUILA
        2018.05.20 02:46 신고

        스위치 박스를 뜯으면 있는 전선 두 가닥은 전위차가 없는 도선의 일부분일 뿐인데 거기서도 미소전류를 끌어다 쓰는게 가능한가요? 신기하네요... 그나저나 끌어다 쓴다고 해도 직류로 바꿔줘야 할 텐데...

    • lee
      2018.08.08 14:00

      배터리나 아두이노에 따로 전원을 공급하지않고 그냥 전력제어 모듈에서 끌어다가 쓸수는 없을까요?

    • 김수진
      2018.09.28 02:09

      저기에 저항은 어떻게 연결하셨나요??

    • BlogIcon passionbull
      2018.11.27 10:23

      안녕하세요. 저도 비슷한 것을 만들었는데 ㅎㅎ
      https://passionbull.net/2018/11/uncategorized/iot-switch-diy-2/
      멋지십니다.


    • 2020.03.13 23:17

      비밀댓글입니다

    • SFf
      2020.06.20 01:30

      SFVZFSXV