반응형

 3회에 걸쳐 Nano33 ioT 보드의 BLE 저전력 블루투스를 사용하는 다양한 방법에 대해 다루고 있습니다.  아두이노 나노33 보드시리즈는 콤팩트하면서 사용법이 아두이노 우노(나노)와 거의 동일하여 쉽게 접근가능하고 여기에 더해 WiFi기능과 저전력 블루투스 기능을 활용할 수 있는 매우 장점이 큰 보드입니다. 다만 유사한 기능을 제공하는 ESP32 보드에 비해 단가가 조금 나가는 단점이 있지만 아두이노 정품 보드의 정통성?을 이어받아 안정적이고 불량률이 거의 없다는 점이 장점인 보드입니다.  기본적인 스펙과 사용법은 아래, 이전 게시글을 참고하시면 상세하게 파악할 수 있으니 참고해 보세요.

【 Nano33 IoT 선수학습 】

1. 【 아두이노Nano33#1】 NANO 33 IoT 처음사용 설명서

2. 【 아두이노Nano33#1-2】 NANO 33 IoT 처음사용 설명서 #1-2 (LSM6DS3 센서 테스트) (자이로센서 등등)

3. 【 아두이노Nano33#2】 NANO 33 IoT 처음사용 설명서 2편 WiFi 활용하기

4. 【 아두이노Nano33#3】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #1 (BLE로 LED & 서보모터 제어하기)

5. 【 아두이노Nano33#4】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #2 (BLE로 도어락 솔레노이드 제어하기)

2편에서는 BLE를 이용해서 릴레이에 연결된 솔레노이드를 제어하여 도어록을 열고 닫는 실습을 진행했습니다.  이번 시리즈 마지막 3편에서는 1~2편을 통해 구성된 하드웨어들을 스마트폰에서 제공되는 BLE 통신으로 제어해 보려고 하는데요, 앱인벤터(App Inventor)를 이용해서 아주 쉽게 앱을 만들어 제어해 보겠습니다.  우선 이번 실습을 따라 해보고 만약 앱인벤터 기초 부분의 학습이 필요하다고 생각된다면 아래 게시물을 참고해 보세요. 응용 예시를 따라 하다 보면, 아주 쉽게 적응이 될거예요. 

[ 앱 인벤터 기초과정 ]

1.   【 앱인벤터기초#1】 MIT-구글의 App-인벤터 란? ( App-Inventor!)

2.   【 앱인벤터기초 #02】 앱인벤터 시작하기(설치&셋업) ( App-Inventor!)

3.   【 앱인벤터기초 #03】 앱인벤터 따라 하기 실습#1(메뉴화면소개 및 사용법)

4.   【 앱인벤터기초 #04】 앱인벤터 1도 모르고 따라하기 실습#2(화면이동 예제 만들기)

5.   【 앱인벤터기초 #05】 앱인벤터 1도 모르고 따라 하기#3(날짜/시간/체크박스 실습)

6.   【 앱인벤터기초 #06】 앱인벤터 1도 모르고 따라 하기 영상 실습#4 (사진/글자표시/SNS보내기 앱上)

7.   【 앱인벤터기초 #07】 앱인벤터 1도 모르고 따라 하기 영상 실습#5 (사진/글자표시/SNS보내기 앱下-완결!)

 

【 학습 목표 】

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하기
      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)
      ② Nano33 BLE  스캔과 페어링
      ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기
      ④ 서보모터 스위치로 제어하기

<2 편> 블루투스로 도어(Door 문)  잠금장치(솔레노이드) 열고 닫기
      ① 주요 부품 소개 ( 솔레노이드 / 솔레노이드 잠금걸쇠 / 릴레이 )
      ② 도어 미니어처 제작 (3D 모델링과 3D 프린팅)
      ③ 블루투스(BLE)로 도어 열고 닫기

<3 편> 앱 인벤터(App Inventor) 만들고 스마트폰으로 도어 열고 닫기
      ① nRF Connect 앱 활용해 보기 (LED 기본 제어)
      ② 블루투스 스캔 및 연결과 같은 기본 앱 기능 만들고 LED 제어해 보기
      ③  LED 제어와 서보 및 Door 제어 결합된 앱 만들기 (앱 안정성 향상 기능 넣기)
      

<3편>  App Inventor 앱으로 BLE통신하여 Nano33 ioT보드에 연결된 도어록과 서보모터 LED 제어하기!

【 실습 준비 】

이번 실습을 위해 필요한 준비물과 회로는 위 링크에도 게시한 아래 <1편>과 <2편> 게시물을 참고해 주세요. 

1. 【 아두이노Nano33#3】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #1 

2. 【 아두이노Nano33#4】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #2 

 

【 작품 준비 】

 실습을 위한 회로들을 아래처럼 아크릴 판(투명 아크릴 독서대 활용)을 이용해서 정리해 보았는데요, 특히 5V 전원이 다중으로 들어가기 때문에 5V 5A 용량의 미니 파워서플라이를 이용해서 USB 다중 전원 잭을 만들고 공급해 주었습니다. 

 

【 소스 코드 】

소스코드는 이전 게시글을 참고해도 됩니다.
① 기본적으로 블루투스는  1대 1로 연결되는 기기이기 때문에,  버튼회로(중앙회로) + LED 회로(주변회로) , 등 개별로 연결되도록 BLE의 로컬 네임을(SetLocalName) ,   각각 "LED" , "SERVO"  ,  "DOOR"로 하여 1대 1 통신하도록 하였는데요,  그럼 이렇게 번갈아가며 1대1 연결하고 통신 시연하려면, 버튼회로로 사용되는 중앙회로에 연결시키려는 기기이름으로 계속 바꾸어가며 업로드를 해야 하니 번거로워집니다.  따라서, 이 실습에서는 로컬 네임을  "MULTI"로 통일하여 주변기기의 전원을 ON / OFF 하여 간편히 페어링 되도록 하였다는 점 참고해 주세요. 

("MULTI"로 정리한 소스 코드 한 번에 다운로드 받기)

05. MultiCode.zip
0.01MB

 

② 중앙회로가 스마트폰이 되면 앱상에서 버튼별로 로컬네임을 줄 수 있기 때문에 각 회로별로 SetLocalName을 각각 "LED" , "SERVO"  ,  "DOOR" 주어 구분할 수 있고 그렇게 해야 원하는 기기를 선택해서 페어링 할 수 있습니다.   따라서 이렇게 네이밍이 된 코드는 아래에 압축하여 제공해 드립니다. 

( "LED" , "SERVO"  ,  "DOOR"로 각각 네이밍 된 소스 코드 한 번에 다운르드 받기)

04. App_Code.zip
0.01MB

 

【 이번 실습 프리뷰 】


이번 실습에서 1편과 2편을 통해 아래와 같이 중앙회로를 만들고 주변회로를 만들어 1대 1 통신을 실습했는데요, 

 이번 3편 실습에서는 아래처럼 스마트 폰의 BLE기능을 이용해서 각각의 회로를 제어해 보겠습니다.


이번 실습의 결과물은 아래와 같습니다.  최종 결과물 앱인벤터 코드가 어렵지 않도록 기본 핵심기능만 담은 Basic앱을 먼저 제작해 보고, 서보, 릴레이 회로 모두 제어하면서 좀 더 향상된 기능의 Advanced앱도 제작해 볼게요.

 

 

【   ① nRF Connect 앱 활용해 보기 (LED / Servo / Relay기본 제어)   】

 

먼저, 앱인벤터로 앱을 만들어 제어하기 전에, 블루투스(BLE)로 통신하여 간단한 신호를 송수신할 수 있는 기존 통신앱을 다운로드하여 제어가 되는지? 확인해 볼게요. 

앱이름은 nRF Connect 앱입니다.  앱스토어에서 검색 후 설치해 보세요.

앱을 설치하고 실행시켜 주세요. 

앱을 실행하면 자동으로 주변의 블루투스 장치를 스캐닝합니다.

현재 LocalName이 “LED”로 되어 있는 Nano33 보드가 스캔되었고 (현재, A. LED기기만 ON 되어 있음) 
“CONNECT” 버튼을 눌러 주세요.

맨 아래 “Unknown Service”를 터치하고,  송신 화살표 “↑”를 터치해 주세요.

0x____ 항목에 “01”을 입력하고 SEND 버튼을 터치하세요.

그럼 연결된 LED회로로 byte값 ‘1’이 전송되어 LED가 켜지게 됩니다.

 다시, 송신 화살표“↑”를 터치하고 0x00을 입력하면 byte값 ‘0’이 전송되어 LED가 꺼지게 됩니다.

마찬가지로 서보모터를 켜고 동일하게 전송하면 제어가 잘 되는 것을 볼 수 있습니다.

 

그리고 릴레이회로도 보조 전원을 연결하고 동일하게 전송하면 제어가 잘 되는 것을 볼 수 있습니다.

 

【 Basic 제어 앱 만들기 】

 

 이제 앱인벤터(App Inventor)를 이용하여 BLE 통신을 위한 기본앱을 만들어 볼게요.

 

App Inventor 기초와 응용을 다룬 7편의 영상 시리즈가 있는데요,  이 게시글 위에 관련 링크가 있으니 앱인벤터 기초가 필요하다면 참고해 보세요~

 우선, 1차적으로 아주 간단하게 핵심기능만 넣은 App을 제작해 보고,  이것을 바탕으로 게시글 끝에는 서보회로와 릴레이회로까지 넣고 좀 더 깔끔하게 실행되도록 만들어 볼게요.  

Basic App의 디자인 모습은 아래와 같습니다.


우선 작동 원리를 간단히 설명드립니다.

먼저,  

① Scan 버튼을 누르면 폰 주변에 감지되는 블루투스 장치를 검색하도록 합니다.

② 검색된 장치 목록에서 ‘LED’를 선택하면 Service UUID와 LocalName을 가져옵니다.

③ Connect를 터치하면 선택한 LED 주변장치와 연결을 시도하고 UUID와 특성 UUID를 체크하도록 합니다.

④ LED ON 버튼을 터치할 경우 true값에 해당하는 ‘1’을 전송시켜 LED가 켜지도록 합니다.

⑤ LED OFF 버튼을 터치할 경우 false값에 해당하는 ‘0’을 전송시켜 LED가 꺼지도록 합니다.

 

그럼, App Inventor 사이트에 접속하여 새 프로젝트를 클릭해 주세요.

App Inventor의 메뉴 언어는 한글로도 바꿀 수 있으니 한글메뉴가 더 익숙한 분은 여기서 바꾸어 주세요.(아래 이미지)

 

 저전력(BLE) 블루투스가 아닌 경우에는 Connectivity에 있는 Bluetooth를 사용하면 됩니다. (아래)

 

하지만 여기서는 저전력 블루투스(Bluetooth LE)를 사용해야 하기 때문에 BLE 확장 패키지를 Extension항목에 별도로 추가해야 사용할 수 있습니다.(아래)

 

그럼, 확장 패키지를 다운로드하기 위해 앱인벤터 사이트 또는 구글 검색으로 “Bluetooth LE” 또는 “BLE”라고 검색해 보세요. (아래)

 

검색된 영상과 같은 링크를 클릭하세요.

첫 번째 항목에 있는 BluetoothLE.aix를 다운로드하세요.(아래)

 설명란에 보이는 링크를 클릭하면  BluetoothLE에서 사용할 수 있는 각 블록에 대한 설명을 참고할 수 있어요. (위/아래 이미지 참고)

 

여기 “ Import extension”을 클릭하여 좀 전에 받은 “ edu...ble.aix ”파일을 추가해 주세요. (아래)

이렇게 생겨난 요소를 끌어다 폰 이미지 위에 올려주세요.(아래)

 

그럼 이렇게 숨김 요소로 기능이 추가되는 것을 볼 수 있습니다.(위)

 

그럼 아래에 앱 인벤터의 디자이너(Designer) 부분을 캡처하였으니 보고 따라 진행해 보세요.

① 번의 디자인에 해당하는 Components 구성은 아래 ②번과 같습니다.
각 Components의 속성은 거의 디폴트(기본) 값으로 하면 되는데요, LED ON 버튼과 LED OFF 버튼만 가로로 화면이 가득 차도록 나타내기 위해 Width 항목에 Fill parent. 옵션을 주고, 글자 FontBold 처리 및 FontSize, 색깔 정도만 처리를 해주면 좋습니다.   나머지 부분은 자유롭게 꾸며도 좋고요, Basic앱에서는 이 정도만 하고 넘어가도록 할게요.

각 항목의 이름들은 블록 코딩 화면에서 쉽게 알아차릴 수 있도록 의미를 부여해 네이밍 해주면 좋습니다.

예를 들어, Button의 경우 ‘btn_’으로 시작하는 태그를 붙여주고, Label의 경우 ‘lbl_’로 시작하는 태그를 붙인 다음, 각 요소의 이름을 붙여주는 식입니다.

 

이제 블록 코딩 화면으로 넘어갑니다.
아래 이미지를 참고하시고,  웹상에서 보기 어려울 경우를 대비해서 이미지 파일로 따로 링크해 놓을게요.
블록 코딩 이미지 사진은 2장으로 캡처했습니다.

Service UUID와 특성 UUID 값을 정확하게 입력해 주어야 합니다.

동일하게 반복되는 블록은 복붙 하는 것이 편할 수 있어요.

--  코드를 한글 메뉴로도 캡처했으니 참고해 보세요(아래) --

 

 

< Basic App 캡쳐 사진 다운로드하기! >

[Basic 앱] 앱인벤터 구성요소와 블록코딩 캡쳐 이미지.zip
1.08MB

 

 

블록 코드 구성이 완성되었다면, Build 메뉴에서 앱을 생성해 주세요.

 

앱 설치는 폰의 카메라를 이용해 QR코드를 스캔하면 연결된 링크를 통해 앱을 다운로드할 수 있고, 

다운로드 버튼으로 설치앱을 다운로드 후,  폰을 USB케이블로 연결하여 직접 복사하여 설치해도 됩니다.

그럼, 앱 설치하는 장면을 집접 보여드릴게요 앱스토어를 통하는 것이 아니기 때문에 경고 창이 나타날 수 있습니다.

 

 

 

‘Scan’ 버튼을 누르면 주변의  블루투스 장치들의 목록이 뜨는데요.

’LED’가 검색되었다면 ‘Stop Scan’을 누르고 검색된 ’LED’를 터치 후, ‘Connect’를 눌러 연결시켜 주세요.

 

그리고 ON / OFF 버튼을 누를 때마다 Status : 에 결과가 표시되도록 합니다.

 

그럼, 실제 동작 영상과 함께 다시 보여드릴게요.

 

‘Scan’ 버튼을 누르면 주변의 블루투스 장치들의 목록이 뜨고.

 

’LED’가 검색되었다면 ‘Stop Scan’을 누르고 검색된 ’LED’를 터치 후, ‘Connect’를 눌러 연결시켜 주세요.

 

그리고 On / Off 버튼을 누르면 LED가 잘 제어되는 것을 볼 수 있습니다.

 

【 BLE 기능 추가 App 만들기 - (Advanced BLE App) 】

 

앱을 좀 더 다듬고 서보와 릴레이 제어까지 추가한 Advanced 앱을 만들어 볼게요.

마찬가지로 디자인 화면과 코드블록을 보기 좋게 캡처하여 보여드리고 압축하여 첨부파일로도 올려드릴게요.

 

아래로 스크롤 된 모습

나머지 옵션 부분은 글자색 넣고 글자(Font...) 크기 및 가로 크기 맞추는 부분만 하면 되기 때문에, 이 부분은 직접 해보면 어렵지 않기 때문에 하면서 감을 익혀보세요.

 

- 블록 코딩 영역 < 영문 메뉴 > -   (③ 번 이미지)

Scan 버튼 관련된 블록코딩

 

LED 버튼 블록코딩
서버 모터 버튼 블록코딩
도어 솔레노이드(릴레이) 버튼 블록코딩

아래 블록코딩은 장치 선택에 따라서 블루투스 UUID 특성값을 다르게 선택하도록 처리한 부분입니다.
LED Scan 버튼을 통해 device_Mode 변수값이 1일 경우 LED에 할당된 특성UUID 값을 가져오도록했고, 
Servo Scan 버튼을 통해 device_Mode 변수값이 2가 될 경우 Servo에 할당된 특성UUID 값을 가져오도록했고, 

Door Scan 버튼을 통해 device_Mode 변수값이 3인지 확인해서 Relay에 할당된 특성UUID 값을 가져오도록하여, 

각 버튼에 맞도록 폰과 Nano33 ioT 기기와 페어링 되도록 하였습니다.

장치 선택에 따라서 블루투스 UUID 특성값을 다르게 선택하도록 처리

 

 

- 블록 코딩 영역 < 한글 메뉴 > -   (④ 번 이미지)

Scan 버튼 관련된 블록코딩
LED 버튼 블록코딩
서보 모터 버튼 블록코딩
도어 솔레노이드(릴레이) 버튼 블록코딩

 

아래 블록코딩은 장치 선택에 따라서 블루투스 UUID 특성값을 다르게 선택하도록 처리한 부분입니다.
LED Scan 버튼을 통해 device_Mode 변수값이 1일 경우 LED에 할당된 특성UUID 값을 가져오도록했고, 
Servo Scan 버튼을 통해 device_Mode 변수값이 2가 될 경우 Servo에 할당된 특성UUID 값을 가져오도록했고, 

Door Scan 버튼을 통해 device_Mode 변수값이 3인지 확인해서 Relay에 할당된 특성UUID 값을 가져오도록 하여, 

각 버튼에 맞도록 폰과 Nano33 ioT 기기와 페어링 되도록 하였습니다.

 

< Basic App 캡처 사진 다운로드하기! >

[Advanced 앱] 앱인벤터 구성요소와 블록코딩 캡쳐이미지.zip
1.51MB

 

그럼 이제 Advanced 앱도 실행시켜 볼게요.
아래 이미지는 LED와 페어링 시키고 ON / OFF 제어에 성공한 모습입니다.  

 

아래 이미지는 서보(모터) 기기와 페어링 시키고 ON / OFF 제어에 성공한 모습입니다. 

 

아래 이미지는 도어 솔레노이드(릴레이) 기기와 페어링 시키고 도어문 개폐 제어에 성공한 모습입니다. 

 

모두 잘 작동하고 있습니다.

 

여기까지 Nano33 ioT 보드에서 제공되는 저전력 블루투스(BLE) 기능을 이용한 제어 시스템 학습 안내를 마무리하도록 하겠습니다. 

감사합니다.

 

 

 

【동영상으로 학습하기】

https://youtu.be/vKGKb-h59sA

 

반응형
반응형

3회에 걸쳐 Nano33 ioT 보드의 BLE 저전력 블루투스를 사용하는 다양한 방법에 대해 다루고 있습니다.  아두이노 나노33 보드시리즈는 콤팩트하면서 사용법이 아두이노 우노(나노)와 거의 동일하여 쉽게 접근가능하고 여기에 더해 WiFi기능과 저전력 블루투스 기능을 활용할 수 있는 매우 장점이 큰 보드입니다. 다만 유사한 기능을 제공하는 ESP32 보드에 비해 단가가 조금 나가는 단점이 있지만 아두이노 정품 보드의 정통성?을 이어받아 안정적이고 불량률이 거의 없다는 점이 장점인 보드입니다.  기본적인 스펙과 사용법은 아래, 이전 게시글을 참고하시면 상세하게 파악할 수 있으니 참고해 보세요.

【 Nano33 IoT 선수학습 】

1. 【 아두이노Nano33#1】 NANO 33 IoT 처음사용 설명서

2. 【 아두이노Nano33#1-2】 NANO 33 IoT 처음사용 설명서 #1-2 (LSM6DS3 센서 테스트) (자이로센서 등등)

3. 【 아두이노Nano33#2】 NANO 33 IoT 처음사용 설명서 2편 WiFi 활용하기

4. 【 아두이노Nano33#3】 NANO 33 IoT BLE 저전력 블루투스 사용설명서 #1 (BLE로 LED & 서보모터 제어하기)

 

1편에서는 BLE와 UUID가 무엇인지? 통신하는 방식에 대해 알아보았고BLE를 이용해서 LED와 서보모터를 간단히 제어해 보았습니다. 

이번 2편에서는 BLE 통신으로 릴레이 모듈을 이용한 도어 솔레노이드를 제어해 보겠습니다.
아울러 사실감을 주기 위해 미니어처 도어를 3D프린팅 하여 보여드리려고 합니다.
다음 3편에서는 스마트폰으로 제어해 볼 수 있도록 앱인벤터를 활용하는 것까지 다루어 보겠습니다.
사전 준비로 Nano33 ioT 보드를 사용하기 위한 환경 설정과 예시 코드는 1편을 참고해 주세요.

【 학습 목표 】

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하기
      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)
      ② Nano33 BLE  스캔과 페어링
      ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기
      ④ 서보모터 스위치로 제어하기

<2 편> 블루투스로 도어(Door 문)  잠금장치(솔레노이드) 열고 닫기
      ① 주요 부품 소개 ( 솔레노이드 / 솔레노이드 잠금걸쇠 / 릴레이 )
      ② 도어 미니어처 제작 (3D 모델링과 3D 프린팅)
      ③ 블루투스(BLE)로 도어 열고 닫기

<3 편> 앱 인벤터(App Inventor) 만들고 스마트폰으로 도어 열고 닫기
      ① nRF Connect 앱 활용해 보기 (LED 기본 제어)
      ② 블루투스 스캔 및 연결과 같은 기본 앱 기능 만들고 LED 제어해 보기
      ③ 앱 안정성 높이고 연결하려는 BLE장치 바로 연결시키기
      ④ LED 제어와 Door 제어 결합된 앱 만들기

 

< Nano33 ioT 스펙과 기본 정보 >

Nano33 보드 시리즈 스펙 정보

 

Nano33 시리즈 핀 배열

 

