개발자/Arduino

Arduino Nano 33 IoT 개발 가이드 2 - 기본적인 예제 살펴보기

지구빵집 2020. 5. 13. 16:04
반응형

 

Arduino Nano 33 IoT 개발 가이드 2 - 기본적인 예제 살펴보기

 

여기서 살펴볼 예제는 아두이노 nano 33 IoT 보드에서만 실행되는 예제가 아니라 아두이노 우노를 비롯한 다른 보드에서도 실행되는 예제이다. 코드를 참고하고 다른 센서들을 연결해 테스트하면 된다. 

 

전체 강의자료와 소스코드는 아래를 참고하십시요. 소스코드의 출처는 위의 책 마지막 페이지에 소개되어 있습니다.

 

Arduino Nano 33 IoT 개발 가이드 1 - 개발환경

Arduino Nano 33 IoT 개발 가이드 2 - 기본적인 예제 살펴보기

Arduino Nano 33 IoT 개발 가이드 3 - WiFi Network 실습

Arduino Nano 33 IoT 개발 가이드 4 - 내부 RTC와 Sleep Mode

Arduino Nano 33 IoT 개발 가이드 5 - Arduino Cloud

Arduino Nano 33 IoT 개발 가이드 6 - Accelerator and Gyroscope

Arduino Nano 33 IoT 개발 가이드 7 - Bluetooth Low Energy (BLE)

실습에 필요한 전체 소스코드 다운

 

다음 데모를 구현하려면 푸시 버튼과 LED가 필요하다. 여기서는 보드위에 내장된 13번 핀에 연결된 LED를 사용한다. 또한 Arduino 디지털 핀 7번에 푸시 버튼을 연결한다.

 

Digital I/O 

 

본 실습에서는 디지털 I/O를 활용하여 Arduino 프로그램을 실습한다. 해당하는 GPIO 핀에 디지털 데이터 0과 1을 쓸 때는 digitalWrite()를 이용하고, 디지털 입력을 읽으려면 digitalRead()를 사용한다. 할 수 있습니다. 아래 이미지는 Arduino Nano 33 IoT의 핀아웃이다. 디지털 핀은 2~12 까지 x = Dx 레이블로 표시한다. 유의 사항은 보드 뒷면에 흰색으로 칠해진 곳은 GND 핀이다.

 

 

ButtonLed.ino

int led = 13;
int pushButton = 7;
int state = 0;

void setup() 
{
	pinMode(led, OUTPUT);
	pinMode(pushButton, INPUT);
}

void loop() 
{
	state = digitalRead(pushButton);
	digitalWrite(led,state);
	delay(300);
}

 

아두이노 통합 개발환경에서 입력된 모습은 아래 이미지와 같다.

 

통합 개발환경에서 코드 입력 화면

 

푸시버튼 출력을 D7에 연결하고 버튼을 누르면 보드의 핀 13번에 연결된 (Built in)LED 점등을 확인할 수 있다. 

 

씨리얼 통신

 

UART 라고 말하는 포트를 가지고 있다. RX(핀 0), TX(핀 1)이다. 아두이노 보드와 컴퓨터나 다른 장치와 통신에 사용한다. Serial 통신 기능에 관한 라이브러리(자유롭게 사용하는 함수리스트)는 링크를 확인한다. 

 

아래 코드는 SerialDemo.ino 코드로 입력 후 업로드 한다. 씨리얼 통신을 확인하기위해 메뉴 -> 툴 아래의 씨리얼 모니터나 화면 오른쪽 상단의 돋보기 모양의 버튼을 클릭해 확인한다.

 

int led = 13;

void setup() 
{
	Serial.begin(9600);
	pinMode(led, OUTPUT);
}

void loop() 
{
	Serial.println("LED: HIGH");
	digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
	delay(1000); // wait for a second
	Serial.println("LED: LOW");
	digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
	delay(1000); // wait for a second
}

 

아날로그 데이터 확인하기 

 

