반응형

【 아두이노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


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

 

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

 

반응형