<2편>  Nano33 ioT 블루투스(BLE)로 도어록 솔레노이드 제어하기

 

【 실습 준비 】

이번 실습을 위해 필요한 준비물입니다. 아래와 같은 재료를 준비하면 실습을 진행할 수 있습니다.
스위치가 연결된 보드는 실습 1)의 재료와 연결이 같습니다. 

- Nano33 ioT 보드 X 2개 이상
- 브레드 보드(400핀 또는 840핀) X 2개 이상
- LED X 1개
- 저항 220옴(150Ω~470Ω 가능)  X 1개
- 저항 10K옴(4.7KΩ~10KΩ 가능)  X 1개
- 푸시 버튼(종류 모양 상관없음) X 1개 
- 도어록 솔레노이드 & 걸쇠 (모델명 SM1054, 12V, 0.6A  / 또는 6V SM1054S 원형헤드) X 1개
- 점퍼선(연결선) 또는 PCB헤더 X 한 묶음

 

 ① 주요 부품 소개 ( 도어록용 솔레노이드 2종 및 걸쇠 /  릴레이 / USB 다중 커넥터 & 5V 전원공급기 )

< 솔레노이드(도어록) 제품 규격 및 사이즈  >

 

또는 아래와 같은 제품도 사용해 볼 만합니다.  작동전압은 6V이며, 0.57A 전류를 소모합니다. 

 

 < 도어록용 걸쇠 >

 < 릴레이 >

( ※ 5V 출력이 지원되는 아두이노 우노/나노의 경우는 직접제어가 가능하지만 Nano33ioT 보드는 보드에 있는 특정핀의 납땜 등의 조치를 하지 않는 이상 3.3V의 출력만 사용할 수 있기 때문에 그 상태에서는 보드에서 릴레이 직접제어는 보드 손상을 초래할 수 있어 삼가야 합니다.)

실습에 사용된 릴레이는 5V입력 전원으로 동작되고 교류전원 250V 10A까지 제어되는 모듈입니다.

 릴레이 사용법 
 - 릴레이는 코일에 전류를 흘려 코일의 유도 작용에 의해 접점을 On / Off 해주는 스위치입니다. 
 - 이를 이용하면, 낮은 전압(예, 5V)으로 220V의 전원을 끊거나 연결시킬 수 있습니다.
 - 좌측 IN에 HIGH(또는 LOW) 신호가 가해지면 Com단자와 NO 단자가 연결되어 스위치 형태로 작동됩니다.
 - NC (Normal Close : 평상시 연결되어 있음)   
 - NO (Normal Open : 평상시 열려 있음, 연결 끊어짐) 

  - NC단자와 Com 단자가 디폴트로 연결되어 있고, 릴레이가 동작이 되면 이 연결이 끊어지고,
    Com단자가 NO단자와 연결이 됩니다. 이 부분을 전기제품이나 콘센트의 한쪽 부분의 연결을 끊어 
    스위치 형태로 구성할 수 있습니다.

 

※ 릴레이는 작동 방법에 따라 두 가지 종류가 있습니다.   신호(Signal) 라인 In으로 High 신호가 입력되면 작동(Trigger)되는 High Level Trigger 타입이 있고,   Low 신호가 입력되면 작동되는 Low Level Trigger 타입이 있습니다. 
보통 High Level Trigger 타입을 사용하면 좀 더 직관적으로 편하게 사용할 수 있습니다.   이 번 실습에도 High Level Trigger 타입의 릴레이를 사용하고 있습니다. 

 

통신을 위해서는 송수신 회로가 필요한데,  BLE통신에서는 중앙회로(Central-버튼 회로)와 주변회로(Peripheral-릴레이 솔레노이드 회로)로 부르며,  버튼이 들어간 중앙회로는 지난 1편의 회로와 동일하기 때문에 이번 편에서는 솔레노이드 회로(Peripheral) 제작만 설명드리겠습니다.  1편의 내용을 보고 버튼회로도 함께 준비해 주세요.
우선, 버튼회로 도면을 보여드리면 아래와 같습니다.


아래가, 솔레노이드가 연결된 릴레이회로 도면입니다.

이번 실습에서는 어느 정도 크기가 있는 솔레노이드는 12V 정도를 사용하는데요.  이 것을 아두이노 보드 출력으로 직접 제어하기는 어렵기 때문에 릴레이라는 모듈을 사용합니다. 
이번 실습에 사용될 솔레노이드는 DC12V 정격입력이지만, 구하기 쉬운 9V건전지와 7.4V 리튬폴리머 배터리를 사용해 볼게요.  솔레노이드에 다이오드를 연결해 놓았는데, 코일로 구성된 부품은 작동 시 역기전력이 발생하는데요. 이로부터 회로를 보호하기 위한 부품으로 되도록 연결해 주는 것이 좋습니다. 

비교적 구하기 쉬운 9V 4각 건전지로 솔레노이드 동작을 위한 전원 연결한 모습
RC카 등에 많이 사용되는 7.2V 리튬폴리머 배터리로 솔레노이드를 동작시키는 모습


이번 회로에서는 전원이 3가지나 들어가는데요(위 그림 참조), 아두이노 3.3v 출력 단자로 릴레이 전원을 대체하려고 한다면 Nano보드가 손상될 수 있으니 주의해 주세요!

그리고 종류가 다른 전원들을 하나의 회로에 사용하고자 할 때는 GND(-)는 모두 연결해 주어야 합니다. 

[ 동작을 위한 아두이노 코드입니다. ]

버튼회로 코드는 아두이노 IDE의  ArduinoBLE》Central 》LedControl 예제를 기본으로 해서 수정 사용합니다.

< 버튼회로 (중앙장치 Central) 코드 >

/*  Relay Control Central (버튼이 있는 회로) Client */

#include <ArduinoBLE.h>

// variables for button
const int buttonPin = 2;
int oldButtonState = LOW;

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요
//  while (!Serial);    

  // configure the button pin as input
  pinMode(buttonPin, INPUT);

  // initialize the Bluetooth® Low Energy hardware
  BLE.begin();

  Serial.println("Bluetooth® Low Energy Central - RELAY control");

  // start scanning for peripherals
  BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}

void loop() {
  // check if a peripheral has been discovered
  BLEDevice peripheral = BLE.available();

  if (peripheral) {
    // discovered a peripheral, print out address, local name, and advertised service
    Serial.print("Found ");
    Serial.print(peripheral.address());
    Serial.print(" '");
    Serial.print(peripheral.localName());
    Serial.print("' ");
    Serial.print(peripheral.advertisedServiceUuid());
    Serial.println();

    if (peripheral.localName() != "RELAY") {
      return;
    }

    // stop scanning
    BLE.stopScan();

    controlRelay(peripheral);

    // peripheral disconnected, start scanning again
    BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
  }
}

void controlRelay(BLEDevice peripheral) {
  // connect to the peripheral
  Serial.println("Connecting ...");

  if (peripheral.connect()) {
    Serial.println("Connected");
  } else {
    Serial.println("Failed to connect!");
    return;
  }

  // discover peripheral attributes
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("Attributes discovered");
  } else {
    Serial.println("Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }

  // retrieve the Relay characteristic
  BLECharacteristic relayCharacteristic = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");

  if (!relayCharacteristic) {
    Serial.println("Peripheral does not have RELAY characteristic!");
    peripheral.disconnect();
    return;
  } else if (!relayCharacteristic.canWrite()) {
    Serial.println("Peripheral does not have a writable RELAY characteristic!");
    peripheral.disconnect();
    return;
  }

  while (peripheral.connected()) {
    // while the peripheral is connected

    // read the button pin
    int buttonState = digitalRead(buttonPin);

    if (oldButtonState != buttonState) {
      // button changed
      oldButtonState = buttonState;

      if (buttonState) {
        Serial.println("button pressed");

        // button is pressed, write 0x01 to turn the LED on
        relayCharacteristic.writeValue((byte)0x01);
      } else {
        Serial.println("button released");

        // button is released, write 0x00 to turn the LED off
        relayCharacteristic.writeValue((byte)0x00);
      }
    }
  }

  Serial.println("Peripheral disconnected");
}

 

릴레이회로 코드는 1편에서 사용하였던 ArduinoBLE》Peripheral 》LED 예제를 사용하면 됩니다.

< 릴레이회로 (주변장치 Peripheral) 코드 >

/*  Relay Peripheral (Relay가 연결된 회로)  Server */

#include <ArduinoBLE.h>

BLEService relayService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy RELAY Service

// Bluetooth® Low Energy RELAY Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int relayPin = 2; // pin to use for the Relay

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요
//  while (!Serial);    

  // set RELAY pin to output mode
  pinMode(relayPin, OUTPUT);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");

    while (1);     // BLE 서비스가 시작될 때까지 무한 루프
  }

  // set advertised local name and service UUID:
  BLE.setLocalName("RELAY");
  BLE.setAdvertisedService(relayService);

  // add the characteristic to the service
  relayService.addCharacteristic(switchCharacteristic);

  // add service
  BLE.addService(relayService);

  // set the initial value for the characeristic:
  switchCharacteristic.writeValue(0);

  // start advertising
  BLE.advertise();

  Serial.println("BLE RELAY Peripheral");
}

void loop() {
  // listen for Bluetooth® Low Energy peripherals to connect:
  BLEDevice central = BLE.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) {
      // if the remote device wrote to the characteristic,
      // use the value to control the RELAY:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("Relay on");
          digitalWrite(relayPin, HIGH);         // will turn the LED on
        } else {                              // a 0 value
          Serial.println(F("Relay off"));
          digitalWrite(relayPin, LOW);          // will turn the LED off
        }
      }
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}


< 코드 다운로드 >
위 두 가지 코드를 압축하였으니 다운로드하여 사용해 보세요. 

03. Relay.zip
0.00MB

 

코드 내용을 살펴보면 릴레이가 연결된 핀 번호를 정확하게 적어주어야 합니다. 
그리고 사용할 서비스 UUID와 특성 UUID를 예시에 있는 것 말고 다른 번호로 변경하고 싶다면 아래 UUID 생성 사이트를 이용하세요 uuidgenerator.net  또는 http://www.uuidtools.com 사이트를 이용하면 됩니다.

물론, 기본 예제에 제시된 UUID를 그대로 사용해도 됩니다

setLocalName을 “RELAY”로 하였는데요,  중요한 것은 버튼회로(Central)의 setLocalName과 일치시켜야 합니다.

즉, 연결하고자 하는 회로별로 로컬 네임을 설정해 주면 되는데요,  서로 로컬 네임이 일치하는 기기끼리 페어링 되도록 코딩되어 있습니다 (UUID 포함)

Central 코드도 서비스 이름과 로컬네임만 RERAY로 변경해 놓았습니다. 

 

< 도어 미니어처 제작 >

이번 실습에서는 좀 더 사실감을 주기 위해 3D 프린터로 미니 도어를 만들어 보았습니다 도어 모델링에 사용한 툴은 Fusion360입니다

사이즈는  ( 가로 160mm X 높이 185mm ), 바닥 ( 160mm x 130mm ), 두께 5mm입니다

그리고 문에 사용할 경첩을 따로 설계했습니다

경첩의 홀은  M3 x 8mm 나사를 기준으로 제작했습니다

문의 솔레노이드 고정과 걸쇠 고정 홈은  M2 x 5mm 나사를 기준으로 제작했습니다

 

경첩을 문위에 맞대어 보면 아래와 같습니다.  치수가 정확하게 일치하도록 제작했습니다.

 출력은 문과 경첩 각각 따로 하도록 하였습니다. 

※ 만약 출력한다면 슬라이서 프로그램에서 내부채움(Infill)은 70% 이상 권해드립니다 (출력물을 떨어뜨렸을 때 쉽게 부서지지 않도록)
슬라이서 프로그램으로 슬라이싱 할 수 있는 STL파일(도어와 경첩)을 아래 압축하여 올려드립니다. 

도어와 경첩 STL 파일.zip
0.10MB

미니어처 모형은 아래처럼 잘 출력되었습니다. 

그리고 여기에 솔레노이드와 걸쇠 그리고 경첩까지 달아 놓은 모습입니다. 

도어 미니어처에 솔레노이드와 걸쇠를 달아 놓은 모습입니다
도어 미니어처에 경첩을 달아 놓은 모습입니다

 

< 솔레노이드 >

 

솔레노이드도 크기와 작동 전압 범위에 따라 몇 가지 종류가 있습니다.

작동 방식은 전선에 직류 전기를 넣으면 코일에 발생된 자기장에 의해 쇠뭉치가 전진하고, 입력 전기가 없으면 자기장이 소멸되어 스프링에 의해 원위치로 돌아오는 원리로 작동됩니다. 

실습에 사용된 도어형 솔레노이드도 위 사진의 아래쪽에 있는 솔레노이드에 케이스를 씌운 형태입니다

 

 < 다중 전원 공급기 >

이번 실습에서 5V전원을 많이 사용하기 때문에 USB 다중 전원공급기를 만들어 보았습니다
실습에 반드시 필요한 것은 아니기 때문에 참고용으로 봐주세요.

접지선이 있고 두께가 비교적 굵은(16A) 전원 케이블을 잘라 연결해 주었습니다. 

 규격은 전원코드에 표시되어 있으니 확인해 보고 비교적 여유 있는 전원코드를 사용하면 좋습니다.

아래 노란 원으로 표시된 부분을 연결할 때는 선을 잡아당겼을 때 쉽게 풀리지 않도록 단단히 고정해야 하며 합선되지 않도록 주의해야 합니다 그리고 감전될 수 있기 때문에 보호 케이스를 씌어 주거나 추가 조치를 해주는 것이 좋습니다. 

 

파워는 소형의 5V-5A 출력의 파워를 사용했습니다.  나노보드 4개 및 릴레이전원 공급 등 이 실습에는 충분히 사용하고도 남는 용량입니다. 

Nano 보드를 한 번에 많이 연결하기 위해 USB A-Femail 타입의 커넥터를 연결된 상태로 사용했고요.

커넥터에는 데이터 연결은 필요 없으니 양 끝에 있는 +단자와 -단자만 서로 연결해 주면 됩니다

그리고 바닥면이 합선이 되지 않도록 캡톤(내열) 테이프로 감싸주었습니다

추가로 스위치를 달아 개별로 켜고 끌 수 있도록 하였습니다 

그럼, 버튼회로와 릴레이 회로를 준비해 연결해 보세요.

릴레이에 5V를 공급하기 위해 마이크로 USB 케이블 커넥터를 연결해 보았습니다

※ 항상 + , - 극성에 주의해서 연결해 주세요. (보드 및 부품 손상 방지)

이 실습에서 솔레노이드용 전원으로 9V 건전지가 사용하기 제일 간편하지만, 용량도 적고 출력 전류가 낮은 타입이어서 실물 제작에 적용하기에는 적합하지 않으니 참고하세요.

그리고 동작을 시켜보면,  잘 작동하는 것을 알 수 있습니다.   그럼, 다른 전원도 테스트해 볼게요 현재 솔레노이드가 12V 용이지만 작동되는 힘은 약해도 9V건전지와 7.2V 리튬배터리도 역시 잘 작동하는 것을 볼 수 있습니다.

그럼, 1편에서 사용했던 LED회로와 서보회로를 모두 연결해 볼게요.  아래는 개별로 스위치를 켜고 끄면서 작동을 원하는 장치끼리 페어링 하여 제어해 본 것이고요,  이렇게 하기 위해서는 버튼(중앙장치) 회로의 코드에 있는 SetLocalName="    " 이름을 연결하려고 하는 각각의 이름,  예를 들어 "LED" , "SERVO" ,  "RELAY" 등으로 수정하여 매번 업로드해주어야 페어링 됩니다. 

그리고 여기서부터는 번갈아 가며 3가지 주변회로에 페어링 될 수 있도록코드 속의 LocalName을 “MULTI”로 통일하였으니 참고하세요.  즉 모든 코드의 SetLocalName="MULTI"로 통일하였습니다.  그렇지 않으면 번갈아가며 페어링 하기 위해서는 매번 중앙장치의 코드의 SetLocalName을 바꾸어 업로드해야 하기 때문이죠.

우선 버튼 회로부터 전원을 ON 합니다.  다음, LED 회로를 ON 하고 버튼을 눌러보면 빠르게 페어링 되어 LED가 제어되는 것을 볼 수 있고,  그다음, LED회로는 OFF 하고 서보회로를 ON 하여 페어링 시켜보면 릴레이 회로도 페어링 되어 잘 작동하는 것을 볼 수 있습니다. 
 학습용으로 활용할 수 있도록 네 가지 회로를 아크릴판에 올려봤습니다. 

스위치를 개별로 작동시켜 원하는 장치 간 페어링을 시켜 작동시킬 수도 있고, 
전원을 모두 ON 하고 랜덤으로 페어링 하여 작동시켜 볼 수도 있습니다.   그래서 
기존 페어링을 끊으려고 하려면,  보드에 있는 리셋 버튼을 눌러주면 됩니다.  해당 보드가 리셋되는 사이 랜덤으로 주변에 있는 다른 보드와 다시 페어링 됩니다. 

다음 3편에서는 앱인벤터를 활용하여 (BLE방식으로) 스마트폰으로 작동시켜 볼게요. 

감사합니다.

아래 유튜브 영상도 함께 참고하면 보다 수월하게 내용을 파악하실 수 있습니다. (아래 영상 클릭)

 

 

 

 

 

 

 

 

 

반응형
반응형

3회에 걸쳐 Nano33 ioT 보드의 BLE 저전력 블루투스를 사용하는 다양한 방법에 대해 다루고자 합니다.  아두이노 나노33 보드시리즈는 콤팩트하면서 사용법이 아두이노 우노(나노)와 유사하여 쉽게 접근가능하고 여기에 더해 WiFi기능과 저전력 블루투스 기능을 활용할 수 있는 매우 장점이 큰 보드입니다. 다만 유사한 기능을 제공하는 ESP32 보드에 비해 단가가 조금 나가는 단점이 있지만 아두이노 정품 보드의 정통성?을 이어받아 안정적이고 불량률이 거의 없다는 점이 장점인 보드입니다.  기본적인 스펙과 사용법은 아래, 이전 게시글을 참고하시면 상세하게 파악할 수 있으니 참고해 보세요.

【 Nano33 IoT 선수학습 】

1. 【 아두이노Nano33#1】 NANO 33 IoT 처음사용 설명서

2. 【 아두이노Nano33#1-2】 NANO 33 IoT 처음사용 설명서 #1-2 (LSM6DS3 센서 테스트) (자이로센서 등등)

3. 【 아두이노Nano33#2】 NANO 33 IoT 처음사용 설명서 2편 WiFi 활용하기

 

【 학습 목표 】

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하기
      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)
      ② Nano33 BLE  스캔과 페어링
      ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기
      ④ 서보모터 스위치로 제어하기

<2 편> 블루투스로 도어(Door 문)  잠금장치(솔레노이드) 열고 닫기
      ① 주요 부품 소개 ( 솔레노이드 / 솔레노이드 잠금걸쇠 / 릴레이 )
      ② 도어 미니어처 제작 (3D 모델링과 3D 프린팅)
      ③ 블루투스(BLE)로 도어 열고 닫기

<3 편> 앱 인벤터(App Inventor) 만들고 스마트폰으로 도어 열고 닫기
      ① nRF Connect 앱 활용해 보기 (LED 기본 제어)
      ② 블루투스 스캔 및 연결과 같은 기본 앱 기능 만들고 LED 제어해 보기
      ③ 앱 안정성 높이고 연결하려는 BLE장치 바로 연결시키기
      ④ LED 제어와 Door 제어 결합된 앱 만들기

 

< Nano33 ioT 스펙과 기본 정보 >

Nano33 보드 시리즈 스펙 정보

 

Nano33 시리즈 핀 배열

 

<1편>  Nano33 기본 환경설정과 BLE 페어링 후 스위치로 LED On/Off 제어하고 서보모터까지 하기


      ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)

   - UUID란 ? 
  UUID는 Universally Unique Identifier의 약자이며 범용의 고유 식별자를 의미합니다.  네트워크 상에서 고유성이 보장되는  id를 만들기 위한 표준 규약으로서, 서로 모르는 많은 개체들을 식별하고 구별하기 위해서는 거의 중복되지 않는 각각의 고유한 이름이 필요한데요, 이를 구현하기 위해 128비트(16바이트) 길이의 값을 사용합니다. 
128비트의 길이는 2진으로 표현하면 대략 아래 예시와 같습니다.

1110110100 0101001001 0101010010 1010101011 1110101001 1010101010 1110101010 1010101001 0101010101 0101010101 1010010011 1110101110 01110101

128비트는 경우의 수(가지 수)가 2의 128승 이므로,  이를 굳이 계산해보면, 340,282,366,920,938,463,463,374,607,431,768,211,456  라는 어마 어마한 가지 수가 나오기 때문에, 실제적으로 겹치지 않는 ID를 가질 수 있다고 할 수 있습니다.  더군다나,  범위가 제한적인 WiFi 혹은 BLE 블루투스 네트워크에서는 현실적으로 겹칠 수 없는 고유 ID를 가질 수 있다고 할 수 있습니다. 
( 비트 단위의 가지 수 이해를 돕기 위해, 또 다른 예시를 들자면,  인터넷 IP부족으로 인해 32비트의 IPv4를 대신하여 128비트의 주소 길이를 가진 IPv6가 나왔습니다. 
 ○ IPv4는   8비트씩 4부분으로 10진수로 표시 →   220.123.103.253  (약 43억 개)
 ○ IPv6는 16비트씩 8부분으로 16진수로 표시 →   2201:0123:1adc:ffff:253d:a3d2:bc34:67da  (43억X43억X43억X43억 개)
  따라서 IPv6의 주소 범위는 0000:0000:0000:0000:0000:0000:0000:0000에서 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff  이기 때문에 거의 무한대의 주소 개수를 사용할 수 있다고 할 수 있습니다) 

 그럼, 다시 UUID로 넘어와서,  그런데, 128비트나 되는 수를 2진수로 표현하면 너무 많은 자리 수를 차지하기에 이를 16진수로 표현하게 되는데요,  4비트가 각각 16진 한 자리를 차지하므로,  자리수로는 32자리가 되고 아래처럼 4개의 '-' 구분자를 넣어 표시하게 됩니다.  

