본문 바로가기

아두이노

HM-10 BLE 모듈 사용 스마트폰으로 데이터 주기적으로 송신하기

반응형


 HM-10모듈을 통해 Arduino에서 BLE / iBeacon을 구현하는 중인데 이제 분석을 하니 언제나 할 수 있으려나. 가이드에 따르면 

- HM-10으로 BLE 기능을 구현 가능.

- HM-10의 AT commands를 사용해 iBeacon을 구현 가능.


▶ HM-10 모듈 설명

HM-10 모듈은 1만원 미만의 가격으로 BLE(Bluetooth Low Energy/블루투스 4.0 최신버전 스펙)를 구현할 수 있게 해준다. BLE는 전 버전의 블루투스에 비교해 매우 짧은 pairing(연결구성)과 낮은 전력소모로 알려져 있다. 그리고 iBeacon이라는 주기적인 브로드캐스팅 스펙을 가지고 있다. 


의외로 HM-10 모듈은 여러가지 버전이 있다. 기본적으로 Texas Instrument의 CC254x 칩을 기반으로 하지만, 여기서는 아래 부품을 기준으로 한다. 납땜이 되지 않은 모듈은 3.3V기반이므로, UNO에서 사용하기 위해서는 아래처럼 핀이 모듈에 연결된 보드를 사용한다.(기사 참고 BLE / iBeacon을 아두이노에서 구현하게 해주는 HM-10 https://bbangpan.tistory.com/17)


프로그램 소스 출처 : https://github.com/godstale/How-to-make-talking-things


사용한 BLE 안드로이드 앱은  BLE Chat 앱으로 테스트




약간 수정한 소스코드 - 주기적으로 데이터 송신, delay 적당히 줌


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <DHT11.h>
#include <SoftwareSerial.h>
 
int pin=2;    // 연결한 아두이노 디지털 핀 번호
DHT11 dht11(pin); 
SoftwareSerial BTSerial(78); //Connect BT's TX, RX
 
float temp_sum = 0;
float humi_sum = 0;
int count = 0;
 
#define SENDING_INTERVAL 4000
unsigned long prevReadTime = 0;
 
void setup()
{
   Serial.begin(9600);
   BTSerial.begin(9600);
}
 
void loop()
{
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0)
  {
    temp_sum = temp_sum + temp;
    humi_sum = humi_sum + humi;
    count = count + 1;
  }
  else
  {
    BTSerial.print("Error No :");
    BTSerial.print(err);
    BTSerial.println();    
  }
  
  Serial.println(temp);
  
  //if(millis() - prevReadTime > SENDING_INTERVAL) {
    //BTSerial.print("thingspeak:key=xxx&field1=");
    BTSerial.print((int)(temp_sum / count));
    //BTSerial.print("&field2=");
    BTSerial.print("  ");
    BTSerial.print((int)(humi_sum / count));
    BTSerial.print("[*]");
    
    count = 0;
    temp_sum = 0;
    humi_sum = 0;
    prevReadTime = millis();
  //}
  
  
  //delay(DHT11_RETRY_DELAY); //delay for reread
  delay(2000);
}



반응형