'serial monitor'에 해당되는 글 2건

  1. 2020.03.15 Software | ThingSpeak 등록하여 IoT 데이터 펼처보기
  2. 2017.07.30 Hardware | Raindrops 모듈 구동해 보기

Software | ThingSpeak 등록하여 IoT 데이터 펼처보기

|

Arduino 를 통해 센서값을 확인 할 때, Arduino IDE 의 Serial Monitor 를 사용하게 되면 PC 를 계속 켜놔야 합니다.

PC 를 리부팅 하거나 다른 용도로 사용하게 되면, 측정을 중단해야 하므로 적절한 활용 방법이 아닙니다.




1. ThingSpeak


이런 불편을 없애려면 cloud 시스템에 internet 을 통해 올리면 됩니다.

그렇지만, 이걸 혼자서 하려면 다음과 같은 작업들이 필요합니다.


- 서버 설치

- OS 설치

- Apache 등 HTTP 서버 어플 설치

- DB 설치 및 설정

- API 설정

- 인터넷 설정

- 보안 설정

- 등등


유지 보수까지 생각하면 끝이 없는 작업입니다.

IoT 하나 하려다가 힘 다 빠지겠습니다. 그래서 나온 cloud 형 서비스가 몇 가지 있습니다.


* ThingSpeak for IoT Projects

https://thingspeak.com/





2. ThingSpeak 등록


사이트 가서 등록 고고.



개인 email 이면 됩니다.



비번도 등록하고.



대학 email account 를 가지고 있으면, 대학에서 보유한 Matlab 계정을 자동 연동하여 사용할 수 있습니다.

그렇게 되면, 대학교에서 구매한 Matlab 을 사용하게 되므로, 대학교 구매부서와 확인해 봐야 합니다. (무단 사용이 될 수 있슴)



아직 대학교 email account 도 가지고 있지만, 개인 account 를 사용했습니다.



계정 등록이 끝나면, 최종 verify 메일이 옵니다.



계정 인증 후, 비번 완료하면 끝납니다.





3. MathWorks


ThingSpeak 는 Matlab 을 개발한 MathWorks 에서 제공하는 서비스 입니다.

그래서인지, MathWorks 에서 제공하는 툴이나 Knowledge 를 사용할 수 있습니다.



제가 요츰 필요한 지식은 Arduino > ESP8266 > ThingSpeak 연동 방법도 나와 있습니다.

만, 최신 ESP 모듈을 기준으로 설명되어 있어서, 별 도움은 못 되었네요. 다른 글에서 이 부분은 집중적으로 다뤄 보도록 하겠습니다.



무료 사용자는, 하루 8,219 개를 사용할 수 있습니다.

하루 24시간 동안, 1초마다 값을 보내게 되면, "86,400" 개 이므로, 이의 1/10 보다 조금 더 적게 값을 보내야 합니다.

대략 15초에 1번 정도로 값을 보내면, 한 개의 sensor 값 읽어 들이는 것에 활용할 수 있겠네요.





4. API Key


HTTP GET/POST 를 이용하여 값을 보내는 RESTful API 를 사용할 때, API Key 가 할당 됩니다.



API Key 사용법은, 위의 스샷 오른쪽 밑에 보이듯이, "api_key=" 로 시작하는 GET URL 의 string 으로 넣어 사용할 수 있습니다.



실제로 값을 API 를 통해 cloud 에 올릴 경우는 아래와 같이 API 키를 넣어주면 됩니다.



전체 HTTP URL 로 만들면 다음과 같이 됩니다.


Write a Channel Feed
https://api.thingspeak.com/update?api_key=[Write_Key]&field1=[value]




5. Channels


계정과 API Key 가 있다 하더라도, 나만의 장소를 만들어야 합니다. 이게 Channels 이 됩니다.



이번에 CO2 취집 센서인 MH-Z14A 를 가지고 CO2 값을 취합하고 싶으니, 아래와 같은 채널을 만들었습니다.

Field1 은 CO2 값이 넣어지도록 하였습니다.