19B10000-E8F2-537E-4F6C-D104768A1214    (8자리 - 4자리 - 4자리 - 4자리 - 12자리) 
'-' 구분자까지 포함하면 전체 자리 수는 36자리로 표현됩니다.

사실 UUID는 저전력 블루투스인 BLE 뿐 아니라, 데이터베이스, 시스템 인스턴스, JAVA5와 같은 코드에서 고유 식별자를 생성하기 위해 두루두루 사용되고 있습니다.  

UUID의 코드 구성은 아래와 같습니다. 

이미지 출처 :&nbsp;https://www.techtarget.com/searchapparchitecture/definition/UUID-Universal-Unique-Identifier

 UUID는 이런 규칙에 의해서 생성되기 때문에 동일한 UUID가 생성되어 충돌이 일어날 확률은 거의 0에 가깝다고 할 수 있습니다.   
 또한 UUID는 이런 규칙으로 생성시킬 수 있는 생성기(Generator)가 있으며,  대표적으로 아래 두 가지 사이트에서 제공되는 것을 많이 이용합니다. 
1.  온라인 UUID 제너레이터 :   https://www.uuidgenerator.net/  
2.  온라인 UUID 툴 : https://www.uuidtools.com/

위 사이트를 보면, UUID는 생성 방법에 따라 버전 1에서부터 버전 5까지 있는데요, 버전 1 또는 버전 4를 대표적으로 많이 사용합니다.  그래서 위 1 버전 또는 4 버전 둘 중 하나를 골라 생성 후 복사(copy)하여 사용하면 됩니다. 

<BLE 란?>
그럼 여기서 BLE에 대해 간략히 설명하자면,  BLE는  Bluetooth Low Energy의 약자로 기존 블루투스 통신의 약점인 소비전력을 크게 낮춘 블루투스 통신 방식이라 할 수 있습니다.  (Bluetooth LE로 표시하기도 함)
스마트워치나, 헬스케어 디바이스, 스마트폰과 연동되는 이어폰 및 다양한 기기 등, 배터리를 사용해야 하는 무선기기 간 통신이 늘어남에 따라 배터리 소모를 줄여줄 수 있는 기존 블루투스(Bluetooth Classic)를 개량한 통신형태가 필요했고 이에 나타난 것이 BLE 통신이라고 할 수 있습니다.  이런 과정에서 통신하고자 하는 기기간 식별을 위해 범용고유 ID식별 기술인 UUID 방식을 사용하고 있습니다. 

BLE 통신이 기존 블루투스 클래식(Bluetooth Class)에 비해 저전력인 이유는 기존 연결 방식은 연속적인 데이터 스트림으로 인해 지속적으로 전력을 소모하게 되는 반면에,   BLE는 동작 주기(duty cycle)가 수 밀리초(ms)로 가벼운 구동 방식을 취하며, 사용되지 않는 대부분 시간을 슬립 모드(sleep mode, 또는 절전모드)로 있어 전력 소모가 매우 적은 가장 큰 차이점이 있습니다. 
 그리고 2MHz의 대역폭을 사용하고 1Mbps의 전송 속도를 지원하지만 동작 주기가 짧아 평균 전송 속도를 낮출 수 있어  전력 효율을 향상할 수 있고 장치에 따라 배터리 교환 없이 1년 이상을 사용할 수도 있습니다.  따라서 저전력 블루투스 기술을 활용하면 전력소비를 크게 줄일 수 있는 통신 디바이스 또는 시스템을 구성할 수 있습니다.

기존 블루투스 클래식의 연결방식은 Master와 Slave의 방식으로 연결이 되는데요, Master가 Master 주변으로 주변에 있던 Salve에게 요청 신호를 넣고 슬레이브가 그에 응답한 뒤 페어링이 이루어지는 연결방식을 사용하고 있습니다. 

BLE 통신에서는 Central이라고 하는 Observer 역할의 중앙장치와 Peripheral이라고 하는 주변장치로 구분하여 통신하는데요, 
주변장치(Peripheral)가 주변에 일정간격으로 Advertise(일종의 라디오처럼 브로드캐스팅)하고 Central(옵저버-observer)이 스캔을 하여 페어링을 하게 되는 구조를 갖고 있습니다.  

이미지 출처 : Microchip
이미지 출처 : Microchip
이미지 출처 : Microchip

정리하자면, 
주변장치인 Advertiser (Broadcaster)는 Advertising Packet을 자신 주변으로 주기적으로 보내는 장치이며,
중앙장치인 Observer는  Advertiser가 보내고 있는 Advertising Packet을 듣기 위해 주기적으로 Scanning 하게 됩니다. 
그러다 연결하고자 하는 프로파일(Profile-서비스 묶음) 정보가 일치하게 되면 연결신호를 주고받고 승낙되면서 페어링 하게 됩니다.   이 과정에서 서비스 이름 및 특성(CHARACTERISTIC)과 UUID가 일치하는지 확인하게 됩니다. 

이미지 출처 : Random nerd tutorials lab


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【 실습 준비 】

이번 실습을 위해 필요한 준비물입니다. 아래와 같은 재료를 준비하면 실습을 진행할 수 있습니다.

- Nano33 ioT 보드 X 2개 이상
- 브레드 보드(400핀 또는 840핀) X 2개 이상
- LED X 1개
- 저항 220옴(150Ω~470Ω 가능)  X 1개
- 저항 10K옴(4.7KΩ~10KΩ 가능)  X 1개
- 푸시 버튼(종류 모양 상관없음) X 1개 
- 서보모터(SG90 또는 MG90) X 1개
- 점퍼선(연결선) 또는 PCB헤더 3핀 이상 X 한 묶음

 

  ① BLE(UUID)에 대한 이해와 nano33 BLE 사용을 위한 기본 환경 설정(보드&라이브러리 설치)

그럼, 이제 Arduino nano 33 ioT 모듈과 BLE를 사용기 위한 기본적인 환경설정을 해볼게요. 

우선, 아두이노 IDE에서 nano33 ioT 보드를 인식하기 위해서는 보드 관련 라이브러리를 설치해야 하는데요, 아래처럼 "보드라이브러리"에서(그냥 라이브러리 관리자가 아님에 주의!)  "nano 33"으로 검색한 후 아래 분홍색 점선 박스의 보드 라이브러리를 설치해 주세요. ( 좀 더 상세한 사용법은 이 글 맨 위에 있는 "[선수학습] Nano 33 ioT 처음사용설명서" 게시글 링크를 참고해 주세요)

 

설치 후에는 아래처럼, 새로운 보드 그룹이 생겨나며 Arduino NANO 33 IoT를 선택할 수 있습니다. 

다음, BLE 기능을 사용하기 위해서는 "라이브러리 관리자"에서 "arduinoble" 라이브러리를 설치해야 합니다.

 

      ② Nano33 BLE  스캔과 페어링

arduinoble 라이브러리를 설치하게 되면, 관련 예제 파일들이 설치되는데요,  예제 파일에는 BLE 라이브러리를 사용해서  블루투스를 활용할 수 있는 내용으로 구성되어 있어 이를 응용해 볼 수 있습니다. 

스캔파일의 내용은 아래와 같습니다

#include <ArduinoBLE.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");

    while (1);
  }

  Serial.println("Bluetooth® Low Energy Central scan");

  // start scanning for peripheral
  BLE.scan();
}

void loop() {
  // check if a peripheral has been discovered
  BLEDevice peripheral = BLE.available();

  if (peripheral) {
    // discovered a peripheral
    Serial.println("Discovered a peripheral");
    Serial.println("-----------------------");

    // print address
    Serial.print("Address: ");
    Serial.println(peripheral.address());

    // print the local name, if present
    if (peripheral.hasLocalName()) {
      Serial.print("Local Name: ");
      Serial.println(peripheral.localName());
    }

    // print the advertised service UUIDs, if present
    if (peripheral.hasAdvertisedServiceUuid()) {
      Serial.print("Service UUIDs: ");
      for (int i = 0; i < peripheral.advertisedServiceUuidCount(); i++) {
        Serial.print(peripheral.advertisedServiceUuid(i));
        Serial.print(" ");
      }
      Serial.println();
    }

    // print the RSSI
    Serial.print("RSSI: ");
    Serial.println(peripheral.rssi());

    Serial.println();
  }
}

Scan 파일은 아두이노 IDE의 예제 항목에 있지만, 필요한 경우 아래를 다운로드하여 압축을 풀고 사용해 보세요.

Scan.zip
0.00MB

특별한 회로 조립 없이 나노 33 보드만 PC와 연결하여 , 코드를 업로드하고 시리얼모니터 창을 열어보면, Nano33 보드 주변으로 블루투스 신호가 잡히는 것을 볼 수 있습니다. 

신호 중에는 일반 블루투스(클래식) 장치도 있고, UUID 서비스 이름과 UUID 고유번호가 보이는 BLE 장치도 검색된 것을 알 수 있습니다. 

 

 

    ③ Nano33 스위치회로와 LED회로 제작 후 블루투스(BLE)로 제어하기

< 1. LED 회로(주변장치-Peripheral) >

아래 연결도를 참고하여 주변장치(Peripheral)로 사용될 LED 회로를 준비해 주세요. 

[ 코드 - LED 회로 ]

./*  [ LED Peripheral (LED 회로)]  Server */

#include <ArduinoBLE.h>

BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy LED Service

// Bluetooth® Low Energy LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = LED_BUILTIN; // pin to use for the LED

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요 
  while (!Serial);    

  // set LED pin to output mode
  pinMode(ledPin, OUTPUT);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");

    while (1);     // BLE 서비스가 시작될 때까지 무한 루프
  }

  // set advertised local name and service UUID:
  BLE.setLocalName("LED");
  BLE.setAdvertisedService(ledService);

  // add the characteristic to the service
  ledService.addCharacteristic(switchCharacteristic);

  // add service
  BLE.addService(ledService);

  // set the initial value for the characeristic:
  switchCharacteristic.writeValue(0);

  // start advertising
  BLE.advertise();

  Serial.println("BLE LED Peripheral");
}

void loop() {
  // listen for Bluetooth® Low Energy peripherals to connect:
  BLEDevice central = BLE.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) {
      // if the remote device wrote to the characteristic,
      // use the value to control the LED:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("LED on");
          digitalWrite(ledPin, HIGH);         // will turn the LED on
        } else {                              // a 0 value
          Serial.println(F("LED off"));
          digitalWrite(ledPin, LOW);          // will turn the LED off
        }
      }
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

(LED회로 코드 다운로드하기)

LED_Prep_ok.zip
0.00MB

 

< 2. 스위치(S/W) 회로 (중앙장치-Central) >

아래 연결도를 참고하여 중앙장치(Central)로 사용될 버튼 회로를 준비해 주세요. 

[ 코드 - 스위치(S/W) 회로 ]

/*  LED Control Central (버튼이 있는 회로) Client */

#include <ArduinoBLE.h>

// variables for button
const int buttonPin = 2;
int oldButtonState = LOW;

void setup() {
  Serial.begin(9600);

// 아래 코드는 시리얼 포트가 준비될 때까지 무한 대기하게 됩니다.
// 따라서 시리얼모니터 사용 없이 동작시키고자 한다면 아랫부분을 반드시 주석 처리해 주세요 
  while (!Serial);    

  // configure the button pin as input
  pinMode(buttonPin, INPUT);

  // initialize the Bluetooth® Low Energy hardware
  BLE.begin();

  Serial.println("Bluetooth® Low Energy Central - LED control");

  // start scanning for peripherals
  BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}

void loop() {
  // check if a peripheral has been discovered
  BLEDevice peripheral = BLE.available();

  if (peripheral) {
    // discovered a peripheral, print out address, local name, and advertised service
    Serial.print("Found ");
    Serial.print(peripheral.address());
    Serial.print(" '");
    Serial.print(peripheral.localName());
    Serial.print("' ");
    Serial.print(peripheral.advertisedServiceUuid());
    Serial.println();

    if (peripheral.localName() != "LED") {
      return;
    }

    // stop scanning
    BLE.stopScan();

    controlLed(peripheral);

    // peripheral disconnected, start scanning again
    BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
  }
}

void controlLed(BLEDevice peripheral) {
  // connect to the peripheral
  Serial.println("Connecting ...");

  if (peripheral.connect()) {
    Serial.println("Connected");
  } else {
    Serial.println("Failed to connect!");
    return;
  }

  // discover peripheral attributes
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("Attributes discovered");
  } else {
    Serial.println("Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }

  // retrieve the LED characteristic
  BLECharacteristic ledCharacteristic = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");

  if (!ledCharacteristic) {
    Serial.println("Peripheral does not have LED characteristic!");
    peripheral.disconnect();
    return;
  } else if (!ledCharacteristic.canWrite()) {
    Serial.println("Peripheral does not have a writable LED characteristic!");
    peripheral.disconnect();
    return;
  }

  while (peripheral.connected()) {
    // while the peripheral is connected

    // read the button pin
    int buttonState = digitalRead(buttonPin);

    if (oldButtonState != buttonState) {
      // button changed
      oldButtonState = buttonState;

      if (buttonState) {
        Serial.println("button pressed");

        // button is pressed, write 0x01 to turn the LED on
        ledCharacteristic.writeValue((byte)0x01);
      } else {
        Serial.println("button released");

        // button is released, write 0x00 to turn the LED off
        ledCharacteristic.writeValue((byte)0x00);
      }
    }
  }

  Serial.println("Peripheral disconnected");
}

(스위치 회로 코드 다운로드하기)

LedControl_Cent.zip
0.00MB

 

 아래는 두 회로를 실제로 조립한 모습입니다.

나노33 BLE 주변장치회로(LED)와 중앙장치회로(스위치)

 

작업의 편의상 하나의 PC에 두 대의 아두이노를 연결하여 작업할 텐데요.

장치관리자를 열어서 연결된 포트를 확인하면 편합니다. (포트 번호는 PC에 따라 Nano33 보드에 따라 기본적으로 랜덤으로 할당됩니다.  다만 인식한 포트 번호에 마우스 우클릭 후 고급탭으로 들어가서 아래처럼 번호를 변경해 줄 수도 있습니다. )

아두이노 보드 연결 포트 번호 변경하는 방법

 

그리고, 하나의 PC에 아두이노 두 대를 연결해서 시리얼 모니터 통신을 하려면, 아두이노 IDE 상에서 nano33 보드가 각각 포트를 다르게 인식하도록 해야 하는데요,  만약, 코드 하나를 열고서 그 IDE에서 예제를 클릭하거나 열기로 불러오게 되면
  두 개의 아두이노가 같은 포트로 인식되어 시리얼 모니터를 이용한 통신이 안 됩니다.

우선 첫 번째 예제로 Central 항목에 있는 “LedControl” 파일을 열어주세요. 
앞서 설명한 대로 두 번째 예제 파일은 Arduino IDE 프로그램을 새로 실행시켜서 열어주세요.
두 번째 파일은 새로 실행된 IDE의 예제에서 Peripheral 항목에 있는 “LED” 파일을 열어주세요.

이때 각각의 nano33이 인식되는 포트가 다르게 어디로 할당되는지 확인해 주세요.

현재 LedControl 코드는 버튼 회로에 업로드해야 하기에 버튼이 있는 나노의 포트로 선택하세요.
마찬가지로 LED 코드는 LED가 연결된 회로에 업로드하기 위해 LED가 있는 나노를 선택하세요.
그리고 각각 코드를 업로드해줍니다.


두 개의 나노보드의 포트를 하나의 PC에서 각각 다르게 인식시키는 확실한 방법은,  해당 아두이노 코드를 각각 저장하고, 각각의 코드를 직접 더블 클릭해서 열면 됩니다. 

일단, 코드를 업로드해보세요,  그리고 바로 버튼을 눌러보세요.   그럼,  동작이 안 될 거예요.  
그리고 ' LedControl' 코드와 'LED'코드의 IDE에서 시리얼모니터를 각각 열어보세요. 그럼, 서로 페어링 되는 내용이 표시되고,  그런 다음 동작시켜 보면 아래처럼 동작이 잘 될 거예요.

 

여기서 다시, 시리얼(모니터) 통신 없이 전원을 연결하여 테스트해보면, 페이링이 되지 않고 동작도 되지 않을 거예요.
 
 그 이유는 LedControl 코드와 LED 코드에 기본적으로 아두이노 IDE의 시리얼 모니터가 열려야 동작되도록 하는 코드가 들어 있어 그렇습니다. 
아래 이미지에 보면,  while ( !Serial );  이라는 코드로 인해, 시리얼 모니터가 열리지 않을 경우 그다음라인으로 넘어가지 않도록 되어 있기 때문인데요,   이 부분을 주석처리하게 되면,   나노 33 보드들에 전원을 연결만 하게 되면 바로 페어링 되어 동작이 가능한 상태가 됩니다. 

주석처리 →    //  while ( !Serial );


이후 코드를 재업로드하고 테스트해 보면, 두 장치 모두 PC연결 없어도 페어링과 동작이 잘 됩니다. 

 

 ④ 서보모터 스위치로 제어하기

그럼 이제 두 번째 실습으로 버튼으로 서보모터를 구동시켜 보도록 하겠습니다.

아래 보이는 연결도를 참고하여 두 번째 회로를 준비해 주세요. 

[ 코드 - 서보모터 Peripheral 회로용 코드 ]

/*  Servo Peripheral (서보 회로)  Server */

#include <ArduinoBLE.h>
#include <Servo.h>    // 서보 라이브러리를 지정
#define servoPin 3    // 서보 모터핀을 지정
Servo myservo;          // 서보 라이브러리 객체를 선언
int pos=0;            // 현재 각도를 저장할 변수를 지정한다

BLEService myservoService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy Servo Service

// Bluetooth® Low Energy LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEByteCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

// const int ledPin = LED_BUILTIN; // pin to use for the LED

void setup() {
  Serial.begin(9600);
//  while (!Serial);    
  
  myservo.attach(servoPin);   // 서보모터 핀을 설정한다
//  pinMode(ledPin, OUTPUT);

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetooth® Low Energy module failed!");
    while (1);     // BLE 서비스가 시작될 때까지 무한 루프
  }

  // set advertised local name and service UUID:
  BLE.setLocalName("SERVO");
  BLE.setAdvertisedService(myservoService);

  // add the characteristic to the service
  myservoService.addCharacteristic(switchCharacteristic);

  // add service
  BLE.addService(myservoService);

  // set the initial value for the characeristic:
  switchCharacteristic.writeValue(0);

  // start advertising
  BLE.advertise();

  Serial.println("BLE Servo Peripheral");
}

void loop() {
  // listen for Bluetooth® Low Energy peripherals to connect:
  BLEDevice central = BLE.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) { 
      // if the remote device wrote to the characteristic,
      // use the value to control the LED:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("Servo turn on");
              myservo.write(180);   // 서보모터의 각도를 변경한다              
              delay(500); // 서보 모터의 각도가 변하는 것을 기다려 준다. 

              myservo.write(0);   // 서보모터의 각도를 변경한다              
              delay(500); // 서보 모터의 각도가 변하는 것을 기다려 준다.                  
        }
      }
          Serial.println(F("Servo turn off"));
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

( 서보모터 회로용(Peripheral) 코드 다운로드 하기)

Servo_Prep.zip
0.00MB

 

이번 실습의 서보모터용 코드는 아두이노 코드는 ArduinoBLE 라이브러리를 사용한 예제 파일들을 베이스로 해서 서보모터 제어에 필요한 부분만 추가해 넣어주면 됩니다.   그리고 다른 부품이나 모듈을 사용한 응용실습을 하려 할 때도 이렇게 기존 예제 파일을 수정해서 작성하면 됩니다.

여기서,  버튼 회로는 실습 1과 동일한 Central 항목에 있는 “LedControl” 파일을 그대로 사용합니다. 
두 번째 서보회로 파일은 Peripheral 항목에 있는 “LED” 파일에서 서보모터 구동을 위한 코드를 추가해 주면 서보모터를 쉽게 제어할 수 있습니다. 

 

서보모터 사용에 대한 관련 자료는 아래 링크를 참고해 보세요.

【 아두이노 기초 】 #23 서보 모터 제어 1

【 아두이노 기초 】 #28 서보(Servo) 모터 제어 하기 1

【 아두이노 기초 】 #29 서보(Servo) 모터 제어 하기 2

【 아두이노 기초 】 #30 서보(Servo) 모터 제어 하기 응용

 

서보모터(SG90/MG90 모델)는 동작 전압이 4.8~6V인데,  보통 5V 정도를 별도로 공급해 주는 것이 좋습니다. 
영상에서는 임시로 나노보드의 3.3V 출력 단자로 연결하여 테스트해 본 것인데요. 
만약 모터에 부하가 가해질 경우 나노보드가 손상될 수 있으니 꼭 별도의 전원으로 동작시켜주세요. 
그리고,  실습이 아니라 실제 응용을 하고자 한다면, SG90보다 안정성이 좀 더 좋은 MG90 서보를 사용하는 것을 권해드리고,  동작 토크가 더 필요하다면 MG996R과 같은 하이토크 모델급 이상을 사용하는 것이 좋을 거예요.   또한 작동 범위(각도)도  90도, 180도 360도 등 다양하게 있으니 사용 목적에 맞는 서보모터를 선택하면 됩니다. 

그리고 서보모터를 브레드보드에 연결하기 위해서는 이런 PCB헤더라고 하는 핀을 사용하거나, 가지고 있는 점퍼케이블로 양쪽을 연결해 주면 됩니다.  
그럼 통신포트를 확인하고 서보모터 회로에 코드를 업로드해 주세요.  
이제 버튼을 눌러보면 잘 동작하는 것을 볼 수 있습니다. 

