무료 플랜으로 Arduino IoT Control에서 더 많은 제어 장치(12개의 릴레이 및 6개의 예약된 릴레이)를 생성하는 방법은 무엇인가요?
무료 요금제 기능에서는 5개의 클라우드 변수만 제공하지만, 더 많은 제어 기능을 만들 수 있습니다. 다음은 무료 요금제 기능을 사용하여 18개의 릴레이에 대한 제어를 생성하는 방법이며, 이 중 6개 릴레이가 예약에 따라 제어됩니다. 단계는 다음과 같습니다:
1. 이 wokwi 프로젝트를 엽니다: https://wokwi.com/projects/3970226172....
2. https://cloud.arduino.cc 을 엽니다.
3. 아두이노 계정을 생성한 다음 로그인합니다.
4. 각각 부울 데이터 유형 2개, 정수 2개, CloudSchedule이라는 이름을 가진 5개의 클라우드 변수가 있는 Thing을 생성합니다: "control", "set", "select_1", "select_2", "schedule", 읽기 및 쓰기(권한) 및 변경 시(업데이트)로 각각 명명합니다.
5. 장치에 연결하고 장치를 선택합니다: ESP32 개발 모듈을 선택하고 장치의 ID와 비밀 키가 포함된 PDF 파일을 저장하는 것을 잊지 마세요.
6. 스위치 위젯, 푸시 버튼 위젯, 값 선택기 위젯 2개 및 스케줄러 위젯으로 구성된 5개의 클라우드 변수에 연결된 5개의 위젯이 연속적으로 포함된 대시보드를 생성합니다.
7. Wokwi 프로그램을 열고 ID와 비밀 키를 새 장치의 ID와 비밀 키(다운로드한 PDF 파일에서 찾을 수 있음)로 바꿉니다.
8. 보기 버튼(눈 이미지)을 클릭하여 Wokwi 프로그램과 Arduino IoT 클라우드 대시보드를 실행합니다. Wokwi 시리얼 모니터에 "Arduino IoT Cloud에 연결됨"이라는 문구가 표시될 때까지 기다립니다. 자세한 내용은 이 블로그를 참조하세요.
아두이노 스케치 코드
// 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[] = "xxxxxxxxxxxx-eaca6194a74f";
const char SSID[] = "Wokwi-GUEST";
const char PASS[] = "";
const char DEVICE_KEY[] = "xxxxxxxxxxxxxxxxxRJXD9l0gs";
void onSelect1Change();
void onSelect2Change();
void onScheduleChange();
void onControlChange();
void onSetChange();
time_t UnixTime;
unsigned long skr = 0;
String waktu;
int select_1;
int select_2;
CloudSchedule schedule;
bool control;
bool set;
bool rly_sched[6] = {false, false, false, false, false, false};
bool rly_onoff[12];
char rly_name[13] = {"ABCDEFGHIJKL"};
CloudSchedule R1, R2, R3, R4, R5, R6;
int count[6] = {0, 0, 0, 0, 0, 0};
int pin_sched[6] = {23, 19, 18, 5, 17, 16};
int pin_onoff[12] = {32, 33, 25, 26, 27, 14, 12, 13, 15, 2, 0, 4};
void initProperties() {
ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME);
ArduinoCloud.setSecretDeviceKey(DEVICE_KEY);
ArduinoCloud.addProperty(select_1, READWRITE, ON_CHANGE, onSelect1Change);
ArduinoCloud.addProperty(select_2, READWRITE, ON_CHANGE, onSelect2Change);
ArduinoCloud.addProperty(schedule, READWRITE, ON_CHANGE, onScheduleChange);
ArduinoCloud.addProperty(control, READWRITE, ON_CHANGE, onControlChange);
ArduinoCloud.addProperty(set, READWRITE, ON_CHANGE, onSetChange);
}
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();
for (int i = 0; i < 6; i++) {
pinMode(pin_sched[i], OUTPUT);
}
for (int i = 0; i < 12; i++) {
pinMode(pin_onoff[i], OUTPUT);
}
}
void loop() {
ArduinoCloud.update();
if (set) {
if (select_1 == 0) R1 = schedule;
if (select_1 == 1) R2 = schedule;
if (select_1 == 2) R3 = schedule;
if (select_1 == 3) R4 = schedule;
if (select_1 == 4) R5 = schedule;
if (select_1 == 5) R6 = schedule;
}
rly_sched[0] = R1.isActive();
rly_sched[1] = R2.isActive();
rly_sched[2] = R3.isActive();
rly_sched[3] = R4.isActive();
rly_sched[4] = R5.isActive();
rly_sched[5] = R6.isActive();
if (control) {
for (int i = 0; i < 12; i++) {
if (select_2 == i) {
digitalWrite(pin_onoff[i], HIGH);
rly_onoff[i] = true;
}
}
} else {
for (int i = 0; i < 12; i++) {
if (select_2 == i) {
digitalWrite(pin_onoff[i], LOW);
rly_onoff[i] = 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));
for (int i = 0; i < 6; i++) {
display.print("R");
display.print(i + 1);
display.print(":");
if (rly_sched[i]) {
digitalWrite(pin_sched[i], true);
display.print("ON.");
if (count[i] < 10) display.print(".");
if (count[i] < 100) display.print(".");
if (count[i] < 1000) display.print(".");
display.print(count[i]);
count[i]++;
} else {
digitalWrite(pin_sched[i], false);
count[i] = 0;
display.print("OFF....");
}
if ((i + 1) % 2 == 0) display.println();
}
for (int i = 0; i < 12; i++) {
display.print(rly_name[i]);
if (rly_onoff[i]) display.print(":1, ");
else display.print(":0, ");
if ((i + 1) % 4 == 0) display.println();
}
display.display();
skr = millis();
}
}
void onSetChange() {
}
void onScheduleChange() {
}
void onSelect1Change() {
}
void onSelect2Change() {
}
void onControlChange() {
}
diagram.json
{
"version": 1,
"author": "dian artanto",
"editor": "wokwi",
"parts": [
{ "type": "board-esp32-devkit-c-v4", "id": "esp", "top": 67.2, "left": -129.56, "attrs": {} },
{ "type": "wokwi-relay-module", "id": "relay1", "top": 19.4, "left": 172.8, "attrs": {} },
{ "type": "wokwi-relay-module", "id": "relay2", "top": 77, "left": 172.8, "attrs": {} },
{ "type": "wokwi-relay-module", "id": "relay3", "top": 134.6, "left": 172.8, "attrs": {} },
{ "type": "wokwi-relay-module", "id": "relay4", "top": 192.2, "left": 172.8, "attrs": {} },
{
"type": "board-ssd1306",
"id": "oled1",
"top": 70.34,
"left": 9.83,
"attrs": { "i2cAddress": "0x3c" }
},
{
"type": "wokwi-relay-module",
"id": "relay5",
"top": 332.6,
"left": 60.4,
"rotate": 90,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay6",
"top": 18.6,
"left": -339.2,
"rotate": 180,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay7",
"top": 76.2,
"left": -339.2,
"rotate": 180,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay8",
"top": 133.8,
"left": -339.2,
"rotate": 180,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay9",
"top": 191.4,
"left": -339.2,
"rotate": 180,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay10",
"top": 249,
"left": -339.2,
"rotate": 180,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay11",
"top": 306.6,
"left": -339.2,
"rotate": 180,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay12",
"top": 332.6,
"left": -227.6,
"rotate": 90,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay13",
"top": 332.6,
"left": -170,
"rotate": 90,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay14",
"top": 332.6,
"left": -112.4,
"rotate": 90,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay15",
"top": 332.6,
"left": -54.8,
"rotate": 90,
"attrs": {}
},
{
"type": "wokwi-relay-module",
"id": "relay16",
"top": 332.6,
"left": 2.8,
"rotate": 90,
"attrs": {}
},
{
"type": "wokwi-text",
"id": "led1",
"top": 38.4,
"left": 307.2,
"attrs": { "text": "R1:Scheduled" }
},
{
"type": "wokwi-text",
"id": "led2",
"top": 96,
"left": 307.2,
"attrs": { "text": "R2:Scheduled" }
},
{
"type": "wokwi-text",
"id": "led3",
"top": 153.6,
"left": 307.2,
"attrs": { "text": "R3:Scheduled" }
},
{
"type": "wokwi-text",
"id": "led4",
"top": 211.2,
"left": 307.2,
"attrs": { "text": "R4:Scheduled" }
},
{
"type": "wokwi-text",
"id": "led5",
"top": 28.8,
"left": -412.8,
"attrs": { "text": "A:On/Off" }
},
{
"type": "wokwi-text",
"id": "led6",
"top": 86.4,
"left": -412.8,
"attrs": { "text": "B:On/Off" }
},
{
"type": "wokwi-text",
"id": "led7",
"top": 144,
"left": -412.8,
"attrs": { "text": "C:On/Off" }
},
{
"type": "wokwi-text",
"id": "led8",
"top": 201.6,
"left": -412.8,
"attrs": { "text": "D:On/Off" }
},
{
"type": "wokwi-text",
"id": "led9",
"top": 259.2,
"left": -412.8,
"attrs": { "text": "E:On/Off" }
},
{
"type": "wokwi-text",
"id": "led10",
"top": 316.8,
"left": -412.8,
"attrs": { "text": "F:On/Off" }
},
{
"type": "wokwi-text",
"id": "led11",
"top": 451.2,
"left": -211.2,
"rotate": 300,
"attrs": { "text": "G:On/Off" }
},
{
"type": "wokwi-text",
"id": "led12",
"top": 451.2,
"left": -153.6,
"rotate": 300,
"attrs": { "text": "H:On/Off" }
},
{
"type": "wokwi-text",
"id": "led13",
"top": 451.2,
"left": -86.4,
"rotate": 300,
"attrs": { "text": "I:On/Off" }
},
{
"type": "wokwi-text",
"id": "led14",
"top": 451.2,
"left": -38.4,
"rotate": 300,
"attrs": { "text": "J:On/Off" }
},
{
"type": "wokwi-text",
"id": "led15",
"top": 451.2,
"left": 19.2,
"rotate": 300,
"attrs": { "text": "K:On/Off" }
},
{
"type": "wokwi-text",
"id": "led16",
"top": 451.2,
"left": 76.8,
"rotate": 300,
"attrs": { "text": "L:On/Off" }
},
{ "type": "wokwi-relay-module", "id": "relay17", "top": 249.8, "left": 172.8, "attrs": {} },
{ "type": "wokwi-relay-module", "id": "relay18", "top": 307.4, "left": 172.8, "attrs": {} },
{
"type": "wokwi-text",
"id": "led17",
"top": 268.8,
"left": 307.2,
"attrs": { "text": "R5:Scheduled" }
},
{
"type": "wokwi-text",
"id": "led18",
"top": 326.4,
"left": 307.2,
"attrs": { "text": "R6:Scheduled" }
}
],
"connections": [
[ "esp:TX", "$serialMonitor:RX", "", [] ],
[ "esp:RX", "$serialMonitor:TX", "", [] ],
[ "esp:19", "relay2:IN", "green", [ "h192", "v-47.8" ] ],
[ "esp:18", "relay3:IN", "green", [ "h144", "v29" ] ],
[ "esp:5", "relay4:IN", "green", [ "h192", "v48", "h9.6" ] ],
[ "esp:21", "oled1:SDA", "green", [ "h28.8", "v-76.8", "h76.73" ] ],
[ "esp:22", "oled1:SCL", "green", [ "h19.2", "v-57.6", "h76.5" ] ],
[ "esp:23", "relay1:IN", "green", [ "h9.6", "v-57.6", "h134.4", "v9.8" ] ],
[ "relay6:IN", "esp:32", "green", [ "h76.8", "v115.4" ] ],
[ "relay7:IN", "esp:33", "green", [ "h48", "v67.4" ] ],
[ "relay8:IN", "esp:25", "green", [ "h38.4", "v19.4" ] ],
[ "relay9:IN", "esp:26", "green", [ "v-28.6", "h86.25" ] ],
[ "relay10:IN", "esp:27", "green", [ "h9.6", "v-76.6" ] ],
[ "esp:14", "relay11:IN", "green", [ "h-67.05", "v105.6", "h-19.2" ] ],
[ "esp:12", "relay12:IN", "green", [ "h-47.85", "v105.6" ] ],
[ "esp:13", "relay13:IN", "green", [ "h-9.45", "v57.6", "h19" ] ],
[ "relay14:IN", "esp:15", "green", [ "v-28.8", "h38.6", "v-48" ] ],
[ "esp:17", "relay17:IN", "green", [ "h182.4", "v96.2" ] ],
[ "relay18:IN", "esp:16", "green", [ "h-9.6", "v-48.2", "h-19.2", "v-96" ] ],
[ "esp:4", "relay5:IN", "green", [ "h0" ] ],
[ "esp:2", "relay15:IN", "green", [ "h0" ] ],
[ "esp:0", "relay16:IN", "green", [ "h0" ] ]
],
"dependencies": {}
}
libraries.txt
# Wokwi Library List
# See https://docs.wokwi.com/guides/libraries
ArduinoIoTCloud
Arduino_ConnectionHandler
Adafruit GFX Library
Adafruit SSD1306
'ESP32' 카테고리의 다른 글
ESP32 Arduino IoT Cloud의 Color 위젯을 Wokwi의 RGB LED와 OLED 디스플레이로 연결 (1) | 2024.05.19 |
---|---|
ESP32 Arduino IoT Cloud Google 시트를 사용하여 4개의 센서 그래프를 표시 (0) | 2024.05.17 |
아두이노 Nano ESP32 빠른 가이드 1 - 시작 & FAQ (0) | 2024.05.15 |
ESP32 Arduino IoT Cloud 5개 릴레이 예약 제어 wokwi 시뮬레이션 (0) | 2024.05.06 |
프로그래밍 예제를 통해 ESP32 버튼 시작하기 (0) | 2024.04.03 |
DHT11 센서를 사용한 ESP32 BLE 온도 및 습도 모니터링 시스템 (0) | 2024.04.02 |
ESP32 BLE를 사용하여 LED 제어하기 (0) | 2024.04.01 |
TinyML-CAM ESP32에서 80FPS 이미지 인식 (1) | 2022.11.10 |
더욱 좋은 정보를 제공하겠습니다.~ ^^