레이블이 [006. Arduino]인 게시물을 표시합니다. 모든 게시물 표시
레이블이 [006. Arduino]인 게시물을 표시합니다. 모든 게시물 표시

2016년 4월 4일 월요일

[Arduino] 온도센서 측정값을 OLED에 출력하기.

[Arduino] 온도센서 측정값을 OLED에 출력하기.



(!주의!) 아래 코드는 128x64 OLED에서 SPI방식으로 연결한 예이다!! I2C방식이나 128x32 OLED의 예제는 라이브러리의 예제에 있으니 거기를 참고하길 바랍니다!!!

1. 개요

온도 측정 센서(18B20)에서 측정한 거리값을 아두이노로 받고, 이를 OLED 모듈에 출력한다.

2. 구성요소

  • WiDo(Arduino Leonardo + Adafruit Wi-Fi)
  • 18B20 (온도 측정 센서)
  • 128x64 OLED (OLED 디스플레이)

3. 필요한 라이브러리

OLED를 사용하기 위한 라이브러리가 필요하다.
18B20을 사용하기 위한 라이브러리도 필요하다.
18B20의 경우 Data선을 한개만 사용한다. 이런 경우 OneWire 라이브러리가 필요하다고 한다.
OneWire 방식으로 통신하는 센서의 경우, 아두이노 핀 한개에 여러개의 모듈이 연결되어도 각각을 모두 인식 할 수 있다고 한다.

4. Pin Mapping

(1) 18B20(온도센서)
Arduino18B20
GndGnd
5VVcc
D2Data
!!온도 센서 회로 구성에서의 특이점!!
18B20의 경우 아래 사진의 왼쪽처럼 칩만 있는 경우에는 4.7K 저항을 연결해줘야 한다. 연결 회로 구성은 링크 참조.
http://www.tweaking4all.com/hardware/arduino/arduino-ds18b20-temperature-sensor/
하지만 아래 사진의 오른쪽처럼 보드에 붙어 있는 경우는 보드에서 저항을 함께 붙여놓은 제품이 있다. 이 경우엔 바로 아두이노와 연결하면 된다.
 
(2) 128x64 OLED (OLED 디스플레이)
ArduinoOLED
D9Data
D10Clk
D11DC
D13Rst
D12CS
-3v3
5VVin
GNDGnd

5. 구성한 모습

2016년 3월 30일 수요일

[Arduino] 거리측정센서와 OLED 이용하기.


[Arduino] 거리측정센서와 OLED 이용하기.



Arduino 실습으로 아래와 같은 내용으로 실습해 보았다.


1. 개요

초음파 거리 측정 센서에서 측정한 거리값을 아두이노로 받고, 이를 OLED 모듈에 출력한다.


2. 구성요소


  • WiDo(Arduino Leonardo + Adafruit Wi-Fi)
  • HC-SR04 (초음파 거리 측정 센서)
  • 128x64 OLED (OLED 디스플레이)

3. 필요한 라이브러리

OLED를 사용하기 위한 라이브러리가 필요하다.

4. Pin Mapping

(1) HS-SR04(초음파거리센서)
ArduinoHC-SR04
5VVcc
D2Trig
D3Echo
GNDGnd

(2) 128x64 OLED (OLED 디스플레이)
ArduinoOLED
D9Data
D10Clk
D11DC
D13Rst
D12CS
-3v3
5VVin
GNDGnd


5. 소스코드

(!주의!) 아래 코드는 128x64 OLED에서 SPI방식으로 연결한 예이다!! I2C방식이나 128x32 OLED의 예제는 라이브러리의 예제에 있으니 거기를 참고하길 바랍니다!!!
https://github.com/ChanMinPark/makeup/blob/master/007_Distance-OLED_Arduino/Arduino_code/pcmOLED.ino

6. 구성한 모습


2016년 3월 28일 월요일

[Arduino] WiDo에서 MQTT 메세지 Publish하기.


[Arduino] WiDo에서 MQTT 메세지 Publish하기.




IoT에서 센싱을 담당하는 기기들은 주로 사양이 낮다.
그래서 메세지를 주고 받는 통신에서도 HTTP와 같은 프로토콜이 버거울 수 있다고 한다.
그래서 IoT 기기들을 위한 메세지 프로토콜로 CoAP과 MQTT가 발전하고 있다.