블루투스(BLE) 무선으로 서보모터 제어하기

그럼 이제 아래처럼, PC 연결을 제외하고 외부 전원 연결로 동작이 잘 되는지 테스트해 보세요. 

그럼 여기서 서보모터에 별도의 전원을 연결해 볼게요

이때 그라운드(GND)는 모두 동일하게 묶어주어야 합니다. 

그럼 아주 활기 있게 움직이며, 이 때는 서보모터에 부하가 어느 정도 걸려도 잘 동작될 거예요.

 

그리고 아래 이미지처럼, 무선 전원으로 9V 배터리를 연결해서도 동작이 잘 되는 것을 볼 수 있습니다. 

실습 #1 BLE로 LED와 서보모터 제어는 여기까지고요, 
다음 #2편 영상에서는 도어록 솔레노이드를 블루투스(BLE)로 제어해 보겠습니다. 

마지막으로 아래 실습 강의 영상과 함께 학습하시면 내용이해에 도움이 될 것으로 생각됩니다. 
감사합니다.  
https://youtu.be/eePGckOYSZs

 

반응형
반응형

안녕하세요. 
라즈이노 ioT입니다.

이번 시간에는 Blynk2.0 업그레이드 강의 세 번째 시간으로 Nano 보드에 ESP01 WiFi 모듈을 연결하여 LED와 LED 전등 & 콘센트 제어를 통한 가전기기들을 제어해 보도록 하겠습니다. 
보드의 입출력 포트에 연결된 LED제어는 물론이고, 릴레이를 사용하면, 220V 전기를 사용하는 LED 전등 제어도 가능합니다. 뿐만 아니라, 릴레이 모듈을 Outlet 콘센트에 직접 연결해 놓으면 220V 전기를 사용하는 대부분의 가전제품을 On/Off 제어할 수 있습니다. 

그리고 더 놀라운 것은 스마트폰의 앱에서만 아니라 Blynk2.0으로 업그레이드되어 웹 접속이 되는 어느 곳이든 웹페이지에서도 실시간으로 제어하고 상태를 확인 할 수 있게 되었습니다. 
더구나, 블링크(Blynk)는 시스템을 구축하기 위해 어렵고 복잡한 코딩이 필요치 않기에 누구나 손 쉽고 빠르게,  자신이 원하는 IoT 시스템을 만들 수 있어 매우 좋습니다. 

그럼, 이번 영상을 통해 자신만의 IoT 시스템을 재미있게 만들어 보세요~!

참고로, 이 프로젝트를 위해서는 더보기에 링크해 드리는 두 개의 필수 영상을 함께 참고해야 합니다. 

 

【 실습을 위한 사전 학습 자료 】


① #1 실습1) 펌웨어업뎃 & Blynk실습,  LED On/Off  WiFi 제어하기! 1편
    - 유튜브 자료 : https://youtu.be/-NdOR-hsR_4
    - 블로그 자료 : https://rasino.tistory.com/335
② #5 실습5) ESP01WiFi로 '220V 전등/가전기기' 제어하기! 
   -  유튜브 자료 : https://youtu.be/JfF4oPhn_gA
    - 블로그 자료 : https://rasino.tistory.com/335

【 Blynk Cloud  Off Line & "Invalid auth token" error 에러 해결방법 】

  - https://rasino.tistory.com/350

 【  블링크2.0에서 기존 프로젝트(템플릿) 삭제하는 방법 /Delete Templates】

  - https://rasino.tistory.com/352   

 

【 이번 영상에서의 주요 목차 】

 ①  이 번 실습의 결과물
 ②  실습의 준비
 ③  회로 실습을 위한 연결 도면
 ④  실습을 위한 아두이노 IDE 필수 라이브러리 설치
 ⑤  실습 예제 파일과 코드 해설
 ⑥  Blynk 2.0  웹 대시보드(Web Dashboard) 만들기 (DataStream & Web Dashboard)
 ⑦  아두이노 코드 토큰(Auth Token) 값 수정 후 업로드 하기
 ⑧  WiFi 핫스팟 연결하여 동작시키기
 ⑨  APP(앱) 제어 화면 만들기 & 동작
 ⑩  Outlet 콘센트로 가전기기(선풍기 예시) 제어해 보기
 ⑪  최종 완성된 작품 두 가지를 하나의 앱과 웹에서 함께 동작시켜 보기

 

【 ①  이 번 실습의 결과물 】

 

【  ②~③ 실습 준비와 회로 실습용 연결 도면 】

실습에 사용될 부품에 대한 자세한 내용은 아래 링크를 참고해 주세요
아래는 실습을 위한 연결 도면입니다. 

여기서는 ESP01-전용 어댑터를 이용해서 실습하게 되는데요,  만약, 이 어댑터가 없다면, 앞서 소개드린 영상이나,
아래  링크를 참고하면, 다른 방법으로도 해결할 수 있어요.
#Blynk+Nano+Esp-01 풀코스 학습자료 : https://rasino.tistory.com/335
어댑터 모듈뿐 아니라 릴레이 모듈이나 다른 부품에 대해서도 상세한 설명이 나와 있으니 꼭 참고해 보세요. 

 

【 ④  실습을 위한 아두이노 IDE 필수 라이브러리 설치】

아두이노 IDE의 "라이브러리 매니저"창에서 아래와 같이 'blynk'로 검색하여 라이브러리를 설치해 주세요.

 

【 ⑤  실습 예제 파일과 코드 해설 】

그럼, 나노 보드에 업로드할 코드에 대해 설명드릴게요.  먼저, Blynk 라이브러리를 설치하게 되면, Blynk 관련 예제 파일들이 설치되는데요, 화면에 보이는 ‘ESP8266_Shield’ 예제 파일을 열어서 약간만 수정하면 됩니다. 


코드의 크기가 한 페이지도 안 되는 코드로 IoT 작품을 만들 수 있다니 정말 놀랍습니다. 

중요한 점 몇 가지만 설명드릴 텐데요, 
뒤에 나오는 Blynk Cloud에서 설정을 통해 얻게 되는 TEMPLATE ID와 NAME, AUTH TOKEN 값들을 이 부분에 복사, 붙여 넣기 해야 합니다. 
그리고 이 값들은 Blynk 관련 라이브러리보다 위쪽에 배치해야 하는데요, 그렇지 않을 경우 Blynk2.0 서버가 아닌 이전(Legacy) 서버로 접속되어 제어되지 않게 됩니다. 하지만 그렇게 배치했음에도 불구하고 “Invalid auth token”에러를 계속 표시하며 서버로 접속되지 않을 때는 기존 예제 코드에서 이 부분, “blynk.cloud”, 80을 추가해 주면 해결됩니다.

이 부분에는 여러분이 접속 가능한 주변 WiFi 혹은 스마트폰의 핫스팟 ID와 패스워드를 입력하세요.

그리고,  SoftwareSerial EspSerial(7,6) 이 부분에는
나노에 연결된 ESP01 어댑터 모듈의 소프트웨어 시리얼 통신 핀 번호를 적어줍니다.
그리고, 여러분이 갖고 있는 esp01 모듈의 보-레이트(Boud-rate)를 정확히 적어주세요. 
#define ESP8266 BAUD 9600
이 보-레이트가 일치하지 않으면 WiFi 통신이 되지 않습니다. 
보-레이트를 알기 어렵다면, 9600 또는 115200 둘 중 하나로 해보세요. 
그럼 이제, 조립된 작품에 코드를 업로드하고,  Blynk.Cloud에서 웹 대시보드를 만들어 볼게요
코드는 앞서 안내해드린 것처럼, Blynk 라이브러리에 포함된 예제를 기본으로 조금 변경해 주면 되는데요,
아래가 편집된 코드 예시이니 참고하세요. 
우선 아래 코드를 다운로드하고 Template ID,  Auth Token , WiFi ID, 비번,  ESP01 보-레이트 등등을 수정하여 업로드하면 됩니다. 

//////////////////////////////////////////////////////////////////////////////////
// *** 라즈이노 IoT Blynk2.0 + Nano+ESP01 실습, 릴레이모듈+전등 제어하기 *** 
// 실습 : Blynk 2.0 시스템에 릴레이 모듈을 연결하고 LED 및 220V용 LED전등을 제어해 보기!
// 사용방법 및 추가 자료 다운로드 
// 게시글    :  https://rasino.tistory.com/  
// 유튜브영상 : https://www.youtube.com/channel/UClO79Cpq72VI63MwGi6VoQw
//////////////////////////////////////////////////////////////////////////////////
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLtjtKWif1"
#define BLYNK_DEVICE_NAME "Nano ESP01 LED Control"
#define BLYNK_AUTH_TOKEN "DamL2Z3CQqS4NbU0UAlxbk86uE5VjSlK"

#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>

char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "myGalaxy";
char pass[] = "12345678";    // 만약 패스워드 없는 WiFi라면,  ""로 입력하세요
#define EspSerial Serial1
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(7, 6); // RX, TX , 나노에 연결된 소프트웨어 시리얼 통신 단자.
// 중요! 여러분이 갖고 있는 ESP01 모듈의 펌웨어에 설정된 보드레이트에 맞추어야 합니다
// 보통의 경우는 9600 이며, 안 되면, 115200으로 해보세요.(esp01 펌웨어 버전에 따라 다름)
// esp01-펌웨어 업뎃 및 AT통신 설정 관련 된 사항 참고 : https://rasino.tistory.com/297
#define ESP8266_BAUD 9600

ESP8266 wifi(&EspSerial);

void setup()
{
// 아두이노 IDE의 시리얼 모니터와의 통신속도입니다. 아무속도나 상관 없음
  Serial.begin(9600);
  delay(10);
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
  Blynk.begin(auth, wifi, ssid, pass, "blynk.cloud",80);
}

void loop()
{
  Blynk.run();
}

Blynk 2.0 서버로 접속되지 않는 에러를 방지하기 위해, “blynk.cloud”, 80을 추가해 주세요.

《 코드 다운로드 》

Blynk2_ESP01_Relay_LED_Lamp.zip
0.00MB

Blynk를 이용하면, 보이는 것처럼, 아두이노 코드가 복잡하지 않아 매우 쉽게 작품을 구현할 수 있습니다.

【 ⑥  Blynk 2.0  웹 대시보드(Web Dashboard) 만들기 (DataStream & Web Dashboard) 】

그럼, 가입된 Blynk.Cloud 사이트에 접속 후 로그인하세요. 
아래 이미지처럼, 화면 메뉴 좌측에 보이는 Templates 메뉴를 선택하세요.

중앙에 보이는  + New Template을 클릭하고, 이미지의 내용으로 입력해 주세요.

 입력 완료 후, Done을 클릭하면  기본 템플릿이 만들어지는데요, 상단에 보이는 메뉴 중에서 Data Streams과 Web Dashboard 만 작업해주면 됩니다. 
그럼 Data Streams 탭을 선택하고, +New Datastream에서  Digital 항목을 클릭하세요. 


그리고 아래 이미지를 참고하여 내용을 입력하세요. 

 

LED 2에 대해서도 같은 방법으로 만들어 주세요.

 

 

마지막으로 LAMP(전등)에 연결된 Relay 제어를 위해 Data Stream을 추가해 볼게요.

 

그럼, 이제 Web Dashboard로 가서 컨트롤 화면을 구성해 볼게요.

화면 구성은, LED 1, 2, LAMP에 대해 ON/OFF를 확인할 수 있는 LED 표시와 제어하는 스위치로 구성했습니다.
아래 이미지를 참고하여 설정해 보세요. 

 

LED2에 대해서는 복제(복사)를 해볼 텐데요, 유사한 패턴의 경우 복제 버튼을 이용하면, 좀 더 편하게 작업할 수 있습니다. 

그리고 복제된 위젯의 설정으로 들어가서 아래처럼 옵션을 선택, 입력해 주세요.

 

LED2의 스위치 세팅도 동일한 방법으로 해주시고, 

Relay에 연결된 Lamp에 대한 표시등도 LED 위젯을 이용해서 만들어 주세요. 
그리고 아래와 같이 Relay Lamp 켜고 끄기를 위한 스위치를 만들어 주세요. 

아래 이미지처럼 완성이 되었다면,  이제 Search 탭으로 가서, + New Device를 클릭하고, 조금 전에 만든 Template를 연결해 주세요. 

 

그럼, 이렇게  Autu Token 값 등이 만들어지고, 이 값들을 복사해서 아두이노 코드 상단에 붙여 넣기 합니다.

 

【 ⑦  아두이노 코드 토큰(Auth Token) 값 수정 후 업로드 하기 】

 이렇게 완성된 코드를 가지고  보드를 연결하고 코드를 업로드하세요. 

ESP01 모듈이 연결되어 있는 상태에서 코드를 업로드할 경우 업로드 에러가 종종 발생하니, 잠시 제거하고 업로드해보세요.

’Window’키 + ‘X’ 단축키로 장치 관리자를 열어  Nano보드가 연결된 포트를 정확히 확인해 보세요. 

네 26번 포트에 연결되어 있네요. 그럼, 업로드를 위해 보드와 포트를 정확히 선택해 주세요. 

대부분의 호환 Nano 보드의 경우 프로세서는 “ATmega128P (Old Bootloader)를 선택해야 업로드됩니다

그럼, 업로드해 보세요. 

 

【 ⑧  WiFi 핫스팟 연결하여 동작시키기 】

이제, ESP-01 모듈을 연결해 주세요. 코드에 입력한 대로,  주변 WiFi 또는 핫스팟을 연결해 주세요.
Nano 보드의 리셋을 눌러주면, 핫스팟에 연결되고 시리얼 모니터를 통해 IP를 할당받는 것을 볼 수 있습니다. 
잘 안된다면, 시리얼 모니터를 새로 열거나 ESP01 모듈을 제거 후 다시 연결해 보세요(접촉 불량 가능성)
네, 보이는 것처럼 Ping 테스트까지 완료되어야 연결에 문제가 없습니다

그리고  Search 탭에서(중요!) 동작시켜 보면, 아래처럼, LED가 화면 클릭할 때마다 동작이 잘 되는 것을 볼 수 있습니다.

그럼, 220V LED 램프도 테스트해보기 위해,  220V 전원을 연결하고 테스트해 보세요. 

네, 위 이미지처럼, 동작은 잘하는데요,  다만, 스위치가 ON 신호에 램프가 꺼지고, 스위치 OFF 신호에 램프가 켜져서 반대로 동작합니다. 
그 이유는 Relay 모듈이 Low신호에 동작하는 Active-Low 모듈이어서 그렇습니다. 
이 문제는 DashBoard에서 On/Off 스위치 설정을 반대로 해놓으면 간단히 해결할 수 있습니다. 
그럼, Templates 탭의 편집(Edit)으로 들어가서 Lamp 버튼의 설정을 바꾸어 볼게요. 


ON과  OFF의  논리 값을 반대로 바꾸어 주세요 ( 1 -> 0 , 0 -> 1 )

컬러도 반대 효과를 주기 위해 검정식으로 바꾸어 볼게요 ( 검정 -> 꺼짐 , 흰색 -> 켜짐 ) 

저장하고 Search 메뉴에서 다시 실행해 볼게요.

네, 이제 ON OFF가 일치하며 잘 동작됩니다. 
그럼, 이제 PC 연결 없이 배터리로도  IP 할당받으며 잘 동작하는지 아래 이미지처럼, 확인해 보세요. 

그럼, 이제 앱 화면도 설정하여 제어해 볼게요.
Blynk ioT ( 2.0 버전에 해당되는 앱) 앱을 다운로드하고 로그인하세요. 
Blynk Cloud에서 템플릿을 만들면 자동으로 같은 이름의 빈 템플릿이 보이는데요, 터치하세요. 


개발자 모드로 진입하고,  바닥의 빈 공간 또는 + 키를 눌러 주세요.  


앞서 보았던 동일한 모양의 위젯들이 보입니다. 
LED 위젯을 터치하세요. 


위젯을 2~3초간 누르고 있으면 위치를 옮길 수 있고 사이즈 변경도 가능합니다. 


LED 1에 대한 설정을 영상처럼 해주세요. 

이어서, LED 2에 대한 설정도 동일하게 합니다. 

이제, LED 1에 대한 스위치를 만들어 볼게요

PUSH 옵션은 계속 누르고 있을 때만 On 되는 옵션이며, SWITCH는 터치할 때마다 번갈아 On/Off 됩니다.

마지막으로 LAMP는 스위치만 만들어 볼게요.

스위치 배치 완료된 모습

역시 여기서도 LAMP 스위치는 Low 신호에 On 표시되도록 1과 0의 위치를 바꾸어 줍니다.

이제 개발자(설정) 모드에서 빠저나가기를 누르면 실행 모드가 됩니다.

【  ⑨  APP(앱) 제어 화면 만들기 & 동작 】

네, 아주 잘 작동되며, 웹과의 연동도 잘 됩니다.

 

【 ⑩  Outlet 콘센트로 가전기기(선풍기 예시) 제어해 보기】

그럼, 이전 영상에서 만들었던 Outlet 콘센트도 테스트해 보겠습니다.

Outlet 콘센트의 상세한 제작 영상은 더보기 링크를 참고해 주세요. 
여기에도 똑같은 코드를 올려주면 되는데요,   Esp01 모듈을 탈거하고 업로드해 볼게요.

ID와 Auth Token 값들이 일치하면 같은 화면에서 제어할 수 있습니다.

Outlet 작품도 배터리를 이용해서 동작시켜 볼게요.

현재 두 개의 WiFi 모듈이 접속(IP 할당) 되어 있는 것을 볼 수 있습니다.

그럼, Outlet에 대한 Data Stream을 템플릿 탭에서 추가해 볼게요.

Teamplate 탭에 있는 Edit(편집)를 누르고 영상을 따라 설정해 주세요.

Outlet에서도 켜고 끄는 스위치 버튼 하나만 추가해 볼게요.

네, 이제 모든 준비는 끝났고, 두 개의 다른 작품을 하나의 폰에서 제어해 볼게요.

 

미니 선풍기라 하더라도  220V 콘센트로 제어하기 때문에 220V 전기를 사용하는 거의 대부분의 가전기기도 제어된다고 보면 됩니다.

그럼, Outlet 콘센트 전원을 연결해 볼게요.

릴레이가 Low(꺼짐) 신호에 동작하니, Outlet 스위치 역시 반대로 설정해 볼게요.

네, 잘 동작되는데요,  폰에서도 스위치를 추가하여 제어해 볼게요.

여기서도 On / Off 설정을 반대로 바꾸어 놓을게요.

 

【 ⑪  최종 완성된 작품 두 가지를 하나의 앱과 웹에서 함께 동작시켜 보기 】

그럼 실행시켜 볼게요.

네, 이렇게 해서 Blynk2.0을 이용해서 웹과 폰에서 LED, 전등, 가전기기 등을 제어해 보았습니다.

릴레이를 이용하면 220V와 같은 가전기기들의 On/Off를 제어할 수 있어, 응용하기 매우 좋습니다.

그럼, 지금 나오는 관련 영상들을 함께 참고해서 활용하기 좋은 작품들을 만들어 보세요.

감사합니다~

【 모든 작업과정 동영상으로 보기 】

 

반응형
반응형

 ※ 본 게시물의 모든 이미지는 클릭하면 확대되어 선명하게 확인 가능합니다!

【 How to Display temperature& humidity of DHT11 on a smart phone! 】

# Blynk2.0 은 WiFi 컨트롤 기능을 App뿐 아니라, Blynk Cloud라 하여 웹에서도 제어할 수 있는 기능을 제공하고 있습니다. 
또한,  복잡하고 어려운 코딩이나 함수 사용 없이 매우 쉽게 IoT 시스템을 구축해 주는 멋진 시스템입니다. 

여기에서는 WiFi기능을 가진 나노 33 IoT 보드를 사용하고 있으며, ESP8266 보드류 혹은 ESP32 보드 등으로도 바로 적용 가능합니다. 

이 강의는 시리즈로 제작되며,  전체 학습 내용은 아래와 같습니다.
======================================================
시리즈 전체 실습 내용(예정)
1. Nano33 ioT & Blynk2.0으로 LED On/Off 하기. (업로드 완료)
2. Nano33 ioT & Blynk2.0 으로 DHT11 센서 온도/습도 출력하기.(본 게시글)
3. ESP01 & Blynk2.0 으로 LED와 LAMP(220V) 제어하기. (예정)
4. ESP8266 & Blynk2.0 으로 LED와 LAMP(220V) 제어하기.(예정)
5. ESP32 & Blynk2.0 으로 LED와 LAMP(220V) 제어하기.(예정)
======================================================

【 실습을 위한 사전 학습 자료 】
① Nano33 IoT 처음 사용설명서 1편
    - 유튜브 자료 : https://youtu.be/QwrgDjs4qBc
    - 블로그 자료 : https://rasino.tistory.com/301 
② Nano33 IoT 처음 사용설명서 2편
   -  유튜브 자료 : https://youtu.be/IODHpewucU4
    - 블로그 자료 : https://rasino.tistory.com/310
③ 【 Blynk 2.0 사용법 #1】 Nano33 ioT으로 LED On/Off  제어하기
   -  유튜브 자료 : https://youtu.be/4GZox37rXwg
    - 블로그 자료 : https://rasino.tistory.com/353

【 Blynk Cloud  Off Line & "Invalid auth token" error 에러 해결방법 】
  - https://rasino.tistory.com/350

 【  블링크 2.0에서 기존 프로젝트(템플릿) 삭제하는 방법 /Delete Templates】
  - https://rasino.tistory.com/352   