Arduino Nano 33 IoT에는 핀 A0, A1, A2, A3, A4, A5, A6, A7에 ADC 핀이 있다. 외부에서 들어오는 아날로그 신호를 디지털로 변환하는 기능을 수행한다. 테스트를 위해 아래 이미지와 같은 SparkFun Electret Microphone을 사용하고 마이크로폰에 대한 자료는 링크를 확인한다.

 

Electret Mic Breakout Board Hookup Guide
Electret Mic Breakout Board Hookup Guide

 

Microphone AUD 를 Arduino A0에 연결

Microphone GND 를 Arduino GND에 연결

Microphone VCC 를 Arduino VCC에 연결

 

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

void loop() 
{
	int readADC = analogRead(A0);
	Serial.println(readADC);
	delay(300);
}

업로딩을 실행하고 메뉴에서 툴 -> 씨리얼 플로터를 실행하여 확인한 이미지를 확인한다.

 

씨리얼 플로터를 실행하여 확인

 

 

PWM 실습하기

 

본 실습에서는 아래 이미지와 같이 4pin RGB Led 를 사용하여 Analog Output(PWM)을 실습한다.

 

Nano 33 IoT 에서 PWM은 해당 핀을 사용해야 한다. ~ 표시가 있는 디지털핀을 사용한다. ~D2, ~D3, ~D5, ~D6, ~D9, ~D10, ~D11, ~D12. 아래에 PWM 핀을 표시하였다.

 

Nano 33 IoT 에서 PWM

연결은

RGB LED pin 1 (red) is connected to Arduino PWM pin 2

RGB LED pin 2 is connected to Arduino VCC +3.3V or GND depending on your RGB LED

RGB LED pin 3 (green) is connected to Arduino PWM pin 3

RGB LED pin 4 (blue) is connected to Arduino PWM pin 5 

 

아래 코드를 test_rgb_arduino.ino 로 저장하고 업로드 하고 결과를 확인한다. RGB Led 에 해당 색상이 점등하는 것을 확인하고 시리얼 모니터에서 색이 출력하는 과정을 확인한다.

 

int redPin = 2;
int greenPin = 3;
int bluePin = 5;

void setup()
{
	pinMode(redPin, OUTPUT);
	pinMode(greenPin, OUTPUT);
	pinMode(bluePin, OUTPUT);
	Serial.begin(9600);
}

void setColor(int red, int green, int blue)
{
	analogWrite(redPin, red);
	analogWrite(greenPin, green);
	analogWrite(bluePin, blue);
}

void loop()
{
	setColor(255, 0, 0); // red
	Serial.println("red");
	delay(1000);
	setColor(0, 255, 0); // green
	Serial.println("green");
	delay(1000);
	setColor(0, 0, 255); // blue
	Serial.println("blue");
	delay(1000);
	setColor(255, 255, 0); // yellow
	Serial.println("yellow");
	delay(1000);
	setColor(80, 0, 80); // purple
	Serial.println("purple");
	delay(1000);
	setColor(0, 255, 255); // aqua
	Serial.println("aqua");
	delay(1000);
}

 

SPI 실습하기

 

Serial Peripheral Interface (SPI)는 하나 이상의 인터페이스에 사용되는 통신 버스다. 하나 이상이라 함은 아래 신호선을 사용해서 접속할 장치를 선택할 수 있다는 말이다.


Arduino Nano 33 IoT 보드의 SPI는 다음 핀으로 할당되어 있다.

 
디지털 핀 11의 MOSI
디지털 핀 12의 MISO
디지털 핀 13의 SCLK

 

SPI 마스터 모드로 하나의 SPI 디바이스를 사용할 수 있다. 상세한 SPI 라이브러리 사용법은 링크를 참고한다. 여기서는 SPI Loopback 을 이용해 실습한다. loopback 은 출력선을 입력으로 직접 연결하여 통신하는 방식으로 확인하는 방법을 말한다. 즉, MISO 12번 핀과 MOSI 11번 핀을 연결하는 방식이다.

 

아래 실습코드를 SPIDemo.ino 로 저장하고 컴파일 후 업로드 하여 확인한다.

 

#include <SPI.h>

byte sendData,recvData;

void setup() 
{
	SPI.begin();
	Serial.begin(9600);
	randomSeed(80);
}

