일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SK하이닉스
- 파운드리
- 재건축 촉진
- 남궁민작가님
- 금리 정책
- 알리발
- 엔비디아 실적
- 손경제요약정리
- Shortcut
- 손경제
- 금리 인하
- 글로보는손경제
- 배당주
- 서울집값
- 이진우기자님
- 박정호교수님
- 손에잡히는경제
- 장마
- 그린벨트 해제
- 한국은행
- 경제공부
- 손경제플러스
- 엔화 가치
- 아이폰
- 미국주식
- 짭에어태그
- 부동산 시장 동향
- 단축어
- 대출 규제
- 주택 공급 대책
- Today
- Total
영글로그 - 영상을 글로 만든 블로그 :)
[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 -
'테크 팁(Tech Tip) > 다양한 기술 (for geek)' 카테고리의 다른 글
라즈베리파이에서 와이파이 모듈 드라이버 설치하기 (0) | 2021.02.23 |
---|---|
라즈베리파이 VNC 활성화 후 해상도 조절 (0) | 2021.02.18 |
라즈베리파이로 스마트 홈을 만들자 (0) | 2021.02.10 |
[윈도우]배치파일로 다중 파일 실행 방법 (0) | 2017.11.16 |
Notepad++에서 GCC로 컴파일하기 (0) | 2016.05.31 |