【 주요 목차 】
  ①  Blynk 2.0 서비스 소개 & 사용 이유
  ②  회로 연결 도면 및 실습 준비
  ③  실습을 위한 아두이노 IDE 필수 라이브러리 설치(4가지)
  ④  기존 템플릿(Templates) 삭제 방법
    데이터 스트림(Data Stream) 핀을 GPIO Pin으로 설정하기 설명

    Blynk Cloud (blynk.cc) 설정 & 웹 대시보드 만들기(Dash Board)
  ⑦  버추얼 핀(Virtual Pin) 개념 설명 & 온도/습도 가상 핀 설정하기
  ⑧  웹 대시보드(Web Dashboard) 핀 설정하기 설명
  ⑨  새 디바이스(New Device) 추가하기 설명
  ⑩  실습을 위한 Nano33 & DHT11용 Blynk 예제 파일 만들기
  ⑪  Nano33 ioT 보드에 코드 업로드 하기 & 핫 스팟 연결하기
  ⑫  동작 확인하기 (Arduino IDE Value & Web Dashboard)
  ⑬  Blynk IoT App에서 Dash Board(대시보드) 설정하기

 

【  ①  Blynk 2.0 서비스 소개 & 사용 이유


 최근 Blynk 서비스가 2.0으로 바뀜에 따라, 현재 가입하려는 분들은 반드시 2.0 시스템으로 사용법을 익히셔야 합니다.
기존에 사용하던 Blynk앱 시스템은 이용자의 폭주와 웹 연동 서비스를 제공하기 위해 Blynk 2.0 시스템을 오픈하였습니다.

물론 기존 Blynk 시스템도 유료 서비스를 이용하던 사용자가 있기 때문에 서비스가 유지되고 있지만,  Blynk 신규 가입자는 반드시 Blynk2.0을 이용해야 합니다. 
다만, Blynk2.0의 경우 국내 자료가 아직 부족하고 사용법이 기존과 달라 접근하기가 쉽지 않습니다.
그래서, 기본 사용법을 익히실 수 있도록 본 게시글을 준비했으니 차근차근 따라 해 보시기 바랍니다.
현재 Nano33 ioT 보드로 기본 실습들을 구성했지만, esp8266 보드나 esp32 보드 들도 이 글을 참고하면, 동일하게 활용 가능합니다.

Blynk 앱을 검색해 보면, 기존(legacy) 앱과 Blynk2.0인 Blynk IoT앱 두 가지를 볼 수 있습니다. 
Blynk 2.0에서는 Blynk Cloud라 하여 웹에서도 아래처럼 컨트롤 버튼을 만들어 제어할 수 있고, 

  Blynk의 가장 큰 장점은 어려운 앱 개발 코딩이 필요 없다는 것과 쉬운 클라우드 서버 툴을 제공하기 때문에 웹코딩이 필요 없으며, 센서 및 회로 제어에 필요한 복잡한 아두이노 함수들을 자체적으로 처리해 주기 때문에 매우 쉽고 빠르게 IoT 응용 작품들을 구축할 수 있습니다. 다만, 동시에 2개의 프로젝트(템플릿)까지만 무료로 제공되며, 추가적인 프로젝트나 고급 위젯 Box를 이용하고자 한다면, 일정 비용을 지불해야 합니다.              
단, 먼저 만들어진 프로젝트를 삭제하면 새 프로젝트를 계속 만들 수 있어요)   
물론, 월 이용료 등의 일정 비용을 지불하면 상업용으로도 손색없는 IoT 시스템을 구축할 수 있을 것으로 생각됩니다.

【 ②  회로 연결 도면 및 실습 준비 】

먼저, 화면과 같은 부품을 준비하여 회로를 연결해 주세요.

[ 연결도면 다운로드 ]

nanoIoT33_DHT11_Blynk2.0연결도.png
0.39MB

Nano33 ioT는 핀 배열이 Nano 보드와 거의 동일한데요, Nano 보드처럼 사용하기 쉽고 WiFi 모듈까지 내장되어 있어 활용하기 좋은 보드입니다.  Nano33 ioT 보드의 상세 설명과 사용법은 위에 링크해 드린, “처음 사용설명서 #1~#2”편을 참고해 보세요. 

   실습을 위한 아두이노 IDE 필수 라이브러리 설치(4가지) 】

그럼, 아두이노 IDE에 필요한 필수 라이브러리 3가지 및 DHT11 센서 사용을 위한 라이브러리 추가로 해서 4가지를 설치해 주세요.
1. ‘보드 매니저’에서 SAMD 또는 NANO 33으로 검색해서 보드 인식을 위한 라이브러리를 설치합니다.
nano 33으로 검색할 때는 중간에 공백을 주어야 합니다. 
그리고, 라이브러리 매니저가 아니라 보드 매니저입니다. Nano 33 ioT는 SAMD21G18A 칩을 MCU로 사용하고 있는 보드입니다. 

SAMD 또는 NANO 33 으로 검색 후 설치

 

2. ‘라이브러리 매니저’에서 NINA 또는 WIFININA로 검색하여 WiFi 통신을 위한 라이브러리를 설치합니다.

WiFi 통신을 위한 NINA 라이브러리

 

3. ‘라이브러리 매니저’에서 blynk로 검색하여 BLYNK 라이브러리를 설치합니다.

BLYNK 함수 사용을 위한 라이브러리 설치

 

4. ‘라이브러리 매니저’에서 'DHT'로 검색하여 Adafruit 사에서 제공하는 DHT 센서용 라이브러리를 설치합니다.

그럼, 이제 모든 준비 사항은 끝났으며, LED1과 2를 웹과 앱을 통해 직접 제어해 볼게요.

아래는 실제 연결된 회로 모습입니다.  점퍼선을 이용해도 좋지만,  이렇게 굵은 단선으로 길이에 맞추어 연결하면 훨씬 간결하고 튼튼하게 오랫동안 유지됩니다.

《 DHT11 센서 스펙 》

만약, 좀 더 정밀한 데이터를 원한다면, 아래 이미지와 같은 소수 첫 째 자리까지 출력되는 DHT22 센서를 사용하면 됩니다. 



【 ④ 기존 템플릿(Templates) 삭제 방법

Blynk 서비스는 템플릿(프로젝트) 2개까지는 무료로 이용할 수 있습니다.  따라서, 여러 가지 다양한 프로젝트 연습을 위해서는 기존 만들었던 템플릿을 삭제하면서 진행하면 되는데요,  삭제하는 방법에 대해 간단히 설명드립니다. 
만약 현재 만들어 놓은 템플릿이 없더라도, 추후에 삭제 과정이 필요하니 미리 봐 두면 도움 될 것입니다. 
 템플릿 삭제하는 내용은 아래 게시글에 별도로 올려놓았으니 참고해 보세요. 

▶ 템플릿 삭제하는 방법 :  https://rasino.tistory.com/352

 

⑤  Blynk Cloud (blynk.cc) 설정 & 웹 대시보드 만들기(Dash Board)

먼저, 아래 이미지처럼 좌측의 템플릿 탭을 클릭하고 이미지 우측 상단에 보이는 + New Template를 클릭하세요.

이어서 나타나는 아래 이미지처럼 각각의 항목을 선택하고, DESCRIPTION에는 간단한 설명을 입력하면 되는데요,  제목과 디스크립션에는 특수 문자나 기호는 입력하면 에러가 나고 다음으로 넘어가지 않으니 특수문자 및 기호는 입력하지 마세요. 

 

⑥  데이터 스트림(Data Stream) 핀을 GPIO Pin으로 설정하기 설명

이제, 데이터 스트림(DataStreams)과 웹 대시보드(Web Dashboard)만 설정해 주면 되는데요,   그전에 먼저, Digital 핀으로 로 사용 설정 시 선택해야 하는 핀 번호에 대해, 중요하니 짚고 넘어가 볼게요. 
아래 이미지에 보이는 Digital Pin과 Analog Pin의 경우는 아두이노 보드의 물리적인 핀을 그대로 연결 사용한다는 의미를 가지는 데요, 

직접 아두이노를 제어하듯 보드에 있는 핀 번호를 선택하면 블링크 서버(함수)를 통해 제어됩니다.
한 가지 주의해야 할 것은 DataStream의 Digital 핀 숫자는 보드 표면에 적힌 핀 번호가 아니라 GPIO 핀 번호와 일치되어 있습니다. 따라서 GPIO를 사용하는 nodeMCU와 같은 보드에서는 D0, D1, D2  등의 핀번호가 아니라, 입출력을 기준으로 매겨진 GPIO 핀 번호와 일치되어 있습니다. 
즉, D1핀에 연결된 LED 같은 것을 제어하려 한다면, DataStream에서 숫자 1을 선택하는 것이 아니라, GPIO 핀 번호인 숫자 5(GPIO5)를 선택해야 제어가 되니 주의하세요. 
( ※ 단, 우노와 나노 보드류는 GPIO 구분 없이  핀 번호 그대로 사용합니다 )

 

다음은 가상 핀(Virtual Pin)에 대한 설명입니다.

Virtual Pin의 경우 물리적 핀의 경우처럼 사용이 가능하지만, 주로 센서와 같은 값들을 WiFi를 통해 전달받아 앱 혹은 웹의 대시보드에서 쉽게 모니터링할 수 있도록 만든 가상 핀입니다. 
마치 아두이노 IDE의 시리얼 모니터에서 센서 값을 확인하는 것처럼, WiFi 무선을 통해 확인하기 편하도록 한 것입니다.
또한, 가상 핀을 최대 256개까지(V0~V255) 사용할 수 있도록 되어 있어 확장성이 좋습니다. 따라서, 이번 실습에서는 이 가상핀을 이용해 DHT11의 온도와 습도 데이터를 전달받아, 앱과 웹의 대시보드에서 확인할 수 있도록 실습을 진행합니다. 

【    Blynk Cloud (blynk.cc) 설정 & 웹 대시보드 만들기(Dash Board) 】

아래 이미지를 따라, 각각의 내용을 입력해 주세요.

ALIAS는 NAME을 영문으로만 입력하면 자동으로 입력됩니다.  한글과 혼용 입력 시는, 직접 영문으로 Temp라고 입력해주면 됩니다. 
가상 핀은 어떤 핀이든 사용하면 되고, Data type은 정수형(integer)을 선택하세요.
만약, DHT22와 같은 소수점 값 처리가 필요한 센서를 사용할 경우, Double을 선택하면 되고, 아두이노 코드에서는 Double 또는 float형을 사용하면 됩니다. 
단위는 섭씨온도일 경우 Celsius(℃) , 화씨는 Fahrenheit(℉)를 검색하세요. 
온도 값을 표시할 게이지의 전체 범위를 지정할 텐데요, 0℃ ~ 60℃의 범위로 지정해 볼게요. 

마지막으로  Create를 클릭하면 온도 값 처리를 위한 DataStream이 하나 만들어집니다.

그럼, 습도에 대한 DataStream을 생성하기 위해  +New Datastream을 클릭하세요.

아래 이미지를 참고하여 역시 동일한 방법으로 습도에 대해 입력해 주세요.

습도는 퍼센트(Percentage, %)로 표시하므로 Per...로 검색해 보세요. 
표시될 게이지의 범위는 0~100%로 합니다.

이렇게 해서 DataStream이 준비되었고, 아래처럼, 되어 있는지 보세요. 

 

  ⑧  웹 대시보드(Web Dashboard) 핀 설정하기 설명

그럼, 이제 웹 Dash Board를 만들어 볼게요. 
웹 Dashboard는 웹에서 컨트롤할 수 있는 제어 보드를 의미하고, 추가적으로 앱에서도 연동하여 제어할 수 있는 대시보드를 폰에서 만들 수 있습니다. 그럼, DHT11 센서의 온도와 습도를 표시해 줄 Gauge를 각각 만들어 볼게요. 
아래 이미지에서 1번, 2번, 3번 순서대로 클릭하여 진행합니다.

왼쪽 위젯 박스 메뉴에서 Guage를 끌어다 놓으세요. 

Guage의 제목은 ‘온도 Temp.’로 입력합니다.  그리고, Data Stream에서 설정해 놓았던 온도 Temp(V0) 항목을 선택하세요. 


그리고 같은 방법으로 Guage를 끌어다 놓고, 습도에 대한 Guage를 만들어 줍니다. 
 Guage의 제목은 ‘습도 Humi.’로 입력할게요.  그리고, Data Stream에서 설정해 놓았던 습도 Humi(V1) 항목을 선택하세요.

아래는 온도와 습도 게이지가 완성된 모습입니다.

 

그리고 위젯 박스에서 Label을 끌어다 놓고, 동일한 값을 Label로도 표시해 볼게요.

내용 입력과 선택은 Guage와 동일하게 해 볼게요(달라도 됨).

 

습도 Label도 아래처럼, 동일하게 만들어 주세요.

  아래처럼 되어 있으면 Dash board 설정은 끝났으며, 최종 Save 버튼을 클릭하면, 완료됩니다.


그리고 언제든 화면 우측 상단에 있는,  Edit를 눌러 Dash-Board나 Data-Stream을 다시 수정할 수 있습니다. 

【 ⑨  새 디바이스(New Device) 추가하기 설명 】 

 그럼, Search 탭을 눌러  +New Device를 추가해 볼게요.

화살표 순서에 따라 템플릿을 선택해 주세요.  이어서 나타나는 아래와 같은 창에서 위에서 만들어 놓은 'Nano33 ioT DHT11' 이름의 템플릿을 선택하고 Create를 클릭하세요. 

그럼, 아래처럼,  템플릿 ID와 Auth Token 값들이 생성됩니다 (클릭해서 복사하세요). 

 그리고 아두이노 코드의 이 부분에 붙여 넣기 하면 됩니다. 
코드의 이 세 가지 값이 blynk.cloud 값과 일치하지 않으면 에러가 나고 서버에 연결되지 않습니다. 
여기서 주의할 것은 BLYNK_TEMPLATE_ID는 BLYNK 2.0 Cloud 서비스를 위해 생긴 것으로 <Blynk...> 라이브러리보다 상위에 배치되어야 합니다. 

만약 그렇지 않을 경우 지금 보이는 것처럼 token 에러가 나며, Blynk2.0 서버로 접속되지 않아 제어할 수 없게 됩니다.

 이 에러 관련된 추가적인 해결 방법은 더보기에 있는 링크를 참고해 주세요~!

'Invalid auth token' 에러 해결 링크:  https://rasino.tistory.com350/ 

 

【 ⑩  실습을 위한 Nano33 & DHT11용 Blynk 예제 파일 만들기 】

이 아두이노 코드는 Blynk 라이브러리에서 제공하는 코드를 기본으로 하여 수정한 것인데요. 
코드의 위치는 ‘파일 》 예제 》 Blynk’ 메뉴에서 → ‘Boards_WiFi’ 항목으로 가서 Nano33 ioT의 경우 → ‘Arduino_MKR1010’ 예제를 열어 편집하여 사용하면 됩니다. 

편집한 코드는 아래와 같습니다.

//*** 라즈이노 IoT Blynk2.0 + Nano IoT33 실습 2 ,  DHT11 센서로 온도/습도 출력하기***
// 실습 : Blynk 2.0 시스템에 DHT11 센서 연결하여 온도와 습도 값 디스플레이 하기!

#define BLYNK_PRINT Serial

// Blynk.Cloud 사이트에서 Nano33 IoT + DHT11에 대한 템플릿을 만든 후 
// 나타나는 대시보드에서 아래 3줄의 내용을 복붙복 하세요 */
#define BLYNK_TEMPLATE_ID "TMPLMRt6yA8Z"
#define BLYNK_DEVICE_NAME "Nano33 ioT DHT11"
#define BLYNK_AUTH_TOKEN "ZM-i3ALE2fMFsUZ5V5kh2JZg_X4LDFVi"

#include <SPI.h>
#include <WiFiNINA.h>     // 라이브러리 매니저창에서 WiFiNINA로 검색 후 설치할 것
#include <BlynkSimpleWiFiNINA.h>  // 라이브러리 매니저창에서 blynk로 검색 후 설치할 것
#include <DHT.h>       // 라이브러리 매니저창에서 DHT로 검색 후 설치할 것(by Adafruit 버전)

char auth[] = BLYNK_AUTH_TOKEN;   
// 접속 가능한 WiFi ID와 패스워드를 입력하세요
char ssid[] = "myGalaxy";
char pass[] = "12345678";

BlynkTimer timer;
#define DHTPIN 13            //  DHT11 센서가 연결 된 핀 번호
#define DHTTYPE DHT11        //  DHT11 센서 사용   (DHT22 센서는 DHT22로 수정)
DHT dht(DHTPIN, DHTTYPE);

void sendSensor() {
  int t = dht.readTemperature(); // 섭씨 온도, 화씨는 readTemperature(true), 만약 DHT22센서 사용시 float형으로 바꿀 것
  int h = dht.readHumidity();  

  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  Serial.print("Temp:");
  Serial.print(t);
  Serial.print("\t");
  Serial.print("Hum:");
  Serial.print(h);
  Serial.print("\n");
  delay(300);
  Blynk.virtualWrite(V0, t);  // 온도값 전달을 위한 V1 가상포트 지정
  Blynk.virtualWrite(V1, h);  // 습도값 전달을 위한 V2 가상포트 지정
}

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
  // 일반적으로 Blynk에서 ESP32 보드(혹은 아두이노와 같은 보드)에게 매 1초마다 
  // 데이터를 요구하는 방식이지만, 아래와 같은 타이머(timer) 코드를 사용하면 
  // ESP32 보드에서 Blynk로 일방적으로 데이터를 보낼 수 있음.
  timer.setInterval(1000L, sendSensor);  
}

void loop()
{
  Blynk.run();
  sendSensor();
  timer.run();    
}


편집된 코드는 여기를 클릭하여 다운로드하세요. 

Nano33ioT_DHT11_ok.zip
0.00MB

 

링크해 드리는 코드에서, 여러분의 ID, NAME, Token값과, WiFi 정보만 교체하면 됩니다.

 

【 ⑪  Nano33 ioT 보드에 코드 업로드 하기 & 핫 스팟 연결하기 】

코드가 준비되면, Nano33 ioT가 연결된 포트를 확인하고 업로드하세요. 

아두이노 IDE에서 보드가 연결된 포트와 올바른 보드 종류가 선택되었는지? 확인하세요.

 그럼, 연결시킬 WiFi 핫스팟을 준비해 주세요. (주변 연결 가능한 WiFi 또는, 스마트폰 핫스팟 등등 가능)

핫스팟에 여러분의 Nano33 ioT 보드가 IP를 할당받고 연결 된 것을 볼 수 있으며, 만약 연결이 안 된다면,  리셋키를 한 두번 눌러주면, 이렇게 핫스팟에 연결되는 것을 볼 수 있습니다. 

 

【 ⑫  동작 확인하기 (Arduino IDE Value & Web Dashboard) 】

그리고 아래 이미지처럼 아두이노 IDE의 시리얼 모니터를 열어, 출력되는 데이터를 바로 확인할 수 있도록 하였습니다.

아래 이미지처럼, Blynk의 Search탭에 있는 Dash-Board에 가보면 동일한 데이터가 표시되는 것을 볼 수 있어요.

 

【 ⑬  Blynk IoT App에서 Dash Board(대시보드) 설정하기 】

그럼, Blynk ioT App에서도 Dash-Board를 만들어 볼게요. 
먼저 스마트폰에서 다운로드하고 설치한 Blynk ioT를 실행시키고 로그인합니다.
웹에서 Nano33 DHT11이라는 이름으로 대시보드를 이미 만들었기 때문에,  앱에서도 Nano33 DHT11라는 이름의 템플릿이 생성되어 있을 거예요( 내용은 비어 있으며, 위젯 배치는 폰에서 새로 만들어야 함)  그럼, 그 템플릿을 선택하세요.
아래 공구 모양의 이미지(개발 모드 전환)를 터치해서 위젯들을 배치해 볼게요. 

 

이어서 앱의 바닥 빈 곳을 터치하거나 화면 우측 상단에 있는 '+' 표시를 터치하면,
우측에 위젯 메뉴들이 나타나는데요,  Guage 위젯을 찾아 선택해 주세요.

 이번엔 습도용 게이지를 만들기 위해 Guange 위젯을 하나 더 선택하세요. 


먼저, 왼쪽 위젯을 선택해서 설정을 해 볼게요.   아래 이미지들을 참고하여,  온도와 습도에 대해 설정해 보세요.

그럼, 아래와 같은 형태가 되며,   아래 화살표를 터치하여 화면을 빠져나오면, 데이터가 연동되는 실행 모드가 됩니다.

 

현재,  Arduino IDE Serial Value = Web Cloud Value = App Value   값들이 모두 연동되어 일치되는 것을 볼 수 있습니다. 

그럼,  주변 온도 및 습도 변화에 제대로 반응하는지 빠르게 확인해 보기 위해,  아이스팩과 히터를 이용해 볼게요. 

 아이스팩을 센서 주변에 붙여보니, 온도가 상온보다 빠르게 떨어지고,  습도 또한 냉각으로 인하여 낮아지는 것을 볼 수 있습니다.

이번엔, 아래 이미지처럼, 미니 히터를 대어 보았는데요,  히터의 경우 온도가 빠르게 올라가며, 습도 또한 건조해져 떨어지는 것을 볼 수 있었습니다. 

네, 이렇게 아주 잘 작동하고 있습니다. 
오늘 이렇게 DHT11이라는 온습도 센서를 WiFi 기능이 기본 지원되는 나노ioT33 보드에 연결하고, Blynk 2.0(블링크) 서비스를 이용해서 웹과 앱에서 데이터를 실시간으로 확인(출력) 해보는 실습을 진행해 보았습니다. 
블링크 서비스의 장점은, 어렵고 복잡한 코딩 과정 없이 실생활에 바로 응용할 수 있는 ioT 작품들을 매우 쉽고 빠르게 구축해 주는 것이라 생각됩니다. 

그럼, 본 게시글이나 아래 링크해드리는 유튜브 영상을 함께 참고하여,  직접 여러 형태로 재미있게 활용해 보세요~  ^^&

위 동영상 이미지를 클릭하면 재생이 됩니다
반응형
반응형

