본문 바로가기
ESP32

ESP32 기반 원격 전원 순환기 스위치 만들기

by 모빌리티키즈 2024. 10. 3.
728x90
반응형

ESP32 기반 원격 전원 순환기 스위치 만들기

Wi-Fi 라우터가 인터넷 연결 문제를 일으킬 때마다 라우터의 전원을 껐다가 켜는 번거로움을 겪으셨나요? 이제 라우터 근처에 가지 않고도 이 문제를 해결할 수 있는 ESP32 기반 원격 전원 순환기 스위치를 만들어보세요! 이 프로젝트는 책상에 있는 버튼을 눌러 라우터를 2초 동안 껐다가 자동으로 다시 켜는 기능을 제공합니다.

필요한 부품

  • ESP32 개발 보드
  • 릴레이 모듈
  • 버튼 스위치
  • 전원 어댑터
  • 점퍼 와이어
  • 브레드보드 (선택 사항)

회로 구성

  1. ESP32와 릴레이 모듈 연결: ESP32의 GPIO 핀을 릴레이 모듈의 입력 핀에 연결합니다. 예를 들어, GPIO 23을 사용할 수 있습니다.
  2. 릴레이 모듈과 라우터 전원 연결: 릴레이 모듈의 출력 핀을 라우터의 전원 케이블에 연결합니다. 이때, 릴레이 모듈이 라우터의 전원을 차단하고 다시 연결할 수 있도록 합니다.
  3. 버튼 스위치 연결: 버튼 스위치를 ESP32의 다른 GPIO 핀에 연결합니다. 예를 들어, GPIO 22를 사용할 수 있습니다.

코드 작성

ESP32에 업로드할 코드를 작성합니다. 이 코드는 버튼을 눌렀을 때 릴레이를 작동시켜 라우터의 전원을 2초 동안 끄고 다시 켜는 기능을 합니다.

#include <Arduino.h>

const int relayPin = 23;
const int buttonPin = 22;

void setup() {
  pinMode(relayPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  digitalWrite(relayPin, HIGH); // 릴레이를 기본적으로 켜진 상태로 설정
}

void loop() {
  if (digitalRead(buttonPin) == LOW) {
    digitalWrite(relayPin, LOW); // 릴레이를 꺼서 라우터 전원 차단
    delay(2000); // 2초 대기
    digitalWrite(relayPin, HIGH); // 릴레이를 켜서 라우터 전원 복구
  }
}

Wi-Fi에 연결되어 있는 경우 Wi-Fi 라우터에서 인터넷 연결 끊김과 같은 몇 가지 문제가 발생할 수 있습니다. 대부분의 경우 라우터의 전원을 껐다가 켜서 이 문제를 해결할 수 있습니다.

이 과정을 더 쉽게 하기 위해 라우터 근처에 있지 않고도 라우터를 껐다가 켤 수 있는 무선 스위치를 만들었습니다. 책상에 있는 버튼을 누르면 라우터가 2초 동안 꺼졌다가 자동으로 다시 켜집니다.

발신자와 수신자 모두 Seed Studio Xiao ESP32C3를 사용하여 만들어집니다. 현재 우리는 ESP-Now 프로토콜을 사용하여 발신자 및 수신자와 통신합니다. ESP-Now 사용의 주요 장점 중 하나는 추가 무선 통신 회로가 필요하지 않다는 것입니다. ESP32 장치는 서로 직접 통신하므로 프로젝트가 전반적으로 덜 복잡합니다.

공급

TX 부속

  1. Seeedstudio 샤오 ESP32C3
  2. OMRON 12x12x7.3mm 촉각 4핀 푸시 버튼 스위치
  3. USB C 케이블
  4. 슈퍼 접착제

RX 부품

  1. Seeedstudio 샤오 ESP32C3
  2. Mini 360 강압 벅 컨버터 전력 모듈
  3. IRLZ44N 모스펫
  4. 10K 레지스탕스
  5. 2*2.1 x 5.5mm DC 전원 잭 소켓 암 - 패널 실장
  6. DC-DC 케이블
  7. B-7000 접착제

사용 도구

  1. 납땜 키트
  2. 와이어 커터
  3. 제3자 납땜 공구
  4. 드라이버
  5. 트위터
  6. 노즈 플라이어
  7. 3D 프린터 (회색, 주황색 PLA)

1단계: Fusion 360에서 설계

디자인은 쉬운 3D 프린팅을 위해 여러 수준으로 나뉩니다.

2단계: 3D 프린팅

복잡한 특성으로 인해 물체를 부분적으로 설계했기 때문에 3D 프린팅 후 조립해야 합니다. 나는 주황색 PLA와 회색 PLA를 사용했습니다. 내 입방 프린터로 모든 모델을 3D 인쇄했습니다. 0.2mm 층 높이 및 30% 충전재

wifi+power+cycle+v12.step
7.36MB
RX+Cap.stl
0.95MB
WIFI+BUTTON+v9.step
2.16MB
RX+Body.stl
0.64MB
TX+cap1.stl
0.98MB
TX+main1.stl
0.36MB

 

3 단계 : XIAO ESP32C3의 MAC 주소 찾기

 

 

 

송신기(TX)와 수신기(RX) 간의 통신을 위해 ESP-NOW 프로토콜을 사용하고 있습니다. 이를 위해 송신기(TX)는 RX ESP32의 고유한 MAC 주소를 알아야 합니다. MAC 주소를 찾으려면 ESP32C3 수신기(XIAO)에서 다음 코드를 실행해야 합니다. 이 프로그램을 실행하면 MAC 주소가 직렬 모니터에 표시됩니다.

내 MAC 주소는 64:E8:33:8A:22:54입니다.

MAC 주소를 찾기 위한 코드


#include<WiFi.h>
#include<esp_wifi.h>

voidreadMacAddress(){
uint8_t baseMac[6];
esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);
if (ret == ESP_OK) {
    Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
                  baseMac[0], baseMac[1], baseMac[2],
                  baseMac[3], baseMac[4], baseMac[5]);
  } else {
    Serial.println("Failed to read MAC address");
  }
}

