Overview
본 강의에서 만들고자 하는 Device는 학생들의 각 방에 설치할 소음감지기입니다. 어떤 학생은 소리에 너무 예민하고, 어떤 학생은 시끄러운데 본인이 시끄러운지 예민한지를 알지 못해 기준이 있어야할것 같아서 만들어서 설치하려고 합니다.
Plan
우선 개발보드에 하드웨어를 구현하고, 매 10초단위로 소음을 측정하여 API 호출을 통해 데이타를 저장합니다. 그리고 해당 데이타를 보여주는 앱을 만들어서 로그인을 유도하고 모든 학생들이 공유하도록 합니다.
Hardware
집에 Photon WIFI Dev Kit와 굴러다니는 Sound Sensor가 있으니 그걸로 한번 만들어 볼게요.

포톤은 백만년전에 사놓은거라 엄청 오래됐는데 그때당시 그리 싸지 않았던걸로 기억해요 역시 비싼게 디자인도 참 이뿌네요 ㅋㅋ

Particle.io
Photon을 사용하려면 회원가입 후 제품등록을 해야합니다. 일단 particle.io에 접속하셔서 회원가입을 진행해주세요. 로그인 후에 https://console.particle.io/를 열어보면 아래와 같이 제품등록을 할수 있습니다.

Set up a new device선택하셔서 제품등록해줄게요. 그런데 이게 산지 오래된거라 아직 등록이 될지 모르겠네요.

일단 계속 진행을 해보도록 하겠습니다. USB포트는 없는 device인데 다른 옵션은 “Monitor One”이에요…이거 두개 말고는 선택할 수 있는게 엇어서 일단 그냥 Device with USB Port를 선택하고 진행하도록 하겠습니다. 아 USB로 연결을 할수 있는지 물어보는 거였네요. 제대로 선택한것 같습니다.

자동으로 Detect를 하려나보네요.

일단 그러면 하드웨어를 연결하고 Select Device를 클릭하도록 하겠습니다. 케이블은 아래와 같이 연결합니다.
| Photon | Sound Sensor |
| A0 | A0 |
| GND | G |
| VIN | + |
| D2 (디지털로 쓰고싶으면 연결) | D0 (생략가능) |

하드웨어의 케이블들을 연결한 뒤 USB를 컴터와 연결해서 전원이 들어오면 위의 화면에서 Select Device버튼을 클릭합니다. 그러면 아래와 같은 팝업이 뜨고 Photon with WiFi를 선택한 뒤 Connect버튼을 클릭합니다.

역시 업데이트 하라고 뜨네요. 제 펌웨어가 오래되서 그런거 같습니다.

업데이트를 했는데 재접속을 해야하는것 같습니다. 흠 그런데 Reconnect device가 되지 않네요..밑에 에러를 보니까 DFU모드로 만들어서 업데이트를 해야한다네요.

DFU모드는 SETUP버튼을 누른상태에서 RESET버튼을 눌렀다떼고, 전원칼라가 바뀔때까지 SETUP버튼을 계속 누르고 있으면 불빛이 노랑으로 바뀌는데 그때 딱 손을 떼면 DFU모드로 들어갑니다. DFU모드로 업뎃을 해봐도 안되요.