저의 Home Environment 채널이 만들어 졌습니다.

나중에 CO2 뿐만 아니라, 다른 기체 값들도 추가로 입력 받을 수도 있겠네요.





6. HTTP headers


Arduino / ESP-01 을 통해서 값을 입력받은게 아니지만, 브라우저를 사용하여 직접 REST API 를 통해서 값을 전송해 봤습니다.


리턴값으로 "1" 이 표시됩니다. 값들이 쌓여 가면, 이 숫자 카운트가 올라갑니다.

먹고사는 직업이 이쪽인지라, 직업병 발휘해 봅니다.


HTTP Request / Response 는 다음과 같습니다.



아래는 HTTP Request 만 뽑아 봤습니다.

브라우저가 아니고 command line 으로 ESP-01 을 컨트롤 할 때, 필요할 듯 하여 여기에 기록해 봅니다.


Host: api.thingspeak.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: s_fid=18DA4B3665F95BB2-21E82C5CDD94C74E; _ga=GA1.2.1025526633.1578383783; s_cc=true
Upgrade-Insecure-Requests: 1


아래는 HTTP Response 입니다.


HTTP/2 200 OK
date: Mon, 20 Jan 2020 05:03:40 GMT
content-type: text/plain; charset=utf-8
content-length: 1
status: 200 OK
x-frame-options: SAMEORIGIN
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
access-control-allow-headers: origin, content-type, X-Requested-With
access-control-max-age: 1800
etag: W/"4e07408562bedb8b60ce05c1decfe3ad"
cache-control: max-age=0, private, must-revalidate
x-request-id: e0fa0bd9-fc3a-4e9a-a09e-efb6326dcd6c
x-runtime: 0.022047
x-powered-by: Phusion Passenger 4.0.57
server: nginx/1.9.3 + Phusion Passenger 4.0.57
X-Firefox-Spdy: h2




7. Read a Channel Feed


API Key 를 통하여 Channel 값을 읽을 경우는 다음과 같이 API 를 날리면 됩니다. 아래는 JSON 방식의 값 추출 입니다.


Read a Channel Feed
https://api.thingspeak.com/channels/[Channel_ID]/feeds.json?api_key=[Read_Key]&results=2
{"channel":{"id":Channel_ID,"name":"Home Environment","description":"gathering values from IoT sensors","latitude":"0.0","longitude":"0.0","field1":"CO2","created_at":"2020-01-10T09:36:21Z","updated_at":"2020-01-10T09:37:06Z","last_entry_id":3},"feeds":[{"created_at":"2020-01-20T04:53:28Z","entry_id":2,"field1":"40"},{"created_at":"2020-01-20T05:03:40Z","entry_id":3,"field1":"39"}]}


인터넷 브라우저를 사용하면 아래처럼 정렬된 값을 확인할 수 있습니다.



값이 쌓여 가면서 그래프를 그려 줍니다.


참고로, 이번에 MH-Z14A 를 이용해서 측정했던 결과 입니다.

PC 없이도 값들을 바로바로 올릴 수 있고, 그래프 조정도 할 수 있어, 왜 이제 했나 싶을 정도 입니다.


* Hardware | CO2 센서인 MH-Z14A 를 활용해 보자
    - https://chocoball.tistory.com/entry/Hardware-CO2-sensor-MH-Z14A





8. 그 외


잘못된 값들이 전체 그래프의 통일성을 외곡시키므로 조금 다듬을 경우는 Timescale 값을 조정하면 됩니다.
10 으로 하면, 10개 값을 하나로 보여주어, 이빨 빠지는 구간 - 잘못된 값 - 들을 날려버릴 수 있습니다.


과거 값들이 불편할 경우는, Channels > Channel Settings > Clear Channel 을 이용하여 지울 수 있습니다.





9. FIN


이젠 PC 를 항상 켜놔야 하는 것으로 부터 해방입니다!




10. Update - 20200328


ThingSpeak 에서 그래프가 보이는 화면에서 data 를 export 하면, 거의 하루치 밖에 받을 수 없습니다.