void loop() 
{
	sendData = random(50, 100);
	recvData = SPI.transfer(sendData);
	Serial.print("Send=");
	Serial.println(sendData,DEC);
	Serial.print("Recv=");
	Serial.println(recvData,DEC);
	delay(800);
}

 

결과가 아래 화면과 같이 나오면서 제대로 동작하는 것을 확인한다.

 

spi 코드 실습 결과 화면

 

I2C 실습하기

 

I2C (Inter-Integrated Circuit) 버스는 필립스가 80 년대 초에 동일한 회로 보드에있는 구성 요소간에 쉽게 통신 할 수 있도록 설계하였다. TWI는 Two Wire Interface의 약자이며 대부분의 시장에서 이 버스는 I²C와 동일하다. TWI라는 이름은 Atmel 및 기타 회사에서 I²C 관련 상표 문제와의 충돌을 피하기 위해 도입했다.


I2C 버스는 SDA (Serial Data Line)와 SCL (Serial Clock Line)의 두 가지 와이어로 구성된다. Arduino Nano 33 IoT에는 A5 핀에 SCL과 A4 핀에 할당되어 있다. 

 

I2C 통신 테스트는 아래 이미지 PCF8951 AD/DA 모듈을 가지고 실습한다.

 

PCF8951 AD/DA 모듈

 

 

PCF8591 AD/DA Converter 와 연결은 다음을 참고한다.

 

SDA --> Arduino Nano 33 IoT SDA (analog pin A4)

PCF8591 AD/DA Converter SCL --> Arduino Nano 33 IoT CLK0 (analog pin A5)

PCF8591 AD/DA Converter VCC --> Arduino Nano 33 IoT VCC 3.3V (+3.3V)

PCF8591 AD/DA Converter GND --> Arduino Nano 33 IoT GND

 

Arduino 방식과 같은 Wire 라이브러리를 사용하여 Arduino Nano 33 IoT 보드에서 I2C를 사용한다. PCF8591 AD/DA 변환기 모듈에는 서미스터, 광전지 및 전위차계의 세 가지 센서 장치가 있다. 이 모듈은 주소가 0x48인 I2C 버스에서 실행되어 모든 센서 데이터를 읽는 코드다. Arduino IDE를 열고이 코드를 작성한다. 하십시오. 파일은 i2csensor.ino

 

#include "Wire.h"
#define PCF8591 0x48 // I2C bus address
#define PCF8591_ADC_CH0 0x00 // thermistor
#define PCF8591_ADC_CH1 0x01 // photo-voltaic cell
#define PCF8591_ADC_CH2 0x02
#define PCF8591_ADC_CH3 0x03 // potentiometer

byte ADC1, ADC2, ADC3;
void setup()
{
	Wire.begin();
	Serial.begin(9600);
}

void loop()
{
	// read thermistor
	Wire.beginTransmission(PCF8591);
	Wire.write((byte)PCF8591_ADC_CH0);
	Wire.endTransmission();
	Wire.requestFrom(PCF8591, 2);
	ADC1=Wire.read();
	ADC1=Wire.read();
	Serial.print("Thermistor=");
	Serial.println(ADC1);
    
	// read photo-voltaic cell
	Wire.beginTransmission(PCF8591);
	Wire.write(PCF8591_ADC_CH1);
	Wire.endTransmission();
	Wire.requestFrom(PCF8591, 2);
	ADC2=Wire.read();
	ADC2=Wire.read();
	Serial.print("Photo-voltaic cell=");
	Serial.println(ADC2);
    
	// potentiometer
	Wire.beginTransmission(PCF8591);
	Wire.write(PCF8591_ADC_CH3);
	Wire.endTransmission();
	Wire.requestFrom(PCF8591, 2);
	ADC3=Wire.read();
	ADC3=Wire.read();
	Serial.print("potentiometer=");
	Serial.println(ADC3);
	delay(500);
}

 

위 코드를 입력하고 업로드 하여 결과값을 확인한다. 아래는 시리얼 모니터 출력화면이다.

 

PCF8591 AD/DA 변환기 모듈 실습 결과 화면

 

여기까지. 어서 놀러나가자.

 

 

 

 

 

반응형