블링크 2.0에서 기존 만들어 놓은 프로젝트(템플릿)나 혹은 잘못 만든 프로젝트를 삭제하는 방법입니다.

1. 먼저, blynk 2.0 클라우드로 로그인하세요.  (long-in  blynk cloud )   http://blynk.cloud


2.  Search 탭으로 가서  offline 옆의 ... 을 클릭 후 Delete 키 누르세요.

 

3. Templates 탭을 클릭 후 우측에 있는 Edit 편집을 클릭합니다.

4.  화면 우측 상단의 Cancel 버튼 옆에 있는 ... 을 클릭하면 나타나는 Delete를 클릭하세요.

5. 아래와 같은 창이 뜨면,  입력칸에 대문자로 정확하게 DELETE 라고 입력 후,  그 아래줄의 체크항목에 체크한 다음,
Delete 버튼을 클릭하면, 템플릿이 최종적으로 삭제되는 것을 볼 수 있습니다.

 

※  Search 탭에서 먼저 삭제하지 않아도  Templates 탭에서 삭제를 하면 모두 삭제 되니 참고하세요.

반응형
반응형

 Blynk2.0 은 WiFi 컨트롤 기능을 App뿐 아니라, Blynk Cloud라 하여 웹에서도 제어할 수 있는 기능을 제공하고 있습니다. 
또한,  복잡하고 어려운 코딩이나 함수 사용 없이 매우 쉽게 IoT 시스템을 구축해 주는 멋진 시스템입니다. 

이런 Blynk 2.0을 이용하여 휴대폰과 웹에서 Nano33 IoT 보드에 연결된 LED를 WiFi 무선으로 제어해 보는 실습을 준비했습니다.

여기서는 나노 33 IoT 보드를 사용하고 있지만, ESP8266 보드류 혹은 ESP32 보드 등으로도 바로 적용 가능합니다. 

이번 학습은 시리즈로 제작되며,  전체 학습 내용은 아래와 같습니다.
======================================================
시리즈 전체 실습 내용(예정)
1. Nano33 ioT & Blynk2.0 으로 LED On/Off 하기. (본 영상)
2. Nano33 ioT & Blynk2.0 으로 DHT11 센서 온도/습도 출력하기.
3. ESP01 & Blynk2.0 으로 LED와 LAMP(220V) 제어하기.
4. ESP8266 & Blynk2.0 으로 LED와 LAMP(220V) 제어하기.
5. ESP32 & Blynk2.0 으로 LED와 LAMP(220V) 제어하기.
======================================================

【 실습을 위한 사전 학습 자료 】
① Nano33 IoT 처음 사용설명서 1편
    - 유튜브 자료 : https://youtu.be/QwrgDjs4qBc
    - 블로그 자료 : https://rasino.tistory.com/301 
② Nano33 IoT 처음 사용설명서 2편
   -  유튜브 자료 : https://youtu.be/IODHpewucU4
    - 블로그 자료 : https://rasino.tistory.com/310

【  이 실습에 필요한  Download 및 학습 자료 】
 ( 연결 도면 및 아두이노 코드 등 제공,  Arduino IDE Code etc...  )
  - https://rasino.tistory.com/351

【 Blynk Cloud  Off Line & "Invalid auth token" error 에러 해결방법 】
  - https://rasino.tistory.com/350    

 【  블링크2.0에서 기존 프로젝트(템플릿) 삭제하는 방법 】
  - https://rasino.tistory.com/352   


【 이 실습에서의 주요 목차 】
▶ ①  Blynk 2.0 서비스 소개
 ②  회로 연결도면 및 실습 준비
  실습을 위한 아두이노 IDE 필수 라이브러리 설치
  실습을 위한 Nano33용 Blynk 예제 파일 열기
  Blynk Cloud (blynk.cc) 설정 & 웹 대시보드 만들기(Dash Board)
  아두이노 IDE에 Auth Token & TEMPLATE ID & WiFi정보 입력하기
 ⑦  Nano33 IoT WiFi 접속시키고 IP 할당 받음 확인하기
  Blynk IoT App에서 Dash Board(대시보드) 설정하기
  Blynk App & Cloud   , 앱과 클라우드에서 LED 컨트롤 하기!

 

【 ①  Blynk 2.0 서비스 소개 】

최근 Blynk 서비스가 2.0으로 바뀜에 따라, 현재 가입하려는 분들은 반드시 2.0 시스템으로 사용법을 익히셔야 합니다.
기존에 사용하던 Blynk앱 시스템은 이용자의 폭주와 웹 연동 서비스를 제공하기 위해 Blynk 2.0 시스템을 오픈하였습니다.

물론 기존 Blynk 시스템도 유료 서비스를 이용하던 사용자가 있기 때문에 서비스가 유지되고 있지만,  Blynk 신규 가입자는 반드시 Blynk2.0을 이용해야 합니다. 
다만, Blynk2.0의 경우 국내 자료가 아직 부족하고 사용법이 기존과 달라 접근하기가 쉽지 않습니다.
그래서, 기본 사용법을 익히실 수 있도록 본 게시글을 준비했으니 차근차근 따라 해 보시기 바랍니다.
현재 Nano33 ioT 보드로 기본 실습들을 구성했지만, esp8266 보드나 esp32 보드 들도 이 글을 참고하면, 동일하게 활용 가능합니다.

Blynk 앱을 검색해 보면, 기존(legacy) 앱과 Blynk2.0인 Blynk IoT앱 두 가지를 볼 수 있습니다. 
Blynk 2.0에서는 Blynk Cloud라 하여 웹에서도 아래처럼 컨트롤 버튼을 만들어 제어할 수 있고, 

Blynk의 가장 큰 장점은 어려운 앱 개발 코딩이 필요 없다는 것과 쉬운 클라우드 서버 툴을 제공하기 때문에 웹코딩이 필요 없으며, 센서 및 회로 제어에 필요한 복잡한 아두이노 함수들을 자체적으로 처리해 주기 때문에 매우 쉽고 빠르게 IoT 응용 작품들을 구축할 수 있습니다. 다만, 동시에 2개의 프로젝트(템플릿)까지만 무료로 제공되며, 추가적인 프로젝트나 고급 위젯 Box를 이용하고자 한다면, 일정 비용을 지불해야 합니다.              
단, 먼저 만들어진 프로젝트를 삭제하면 새 프로젝트를 계속 만들 수 있어요)   
물론, 월 이용료 등의 일정 비용을 지불하면 상업용으로도 손색없는 IoT 시스템을 구축할 수 있을 것으로 생각됩니다.


【 ②  회로 연결 도면 및 실습 준비 】

먼저, 화면과 같은 부품을 준비하여 회로를 연결해 주세요.

Nano33 ioT는 핀 배열이 Nano 보드와 거의 동일한데요, Nano 보드처럼 사용하기 쉽고 WiFi 모듈까지 내장되어 있어 활용하기 좋은 보드입니다.  Nano33 ioT 보드의 상세 설명과 사용법은 위에 링크해 드린, “처음 사용설명서 #1~#2”편을 참고해 보세요. 

  실습을 위한 아두이노 IDE 필수 라이브러리 설치 】

그럼, 아두이노 IDE에 필요한 필수 라이브러리 3가지를 설치해 주세요.
1. ‘보드 매니저’에서 SAMD 또는 NANO 33으로 검색해서 보드 인식을 위한 라이브러리를 설치합니다.
nano 33으로 검색할 때는 중간에 공백을 주어야 합니다. 
그리고, 라이브러리 매니저가 아니라 보드 매니저입니다. Nano 33 ioT는 SAMD21G18A 칩을 MCU로 사용하고 있는 보드입니다. 

SAMD 또는 NANO 33 으로 검색 후 설치

 

2. ‘라이브러리 매니저’에서 NINA 또는 WIFININA로 검색하여 WiFi 통신을 위한 라이브러리를 설치합니다.

WiFi 통신을 위한 NINA 라이브러리

 

3. ‘라이브러리 매니저’에서 blynk로 검색하여 BLYNK 라이브러리를 설치합니다.

BLYNK 함수 사용을 위한 라이브러리 설치

그럼, 이제 모든 준비 사항은 끝났으며, LED1과 2를 웹과 앱을 통해 직접 제어해 볼게요.

아래는 실제 연결된 회로 모습입니다.  점퍼선을 이용해도 좋지만,  이렇게 굵은 단선으로 길이에 맞추어 연결하면 훨씬 간결하고 튼튼하게 오랫동안 유지됩니다.

 

  실습을 위한 Nano33용 Blynk 예제 파일 열기 】

이제 ‘파일 》 예제 》 Blynk’ 메뉴에서 → ‘Boards_WiFi’항목으로 가서, Nano 33 ioT와 동일하게 사용할 수 있는 → ‘Arduino_MKR1010’ 예제를 열어 사용합니다.


ESP32 보드 및 ESP8266 보드들은 여기 예제들을 사용하면 됩니다.


 기본 내용에 있는 것을 그대로 두고, 주석문 등을 확인해 본 후 필요 없는 부분을 정리해 보세요.
그리고 적당한 이름으로 저장합니다. 
지금 아래 화살표 부분에 Blynk Cloud에서 템플릿 ID 등을 복붙복해올 예정입니다.  (뒤에 다시 자세히 내용이 나옵니다)

 

【 ⑤  Blynk Cloud (blynk.cc) 설정 & 웹 대시보드 만들기(Dash Board) 】

1. 그럼, Blynk.CC 사이트에서 메일 주소로 간단히 회원 가입을 하세요.



그리고, Blynk.cloud로 접속하면 영상과 같은 모습을 볼 수 있습니다.
작업 순서는 
 1. 템플릿 탭에서 먼저 탬플릿을 만들고. 
 2. 찾기(Search) 탭에서 만들어진 템플릿에 보드 장치를 추가해주는 식으로 진행됩니다.

그럼, 템플릿(Templates) 탭을 클릭한 후 +New Template를 클릭하세요.

 

NAME에는 특수문자를 제외한 적당한 템플릿 이름을 입력하세요. 
여기서는 Nano33 ioT LED로 이름을 적었습니다. 
HARDWARE 항목에는 Arduino를 선택하고, Connection Type에는 WiFi를 선택하세요.
마지막으로 Description에는 적당한  설명을 입력하고 Done을 클릭합니다. 

설명란에도 특수 문자가 입력되면 이렇게 에러가 나니, 특수 문자를 빼고 작성하세요.

그럼 아래처럼, 여러 가지 탭으로 나누어진 메뉴가 보입니다.

여기서 주로 사용하는 탭은 Info / Data Streams / Web Dashboard 정도입니다.

그럼, Data Streams 탭으로 가서 +New Data Streams을 클릭하세요. 
그리고, Digital 항목을 클릭합니다. 

 

 화면에 보이는 회로 연결을 참고하여 선택하세요.
마찬가지로 D5(GPIO 5)에 연결된 LED도 설정해 줍니다. 

이제 Web Dashboard에서 컨트롤 패널을 만들어 주면 됩니다.

 

 Display 항목에 있는 LED를 보드에 끌어다 놓고 크기를 정당히 조절해 줍니다.

기어 모양의 설정을 클릭하세요.


TITLE에  LED 1로 적고,  Data Stream에는 2번 Pin으로 지정된 LED 1(2)을 선택해 주세요

 

두 번째 LED에 대해서도 동일하게 진행하면 됩니다.
TITLE에  LED 2로 적고,  Data Stream에는 5번 Pin으로 지정된 LED 2(5)를 선택해 주세요.


그럼 이제, 컨트롤(Control) 항목에 있는 스위치(Switch)를 끌어다 놓으세요.

마찬가지로, 설정을 눌러 스위치 이름을 정하고,  스위치를 누를 때 작동(연결되는) 시킬 LED를 선택해 줍니다 → LED 1 (2번 Pin)

필요한 경우, 스위치가 작동될 때, ON / OFF 글자를 표시하게 할 수도 있습니다. 
Save를 눌러 저장하고, 2번째 스위치에 대해서도 동일하게 진행하면 되는데요, 이번에는 좀 더 간편하게, 이미 만들어진 스위치 위젯을 복사하여 사용해 볼게요.

 

Switch 2 이름과  DataStream을 → LED 2 (5번 Pin)로 바꾸어 주면 됩니다.

그리고 반드시 저장(Save)을 눌러 주세요!

추후에 연결이 잘못되거나 변경을 원할 경우,  다시 Edit 버튼을 눌러 변경해 주면 됩니다. 

이제 Search 탭으로 갑니다.  기존에 ESP32 보드를 추가해서 사용하던 장치가 보이는데요. 

지금은 Nano33 보드를 추가하기 위해 + New Device를 클릭하고, From Template를 클릭하세요.

TEMPLATE 항목에 Nano33 ioT LED가 보일 텐데요, 선택하고 Create를 클릭하세요.

 

그럼, 바로 이 프로젝트에 대한 템플릿 ID와 이름, Auth Token 값들이 생성됩니다.  클립보드로 복사하기를 눌러 주세요.


방금 복사된 내용을 아두이노 IDE 코드에 붙여 넣으면 대부분의 작업은 끝이 납니다. 

이제 코드에 수정해 주어야 할 부분들만 바꾸어주면 되는데요,  
char auth [ ] = BLYNK_ATTH_TOKEN으로 바꾸어 주세요.
접속 가능한 WiFi(핫스팟)의  char ssid [ ] = “-----” 와 비번(ssid [])을 바꾸어 주세요.

아두이노 코드입니다.

/* Nano33 IoT + Blynk 2.0 LED On/Off 실습 */

#define BLYNK_PRINT Serial
/* Blynk.Cloud 사이트에서 Nano33 IoT + LED에 대한 템플릿을 만든 후 대시보드에서 아래 3줄의 내용을 복붙복 하세요 */
#define BLYNK_TEMPLATE_ID "TMPL8FZBJtS4"
#define BLYNK_DEVICE_NAME "Nano33 ioT LED"
#define BLYNK_AUTH_TOKEN "3_no_kJo46jNhiMRzlpfPRlMELvHU-g4"

#include <WiFiNINA.h>     // 라이브러리 매니저창에서 WiFiNINA로 검색 후 설치할 것
#include <BlynkSimpleWiFiNINA.h>  // 라이브러리 매니저창에서 blynk로 검색 후 설치할 것
#include <DHT.h>       // 라이브러리 매니저창에서 DHT로 검색 후 설치할 것(by Adafruit 버전)

char auth[] = BLYNK_AUTH_TOKEN;
// 접속 가능한 WiFi ID와 패스워드를 입력하세요
char ssid[] = "myGalaxy";
char pass[] = "12345678";

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}

[ 아두이노 코드 다운로드 ]

Nano33_Blynk_LED.zip
0.00MB

필요한 아두이노 코드는 이것이 전부입니다.  코드가 정말 간단하죠? 
네, 모든 작업은 끝났으며, 저장하고 코드를 아두이노에 업로드하면 됩니다.

만약, 컴파일(업로드) 과정에서 에러가 난다면, 툴 》 보드 》 Nano ioT 33 보드를 선택, 연결된 Com 포트를 제대로 선택했는지? 확인하세요.

이제 폰 핫스팟으로 WiFi 연결을 지원하고, Web Dashboard와 앱으로 제어가 되는지? 볼게요.

먼저, Nano33 보드의 리셋 버튼을 한 두 번 눌러 주세요.

 

그럼, 이 부분에 여러분의 Nano33 보드가 연결되는지? 확인할 수 있습니다.

 

터치해 보면, 핫스팟으로부터 할당받은 IP 주소도 확인할 수 있습니다.

이 상태에서는 이미 Web Dashboard에서는 Online 연결되어 있어 제어가 가능합니다.

그럼, 미리 설치하고 로그인되어 있는 Blynk ioT 앱을 실행시켜 볼게요.
아래처럼, Nano33 ioT 템플릿을 터치하면, 

앱에서는 아래처럼 대시보드를 만들지 않았기에 만들 수 있는 메뉴가 나옵니다.

그럼, 이미지를 보고 위젯을 배치하며 대시보드를 만들어 보세요.
아래 이미지에서  화살표로 가리키고 있는 줄 세 개의 포인트를 터치하면,  위젯이라고 하는 박스들이 나옵니다.

 

아래 UPGRADE라고 표시되어 있는 위젯들은 일정 비용을 지불해야 이용 가능합니다.

하지만, 무료 위젯 만으로도 기본적인 프로젝트들은 어느 정도 만들어 볼 수 있습니다.
아래쪽으로 내려서, LED 위젯이 보이면 선택하세요.

터치를 좀 길게 하면 위젯의 위치를 옮길 수 있습니다.


크기를 조절하고,  LED 위젯을 하나 더 불러오세요. 

첫 번째 LED 위젯을 터치하면, 설정 화면이 보이는데요,
제목 : LED 1    /   색 : 블루   /  DataStream : LED 1로 선택하세요.

뒤로 가기를 눌러 줍니다.

다음, 두 번째 LED 위젯을 터치하세요.
제목 :  LED 2    /   색 : 그린   /  DataStream : LED 2로 선택하세요.

LED 위젯은 LED의 On/Off 상태만 보여주기 때문에,  LED를 켜고 끄기 위해서는 버튼(스위치)과 같은 위젯이 필요합니다.

같은 방법으로 위젯 박스 중에서 스위치 위젯을 꺼내어 배치하고 설정으로 들어가세요. 

PUSH 버튼과 스위치의 차이는 PUSH 버튼은 누르고 있는 동안만 ON(1)이 되며, 떼면 OFF(0) 되는 방식입니다.
스위치는 한 번 터치할 때마다  ON(1)과 OFF(0)가 번갈아 바뀌는 방식입니다.   여기서는 SWITCH로 선택하세요.

버튼의 색상을 자유롭게 선택해 주세요.  여기서는 연결한 LED 색을 기준으로 동일하게 했습니다. 
LED1 은 파란색,   LED2는 녹색을 사용했어요.

두 번째 버튼에 대해서도 설정해 주세요.


이제 위젯 설정도 끝이 났으며, 여기서 한 번 더 뒤로 가기를 터치하면 실행 모드가 됩니다.
아래 이미지는 대시보드에 배치가 완료된 최종적으로 완료된 모습입니다. 

 

【 ⑨  Blynk App & Cloud   , 앱과 클라우드에서 LED 컨트롤 하기! 】

자 그럼, App에서 스위치를 작동시켜 볼게요.  
※ 참고 : 스위치 위에 있는 LED는 현재의 LED On/Off 상태를 알려주는 역할입니다.
이번에는,  웹의 Dash Board에서 스위치를 작동시켜 볼게요.  

네, 아주 잘 작동되는 것을 볼 수 있습니다.

또한,  웹 대시보드에 있는 버튼(스위치)도 마우스로 클릭해 보세요.  스마트폰과 실제 LED가 동일하게 연동되어 작동됩니다.

 

여기서 중요한 것은, 아래처럼, 분홍색 체크 부분이 Online으로 되어 있어야 합니다. 

 

아두이노 IDE 시리얼 모니터에서도 아래처럼, Ping 테스트 시간까지 표시되어야 합니다. 

 

만약, 대시보드에 표시가 Off line 이거나, 아래처럼 아두이노 시리얼 모니터에 “Invalid auth token”에러 메시지를 띄우며 실행되지 않는다면, 작동되지 않습니다. 

만약, 이런 에러가 난다면, 아래 링크 게시글을 참고하여 해결해 보세요.

게시글 링크 : 
【 Blynk Cloud  Off Line & "Invalid auth token" error 에러 해결방법 】
  - https://rasino.tistory.com/350    

 

자 이렇게 Blynk 2.0 시스템을 이용해서 Nano33 ioT 보드에 연결된 LED를 제어해 보았습니다.
Blynk 서비스가 한 번에 무료로 만들 수 있는 프로젝트는 2개 까지지만 기존 프로젝트를 삭제하면 계속해서 다시 만들 수 있기 때문에 ioT 테스트나 학습용으로 활용하기 아주 좋습니다.
또한 어렵고 복잡한 코딩 없이 매우 쉽게 IoT 시스템을 구축할 수 있는 장점이 큽니다. 

【영상으로  학습 하기】

 

그럼, 다음 영상에서 센서 혹은 릴레이를 사용하여 좀 더 실용적인 제어를 해 보도록 할게요. 

감사합니다.   
좋은 하루 보내세요~!

반응형
반응형

▶ 아래가 아두이노 메가 보드의 핀맵 또는 핀 아웃입니다.(이미지를 클릭하면 확대 됩니다)

이미지 :&nbsp; Arduino.cc
이미지 : Arduino.cc
아두이노 메가의 디지털 핀맵
아두이노 메가 기타 핀
이미지 : www.theengineeringprojects.com

▶ 아래는 아두이노 메가의 데이터 시트입니다. 

이미지 :&nbsp; Arduino.cc

 

▶ 아두이노 메가에서 여러개의 하드웨어 시리얼 통신핀 사용하기
 아두이노 메가에서는 여러개의 하드웨어 시리얼 통신핀을 제공하고 있는데요, 이를 사용하는 방법에 대해 설명드립니다.

메가 핀 옆에 글자로 14번 15번은 TX3, RX3 , 16번 17번은 TX2, RX2,  18번 19번은 TX1, RX1 로 표시되어 있는데요,
0번 1번은 그냥 RX, TX로 생각하면 되는데요, 
 일반적으로 아두이노 우노에서는 하나뿐인 하드웨어 시리얼 핀을 선언할 때는 Serial.begin 로 선언하고,  사용할 때는 Serial.print("  ") 와 같이 사용하게 되는데요,  Mega보드의 경우,

Setup ( )  {    }에서,  
Tx1 , Rx1은  Serial1.begin 과 같이 선언해주고,  
Tx2 , Rx2는  Serial2.begin 과 같이 선언해주고,  
Tx3 , Rx3는  Serial3.begin 과 같이 선언해주고,  

