WiFi가 내장된 Cactus Micro 모듈을 사용하여 사물인터넷 사이트인 ThingSpeak 사이트에 데이터를 전송하여 이미 준비된 형태의 실시간 그래프를 작성하였다.
이번 예제에서는 마찬가지로 WiFi 모듈이 내장되어 있는 NodeMCU 모듈에 가변저항을 사용하여 0∼1023의 정수 값 형태의 범위를 가지는 아날로그 전압을 생성하여 ThingSpeak 사이트에 전송하여 그래프를 작성하도록 할 것이다.
이번에도 그림에서처럼 NodeMCU의 3V3과 GND에 가변저항의 양단을 연결하고 가변저항의 중앙 입력 단을 NodeMCU의 아날로그 입력단 A0에 연결하여 3.3V 범위의 전압 값을 정수 값 0에서 1023로 변환하도록 한다.
앞 블로그에서 지적했듯이 아두이노 NodeMCU의 유일한 아날로그 입력 단 A0의 위치를 파악하여 배선하도록 한다.
이미 Cactus Micro WiFi 프로젝트에서 ThingSpeak 사이트의 API 키를 부여 받은 상태라면 다음에 제시된 프로그램을 컴파일하여 업로딩함으로서 직접 결과를 관찰할 수 있을 것이다.
그렇치 않은 독자의 경우에는 최근에 본 블로그에 게재된 다음의 세 가지를 반드시 참고하기 바란다. 비록 NodeMCU 보드를 사용하여 ThingSpeak에 데이터를 올리고 그래프를 작성하는 작업이 어느 정도 내용을 아는 분이라면 지극히 쉬운 일이나 특히 디지털 IT 분야의 프로젝트의 특성 상 대단히 간단한 것들을 사전 인지하지 못하거나 준비가 되지 않으면 본인 실력과는 무관하게 프로젝트를 망치기 십상이기 때문이다.
1. 아두이노 NodeMCU ESP8266WiFi 웹서버 예제: 아날로그 입력 데이터 생성 및 전송
데이터 핀 구조, 아날로그 입력 핀 A0 및 가변저항 설치
2. 아두이노 NodeMCU ESP8266WiFi 모듈의 핀배치 프로그래밍 주의 사항
NodMCU 보드의 데이터 핀 구조 특성 설명
3. 아두이노 Cactus ESP8266WiFi 보드 Thingspeak 웹서버 예제: I 아날로그 입력 데이터
생성 및 Thingspeak 전송 및 그래프 작성
ThingSpeak 회원 가입 및 Private 탭에서의 그래프 사용 요령
프로그램 구조는 앞서 제시되었던 프로그램들과 거의 동일한 맥락이나 여기서는 loop() { } 내부의 구조를 단순화 시키기 위해 몇 개의 작은 서브루틴들을 구성하여 loop 문 내부로 불러 들이는 형식을 취했다.
보드 지정은 본인이 보유한 보드의 정확한 규격을 지정하도록 한다. 프로그램이 간단한 경우에는 NodeMCU 0.9 보드나 NodeMCU 1.0을 혼동해도 그다지 심각한 문제는 없는 듯하다.
생성되는 전압 범위도 Catus Micro 프로젝트와 동일하므로 ThingSpeak 사이트에 준비되어 있는 Private View 탭에서 Channel Settings탭으로 들어가 하단에서 Clear Channel 버튼을 눌러 기존 데이트를 지운 후 Private View 탭에서 결과를 관찰하도록 하자.
NodeMCU_ThingSpeak_Resistor_01
//nodeMCU v1.0 (black) with Arduino IDE
#include <ESP8266WiFi.h>
#define myPeriodic 15 //in sec | Thingspeak pub is 15sec
const char* server = "api.thingspeak.com";
String apiKey = "0DKP99L3Z0DXYESP";
const char* MY_SSID = "AndroidHotspot1994";
const char* MY_PWD = "00000000";
int sent = 0;
void setup() {
Serial.begin(115200);
connectWifi();
}
void loop() {
float volt;
//char buffer[10];
volt = analogRead(0);
//String voltC = dtostrf(volt, 4, 1, buffer);//handled in sendvolt()
Serial.print(String(sent)+" Volt: ");
Serial.println(volt);
sendVoltVS(volt);
int count = myPeriodic;
while(count--)
delay(1000);
}
void connectWifi()
{
Serial.print("Connecting to "+*MY_SSID);
WiFi.begin(MY_SSID, MY_PWD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected");
Serial.println("");
}//end connect
void sendVoltVS(float volt)
{
WiFiClient client;
if (client.connect(server, 80)) { // use ip 184.106.153.149 or api.thingspeak.com
Serial.println("WiFi Client connected ");
String postStr = apiKey;
postStr += "&field1=";
postStr += String(volt);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
delay(1000);
}//end if
sent++;
client.stop();
}//end send
시리얼 창에서 Volt로 출력된 전압 데이터와 그래프와의 일치성을 확인해 보기 바란다.
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
아두이노 NodeMCU WiFi 웹서버 통신 프로그램을 이용 스마트 폰에서 구글차트 응용 그래프 작성:I (0) | 2017.01.23 |
---|---|
Thingspeak에서 MQTT방식을 사용하는 NodeMCU WiFi 통신예제 아두이노 코딩 (0) | 2017.01.20 |
아두이노 Cactus ESP8266WiFi 보드 Thingspeak 웹서버 예제: I 아날로그 입력 데이터 생성 및 Thingspeak 전송 및 그래프 작성 (0) | 2017.01.13 |
아두이노 NodeMCU ESP8266WiFi 웹서버 예제:아날로그 입력 데이터 생성 및 전송 (0) | 2017.01.12 |
아두이노 NodeMCU ESP8266WiFi 모듈의 핀배치 프로그래밍 주의 사항 (0) | 2017.01.12 |