ESP32

ESP32 Arduino IoT Cloud 5개 릴레이 예약 제어 wokwi 시뮬레이션

지구빵집 2024. 5. 6. 18:04
반응형

 

안녕하세요 여러분, Arduino IoT Cloud의 스케줄러 위젯을 사용하여 5 개의 릴레이를 예약 제어하기 위해 wokwi 시뮬레이션을 사용한 경험을 공유하고 싶습니다. 여기에 제작 방법에 대한 짧은 비디오가 있으며 유용하고 관심을 가져 주셔서 감사합니다. 

 

아두이노 IoT 클라우드를 사용하여 ESP32(웍위 시뮬레이션)에 연결된 OLED 디스플레이로 5개의 릴레이를 예약 제어하는 방법은 무엇인가요? 단계는 다음과 같습니다:

 

1. 이 웍위 프로젝트를 엽니다: https://wokwi.com/projects/396738675898696705

 

2. 아두이노 IoT 클라우드(https://cloud.arduino.cc)를 열고 계정을 생성한 후 로그인합니다.

 

3. Thing을 생성하고 CloudSchedule 유형으로 5개의 변수를 추가한 후 각각 jadwal1, jadwal2, jadwal3, jadwal4, jadwal5로 이름을 지정하고 접근 권한을 설정합니다: 읽기 및 쓰기, 업데이트 권한을 설정합니다: 변경으로 설정합니다.

 

4. Thing에 변수를 추가한 후 다음 단계는 Thing을 장치에 연결하는 것입니다. 장치를 선택합니다: ESP32 개발 모듈을 선택하고 ID 및 비밀 키 장치를 저장합니다. Wokwi 프로그램에서 장치 ID 및 비밀 키 코드를 새 ID 및 비밀 키 장치로 바꿉니다.

 

5. 대시보드 생성, 스케줄러 위젯을 선택하고 시작 시간, 기간, 반복 시간을 설정한 후 보기 버튼(눈 이미지)을 눌러 대시보드를 실행합니다.

 

6. 웍위 시뮬레이션을 실행합니다. 스케줄러 위젯 설정에 따라 5개 릴레이의 켜짐/꺼짐이 결정되며, OLED 디스플레이에 릴레이의 상태와 켜짐 시간이 표시됩니다. 자세한 내용은 이 블로그를 참조하세요:

 

https://bermainwokwi.blogspot.com/p/koneksi-dengan-arduino-iot-cloud.html#tiga 간략히  

 

구현 방법 영상 쇼츠

 

 

 

 

Wokwi 시뮬레이션 주소

 

 

 

코드

 

// Code generated by Arduino IoT Cloud
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
const char DEVICE_LOGIN_NAME[]  = "373bb0e9-5f46-48b8-8f42-f73a1e9a359d";
const char SSID[]               = "Wokwi-GUEST";
const char PASS[]               = "";
const char DEVICE_KEY[]         = "1tRg0UWO#tbA7r?xeS20xgUOz";
void onJadwal1Change();
void onJadwal2Change();
void onJadwal3Change();
void onJadwal4Change();
void onJadwal5Change();
time_t UnixTime;
unsigned long skr = 0;
String waktu;
bool r1 = false, r2 = false, r3 = false, r4 = false, r5 = false;
int a = 0, b = 0, c = 0, d = 0, e = 0;
CloudSchedule jadwal1;
CloudSchedule jadwal2;
CloudSchedule jadwal3;
CloudSchedule jadwal4;
CloudSchedule jadwal5;
void initProperties() {
  ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME);
  ArduinoCloud.setSecretDeviceKey(DEVICE_KEY);
  ArduinoCloud.addProperty(jadwal1, READWRITE, ON_CHANGE, onJadwal1Change);
  ArduinoCloud.addProperty(jadwal2, READWRITE, ON_CHANGE, onJadwal2Change);
  ArduinoCloud.addProperty(jadwal3, READWRITE, ON_CHANGE, onJadwal3Change);
  ArduinoCloud.addProperty(jadwal4, READWRITE, ON_CHANGE, onJadwal4Change);
  ArduinoCloud.addProperty(jadwal5, READWRITE, ON_CHANGE, onJadwal4Change);
}
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
void setup() {
  Serial.begin(9600);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    for (;;);
  }
  delay(1500);
  initProperties();
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  pinMode(23, OUTPUT);
  pinMode(19, OUTPUT);
  pinMode(18, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(17, OUTPUT);
}
void loop() {
  ArduinoCloud.update();
  if (jadwal1.isActive()) {
    digitalWrite(23, HIGH);
    r1 = true;
  }
  else {
    digitalWrite(23, LOW);
    r1 = false;
  }
  if (jadwal2.isActive()) {
    digitalWrite(19, HIGH);
    r2 = true;
  }
  else {
    digitalWrite(19, LOW);
    r2 = false;
  }
  if (jadwal3.isActive()) {
    digitalWrite(18, HIGH);
    r3 = true;
  }
  else {
    digitalWrite(18, LOW);
    r3 = false;
  }
  if (jadwal4.isActive()) {
    digitalWrite(5, HIGH);
    r4 = true;
  }
  else {
    digitalWrite(5, LOW);
    r4 = false;
  }
  if (jadwal5.isActive()) {
    digitalWrite(17, HIGH);
    r5 = true;
  }
  else {
    digitalWrite(17, LOW);
    r5 = false;
  }
  if (millis() - skr > 1000) {
    UnixTime = ArduinoCloud.getLocalTime();
    waktu = ctime(&UnixTime);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(0, 0);
    display.print(waktu.substring(0, 11));
    display.print(waktu.substring(20));
    display.print("       ");
    display.println(waktu.substring(11, 19));
    if (r1) {
      a++;
      display.print("R1:ON.......");
      display.println(a);
    } else {
      a = 0;
      display.println("R1:OFF.........");
    }
    if (r2) {
      b++;
      display.print("R2:ON.......");
      display.println(b);
    } else {
      b = 0;
      display.println("R2:OFF.........");
    }
    if (r3) {
      c++;
      display.print("R3:ON.......");
      display.println(c);
    } else {
      c = 0;
      display.println("R3:OFF.........");
    }
    if (r4) {
      d++;
      display.print("R4:ON.......");
      display.println(d);
    } else {
      d = 0;
      display.println("R4:OFF.........");
    }
    if (r5) {
      e++;
      display.print("R5:ON.......");
      display.println(e);
    } else {
      e = 0;
      display.println("R5:OFF.........");
    }
    display.display();
    skr = millis();
  }
}
void onJadwal1Change()  {
}
void onJadwal2Change()  {
}
void onJadwal3Change()  {
}
void onJadwal4Change()  {
}
void onJadwal5Change()  {
}

 

 

Wokwi 회로

 

 

 

 

반응형