main ( )  {   } 에서 사용할 때는, 
Tx1 , Rx1은  Serial1.print 와 같이 사용하면 되고,  
Tx2 , Rx2는  Serial2.print 와 같이 사용하면 되고,  
Tx3 , Rx3는  Serial3.print 와 같이 사용하면 됩니다.

 

참고로 아두이노 우노에서는 모든핀을 소프트웨어 통신핀으로 사용할 수 있지만,  메가 보드에서는 소프트웨어 통신 핀으로 사용 가능한 핀이 정해져 있습니다. 
   - 아두이노 메가의 경우10, 11, 12, 13, 14, 15, 50, 51, 52, 53, 62, 63, 64번 핀이 사용 가능하고 
   - 아두이노 레오나르도의 경우 8, 9, 10, 11, 14, 15, 16번 핀을 소프트웨어 통신 핀으로 사용 할 수 있어요.

반응형
반응형

【 아두이노프렌즈 초소형 아두이노 ATtiny85 기초부터 응용까지 완벽 풀코스(초미니 OLED 온·습도계 제작)

 


 여러분은 아래 이미지를 보시고 똑 같은 기능이 가능한 3가지 모델 중 어떤 것을 선택하시겠어요?
( 제품 비용, 제품 크기-공간 차지 등 고려 시 )

 당연히 너무 타이니(tiny)해서 매력적인 ATtiny85을 선택해야 겠죠?  ^^
그럼, 이번 시간을 통해 가격도 타이니,  크기도 타이니해서 공간 차지도 적어 너무 매력적인 ATtiny85에 대해 기초 부터 상세하게 설명드리고, 게다가 'OLED 온·습도계'라는 멋진 응용작품까지 만드는 법에 대해 상세하게 설명드릴테니 안내에 따라 실습해보세요. 

【 ATtiny85 개요 】


'ATtiny85'는 Atmel사의 AVR 시리즈중 하나이며,  8bit, 8pin 스몰 사이즈의 Microcontroller 입니다.(Atmel 사는 후에
Microchip사에 인수됨)  
 아두이노 보드의 메인 칩인 ATmega328 MCU와 같은 계열의 마이크로 프로세서 유닛입니다. 
따라서, 아두이노 처럼 프로그래밍된 코드를 올려 입출력 포트를 제어하는 프로젝트에 이용할 수 있으며, 비록 입출력 포트수가 적고 프로그래밍 영역 메모리(플래시 메모리)가 작지만,  우노 보드 보다 몇 배나 작은 크기로 인해 초소형 저전력 아두이노 프로젝트에 매우 적합한, 장점이 많은 MCU입니다. 
다만, 이렇게 아두이노IDE 툴을 통해 아두이노 코드를 업로드하여 작동하도록 하기 위해서는 부트로더라는 영역에 부트로더가 우선 설치되어져야 합니다.  마치 PC에서 윈도우와 같은 운영체제 설치와 응용프로그래밍이 돌아가기 위해 먼저 설치되어 있는 MBR과 같은 부트레코드(부트코드)가 필요하듯 말이죠.

여기서 시리즈 모델명에 대한 풀이를 잠시 하면 아래 이미지와 같습니다. 

따라서  ATtiny85는 8핀 타입의  IC이며, 코딩으로 프로그래밍 가능한 Flash 메모리 용량이 8Kb인 MCU가 됩니다.  필요한 경우, 아래 데이터 시트(Data Sheet)를 살펴 보세요.

ATTINY85.pdf
4.53MB

 

ATtiny85에 부트로더를 직접 올리는 실습은 아래 실습 과정에 있습니다
PC 에서의 MBR영역
AVR 칩에 부트로더와 코드가 탑재되는 영역

 따라서,  이번 학습에서는 앞부분에 부트로더를 굽는(칩의 메모리 영역에 기록) 과정부터 알려드립니다.  이 과정에서 절차를 생략하거나 순서가 바뀌면 에러가 날 수 있기 때문에 최대한 상세하게 안내를 하고 있으니, 천천히 보면서 개념을 정리하고 넘어가시면 좋습니다.  

 다음으로, 이런 부트로더를 굽는 과정에서는 Atmel 사의 AVR 시리즈 칩에서 사용하던 AVR ISP라는 전용 프로그래머가 필요합니다.  이 것 또한 따로 구하려면 비용이 들고, 번거롭기도 한데요, 다행히 아두이노 우노 혹은 나노 보드를 가지고 이런 AVR ISP 프로그래머를 만들어 사용할 수 있습니다. (중반부에 회로도면과 방법 설명)   물론,  아두이노 우노(나노) 보드에 올려진 Atmega328칩에는 이런 부트로더가 이미 탑재된 상태로 출시되기 때문에,  부트로더 탑재 과정 없이 바로 아두이노 코드를 올릴 수 있게 됩니다.

AVR ISP 프로그래머

아래는 ATtiny85의 상세 핀아웃(PinOut) 입니다.
IC에는 1번핀 부터~ 8번 핀까지 물리적인 핀 번호가 있으며,  PB0~PB5 까지 6개의 디지털 입출력이 가능한 포트가 있습니다.  이중에 PB5, PB2, PB4, PB3번 포트는 아날로그 입력에 대한 처리가 가능한 포트 이며,  PB0와 PB1 포트는 PWM출력(디지털 방식의 아날로그 값 출력)이 가능한 포트 입니다.   따라서, 아두이노 코드와 회로 연결를 통해 핀 아웃에 적혀진 기능을 사용할 수 있습니다.

ATtiny85의 핀 아웃(Pin Out), '보라색 원'표시는 1번핀의 위치를 알려줌

 

 

 일반적으로 많이 사용되는 주요 기능핀만 보기 좋게 정리된 이미지가 있어 소개합니다. 
주요 기능핀으로, I2C 통신용 핀(물리적 5번 핀, 7번 핀)과, SPI통신용(물리적 5번, 6번, 7번핀)핀이 표시되어 있고, PWM(물리적 5번핀, 6번핀),  Reset핀(물리적 1번 핀),  +전원 8번 핀 , -전원(GND) 4번 핀 등이 표시 되어 있으니 참고하세요.  

ATtiny85의 주요 핀 기능 표시

[ ※ 본 게시물의 모든 이미지는 클릭하면 확대 됩니다  ]



【 학습 목차 】

 

【 실습 재료 】

1. ATtiny85 : 1개 이상  (되도록 2~3개 이상 여유 있게 준비 하세요)
2. 전해 콘덴서 : 10uF 1개 (용량은 더 작거나 조금 더 커도 크게 관계 없습니다)
3. LED :  5 개 이상
4. 저항 : 220Ω 5개 이상(100Ω~470Ω도 가능),  4.7kΩ 1개 (1kΩ~10kΩ도 가능)
5. I2C type OLED (128x64 픽셀) :  1개 이상
6. 온습도 센서 :  DHT11 또는 DHT22 1개     (또는 각 1개)
7. 아두이노 보드 : 우노 보드 1개 또는 나노 보드 1개 (또는 각 1개)
8. 브레드 보드 : 400홀 1개 또는 170홀 3개  (또는 모두)
9. 전원 :  3.6~5.5V 사이 전원으로 사용가능한 모든 종류 가능

【 실습 #2 】 아두이노 우노 보드를 이용한 AVR ISP 보드 만들기 

▶ 회로 연결도면
우노보드를 이용해서 ATtiny85용 AVR ISP 보드를 만드는 연결도면 입니다.
아래 연결도를 보고 조립해 주세요.

우노보드를 이용해서 ATtiny85용 AVR ISP 연결도면

 단, 아래 이미지를 참고해서 콘덴서의 +, - 극성을 구분해서 연결해야 합니다.
파란색 사각형에 표시된 흰색 줄무늬가 있는 쪽의 리드선(길이가 짧은)이 '-극성'핀입니다.
상대적으로 다리(리드선)이 긴 쪽이 +극성 핀입니다.

 

< 실습 #1-1> ArduinoISP 코드를 아두이노 우노 보드에 업로드하기
먼저, 아두이노 IDE 프로그램을 실행시키고 아래 이미지 처럼 예제 파일에 있는  ArduinoISP 예제파일을 열어서 아두이노 우노 보드에 빌드&업로드 시켜주세요.   
: 아두이노 IDE 메뉴 》 예제 》 11. ArduinoISP 》 ArduinoiSP

이미지 클릭하여 확대해서 보세요

- 이때, 업로드시 에러가 난다면,  보드에 연결해 놓았던 콘덴서는 잠시 제거합니다.  코드가 업로드 되면 다음 단계 실습을 다시 연결해 주세요

 

- 환경설정하기 :  ATtiny85에 부트로더를 올리기거나 코드를 업로드하기 위해서는 우선적으로 ATtiny85 보드가 선택항목에 포함 되어 있어야 합니다.  아두이노 IDE 기본 설치 상태에서는 tiny85보드 항목이 보이지 않는데요,  이때,
  1.1 attiny관련 보드 정보를 담고 있는 JSON 파일에 대한 링크를 아두이노 IDE 환경설정 탭에서 추가해주세요. 

만약, 아래 이미지 처럼 기존에 esp8266과 같은 다른 보드의 URL이 존재할 경우, 아래 이미지 처럼, 창 아이콘을 눌러 팝업창이 뜨면 거기 제일 아랫줄에 붙여넣기 하여 추가해주면, 여러가지 보드를 동시에 추가해 놓을 수 있게 됩니다.   (아래 ATtiny 보드 추가용 주소를 복사하야 아두이노 환경설정에 추가해 주세요)

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json


- 아래 이미지, 아두이노 IDE 》 툴 》 보드 : 》 보드 매니저...    에서 검색창에 'attiny'로 검색 한 후 검색된 항목을 설치해 주세요. 

- 아래 이미지, 아두이노 IDE 메뉴 》 툴 》에서 , 
  보드 :  ATtiny25/45/85 ,   프로세서 : ATtiny85 ,   Clock : "Internal 8 MHz"  로 선택하고  
  포트는 자신의 아두이노 ISP 보드가 연결된 포트 번호를 선택하세요.

 이때, 프로그래머는 : 반드시 "Arduino as ISP"로 선택하세요.  ('ArduinoISP'는 아니에요! X )

- 아래 이미지,  다음 부트로더 굽기를 누르면  AVR ISP로 동작하는 아두이노 우노를 통해 ATtiny85칩의 플래시 메모리의 부트로더 영역에 부트로더가 탑재됩니다. 

- 아래 이미지, "부트로더 굽기 완료" 표시가 뜨면 부트로더가 ATtiny85에 탑재 성공한 것이에요.

- 이제 ATtiny는 아두이노 IDE를 통해 코드를 올리고 아두이노처럼 동작할 수 있습니다. 
- 아래 이미지,  그럼 5번 핀(PB0의 0번 포트)에 연결된 LED를 Blink 기본 예제를 올려서 잘 깜빡이는지? 동작을 테스트해 볼게요.

- 잘 깜빡인다면, 딜레이 타임을 조절해서,  예를 들어 delay(400) 으로 바꾸어 다시 업로드 테스트해 보세요.  바뀐 코드 적용도 잘 될거에요.

-  와우~!!!  
여러분은 방금 멋진 작업을 하셨습니다. 
지금의 ATtiny85 칩은 아두이노 처럼 코드 올려서 동작 시킬 수 있게 된 것이죠. 
작고 간단한 일에는 덩치큰 아두이노 우노 형님이 나서지 않더라도, ATtiny85 막내가 충분히 처리할 수 있게 된 것이에요.
그럼, 정말 그런 것인지?  우노와 연결된 케이블이나 전원선을 제거하고 ,  ATtiny85칩에 직접 전원을 넣어 보면,  우노보드 없이 ATtiny 칩만으로도 동작할 수 있는지? 확인이 되겠죠. (아래 이미지)

Data Sheet를 살펴보면, tiny85칩은 기본적으로 동작전원이 '2.7v~5.5v'로 되어 있으니, 부족하거나 오버되지 않도록 주의해 주세요. 

물론 OLED 같은 경우 3.3V 전원이 요구되니 공급전압은 3.3v 이상이어야 전체적으로 동작됩니다.  
따라서 전체 구성되는 모듈들의 최소 요구전압을 확인하여 공급전압을 결정해야 합니다.

 - 응용회로로 LED를 여러개 연결하여 ATtiny85의 포트 여러개를 제어하는 연습을 해볼게요.
 - 아래 이미지, 회로 연결도와 코드를 참고하세요.  
 - 순서는 부트로더가 탑재된 tiny85칩에 LED1to5.ino 코드를 업로드  → 순차점멸회로에 코드 업로드된 tiny85칩 연결 → 적절한 외부 전원을 연결하여 동작을 확인함.

이미지를 클릭하면 확대 됩니다

< 아두이노 코드 : 1 to 5 LED 순차 점멸 코드 >

/* LED 5개 순차 점멸 하기  with Tiny85         */
/* Rasino.tistory.com   YouTube: 라즈이노 IoT */
int i=0;
void setup() {
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);    
}

void loop() {
  for (i=0; i<5; i++) { 
    digitalWrite(i, HIGH);   
    delay(200);               
  }
  for (i=4; i>=0; i--) { 
    digitalWrite(i, LOW);   
    delay(200);               
  }
}

(Code download)

LED1to5.zip
0.00MB

<실제 동작 모습>

- 멋지지 않습니까? 이렇게 작은 칩하나로 커다란 아두이노를 대신할 수 있으니 말이죠~!
  물론, 입·출력포트 수가 적고, 메모리 용량이 작아, 아두이노보드 처럼 사용하기에는 제약이 있지만,
  이처럼 작고 단순한 제어나 제품사이즈를 소형화 시켜야하는 프로젝트에는 정말 활용하기 좋습니다
- 여기서 LED에 연결된 저항의 역할은 과도한 전류의 흐름을 조절하여 LED를 보호하는 역할을 해요
- ※ 저항을 먼저 거친 후 LED가 연결되어도 되고, LED를 먼저 거치고서 저항이 연결되어도 됩니다

- 그럼, 이번에는 스위치를 넣어 입력에 따른 출력을 제어할 수 있는지? 간단히 확인해 볼게요
 이 개념이 중요한 이유는? 스위치 대신 다양한 센서로 제어가 가능하다는 뜻이며, LED 대신 OLED와 같은 디스플레이나 모터 같은 것을 제어할 수 있다는 뜻이기 때문입니다. 
- 연결위치는 LED순차 점멸회로에서 5번 LED가 연결된 선을 빼고 스위치를 달아주겠습니다.
  스위치를 누르는 순간 GND와 연결 되어 있어서 LOW ( 0 ) 값이 입력되며, 스위치를 누르지 않았을 때는 확실한 High신호가 입력되도록 하기 위해 4.7KΩ의 저항을 달았어요.  이런 용도의 저항을 풀업(Pull UP)저항이라 하며 보통 1㏀~10㏀ 사이 값을 주로 사용하게 됩니다. 

ATtiny85 LED 순차점등 스위치 제어 연결도

- 코드내용은 스위치를 누르면 LED의 순차 점멸 속도를 더 빠르게 하도록 하였는데요,
 위에서의 과정과 똑같이 UNO로 만든 AVR ISP를 통해 아래 코드를 업로드하세요.

/* 스위치로 LED 순차 점멸 속도 바꾸기 with Tiny85 */
/* Rasino.tistory.com   YouTube: 라즈이노 IoT  */
int i=0; 
int SW;
void setup() {
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, INPUT);    
}
void loop() {
  SW=digitalRead(4);
  if (SW==LOW) {         
    for (i=0; i<4; i++) { 
      digitalWrite(i, HIGH);   
      delay(20);               
    }
    for (i=3; i>=0; i--) { 
      digitalWrite(i, LOW);   
      delay(20);               
    }
  }
  if (SW==HIGH) {         
    for (i=0; i<4; i++) { 
      digitalWrite(i, HIGH);   
      delay(80);               
    }
    for (i=3; i>=0; i--) { 
      digitalWrite(i, LOW);   
      delay(80);               
    }
  }    
}

(Code download)

ATtinyControlLEDSW.zip
0.00MB

<실제 동작 모습>

- 스위치를 누르지 않은 상태에서는 20ms(0.02)초 간격으로 LED가 On/Off 되며,  만약 
  스위치를 누르게 되면 80ms(0.08초) 간격으로 LED가 On/Off 되게 됩니다

- 이번에는 Uno보드 보다 작은 Nano 보드를 이용해서 AVR ISP 전용보드를 만들어 볼게요.
  작업 방법은 Uno 보드에서와 동일합니다.  아래 회로 연결도를 보고 조립해 주세요.

- 만약, ArduinoISP 코드를 업로드 할 때, 아래처럼, avrdude : stk500_getsysc ( ) attempt 10 of 10 : not in sys...  와 같은 에러가 발생한다면,   AVR ISP 회로를 만들면서 Reset 포트에 연결한 콘덴서를 잠시 제거한 후에 업로드 해보세요.   업로드가 완료 된 후에 다시 콘덴서를 꽂아주면 됩니다.

 - 업로드가 완료되면, LED순차회로 코드를 업로드 시켜 동작을 확인해 보세요.

- 아래이미지, 리튬폴리머 배터리를 연결할 때 사용하는 커넥터는 핀이 매우작아 브레드보드에 꽂기가 어려운데요,  아래 이미지에서와 같은 부품을 구해서 납땜으로 핀을 확장해 주면, 브레드보드에도 꽂을 수 있게 됩니다.


여기서 중요한 건,  리튬 이온, 리튬 폴리머와 같은 전지를 사용할 때는, 반드시 합선(전기적으로 +양극과 -음극 단자 연결된 상태)에 주의해야 합니다.  이는 겉으로 보기에 직접적으로 연결되어 보이지 않더라도, 회로적으로 낮은 저항 값으로 인해 합선과 같은 결과가 나타날 수 있으니,  전기전자적 기본지식이 부족하다면, 임의적인 확장이나 선 연결을 자제해 주시기 바랍니다.  그래야 합선으로 인한 소폭발 및 화재를 예방 할 수 있습니다. 

 

- 그럼 이제 tiny85의 기본 사용법을 충분히 익히셨다면, 이제 활용도 높은 응용회로를 만들어 볼게요
- I2C 통신을 이용해 온·습도 센서의 데이터를 받아 OLED에 표시해주는 미니'온습도계'입니다

[ 선수 학습 자료 ]  OLED 온·습도계를 만들기 과정에 참고하면 도움될 사전학습자료 입니다. 

1. 【 아두이노 센서#17】 DHT11 온·습도 센서 다루기 #1

2. 【 아두이노 센서#18】 DHT11 온·습도 센서 다루기 #2

3. 【 아두이노 센서#19】 DHT22 온·습도 센서 다루기 with LCD#3

4. 【 아두이노모듈#29】 OLED 처음 사용 설명서 #1 (SPI, I2C 주요 5종 사용법 안내)

 

 5-1.  DHT11센서 또는 DHT22 센서를 를 활용한 OLED 초소형 온·습도계 회로 연결도를 참고하여 회로를 완성하세요.

DHT11센서와 OLED를 활용한 온습도계 연결도
DHT11센서와 OLED를 활용한 온습도계 연결도

  ※ OLED의 경우에는 아래 이미지처럼, GND와 VCC 단자의 순서가 다른경우가 있으니 잘 보면서 연결하세요.   또한 많은 종류의 OLED는 3.3V 전원과 5V 전원까지 모두 지원하지만, 특정 제조사 모델의 경우 5V로만 동작하는 경우가 있으니 OLED를 구입한 곳(또는 제조사)의 스펙을 확인해 보세요.



5-2.  아래 소스 코드를 ATtiny85에 업로드하세요.
 : 업로드 시에는 위에서 만든 Uno AVR ISP를 이용하거나,  Nano로 만든 AVR ISP 프로그래머를 이용해서 업로드하면 되며,  새로운 칩을 사용할 경우, 부트로더 탑재 단계부터 시작해 주세요,   혹은 기존 부트로더가 올려진 칩에서는 이 단계를 건너뛰고 아두이노 코드를 바로 전송시키면 됩니다. 

 [ 소스 코드 - DHT11 센서용 ]

ATtiny_OLED_DHT11_TinyOzOled.zip
0.00MB

 [ 소스 코드 - DHT22 센서용 ]

ATtiny_OLED_DHT22_TinyOzOled.zip
0.00MB


[ 필수 라이브러리 ] 
- 컴파일 과정에서의 대부분의 에러는 맞지 않은 라이브러리 사용으로 인한 에러이니 반드시 아래 내용을 읽어보세요.

 - 라이브러리는 이름이 같아도 파일의 용량이 다르면 안에 내용이 다르다는 것을 뜻합니다.
서로 다른 사람이 라이브러리를 수정, 추가 또는 만들었기 때문에 제가 코드 작성에 사용한 라이브러리를 그대로 사용하셔야 컴파일 에러가 나지 않습니다.  반드시 아래 첨부해드리는 라이브러리를 설치해서 실행해보세요. 
 - 라이브러리 설치할 때, 가장 깔끔하고 좋은 방법은 아래 이미지 처럼, 아두이노 IDE의 메뉴에서, 
   "스케치 》 라이브러리 포함하기 》 .ZIP 라이브러리 추가...  "  메뉴를 통한 설치입니다. 
   그래서 아래 첨부해드리는 라이브러리를 다운받아 압축을 풀지 않은 채로 .ZIP 라이브러리 추가... 메뉴를 통해 다운받은 라이브러리 압축파일을 선택해서 추가해 주세요.


 1-1.  온습도 센세와 관련된 라이브러리 입니다.  

DHT.zip
0.00MB

 1-2.  OLED 라이브러리 입니다. (플래시 메모리 용량이 적은 ATtiny85에, 사용할 수 있도록 축소시킨 라이브러리 이며, 기본 작은 사이즈의 영문 알파벳 및 숫자 및 아스키 기호를 표시하고, 큰 사이즈의 숫자를 나타낼 수 있게 디자인 되었습니다.   큰 알파벳 X ,  한글 X ,    기타 화면 클리어 ,  출력과 관련된 명령어를 사용할 수 있습니다)