이번 포스팅에서는 WiDo(Arduino Leonardo + WiFi)를 이용한 MQTT 메세지를 보내는 방법을 설명해본다. (사실 혼자 정리해보는 것에 가깝다.)
(WiDo 사이트: http://www.dfrobot.com/index.php?route=product/product&product_id=1159#.VvnI3OKLSUk)


MQTT를 실습하기 전에 이론을 조금 아는 것이 좋다.

우선, MQTT메세지는 Topic과 Data로 이루어진다.
노드들은 Data를 Topic으로 식별한다.
아래 그림에서 예를 들면, temperature가 Topic이 되고 온도값이 Data가 된다.

MQTT의 통신 구성은 노드와 브로커(서버)로 이루어진다.
노드들은 메세지를 보내거나 받는다. 보내는 것을 Publish라고 하고, 받는 것을 Subscribe라고 한다. 여기서 노드들이 보내고 받을 때는 노드들 간에 1대1 연결이 아니다. 노드들의 메세지는 무조건 브로커(서버)를 통한다.
노드가 Publish를 하는 것도 브로커로 하는 것이고, 노드가 Subscribe를 하는 것도 브로커로 부터 받아 오는 것이다.

(출처:http://arsviator.blogspot.kr/2015/03/mqttmessage-queue-telemetry-transport.html)

Publish와 Subscribe의 과정은 아래와 같다.
(1) 수신노드에서 Subscribe하기 위한 연결을 만들어 놓는다. 이것의 의미는 특정 브로커(서버)에게 "내가 원하는 Topic을 가진 Data가 들어오면 나한테 보내줘~"라는 것이다.
(2) 송신노드는 Data를 전송할 필요가 있을 때마다 Topic을 지정해서 브로커에게 Publish한다.
(3) 브로커는 새로 받은 Data의 Topic을 확인하고 이를 Subscribe하는 모든 노드에게 보내준다.



이제 실습을 정리해본다.

1. 실습 과정
  (1) MQTT 서버 준비
    나는 오픈소스인 Mosquitto를 이용했다.
    (다운로드 : http://mosquitto.org/download/)
    링크에서 'Binary Installation'에 있는 설치파일을 다운 받는다.
    설치의 전반적인 과정은 아래 링크를 참고하면 좋다. 아래는 주의 사항만 적어본다.
    (http://midnightcow.tistory.com/category/MQTT)
   
    나는 윈도우7이어서 'mosquitto-1.4.8-install-win32.exe'를 다운 받았다.
    설치할 때 주의 사항이 2가지 있다.
    첫 번째는 아래 그림처럼 나오는 화면에서 지시사항을 따라줘야 한다는 것이다.


    OpenSSL에 대한 링크는 다운받아서 설치하면 되고, 두번째 링크는 바로 dll파일을 받기만 하면 된다.
    단, OpenSSL 설치 시에도 아래 그림처럼 dll 복사 위치를 bin 폴더에 하는 것이 좋다.
    왜냐하면 OpenSSL을 설치하면서 생기는 dll파일을 Mosquitto 폴더에 옮겨줘야 하기 때문에 dll파일이 뭐가 어디에 있는지 알아야하기 때문이다.



  (2) Publish 할 노드 준비
    서버를 준비했으니, Publish할 노드와 Subscribe할 노드를 만들어야 하는데 여기서는 Subscribe는 mosquitto에서 제공하는 프로그램을 이용하고, 나는 WiDo를 이용해서 Publish하는 노드를 만들어 본다.

    WiDo는 Adafruit WiFi 모듈을 이용한다. 그래서 대중적인 MQTT for Arduino 모듈인 knolleary의 MQTT Client 모듈을 사용하기 힘들다.
    다행히 Adafruit를 위한 MQTT 모듈이 있다. Github에서 zip으로 다운받아서 'cc3000_PubSubClient' 폴더를 Arduino설치 폴더의 libraries 폴더에 복사한다.

    예제 소스는 아래 링크에서 확인할 수 있다.
    (https://github.com/ChanMinPark/makeup/blob/master/002_NFC_Door/MQTT_example_for_Arduino/MQTTpcm.ino)
    wifi ssid와 password를 설정하고 브로커의 ip주소를 설정해주고 setup()과 loop()부분을 자신에게 필요한 기능으로 구현하면 된다.