1. 1
2017 스마트디바이스지능통신 중간 고사(100)
Smart Device M2M
Date: 2017-04-26
1. 여러 개의 Sensor 정보를 Server에 전달하기 위한 효율적인 방법을
Bluetooth를 포함하여 제안하고, 이 기능을 구현하기 위한 System 분해도/관
계도를 구체적으로 제시하시오. (15)
- 여러 Sensor 정보를 모으기 위해 Arduino Network을 사용; HW Serial을 최
소로 쓰기 위해 Daisy Chain Network으로 선택
- System 가격을 낮추기 위해 하나의 Arduino에만 Bluetooth Module을 연결
함
- Bluetooth는 Arduino와 Smartphone을 서로 연결하고, Smartphone Internet
을 이용해 Server로 연속적인 Sensor Data를 보냄
- Server로부터의 Control은 Data 전송과 반대 방향으로 각 Arduino까지 전
달함
2. Android Bluetooth 구현에 BluetoothAdapter, BluetoothDevice,
BluetoothSerialService 등의 Class가 쓰인다. OS(운영체제)와 관계된 각 Class
의 기능과 관계를 구체적으로 설명하라. (15)
1) BluetoothAdapter: 현재 Activity에 있는 Context를 통해 OS에 등록된 기
2. 2
본 Bluetooth 장치의 Reference를 획득; 현재 Smartphone에 설치된
Bluetooth Reference가 BluetoothAdpater에 저장됨; BluetoothAdpater는 BT
통신을 위한 주된 역할을 함
2) BluetoothDevice: BluetoothDevice는 상대방 장치에 설치된 Bluetooth의
Reference를 가진 Class; BluetoothAdpater를 통해 Discovery를 시작하여 상
대방 Bluetooth의 MAC Address를 얻음
3) BluetoothSerialService: BluetoothDevice가 가진 MAC Address와
BluetoothAdapter 정보를 이용해 BluetoothSerialService의 연결 설정; 이후
BluetoothSocket과 StreamThread를 이용해 Serial 통신의 읽기/쓰기를 담당
함
3. Bluetooth를 지원하는 HC-05 Module과 Arduino Mega ADK를 연결하려
한다. (50)
1) HC-05와 Arduino의 HW 결선도(VCC, GND, TXD, RXD)를 그려라. (10)
2) HC-05 Module의 정상 동작 여부를 확인하기 위한 Arduino Serial Code를
작성하라. Smartphone에 Bluetooth Terminal은 이미 구동 중이라고 가정. (15)
#include <SoftwareSerial.h>
SoftwareSerial blueSerial(11, 10);
void setup()
{
Serial.begin(9600);
blueSerial.begin(115200);
}
3. 3
void loop()
{
if (blueSerial.available())
Serial.write(blueSerial.read());
if (Serial.available())
blueSerial.write(Serial.read());
delay(100);
}
3) Keyboard로부터 사용자 입력을 받아 HC-05 Module의 이름(Name)을 바
꾸고 바뀐 이름을 확인하는 Code를 작성하라. HC-05는 이미 Configure
Mode로 설정되었으며, AT Command를 사용하라. (25)
#include <MyStringMega.h>
SoftwareSerial blueSerial(11, 10);
void setup()
{
Serial.begin(9600);
blueSerial.begin(38400);
Serial.print(“Insert your Bluetooth Name = “);
}
void loop()
{
String sName = getSerialInput();
if (!sName.isEmpty())
{
Serial.println(sName);
blueSerial.println(“AT+NAME=” + sName);
4. 4
delay(100);
blueSerial.println(“AT+NAME?”);
String sBthName;
while (isEmpty(sBthName)) sBthName = getSerialInput(blueSerial);
Serial.println(“Your Bluetooth Name = “ + sBthName);
}
delay(100);
}
4. Android에서 “전등”이라는 사용자 음성 명령을 받아 “전등 켜기”와 “전등
끄기” 문자를 Toast로 출력하려 한다. 아래에 필요한 Code를 추가하라. (20)
public class MainActivity extends AppCompatActivity {
protected Button btSpeech; protected boolean bLightOn = false;
private static final int SPEECH_RECOG_INPUT = 1354;
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SPEECH_RECOG_INPUT) {
if (resultCode == RESULT_OK && data != null) {
ArrayList<String> result =
data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
String sSpeech = result.get(0);
if (sSpeech.equals(“전등”)) {
bLightOn = !bLightOn;
String sMsg;
if (bLightOn) sMsg = “전등 켜기”; else sMsg = “전등 꺼기”;
Toast.makeText(this, sMsg, Toast. LENGTH_SHORT).show();
}
}
}
}