TinyOzOled-master.zip
0.01MB

  1-3.   I2C 통신을 위한 라이브러리 입니다. (아래 압축파일 내부에 'TinyWireM.h' 파일 :  DHT 센서와 그리고 OLED와 같은 I2C 통신을 하는 장치와 Tiny칩과의 I2C 통신을 하는데 필요한 라이브러리 입니다)

ssd1306_minimal.zip
0.02MB

 


【 동작 확인 】
 DHT11 센서와 DHT22센서 회로에 코드를 올리고 전원을 연결하여 동작확인을 해보세요.

DHT11 온습도 센서를 이용한 ATtiny85 회로
DHT22 온습도 센서를 이용한 ATtiny85 회로

DHT22 센서를 이용하면, 데이터 값이 소숫점 1자리까지 DHT11센서보다 정밀하게 표시 됩니다. 

끝으로,  아래 이미지에 보이는 것 처럼, 용도와 목적에 맞게 다양한 전원을 활용할 수 있습니다. 
- 3.7V 리튬폴리머 배터리,  - 3.7v 리튬이온 배터리,  4.5V AA건전지(1.5V AA x 3개 직렬 소켓 활용) , 
  3.0V CR2032 무수은전지(리튬)  ,  여기서 DHT센서와 OLED모듈의 구동전압이 최하 3.3v 이상이 되어하 합니다.  하지만, 3V로 구동되는 회로 제작시 참고될 수 있도록 연결해 본 것입니다.   아래 다양한 전원사용은 영상을 참고하면 명확하게 확인 가능합니다.

 

[ 에러 체크리스트 ]

[코드 컴파일 과정과 하드웨어 조립과정에서 예상할 수 있는 에러에 대한 체크 리스트]

 

 

【  전체 과정 영상으로 학습하기!  】

 

 

[ 만약,  ATtiny84를 활용하신다면,  아래 링크를 참고해 보세요.  매우 정리가 잘 되어 있습니다 ]
https://blog.naver.com/jehongjeon/222509007422

 

ATtiny84 / 85 OLED 구동 (PORT_USI was not declared in this scope 해결)

안녕하세요 jehongjeon 입니다 어느새 방학이 끝나고 다시 학기가 시작했네요 이번 학기는 작품 만들기 &am...

blog.naver.com

 

반응형
반응형

【 아두이노Nano#2 NANO 33 IoT 처음 사용 설명서 2편 WiFi 활용하기

 오늘은 지난 시간에 이어 Nano 33 IoT 보드에서 가장 중요한 기능인 WiFi 기능을 이용해 보도록 하겠습니다.

[ 주요 실습 ]   
 1. Nano 33 IoT 보드를 WiFi 공유기에 접속시키고 AP(Access Point)로 작동하도록 한다.
 2. Nano 33 보드에 LED 3개를 연결한다. (점퍼선을 이용하지 않고 굵은 단선을 이용한 방법)
 3. 스마트폰 혹은 스마트패드의 웹 브라우저에서 Nano 33 IoT 보드에 명령어를 보내 LED를 원격으로 제어한다. 
 4. 앱인벤터로 앱을 제작하여 앱으로 시각적으로 편리하게 제어할 수 있다.

NANO33 IoT 보드 뒷면 모습
NANO33 IoT 보드 윗면 모습

 먼저, Nano 제품군의 상세 비교 스펙을 참고해 보세요.
(클릭, 확대해서 보세요~)

- 선수학습 자료 : Nano 33 IoT 보드의 기초 자료를 먼저 참고하세요 

1. 2020/04/14 - [아두이노/5. 아두이노-프렌즈] - 【 아두이노Nano#1】 NANO 33 IoT 처음 사용 설명서

2. 2020/04/14 - [아두이노/5. 아두이노-프렌즈] - 【 아두이노Nano#2】 NANO 33 IoT 처음 사용 설명서 #2 (LSM6DS3 센서 테스트)

3. 2020/04/13 - [아두이노/3. 아두이노 모듈] - 【 아두이노모듈#28】 ESP8266 esp-01 활용하기#4 : 스마트폰으로 LED 컨트롤 하기(with Arduino & cp2102 ) (App Inventer로 앱 만들기 참고)



[ 보드 특징 ]
 아두이노 나노와 사이즈 (18mm X 45 mm)가 같으면서, IoT 및 블루투스, 각종 센서 기능이 강화된 보드입니다.
그동안 나노 보드의 불편했던 USB 커넥터가,  안드로이드 휴대폰과 같은 Micro-5Pin으로 바뀌었네요~ ^^
기존 나노보드 크기에 6축 또는 9축 가속도/자이로 센서가 탑재되었고, Sense 보드는 근접센서, RGB센서, 주변광센서, 제스처 센서가 탑재되어 팔방미인으로 통할 수 있는 보드입니다.   다만, 아직 가격이 상당해서,  가성비는 좀 그렇고 호환 보드가 출시된다면 더없이 좋을 것 같네요. 

 주요 특징으로는 , 기존 NANO 보드와 NANO Every 보드까지는 5V 톨러런트(Tolerant : 회로기판 내의 3.3V 부품도 5V레귤레이터를 통해 내부적으로 문제없이 처리 또는 견딜 수 있는)가 지원되지만,  NANO 33 보드는 이름에서도 알 수 있듯, USB 전원을 제외하고 신호 레벨 전압을 3.3V로 주어야 손상되지 않습니다. 

 NANO 33 보드들은 모두 BLE 기능을 지원하는데요, 일반적으로 블루투스는 동작시 전력 소모가 큰 단점이 있는데, 저전력으로 동작하도록 설계된 블루투스를 BLE라고 합니다.  NANO 33 IoT는 BLE 4.2를 지원하고,  NANO 33 BLE와NANO 33 BLE SENSE는 BLE 5.0을 지원합니다.  NANO 33 IoT의 경우 USB Host를 지원하며, 네오나르도와 같은 HID 장치로 사용이 가능한 것으로 나와 있네요. 

[ 보드 인식과 아두이노 스케치 IDE 사용하기 ]
 먼저 보드를 처음 연결하게 되면, 보드 드라이버가 자동으로 될 수 있지만,  만약 자동으로 설치되지 않을 경우는, PC-Nano33 IoT 보드 간 시리얼 통신에 사용되는 FTDI 칩셋의 드라이버를 설치해 주어야 합니다.  아래는 Nano 보드가 인식이 되고 시리얼 포트까지 할당받아진 상태입니다.

 

- FTDI 드라이버 다운로드 :
아래 홈페이지로 접속하여 운영체제 등 자신의 환경에 맞는 드라이버를 다운로드하으세요
https://www.ftdichip.com/Drivers/VCP.htm

- 다음으로 아두이노 IDE 스케치 툴에 Nano 33 IoT 제품군을 추가해 주어야 합니다.  스케치 IDE에서는 기본적으로 해당 보드가 설치되어 있지 않기 때문에, 메뉴에서,   툴 》  보드 》보드매니저를 열어 NANO 관련 추가 제품군을 등록해 주어야 합니다.   보드 매니저 검색창에서 'nano 33'으로 검색한 다음, 아래 Arduino SAMD Boards(32-bits ARM Cortex-M0+)를 설치해주세요. (설치 과정에 시간이 다소 걸릴 수 있으니, 중간에 창을 닫지 말고 끝까지 기다려 주세요)

- 또는 보드 최초 연결 시 보드 업그레이드 창이 아래처럼 뜨네요.  뜨면서 보드 매니저 창을 바로 띄워주기도 합니다.

- 또한 nano 33 IoT 보드는 wifinina라는 칩셋을 사용하는데요,  이와 관련한 라이브러리를 아두이노 라이브러리 매니저 창에서 설치해주면 됩니다.  ( 툴 》 라이브러리 관리 》 라이브러리 매니저 ,  'wifinina'로 검색)

- 보드 설치가 완료되면, 아래처럼 "Arduino NANO 33 IoT" 보드를 선택하고,  포트에는 "COMxx (Arduino NANO 33 IoT)" 인식된 포트를 선택해 주세요.

 

[ 회로 도면 ]

- 기본적으로 Nano 33 IoT 핀 배열은 기존 Nano 보드와 일치하니 이번 실습에서 사용되는 연결은 일반 나노 보드 핀 맵을 참고 해서 연결해도 무방합니다.

 [ 나노 33 IoT핀맵 ]

Nano 33 IoT PinOut

Nano 33 IoT 보드와  Nano 오리지널의 핀아웃은 똑 같기 때문에 아래 일반 나노의 핀 아웃을 참고하셔도 되요 ^^

아두이노 나노의 PinOut

( 실제 회로 연결 모습 )

- 선 연결 작업 시 아래처럼 점퍼선을 이용하지 않고 굵은 단선을 이용하여 깔끔하게 작업하는 것을 권해드려요.
점퍼선을 이용한 경우, 회로가 조금만 복잡하여도 어디가 어디로 연결된 건지? 만든 사람 본인도 파악하는데 시간이 걸리며, 만약, 잘못 연결된 곳이 있을 경우 찾기가 매우 힘들게 됩니다.   그래서 아래 오른쪽 이미지에서 처럼 필요한 길이만큼만 잘라서 직선적으로 바닥에 붙여 연결하면 회로 파악이 쉽고 연결도 깔끔해져,  납땜 작업 없이도 바로 작품용으로 사용할 수 있는 퀄리티가 나오게 됩니다.  (이때,  부품들도 모두 리드선을 적절하게 잘라서 보드에 바짝 붙여 주세요)

 물론 그냥 점퍼선으로 꽂는 것이 간편하고 시간이 적게 걸리는 점이 있지만,  길이에 맞추어 꽂는 작업이 조금만 익숙해지면 시간 차이는 별로 나지 않으며, 작품을 몇 개만 만들어도 다양한 길이의 완성된 선들이 모이기 때문에 절대 귀찮거나, 힘들지 않습니다.  작업의 만족도 또한 높게 나옵니다.(계속해보면 작업하는 맛?을 느낄 수 있으세요). 


- 이런 작업을 위해서는 아래와 같은,  굵은 단선이 필요하고, 와이어 스트리퍼 공구가 있으면 편리하게 작업이 가능합니다.(니퍼만으로도 작업 가능하지만, 와이어 스트리퍼를 사용하게 되면, 시간이 단축되며, 내부 와이어가 흠집이 나서 부러지는 것을 방지할 수 있습니다)

 

반응형

[ 회로 조립 ]

- Nano 보드와 같은, 핀이 많은 본체를 브레드보드에 직접 꽂을 때는 꽂기가 다소 뻑뻑할 수 있는데요, 좌우를 고르게 눌러가며 다소 힘을 주어 끼워 주세요.
또한, 꽂은 위치를 바꾸기 위해 다시 뽑아야 할 때는 한쪽만을 많이 들어 올릴 경우 핀이 휠 수 있으니 조심해야 합니다. 그래서 일자 드라이버 혹은 핀셋의 뒷부분을 이용해서 나노와 브레드보드 사이에 밀어 넣은 다음 양쪽을 번갈아 조금씩 들어 올려 주면 핀이 휘지 않고 탈거할 수 있습니다.


- LED 테스트와 + - 단자 구분하기
 LED는 +(플러스) 단자와 -(마이너스) 단자의 극성이 존재하는데요,  연결을 반대로 하게 되면 LED에 불이 들어오지 않습니다.  따라서 이 부분을 처음에 확실히 체크해서 연결해주어야,  나중에 동작이 안 될 때 아두이노 코드 쪽을 살펴보느라 시간 낭비되는 것을 방지할 수 있어요.  아두이노 코드 쪽은 문제없었는데 찾다 찾다 결국 LED를 반대 방향으로 꽂은 걸 발견하게 되면 정말 허탈하니까요. ㅎㅎ
 LED와 같은 전자부품들을 체크할 때 멀티 테스터를 사용하면 편리한데요,  LED를 동작시켜 볼 수 있어서 고장 유무 파악과 +선(단자)과 -선(단자)을 쉽게 파악할 수 있습니다.

- 저항 측정 단자로 전류를 흘려 돌아오는 값을 가지고 저항 값을 계산하게 되는데요, 이 전류를 가지고 LED를 켜볼 수 있어요,  테스터의 측정 레인지는 다이오드 혹은 소리 표시가 있는 도통 단자로 놓거나,  저항 측정 단자 중 2KΩ 이하 단자로 놓고 측정해 보세요. 2KΩ 이상에서는 내부 건전지에서 흘러나오는 전류값이 너무 작아서 LED를 켤 수 있는 용량이 되지 않기 때문입니다. 
  그리고
LED가 켜질 때 연결된 선의 색을 가지고  LED의 + , - 리드선 구분을 할 수 있습니다.   만약 LED가 켜질 때 연결한 붉은색 측정 단자의 LED 리드선 쪽이 +선이며,  반대쪽이 LED -리드선이 됩니다. 

 만약, 테스터가 없어도 + , - 구분이 가능한데요,  기본적으로 LED를 제조할 때 +리드선을 -리드선보다 길게 만들고 있습니다.   그리고, 만약, 작업을 위해 선을 수평으로 잘라 버릴 경우에는,  불빛이 나오는 투명한 부분 안쪽을 보면 머리가 작은 쪽이 거의 99% +리드선이라고 여기시면 됩니다.  (하지만 극히, 일부 제조사에서는 반대로 LED를 생산하는 곳이 있습니다)

- LED와 같은 부품들을 보드에 부착할 때는 브레드보드에 깊숙이 삽입될 만큼의 선만 남겨 놓고 잘라서 보드에 밀착시켜 꽂아 주세요. 

 

- 연결할 단선도 직각 형태로 필요한 길이만큼만 정확히 잘라서 선이 위로 올라오거나 모자라지 않도록 깔끔하게 작업해 주는 것이 좋습니다.  이런 형태로, 여러 작품을 작업해 놓으면 다음번 다른 작품의 작업 시 필요한 길이의 선과 부품을 별다른 작업 없이 그대로 사용할 수 있어서 너무 편리합니다.

[ ※ 주의 ]
 nano 33 IoT 보드를 다룰 때는 아래 WiFi 안테나 부분을 주의해서 다루어 주세요. 
무리하게 만지거나 누르면 안테나 부분이 부러 질 수 있고, 글루액 방울 같은 걸로 지지해 놓았으니 떼어내려고 하지 마세요.  비싼 nano 33 IoT 보드가  저렴한 일반 nano 보드로 다운 그레이드 되는 건, 순식간입니다!   ^^;;

 

[ 소스 코드 ]
- 보드가 완성이 되면, 아두이노 보드를 PC에 연결하고 아래의 소스 코드를 전송하세요.

#include <SPI.h> 
#include <WiFiNINA.h> 
int LED1 = 2; 
int LED2 = 3; 
int LED3 = 4; 
const char* ssid = "여기에 WiFi이름을 입력하세요";       // 공백없이 정확히 넣어야 해요.
const char* password = "여기에 WiFi pass워드를입력하세요";   // 공백없이 정확히 넣어야 해요.
int status = WL_IDLE_STATUS; 
WiFiServer server(80); 
void setup() { 
  Serial.begin(9600); 
  delay(10); 
  pinMode(LED1, OUTPUT);   // 출력포트로 설정
  pinMode(LED2, OUTPUT); 
  pinMode(LED3, OUTPUT); 
  digitalWrite(LED1, 0);   // LED Off로 초기화
  digitalWrite(LED2, 0); 
  digitalWrite(LED3, 0); 
  // WiFi 네트웍에 접속 
  while (status != WL_CONNECTED) { 
    Serial.print("Attempting to connect to SSID: "); 
    Serial.println(ssid); 
    status = WiFi.begin(ssid, password); 
    // WiFi에 접속할 때까지 10초간 대기
    delay(10000); 
    } 
    Serial.println(""); 
    Serial.println("WiFi connected"); 
    // 서버 시작
    server.begin(); 
    Serial.println("Server started"); 
    // 할당받은 IP 주소를 시리얼 모니터로 출력
    char ips[24]; 
    IPAddress ip = WiFi.localIP(); 
    sprintf(ips, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);  // IP형식으로 출력
    Serial.println(ips); 
    } 
void loop() { 
  // 클라이언트(폰, 패드등 동일 WiFi로 접속하는 기기)가 접속하였는지 체크
  WiFiClient client = server.available(); 
  if (!client) { 
    return; 
  } 
  // 클라이언트로부터 데이터 수신을 기다림
  Serial.println("new client"); 
  while(!client.available()){ 
    delay(1); 
  } 
  // 요청(데이터)의 첫 줄을 읽어 req에 저장
  String req = client.readStringUntil('\r'); 
  Serial.println(req); 
  client.flush(); 
  int val1 = 0; 
  int val2 = 0; 
  int val3 = 0; 
  int Ledreq = 0; 
  // 비교문으로 요청 들어온 값과 일치하는 부분이 있을 경우 {  } 안의 내용을 실행.
  // req.indexof("문자열")은, req에 있는 데이터에서 "문자열"이 일치하는 문자가 없을 경우는 '-1'을 반환.
  // 그외 일치하면 해당 문자열의 인덱스 시작위치(숫자)를 반환.   
  if (req.indexOf("/gpio1/0") != -1) { 
    val1 = 0;  Ledreq = 1; 
  } else if (req.indexOf("/gpio1/1") != -1) { 
    val1 = 1; 
    Ledreq = 1; 
  } else if (req.indexOf("/gpio2/0") != -1) { 
    val2 = 0; 
    Ledreq = 2; 
  } else if (req.indexOf("/gpio2/1") != -1) { 
    val2 = 1; 
    Ledreq = 2; 
  } else if (req.indexOf("/gpio3/0") != -1) { 
    val3 = 0; 
    Ledreq = 3; 
  } else if (req.indexOf("/gpio3/1") != -1) { 
    val3 = 1; 
    Ledreq = 3; 
  } else { 
    Serial.println(" ... "); 
    client.stop(); 
    return; 
  } 
  // if문에 의해 설정된 값을 출력(LED On/Off)
  digitalWrite(LED1, val1); 
  digitalWrite(LED2, val2); 
  digitalWrite(LED3, val3); 
  client.flush(); 
  // 요청에 대해 응답하기. 
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n"; 
  if(Ledreq==1) { 
    s += "LED1 is "; 
    s += (val1)? "ON": "OFF"; // vall의 값이 참이면('0'아닌 값은 모두 참) 'ON'저장, 거짓이면'OFF'저장
  } else if(Ledreq==2) { 
    s += "LED2 is "; 
    s += (val2)? "ON": "OFF"; 
  } else if(Ledreq==3) { 
    s += "LED3 is "; 
    s += (val3)? "ON": "OFF"; 
    s += " , Welcome to RasINO IoT YouTube ^^";
  } 
  s += "</html>\n"; 
  // 응답할 내용을 클라이언트(폰, 패드 등 WiFi로 접속하는 기기)로 전송
  client.print(s);   //  예시 "LED1 is ON"  
  delay(2); 
  client.stop(); 
  Serial.println("Client disonnected");     
}

 (아두이노 코드 링크)

LED_WebControl.zip
0.00MB


[ 동작 확인 ]
 
- 우선 시리얼 모니터를 열고 10~20여 초를 기다리면, nano 33 IoT가 WiFi공유기로부터 IP를 할당받는 데요, 시리얼 모니터 창에 나타나도록 되어 있으니 참고하세요.  (할당받는 주소는 사람마다 다를 수 있습니다)
- 할당받은 주소를 스마트폰이나 패드에서 웹브라우저를 띄운 다음 주소표시줄에 아래와 같은 형식으로 입력해주세요.

' http://192.168.11.6/gpio1/1 '   → 1번 Red LED 켜기 
' http://192.168.11.6/gpio1/0 '   → 1번 Red LED 끄기 
' http://192.168.11.6/gpio2/1 '   → 2번 Blue LED 켜기 
' http://192.168.11.6/gpio2/0 '   → 2번 Blue LED 끄기 
' http://192.168.11.6/gpio3/1 '   → 3번 Green LED 켜기 
' http://192.168.11.6/gpio3/0 '   → 3번 Green LED 끄기 


- 현재 nano 33 iot 보드와 스마트기기는 동일한 WiFi 공유기로 접속되어 있어야 제어가 가능합니다. 
 Nano 33 iot 보드가 공유기로부터 할당받은 주소는 사설 IP이기 때문에 외부망에서는 보이지 않습니다.  따라서 외부에서 nano 33 iot 보드를 제어하고 싶다면,  공유기 설정으로 들어가서 nano 33 iot 보드가 할당받은 주소를 포트 포워딩이나 DMZ 설정 등과 같은 조치를 해주면 가능할 수 있습니다.  
- 또한 요즘 한창 유행하고 있는 Bylink(블링크) , MQTT와 같은 클라우드 서비스를 연동해서 하면 가능할 수 있으니,  필요하다면, 관련 부분은 검색해 보세요.


- 그럼, 마지막으로 웹 주소창의 입력으로는 조금 불편한데요,  이를 앱인벤터를 이용해서 앱을 만들어 제어해보면 편할 것 같네요. 
 - 순수하게 앱인벤터 사용법은 라즈이노 IoT의 앱인벤터 학습 카테고리와, 지난 esp8266-01 LED Web Control 영상을 먼저 참고하면 쉽게 하실 수 있습니다.  

[ 앱화면 구성  - UI 부분]


[ 앱화면 구성  - 코딩 블럭 부분]  (이미지를 클릭하면 확대 됩니다)


 [ 최종 완성된 앱 파일 다운 받기 - download apk file ]

Nano33IoT_LED.apk
3.53MB


 최종적으로 만든 앱을 설치해서 아래처럼 동작이 되는지 확인해보세요~  ^^

 

  끝으로 이 모든 과정을 따라 하기 쉽도록 영상으로 제작했으니,  영상도 함께 참고해 보세요.

 

반응형