[Project] 아두이노+BLE 를 활용한 형광등 제어 컨트롤
아두이노+BLE 4.0(HM-10)을 이용한 형광등 On/Off 제어 Project
1. 소스코드 (Source Code)
#include <SoftwareSerial.h > //시리얼 통신 라이브러리 호출
int blueTx = 2; //Tx (보내는핀 설정)
int blueRx = 3; //Rx (받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx); //시리얼 통신을 위한 객체선언
String myString = ""; //받는 문자열
#define TEST_LED 13
#define Relay_Pin 7
#define Reset_Pin 4
void LED_lighting(int cnt) {
for (int i = 0; cnt < i; i++) {
digitalWrite(TEST_LED, HIGH); //LED ON
delay(10);
digitalWrite(TEST_LED, LOW); //LED OFF
delay(10);
}
}
void setup() {
Serial.begin(9600); //시리얼모니터
mySerial.begin(9600); //블루투스 시리얼 개방
pinMode(TEST_LED, OUTPUT); //Pin 13을 OUTPUT으로 설정 (LED ON/OFF)
pinMode(Relay_Pin, OUTPUT);
pinMode(Reset_Pin, INPUT);
digitalRead(Reset_Pin);
digitalWrite(Relay_Pin, High); //스위치로 바로켜면 켜지도록.
//Serial.println("Hi");
}
void loop() {
while (mySerial.available()) //mySerial 값이 있으면 BLE로 부터 값이 들어오면
{
char myChar = (char)mySerial.read(); //mySerial int형식의 값을 char형식으로 변환
myString += myChar; //수신되는 문자열을 myString에 모두 붙임 (1바이트씩 전송되는 것을 모두 붙임)
delay(5); //수신 문자열 끊김 방지
}
while (Serial.available()){ // if Serial has input(from serial monitor)
byte data = Serial.read();
mySerial.write(data); // write it to BT
}
if (!myString.equals("")) //myString 값이 있다면
{
// Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력
if ((myString == "on") || (myString == "ON") || (myString == "On")) //myString 값이 'on' 이라면
{
//Serial.println("on");
digitalWrite(TEST_LED, HIGH); //LED ON
delay(500);
digitalWrite(Relay_Pin, HIGH);
}
else if ((myString == "reset") || (myString == "RESET") || (myString == "Reset")) {
pinMode(Reset_Pin, OUTPUT);
//Serial.println("Reset!");
delay(500);
digitalWrite(Reset_Pin, LOW);
} else if ((myString == "off") || (myString == "OFF") || (myString == "Off")) {
//Serial.println("OFF");
digitalWrite(TEST_LED, LOW); //LED OFF
delay(500);
digitalWrite(Relay_Pin, LOW);
} else if (myString == "bleset") {
/* mySerial.write("AT+RENEW"); // 공장 초기화
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
Serial.write(mySerial.read());
delay(100);
Serial.println("");
mySerial.write("AT+RESET"); // HM-10 리셋
delay(500);
while (mySerial.available())
{
Serial.write(mySerial.read());
}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+CLEAR"); // 이전 접속 기기 삭제
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+CONNL"); // 마지막 기기와 자동 연결
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+BOUD0"); // 통신속도 9600설정
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+ADVI5"); // 신호 송출 주기 5 설정(0.5초)
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+NAMEK_TECH_BLE"); // HM-10 이름정의
delay(500);
while (mySerial.available()) {Serial.write((char)mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+ADTY1"); //마지막에 연결된 기기를 허락 1.28초안
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+IBEA1"); // Turn on iBeacon
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+DELO2"); // Broadcast 전용 모드로 셋팅
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+PWRM1"); // Auto sleep으로 가지 않음
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);
mySerial.write("AT+RESET"); // 리붓하여 반영 실시
delay(500);
while (mySerial.available()) {Serial.write(mySerial.read());}
//회신이 있을때까지 대기
delay(100);*/
} else {}
myString = ""; //myString 변수값 초기화
//Serial.println("");
}
}
참조 : 상기 코드는*빵판닷컴님의 블로그 참조하였습니다.
(http://bbangpan.tistory.com/17)
*** 설명
- 문자열을 받는 코드로 myString으로 값을 받고 on/off/reset인지 확인해서 동작!
- HEX 가 아니라 UTF-8 로 설정해서 송신필요.
- iPhone 5 app 사용 이름은 :LightBlue 라는 코드를 이용
- MCU에서 BLE를 셋팅하는 코드를 작성하여 넣었지만 BLE에서 인식이 되지 않음.
(http://stackoverflow.com/questions/19826749/how-to-use-ble-shield-based-on-hm-10-bluetooth-module 참조함.)
- reset은 4번핀이 LOW 로 출력핀으로 변경되면 RST핀이 동작하여 RESET됨.
- RST핀은 LOW Active.
2. H/W는 작성되는데로 Upload 예정.
3. BOM
3.1 Main : Aduino NANO
3.2 BLE : HM-10
3.3 Relay : ADUINO 구매시 수령함 (사진은 http://deneb21.tistory.com/200 님의 사진을 사용함.)
4. 기타
4.1 -