voidsetup(){
  Serial.begin(115200);

  WiFi.mode(WIFI_STA);
  WiFi.STA.begin();

  Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
readMacAddress();
}

voidloop(){

}

4단계: TX 코드

코드를 업로드하기 전에 수신기의 MAC 주소인 64:E8:33:8A:22:54를 입력해야 합니다.

그러면 0x64,0xE8,0x33,0x8A,0x22,0x54이 됩니다.

코드의이 줄에 넣으십시오.

수신기의 MAC 주소

uint8_t receiverAddress[] = {0x64, 0xE8, 0x33, 0x8A, 0x22, 0x54};

TX 코드


#include<WiFi.h>
#include<esp_now.h>

// MAC address of the receiver (RX) ESP32
uint8_t rx_mac[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};  // Replace with actual MAC address

voidsetup(){
  Serial.begin(115200);

// Initialize WiFi in STA mode
  WiFi.mode(WIFI_STA);

// Initialize ESP-NOW
if (esp_now_init() != ESP_OK) {
    Serial.println("ESP-NOW initialization failed");
while (true);
  }

// Register peer
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, rx_mac, 6);
  peerInfo.channel = 0;  // use the current channel
  peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("Failed to add peer");
while (true);
  }

// Register callback function
esp_now_register_send_cb(onDataSent);

// Setup button pin
pinMode(D0, INPUT_PULLUP);
}

voidloop(){
if (digitalRead(D0) == LOW) {  // Button pressed
// Send signal to power cycle
uint8_t data[] = {0x01};  // Signal to RX
esp_now_send(rx_mac, data, sizeof(data));
delay(1000);  // Debounce delay
  }
}

voidonDataSent(constuint8_t *mac_addr, esp_now_send_status_t status){
if (status == ESP_NOW_SEND_SUCCESS) {
    Serial.println("Data sent successfully");
  } else {
    Serial.println("Data send failed");
  }
}

5 단계 : Rx 코드

RX 코드에 대한 변경이 필요합니다.


#include<WiFi.h>
#include<esp_now.h>

#define RELAY_PIN D0