Particle패키지를 설치해서 한번 시도해볼게요
npm install -g particle-cli
그리고 로그인을 합니다.
$ particle login
? Please enter your email address:
? Please enter your password [hidden]
> Successfully completed login!
클라이언트다시 설치할게요. 이번엔 폴더까지 싹 다 지우고 걔네 사이트에서 다운받아 올게요.
npm uninstall -g particle-cli
rm -rf /usr/local/lib/node_modules/particle-cli
bash <(curl -sL https://particle.io/install-cli)
설치가 잘되었는지 버젼을 확인해볼게요
$ particle --version
3.38.1
클라이언트 업데이트 잘되네요.
$ particle update
particle flash --usb tinkerUpdating photon 330033001747343337363432 to latest Device OS version
Downloaded Device OS 3.3.1
[█████████████████████████] 100% | Flash success!
Flash하기 전에 DFU모드로 다시 들어가도록 합니다.
$ particle flash --usb tinker
:::: NOTICE:
:::: Your first flash may take up to 10m to complete - during
:::: this time, your device may regularly change LED states
:::: as Device OS upgrades are applied.
Flashing photon device 330033001747343337363432
[█████████████████████████] 100% | Flash success!
이제 다시 위로 올라가서 Select Device부터 다시 시작합니다. 이제야 다음으로 넘어가지네요.

Create a new product눌러서 새 프로젝트를 진행합니다.

해당 기기의 이름을 정하라네요. 그냥 디폴트로 두고 Name device클릭합니다.

다음 화면은 Wifi설정화면입니다. 사용할 Wifi를 선택해주세요.

해당 기기를 설치할 위치에서 잘 잡히는 Wifi로 선택하는게 좋겠죠? 비번을 넣고, Configure Wifi를 클릭합니다. 우여곡절끝에 설정이 완료되었네요.

여기서 우리는 코딩을 직접할거니까 Write your own code의 WebIDE를 선택합니다. 그러면 아래와 같이 에디터가 열립니다.

Coding
코드는 Particle에서 C++만 인식하기 때문에 C++로 작성합니다.

const int soundPin = A0;
const int ledPin = D7;
const int threshold = 1000;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int level = analogRead(soundPin);
Serial.printlnf("Sound level: %d", level);
if (level > threshold) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(100);
}
참고로 LED를 넣어야 편하게 상태를 확인할 수 있을것 같아서 LED하나 꽂았어요. LED의 짧은 다리를 Ground에 연결하고 D7과 LED양극 사이에 저항 1kΩ짜리 하나 넣어 줬어요.

위의 화면에서 앱이름적고 엔터치면 앱이 생성되는데 저장후 왼쪽메뉴에 Verify아이콘 눌러서 코드를 확인해줍니다.

코드가 문제없이 검증되면, Flash버튼을 눌러서 포톤으로 전송합니다.

그런데 threshold가 기본 2790정도로 잡음이 이미 많이 잡아먹고 있습니다. 그리고 아주 큰 소리 손뼉이나 ‘아!’하고 소리지르는 정도가 아니면 음악을 계속 틀어놓아도 전혀 수치가 올라가지않고 있어요. 아무래도 제가 가지고 있는 Sound컴포넌트가 너무 싸구려라 정상적으로 작동을 하지 않는것 같습니다. 역시 믿을 만한 제품을 써야했나봅니다.
아무래도 Adafruit에서 MAX4466를 주문해야할 것같네요. 일단 주문하고 죽이되든 밥이되든 한번 만들어서 써볼게요. 지금 Photon사놓은걸 안쓴지가 너무 오래 되서 어찌됐든 쓰는게 좋을거 같아서요. MAX4466도착하면 계속 강좌를 이어가도록 하겠습니다.
MAX4466
MAX4466도 아날로그 방식으로 음성을 측정하기 때문에 SPH0645LM4H보다는 신뢰도가 떨어지지만 SPH0645LM4H는 Photon과 호환이 안되기 때문에 ESP32를 따로 사야해서 이미 Photon을 갖고 있는 나로서는 좀 망설여지는 조합이긴 하지..일단 MAX4466으로 구현을 해보고 쓸만하면 그냥 쓰고 영 정확도가 떨어지는거 같으면 나중에 또 사서 구현해보는 걸로 ㅋㅋ
일단 구매한 MAX4466에 다리를 꽂아줍니다. 저는 이런거 만드는게 참 재밌는데 딱 한가지 납땜질을 너무 못해서 그게 좀 흠입니다. 일단 이렇게 납땜질을해서 다리 세개를 연결해줬어요. 이렇게 동그랗게 납땜이 되면 안된다고 하는데 저는 이게 너무 어렵고 밑에 녹은것도 너무 지지고 볶아서 그렇게 된거라고 닦아줘야한다고 그러더라구요. 안그러면 접속불량이 생긴다고 ㅠㅜ 근데 제가 원래 납땜질을 너무 못해서 이건 진짜 매우 잘한 측에 속하기 때문에 일단 그냥 넘어가도록 하겠습니다. ESP32

여러분들은 저 처럼 하지 마시고 더 잘해내시길 바랍니다. 일단 다리를 구부려서 보드에 세워서 꽂아줬어요.

그리고 연결은 아래와 같습니다.
| Photon | MAX4466 | |
| GND | GND | |
| 3V3 | VCC | 전원 (3.3V) |
| A0 | OUT | 아날로그 출력 |