측정된 값 전체를 받기 위해서는, My Channels > Data Import / Export > Export Download 에서 CVS 로 받을 수 있습니다.




EXCEL 로 그린 위의 그래프들은 이 메뉴에서 다운로드 받은 CVS 를 가지고 만들었습니다.




And

Hardware | Raindrops 모듈 구동해 보기

|

1. 자동 와이퍼

요즘 차들은 비가 오기시작하면 자동으로 알아서 와이퍼가 움직여 줍니다.

또한 비의 양에 따라 와이퍼의 속도도 조절되죠.


어떤 센서가 있는지 찾다 보니, "Raindrop Senseor" 라는게 있네요.


안해볼 이유를 찾을 수 없습니다. 바로 구입해야죠.




2. 주문

역시 나의 친구 AliExpress. 역시 좋은게 있네요.



고마워요 무료배송.




3. 도착

도착샷 입니다.



잘(?) 포장해서 왔군요. 뭐 항상 이렇습니다.



검출부와 제어부로 되어 있네요.



센서가 양면으로 되어 있습니다.


컨트롤부의 자세한 사진입니다.

전원 LED가 있고, 비를 인식할때 켜지는 LED가 따로 있습니다.

감도 조절도 할 수 있네요.



뒷면은 MH-Sensor-Serise 라고 적혀 있습니다.

이게 Raindrop 전용이 아니라, +/- 를 통해서 입력받는 센서들 정보를 Arduino / Raspberry Pi 와 통신하기 위한 모듈로 보입니다.



다른 센서에서도 같이 쓰이는 사진을 발견했습니다. 완벽하게 똑같네요.



아래는 사양서 입니다.


rain_sensor_module.pdf





4. Layout

Pin 배열은 다음과 같습니다.


 MH-Sensor-Series | Arduino Nano
---------------------------------
        VCC       |     5V
        GND       |     GND
         D0       |     D2
         A0       |     A0
---------------------------------


 128X64 OLED | Arduino Nano
----------------------------
     GND     |     GND
     VCC     |     3.3V
     SDA     |     A4
     SDL     |     A5
----------------------------


빵판 구성입니다.



이번에는 OLED 도 같이 연결해 봤습니다.




5. Sketch

소스 스케치 입니다.


#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#include "stdint.h"

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

int nRainIn = A1;
int nRainDigitalIn = 2;
int nRainVal;
boolean bIsRaining = false;
String strRaining;

void setup() {
	Serial.begin(57600);
	pinMode(2,INPUT);
	display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}
void loop() {
	nRainVal = analogRead(nRainIn);
	bIsRaining = !(digitalRead(nRainDigitalIn));
	
	if(bIsRaining) {
		strRaining = "YES";
	} else {
		strRaining = "NO";
	}
	
	// clear the buffer
	display.clearDisplay();
	
	Serial.print("Raining: ");
	Serial.print(strRaining);  
	Serial.print("\t Moisture Level: ");
	Serial.println(nRainVal);
	
	// text display tests
	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(0,0);
	display.print("Raining: ");
	display.print(strRaining);
	display.setCursor(0,10);
	display.print("Moisture Level: ");
	display.print(nRainVal);
	display.display();
	
	delay(1000);
}


Serial Monitor 를 사용하지 않고 OLED 를 사용하니, PC 를 키지 않아도 좋네요.





6. 결과

1초 간격으로 비가 감지되었는지, 습도는 어느정도인지 표시해 줍니다.

이때는 LED가 전원쪽에만 켜집니다.



감지부에 물이 떨어지면, 꺼져있던 LED가 켜지고 비가 온다고 "YES" 로 표시가 변합니다.



OLED 와 LED 를 확대한 사진입니다.



물을 닦으면 바로 Raining 부분이 "NO" 로 변경됩니다.

감도는 좋네요.


아래는 과정을 보여주는 동영상 입니다.






FIN

이번 비오는 센서는 전기와 물이라는 서로 친화적인 특성인지 몰라도

반응이 아주 좋았습니다.

And
prev | 1 | next