2022.04.07 - [프로그래밍/IoT] - [IoT] Windows IoT Core 라즈베리파이 3 개발환경 구축 - 1
2022.04.12 - [프로그래밍/IoT] - [IoT] Windows IoT Core 라즈베리파이 3 개발환경 구축 - 2
지난 포스트에서는 Visual Studio & 라즈베리파이3 & Windows IoT Core를 이용한 개발 환경을 셋팅을 해보았습니다.
이번에 해볼 일은 PWM 제어를 해보려고 합니다.
먼저 PWM을 사용하기 위해 Microsoft.IoT.Lightning 패키지를 사용하려합니다. 이것을 사용하기 위해서는 몇 가지 준비가 필요합니다.
먼저 Windows SDK가 10.0.10586이상 되어야합니다.
1. Windows SDK를 설치
https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/
2. NuGet에서 패키지 설치
3. 오른쪽 버튼 -> 코드보기 선택
아래의 코드 추가
<Capabilities>
<iot:Capability Name="lowLevelDevices" />
<DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141"/>
</Capabilities>
4. IoT Dashboard -> 내장치 -> 장치포탈에서 열기
비밀번호를 요구한다면 아이디는 administrator 이며, 암호는 개발환경 구축 1 포스트에서 설정한 암호가 될것입니다.
그리고 아래와 같이 드라이버 셋팅
이제 준비 완료.
코딩을 하기전에 라즈베리에 PWM 전용 핀이 어떤 것인지 확인해봅시다.
http://raspberrypi.stackexchange.com/questions/40812/raspberry-pi-2-b-gpio-pwm-and-interrupt-pins
여러 핀중 18번으로 해봅시다.
이제 코드를 작성해봅시다.
간단한 설명으로 다음과 같습니다.
1. 시작 버튼과 동작 버튼을 배치한다.
2. SetActiveDutyCyclePercentage(값) 값을 0~1로 변경해가며 PWM을 제어한다.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Devices.Pwm;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Windows.UI.Core;
using Microsoft.IoT.Lightning.Providers;
namespace PWM
{
/// <summary>
/// 자체적으로 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
/// </summary>
public sealed partial class MainPage : Page
{
#region PWM
private PwmPin _pwmPin;
private double percent = 0;
#endregion
public MainPage()
{
this.InitializeComponent();
btnPowerUp.Click += BtnPowerUp_Click;
btnPowerDown.Click += BtnPowerDown_Click;
btnStart.Click += BtnStart_Click;
}
private async void BtnStart_Click(object sender, RoutedEventArgs e)
{
if (LightningProvider.IsLightningEnabled)
{
// PWM Pins http://raspberrypi.stackexchange.com/questions/40812/raspberry-pi-2-b-gpio-pwm-and-interrupt-pins
var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());
var pwmController = pwmControllers[1]; // use the on-device controller
pwmController.SetDesiredFrequency(50); // try to match 50Hz
_pwmPin = pwmController.OpenPin(18);
_pwmPin.SetActiveDutyCyclePercentage(.0);
_pwmPin.Start();
}
_pwmPin.SetActiveDutyCyclePercentage(percent);
}
private void BtnPowerUp_Click(object sender, RoutedEventArgs e)
{
percent += 0.1;
_pwmPin.SetActiveDutyCyclePercentage(percent);
}
private void BtnPowerDown_Click(object sender, RoutedEventArgs e)
{
percent -= 0.1;
_pwmPin.SetActiveDutyCyclePercentage(percent);
}
}
}
끝!!
'프로그래밍 > IoT' 카테고리의 다른 글
[C++] Convert from 3 Byte RGB color to 2 Byte RGB color (0) | 2023.03.10 |
---|---|
[IoT] Windows IoT Core 라즈베리파이 3 화면 회전 (0) | 2022.04.12 |
[IoT] Windows IoT Core 라즈베리파이 3 개발환경 구축 - 2 (0) | 2022.04.12 |
[IoT] Windows IoT Core 라즈베리파이 3 개발환경 구축 - 1 (0) | 2022.04.07 |
[IoT] Esp32 여유 Heap 정보 알아보기 (0) | 2020.11.25 |