voidsetup(){
  Serial.begin(115200);

// Initialize WiFi in STA mode
  WiFi.mode(WIFI_STA);

// Initialize ESP-NOW
if (esp_now_init() != ESP_OK) {
    Serial.println("ESP-NOW initialization failed");
while (true);
  }

// Register callback function (new format)
esp_now_register_recv_cb(onDataReceived);

// Setup relay pin
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH);  // Ensure relay is HIGH (closed) initially
}

voidloop(){
// Nothing to do here
}

// Updated callback function with esp_now_recv_info
voidonDataReceived(const esp_now_recv_info *recvInfo, constuint8_t *data, int len){
  Serial.print("Message from: ");
for (int i = 0; i < 6; i++) {
    Serial.printf("%02X", recvInfo->src_addr[i]);
if (i < 5) Serial.print(":");
  }
  Serial.println();

if (len == 1 && data[0] == 0x01) {
    Serial.println("Power cycle signal received");
powerCycle();
  }
}

voidpowerCycle(){
digitalWrite(RELAY_PIN, LOW);   // Open relay to cut power
delay(2000);                    // Wait 2 seconds
digitalWrite(RELAY_PIN, HIGH);  // Close relay to restore power
}

6단계: TX 및 RX의 배선도

TX의 배선도

RX의 배선도

 

7단계: 강압 컨버터의 전압 설정

조립하기 전에 스텝 다운 컨버터의 전압을 미리 설정해야합니다. 12v 소스를 IN+ 및 IN-에 연결하고 전압을 5v로 설정합니다. 멀티미터를 사용하여 OUT+ 및 OUT-에서 측정합니다. XIAO ESP32C3에 필요한 5v를 제공하는 데 사용됩니다.

8단계: RX 어셈블리

8.1

MOSFET의 G와 S 사이에 10k 저항을 납땜하여 조립을 시작할 수 있습니다

8.2

이제 MOSFET을 3D 프린팅 슬롯에 넣고 납땜 인두를 사용하여 탭을 녹여 MOSFET을 제자리에 고정합니다.

8.3

강압 변환기와 XIAO ESP32C3 모두 3D 인쇄에 붙입니다.

8.4

안테나를 Xiao에 연결하고 측벽을 공격합니다.

8.5

두 DC 잭을 모두 설치합니다.

8.6

이제 배선도에 따라 모든 배선을 완료하십시오.

8.7

전면 캡을 붙이고 닫습니다.

그래서 우리는 RX 빌드를 완료했습니다

9단계: TX 조립

9.1

푸시 버튼을 버튼 홀더에 넣고 노즈 플레이어를 사용하여 4개의 단자를 3D 인쇄로 구부립니다.

9.2

안테나를 3D 인쇄 본체에 붙이고 안테나 포트를 XIAO에 연결합니다.

9.3

초강력 접착제를 사용하여 버튼 홀더를 본체에 붙입니다.

9.4

이제 푸시 버튼 상단의 스위치 캡을 밀어 넣습니다.

이제 두 장치의 빌드가 완료되었습니다. 이제 설정 방법을 살펴 보겠습니다.

10 단계 : 설정 방법

어댑터의 12v 전원을 수신기의 입력 DC 잭에 연결 한 다음 DC-DC 수 케이블을 사용하여 수신기의 출력을 Wi-Fi 라우터의 전원 입력에 연결하고 USB 전원을 사용하여 TX 푸시 버튼에 전원을 공급하는 것은 매우 간단합니다.

마무리

이제 모든 연결을 확인하고 ESP32에 코드를 업로드한 후, 버튼을 눌러 라우터의 전원을 원격으로 순환시킬 수 있습니다. 이 간단한 프로젝트를 통해 인터넷 연결 문제를 쉽게 해결할 수 있습니다.

이 프로젝트를 통해 ESP32의 다양한 가능성을 탐구해보세요! 추가적인 기능을 추가하거나 다른 IoT 프로젝트에 응용할 수도 있습니다. 즐거운 제작 시간 되세요! 😊


이 블로그 형식이 도움이 되었기를 바랍니다. 추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!

728x90
반응형