9. Use The ThingSpeak with ESP32 - EnglishNo/ESP32 GitHub Wiki
- ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ก๋ํ๊ณ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ณต์ ํ ์ ์๋ ๋ค์ํ ์คํ ์์ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธํฐ๋ท ์์ ์ฌ๋ฌผ ์ธํฐ๋ท(IoT) ํ๋ซํผ์ด๋ค.
- *MATLAB๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ๋ถ์๋ ๊ฐ๋ฅํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ IoT์ฅ์น์์ ์์งํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ถ์ํ๊ณ , ๋ค์ํ ๋ถ์ผ์์ ํ์ฉํ ์ ์๋ค.
- ์ - ๊ฐ์ ๋ฐ์ดํฐ ์์ง์ ํตํด ์๋ฌผ ์ฌ๋ฐฐ์ ๋ํ ์์ฌ ๊ฒฐ์ ๋ด๋ฆผ, ๊ฑด๊ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ ์ฒด ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ๊ฐ์ธ ๊ฑด๊ฐ ์ํ๋ฅผ ํ์
(MATLAB - ์์น ํด์, ํ๋ ฌ ์ฐ์ฐ, ์ ํธ ์ฒ๋ฆฌ, ๊ฐํธํ ๊ทธ๋ํฝ ๊ธฐ๋ฅ ๋ฑ์ ํตํฉํ์ฌ ๊ณ ์ฑ๋ฅ์ ์์น ๊ณ์ฐ ๋ฐ ๊ฒฐ๊ณผ์ ๊ฐ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด์, ํ๋ ฌ์ ๊ธฐ์ด๋ก ํ์ฌ ์ํ๊ณผ ๊ณตํ ๊ณ์ฐ์ ์ํํ๋ ์ธ์ด์ด๋ค.
(์ถ์ฒ - https://terms.naver.com/entry.naver?cid=42346&docId=859905&categoryId=42346)
- "ThingSpeak" ์ฌ์ดํธ์ ์ ์ ๋ฐ ํ์ ๊ฐ์
- ๋ก๊ทธ์ธ ํ์ ์ฑ๋ ์์ฑ ๋ฒํผ ํด๋ฆญ
- ์ฑ๋ ์ด๋ฆ์ด๋ ํ๋ ์ค์
- ์ฑ๋์ด ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋๋ฉด ์ฑ๊ณต!
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ธ ์ ์๊ฒ ํด์ฃผ๋ ํด๋น "ThingSpeak" ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
-
#include <WiFi.h> // ์์ดํ์ด๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ #include <ThingSpeak.h> // "ThingSpeak"์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ const char* WifiID = "(๋ณธ์ธ์ ์์ดํ์ด ID ์ ๋ ฅ)"; // ์์ดํ์ด ์์ด๋ ์ ๋ ฅ const char* WifiPass = "(๋ณธ์ธ์ ์์ดํ์ด ๋น๋ฐ๋ฒํธ ์ ๋ ฅ)"; // ์์ดํ์ด ๋น๋ฐ๋ฒํธ ์ ๋ ฅ WiFiClient client; // ThingSpeak์ ์ ์ํ Wifi ๊ฐ์ฒด ์์ฑ const long chanID = (๋ณธ์ธ์ ThingSpeak ์ฑ๋ ID ์ ๋ ฅ); // "ThingSpeak" ์ฑ๋์ ์๋ ID ์ ๋ ฅ const char* WriteKey = "(๋ณธ์ธ์ ThingSpeak ์ฑ๋ Write Key ์ ๋ ฅ)"; // "ThingSpeak" ์ฑ๋์ "API Keys" ์ฐฝ์ ์๋ "Write API Key"์ ์ฝ๋(Key) ์ ๋ ฅ // WiFi ๊ฐ์ฒด๋ก ThingSpeak์ ํต์ ์์ void setup() { Serial.begin(9600); // ์๋ฆฌ์ผ ํต์ ์ด๊ธฐํ (์๋ฆฌ์ผ ํต์ ์ ์ปดํจํฐ์ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ ์ฌ์ด์ ํต์ ๋ฐฉ๋ฒ) delay(10); initWiFi(); // WiFi ์ด๊ธฐํ ThingSpeak.begin(client); // ThingSpeak ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ธฐํ(ThingSpeak ์๋ฒ์ ํต์ ํ ์ค๋น), WiFiClient ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ์์ผ ํจ } // ์ธ์๋ฅผ ThingSpeak์ ์ฑ๋๋ก ๋ณด๋ด๋ ์ฝ๋ void loop() { for(int i = 0; i < 4; i++) { ThingSpeak.writeField(chanID, 1, i, WriteKey); // ์์๋๋ก ThingSpeak ์ฑ๋ ID, ์ฑ๋ ๋ฒํธ, ๋ณด๋ด๋ ค๋ ๊ฐ, ThingSpeak์ ์๋ WriteKey ์ ๋ ฅ!, ํด๋น ThingSpeak ์ฑ๋์ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ํจ์ delay(15000); } } // WiFi ์ด๊ธฐํํ๋ ํจ์ void initWiFi() { WiFi.begin(WifiID, WifiPass); // ์์ดํ์ด ์์ด๋, ๋น๋ฐ๋ฒํธ ์ ๋ ฅ, ESP32์ด ์์ดํ์ด์ ์ฐ๊ฒฐ๋๊ฒ ํด์ฃผ๋ ํจ์ while (WiFi.status() != WL_CONNECTED) { // WiFi.status()ํจ์๋ ESP32์ด ์์ดํ์ด์ ์ฐ๊ฒฐ ๋์๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํจ์, ์์ดํ์ด์ ์ฐ๊ฒฐ์ด ์ ๋์ด์์ผ๋ฉด ์๋ฆฌ์ผ ๋ชจ๋ํฐ์ "." ์ถ๋ ฅ delay(500); Serial.println("."); } }
ํด๋น ์ฝ๋ ์์ฑ ๋ฐ ์ปดํ์ผํ๋ฉด ๋!
(์ฐธ๊ณ - https://github.com/EnglishNo/ESP32/wiki/4.-ESP32-DHT11-And-LCD)
#include <WiFi.h> // ์์ดํ์ด๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
#include <ThingSpeak.h> // "ThingSpeak"์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
#include "DHT.h" // DTH.h ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
DHT dht(13, DHT11); // DHT ์ค์ dht(ํ, DHT ์ข
๋ฅ)
const char* WifiID = "SK_WiFiGIGA1AA7"; // ์์ดํ์ด ์์ด๋ ์
๋ ฅ
const char* WifiPass = "2006085191"; // ์์ดํ์ด ๋น๋ฐ๋ฒํธ ์
๋ ฅ
WiFiClient client; // ThingSpeak์ ์ ์ํ Wifi ๊ฐ์ฒด ์์ฑ
const long chanID = 2126213; // "ThingSpeak" ์ฑ๋์ ์๋ ID ์
๋ ฅ
const char* WriteKey = "GBUTP12OK3MUI97H"; // "ThingSpeak" ์ฑ๋์ "API Keys" ์ฐฝ์ ์๋ "Write API Key"์ ์ฝ๋(Key) ์
๋ ฅ
// WiFi ๊ฐ์ฒด๋ก ThingSpeak์ ํต์ ์์
void setup() {
Serial.begin(9600); // ์๋ฆฌ์ผ ํต์ ์ด๊ธฐํ (์๋ฆฌ์ผ ํต์ ์ ์ปดํจํฐ์ ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ ์ฌ์ด์ ํต์ ๋ฐฉ๋ฒ)
dht.begin();
delay(10);
initWiFi(); // WiFi ์ด๊ธฐํ
ThingSpeak.begin(client); // ThingSpeak ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ธฐํ(ThingSpeak ์๋ฒ์ ํต์ ํ ์ค๋น), WiFiClient ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ์์ผ ํจ
}
// ์ธ์๋ฅผ ThingSpeak์ ์ฑ๋๋ก ๋ณด๋ด๋ ์ฝ๋
void loop() {
int tem = dht.readTemperature(); // ์จ๋ ๊ฐ ์ ์ํ ๋ณ์ tem์ ์ ์ฅ
int hum = dht.readHumidity(); // ์ต๋ ๊ฐ ์ ์ํ ๋ณ์ hum์ ์ ์ฅ
ThingSpeak.writeField(chanID, 2, tem, WriteKey); // 2๋ฒ ํ๋์ ์จ๋ ๊ฐ ์ ์ก
Serial.print("Tem : "); Serial.println(tem); // ์๋ฆฌ์ผ ๋ชจ๋ํฐ์ ์จ๋ ๊ฐ ์ถ๋ ฅ
delay(15000);
ThingSpeak.writeField(chanID, 3, hum, WriteKey); // 3๋ฒ ํ๋์ ์ต๋ ๊ฐ ์ ์ก
Serial.print("Hum : "); Serial.println(hum); // ์๋ฆฌ์ผ ๋ชจ๋ํฐ์ ์ต๋ ๊ฐ ์ถ๋ ฅ
delay(15000);
}
// WiFi ์ด๊ธฐํํ๋ ํจ์
void initWiFi() {
WiFi.begin(WifiID, WifiPass); // ์์ดํ์ด ์์ด๋, ๋น๋ฐ๋ฒํธ ์
๋ ฅ, ESP32์ด ์์ดํ์ด์ ์ฐ๊ฒฐ๋๊ฒ ํด์ฃผ๋ ํจ์
while (WiFi.status() != WL_CONNECTED) { // WiFi.status()ํจ์๋ ESP32์ด ์์ดํ์ด์ ์ฐ๊ฒฐ ๋์๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํจ์, ์์ดํ์ด์ ์ฐ๊ฒฐ์ด ์ ๋์ด์์ผ๋ฉด ์๋ฆฌ์ผ ๋ชจ๋ํฐ์ "." ์ถ๋ ฅ
delay(500);
Serial.println(".");
}
}
-๊ฒฐ๊ณผ-
-.Clipchamp.5.mp4
(๋ง์ฝ ESP32๊ฐ ์์ดํ์ด์ ์ฐ๊ฒฐ์ด ๋์ง ์๋๋ค๋ฉด, ์ด๋ ๊ฒ ์๋ฆฌ์ผ ๋ชจ๋ํฐ์ "."์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค!)
- WiFi.status(), ThingSpeak.writeField(), WiFi.begin() ๋ฑ, ๋ช๋ช ํจ์๋ค์ ์ฌ์ฉ๋ฒ์ ์๊ฒ ๋์๋ค.
- ThingSpeak ์ฑ๋์ WriteKey์ ์์น๊ฐ ์ด๋์ ์๋์ง ์๊ฒ ๋์๋ค.
- ThingSpeak์์ ์ฐจํธ๋ Display ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ๊ธฐ๋ฅ์ด ๊ฐ๋ฆฌํฌ ํ๋๊ฐ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
- ThingSpeak์ ์ฑ๋ ์ค์ ์์ ํ๋ ์ฐฝ์ ๋ฌธ์ฅ์ ์ ๋ ๊ฒ์ ํ๋ ๋ฒํธ๋ ๊ทธ๋ํ์ ๊ตฌ์ฑ ์์ํ๊ณ ํด๋น ์ํฉ์ด ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
- ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ๋ ์ปดํ์ผ์ด ๋์ง ์๊ณ , ๋ฌด์จ ์ค๋ฅ์ธ์ง ์ ํํ ์๋ ค์ฃผ์ง ์์ ํ๋ค์ด ํ์ผ๋, ์๋์ด๋ ๊ฐ๋ฐ ํ๊ฒฝ ํ๋ก๊ทธ๋จ์ ์ ๋ฐ์ดํธํ๋ ์ปดํ์ผ์ด ๋์๋ค.
- ํ๊ต์์๋ ThingSpeak์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์ง ์์, ์ด๋๊ฐ ๋ฌธ์ ์ธ์ง ๋นํฉํ์ง๋ง, ์ง์์ ์ง์ ์์ดํ์ด ID, ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ ThingSpeak์ ๋ฐ์ดํฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์ก๋์๋ค.
- ์ต๋ ๋ฐ์ดํฐ๊ฐ ThingSpeak๋ก ์ ์ก์ด ์๋๋ ๊ฒฝ์ฐ๊ฐ ์์๋๋ฐ, ์จ๋๋ฅผ ThingSpeak๋ก ์ ์กํ๊ณ ๋๋ ์ด๋ฅผ 15์ด๋ฅผ ์ฃผ๊ณ ์ต๋๋ฅผ ์ ์กํ๊ณ ์ ํ๋๊น ์ฑ๊ณต์ ์ผ๋ก ์ ์ก์ด ๋์๋ค.