IoT:Windows RemoteArduinoとユニバーサルアプリ
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 |
このプロジェクトについて
注:下部のコメントで更新を確認してください。
Windows 10 UWPアプリは、リモート配線に基づいて構築できます アプリがFirmataを実行しているArduinoデバイスと対話できるようにするライブラリ。 Windows Remote Arduinoの「Blinky」の例に似ていますが、機能が追加されたアプリが開発されています。 GPIO(出力および入力)といくつかのアナログIOを実行します。このアプリは、このシリーズの前のブログのWindows8.1バージョンと機能的に同じです。このブログは、前のブログと同じ資料(つまり、その多くを繰り返しています)を介して機能しますが、Windows 8.1ユニバーサルアプリコンテキストではなく、ユニバーサルWindowsプラットフォーム(UWP)コンテキストから機能します。アプリのターゲットは、Win 10デスクトップ、Win 10電話、およびRaspberry PI2(Win 10 IoTを実行)です。後者のターゲットは「進行中ですが」です。このブログは、前のブログを参照せずに読むことができます。
このプロジェクトの詳細については、私のブログhttp://embedded101.com/Blogs/David-Jones/entryid/636/Windows-10-IoT-Windows-Remote-Arduino-and-Universal-Windows-Platform-Apps
>Windows RemoteArduinoの「Blinky」の例 ms-iot.github.ioにあります。
ユニバーサルアプリとユニバーサルWindowsプラットフォームアプリ
ユニバーサルアプリ(UA)はWindows 8.1で頂点に達しました。WindowsIntelデスクトップ、ARM RT Surface、およびWindows Phone(ARM)を対象としたアプリを、すべて同じソリューションで実装できます。それらは、イベントハンドラー、一般的な計算、データなどの共通のコードを共有できます。 XAMLコードはターゲットに固有である必要がありました。ターゲットごとに個別のサブプロジェクトをコンパイルしました。コンパイル中に、共通のコードが含まれていました。
Windows 10の「OneWindows」パラダイムシフトにより、XAMLコードを含むすべてのターゲットに同じコードをすべてのターゲットに使用できます。同じプロジェクトを異なるターゲット用に再コンパイルする必要があります。 UA名がWindows8アプリに適用されたため、真にユニバーサルなアプリには新しい名前が必要でした。そのため、ユニバーサルWindowsプラットフォームアプリという名前は、Windows10用に造られました。
すべてのWindows10プラットフォームはUWPアプリをサポートしています。ただし、各プラットフォームに固有の拡張機能があります。たとえば、Windows 10 IoT拡張機能はGPIO、I2C、SPIOなどをサポートします。モバイル拡張機能は電話機能をサポートします。その他UWPは、すべてのデバイスにわたって保証されたコアAPIレイヤーを提供します。
Windows10拡張SDK。デスクトップ、モバイル、IoTの拡張機能がチェックされています。
このブログでは、前のブログのようにUAではなくUWPテンプレートを使用します。拡張SDKは必要ありません。
[1] ArduinoデバイスとのBluetooth通信を設定します。
Win 8.1アクティビティを既に実行している場合は、このセクションをスキップできます。
USBまたはBluetoothは、ArduinoデバイスとWindowsデバイス間のFirmata通信に使用できます。 Windows 10の場合は両方を使用できますが、Windows8.1の場合はBluetoothのみを使用できます。このバージョンのアプリでは、Bluetoothが使用されます。 Sparkfun Bluetooth Mate Goldを使用しましたが、上記の「Blinky」の例ではSparkfun Bluetooth MateSilverを使用しました。主な違いは、ゴールドの範囲が最大100mであるのに対し、シルバーの範囲は10mであるということです。デフォルトのハンドシェイク設定も異なります。これらは両方とも、Bluetoothデバイスの動作モードの構成とArduinoシリアルポートとの対話の両方に使用できるTTLレベルのUARTインターフェイスを備えています。
<図> <図> <図> <図> <図> <図>Bluetoothデバイスを構成する必要がある場合は、SparkfunまたはFreetronics USB-SerialまたはFreeデバイスを使用して、デスクトップシリアル端末を介してデバイスを構成できます。 PIO6(実際にはPIO4)ピンをHighに接続し、3回切り替えることで、デバイスを工場出荷時のデフォルト設定にリセットすることもできます。
BluetoothMateのピン配置はSparkfunFTDI Basicと同じであるため、互換的に使用できます。 BluetoothMateをFTDIBasicボードに直接接続することはできません(TXとRXを交換する必要があります)。この構成は、FTDIデバイスのUSBがデスクトップに接続されたデスクトップシリアル端末で使用して、Bluetoothデバイスを構成できます(またはデスクトップからのシリアル通信にBluetoothデバイスを使用できます。
デフォルトのTTLUARTシリアル設定は次のとおりです。
- ・ボーレート 115,200
- ・8ビット
- ・パリティなし
- ・1ストップビット
- ・ハードウェアフロー制御 有効(メイトシルバーではこれはなし)
- ・シリアルポートプロファイル(SPP): FireFly-WXYZ
ここで、WXYZはデバイスのBTMACアドレスの最後の4桁です。 - ・パスキー 1234
デバイスは最大8つのデバイスペアリングを保存できることに注意してください。
Bluetoothデバイスのドキュメントは次の場所にあります。
http://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-bluetooth-um.pdf
Firmata構成は、ボーレート57600を変更する必要があるか、Bluetoothデバイスをそのように構成するためのものです。この演習では、より簡単なアプローチであるFirmata構成を変更します。ハードウェアの制御フローは、Bluetoothデバイスを構成することでも処理できますが、この演習では、RTSをCTSに接続することで処理します。
BluetoothデバイスをブレッドボードにマウントしてそこからArduinoデバイスに接続できるので、プロトタイピングシールドにそのソケットをマウントすることにしました。
6ピンのArduinoシールドヘッダーが、ソケットを外側に向けてTTLUARTピンでBluetoothデバイスにはんだ付けされました。デバイスを別のシールドヘッダーに垂直に差し込めるように、ピンを下向きに900回曲げました。構成が必要な場合は、BTソケットを使用して、同様に取り付けられたFTDIBasicモジュールに直接接続できます。その後、工場出荷時にリセットするために、BluetoothモジュールのPIO6(PIO4)にワイヤーがはんだ付けされました。
図3UARTピンにシールドヘッダーとシールドヘッダーを備えたBluetoothモジュール
プロトタイプシールドの下部の中央に8シールドヘッダーが取り付けられました。また、シールドの外側にヘッダーを追加して、Unoに直接接続できるようにします。
図4Bluetoothモジュールを取り付けるためのArduinoプロトタイプシールド
次に、BluetoothモジュールをGPIOピンに向けて、ピン0および1(Rx / Tx)に向けて挿入し、黄色の位置をクリアにします。そのうちの1つは、工場出荷時のリセットワイヤの一時的な場所として使用できます。
図6ArduinoデバイスにマウントされたBluetoothモジュール
[2]会社を設立する
Win 8.1アクティビティを既に実行している場合は、このセクションをスキップできます。
注: Arduino UnoのUARTピン0および1は、Arduino IDEからUSB経由でプログラムされている場合は使用できません。これらの同じピンは、Firmata通信用にインターフェースされるときにBluetoothモジュールのTTLUARTインターフェースに接続されるものです。したがって、このセクションでArduinoデバイスをプログラムする場合は、Bluetoothデバイスを接続しないでください。
2.1以前にArduino(Uno)デバイス用に開発したと仮定して、新しい標準Firmataシールドを作成します。
2.2行われるべき1つの変更、ボーレートがあります。 IDEで、57600を検索します。115200に置き換えます。スケッチを保存します。Firmata_115200と呼びます。 Unoをプログラムすると、この部分が完了します。
[3] Universal AppFirmataソフトウェアスタックをセットアップします
このセクションは、Win8.1アクティビティをすでに実行したセクションとは少し異なります。
ソフトウェアスタックは3つのレイヤーで構成されています:
Remote-Wiring APIは、Arduinoハードウェアの相互作用のために、概念的に高いレベルでプロパティ(構成)、メソッド、およびイベントを実装します。たとえば、GPIO(たとえば、ピンの取得と設定、ピンの変更など)。 Firmataプロトコルを使用してFirmataレイヤーと通信します。 Firmataは、シリアル層にBluetoothおよびUSB-シリアルトランスポート層として実装されているシリアルプロトコルを介してスタックを下って通信します。 USBオプションはWindows8.1では使用できません。
と呼ばれるこのソフトウェアスタックは、次の2つのソースで利用できます。
- https://github.com/ms-iot/windows-remote-arduino-samples
- https://github.com/ms-iot/remote-wiring/
どちらにもWindows8.1とWindows10のバージョンが含まれています。両方のバージョンのWindows10バージョンはビルドされますが、2番目のバージョンのWindows8.1はビルドされないことがわかりました。 Visual Studio 2015 RCバージョンを使用しました:
- Microsoft Visual Studio Community 2015 RC
- バージョン14.0.22823.1D14REL
- Microsoft .NET Framework
- バージョン4.6.00076
3.1最初のバージョンをダウンロードします。これを正しく行うには、リポジトリのクローンを作成する必要があります(zipをダウンロードしないでください):
- gitまたはGitHubをインストールします
- gitシェルまたはGitHubデスクトップシェル(Powershell)で、適切なディレクトリから次のように入力します。
git clone --recursive https://github.com/ms-iot/windows-remote-arduino-samples.git
<コード> コード>取得するディレクトリ構造は次のとおりです。
windows-remote-arduino-samples
o remote-wiring
Microsoft.Maker.win8_1
Microsoft.Maker.win10
ソース
o win8_1
o win10
後者の2つのフォルダー(win8_1とwin10)は、今のところ無視するサンプルアプリ(「点滅」の例を含む)です。どちらのMakerバージョンも同じソースフォルダーを使用するため、Windows10の場合は次のようにする必要があります。
windows-remote-arduino-samples
oリモート配線
Microsoft.Maker.win10
ソース
適切なフォルダに移動します。ドライブのルートにあるもの、たとえばc:\ wras10をお勧めします。これは、パス名が長すぎるためにARMビルドでエラーが発生する可能性があるためです。参照用に.mdファイルもコピーすることをお勧めします。これらはVSで開くことができます。
3.2Microsoft.Maker.win10でソリューションファイルを開きます
3.3ターゲットをWin32に設定してソリューションを構築します。
3つのビルドが行われます。ソフトウェアスタックの3つのレイヤーごとに1つ。
3.4ARM構成についても同じようにします。 x64マシンをお持ちの場合は、そのビルドも試してみてください。
[4] HW LEDUWPアプリを作成する
このセクションには、以前のWin8.1アクティビティを実行したことがある人のための「短絡」があります。
このアプリの初期バージョンでは、ソフトウェアボタンでハードウェアLEDがオンになり、別のボタンでオフになります。 LEDはGPIOピン5に接続されます。
「Blinky」ドキュメントには、これらのライブラリを取得して使用する方法がいくつかあると記載されています。最終的にはNugetが道になりますが、それはまだ利用できません。これらのビルドされたバージョンは、開発システムで一般的な方法で参照できます。最も簡単な方法は、必要なユニバーサルアプリをソリューションに追加して参照することです。その方法を使用します。
4.1新しいC#Windowsブランクユニバーサルアプリをソリューションに追加します。 (今回はWindows 8.1ではないことに注意してください):
<図>
適切な名前を付けてください。私は私のwrauwpを呼び出しました:WindowsリモートArduinoユニバーサルアプリUWP。
今回は1つのプロジェクト(UWP)しか作成されていないことに注意してください。XAMLとCSharpのコードは、アプリのデスクトップバージョンとモバイルバージョンで同じです。違いは、コンパイル方法にあります。
シリアルおよびBluetooth機能は、パッケージマニフェストに必要です:
4.2コードの表示により、テキストエディタ(GUIではなく)でpackage.appmanifestを開きます。インターネットクライアント機能は下部に含まれています。このセクションを次のように変更します:
packkage.appmanifest
<コード> <機能> コード>
<コード> デバイス> コード>
<コード> 機能> コード> <コード> パッケージ> コード>
<コード> コード>
また、デスクトップでBluetooth-SerialではなくUSB-Serialを使用している場合は、その機能を追加します。
関連する各ソフトウェアレイヤーへの参照が必要です:
4.3デスクトップUAの参照Firmata、RemoteWiring、Serialを追加します(これも1つのプロジェクトに対してのみ行う必要があります)。
ヒント:以前のWindows 8.1を既に実行している場合は、次の内容を短絡できます。 :
- グリッドxmlコードをそのプロジェクトからこの新しいプロジェクトのMainPage.xamlにコピーします。
- これで、ターゲットでのアプリのテストにスキップできます
ここに続く人のために…
4.4両方のUAのグリッドXAMLを次のように変更します:
MainPage.xaml:UI
<コード> グリッド> コード>
コメント アプリプロジェクトが1つしかないため、今回はMainPage.csが1つだけです…1つのWindows。
以前は、デスクトップ用と電話用に1つずつありましたが、共有サブプロジェクトに1つのバージョンを配置することで共通化しました。
すべてのcsコードはMainPage.csを参照します
4.7 MainPageクラスで、クラスの先頭に次の宣言を追加します。
MainPage.cs宣言
// UsbはWin8.1ではサポートされていません。 USB接続の手順を確認するには、代わりにwin10ソリューションを参照してください。
BluetoothSerial bluetooth;
RemoteDevice arduino;
<コード> コード> <コード> //使用されるピン。注:実際のピン番号。 private const int LED_PIN =5;
<コード> コード>
4.8 MainPageコンストラクターで、InitializeComponent()の後に次を追加します:
MainPage()のコンストラクター
bluetooth =new BluetoothSerial( "FireFly-748B");
arduino =new RemoteDevice(bluetooth);
bluetooth.ConnectionEstablished + =OnConnectionEstablished;
<コード> コード>
FireFly-748BをSPPに交換してください。
4.9クラスに次のmthodを追加して、OnConnectionEstablishedを実装します。
OnConnectionEstablished()を追加
private void OnConnectionEstablished()
<コード> {コード> // UIスレッドのボタンを有効にします!
var action =Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal、new Windows.UI.Core.DispatchedHandler(()=> {
this.OnButton.IsEnabled =true;
<コード>これ。 OffButton.IsEnabled =true; <コード> コード> arduino.pinMode(LED_PIN、PinMode.OUTPUT);
}));
<コード>} コード>
4.10最後に、ボタンのイベントハンドラーをクラスに追加します。
ボタンイベントハンドラーの追加
private void OnButton_Click(object sender、RoutedEventArgs e)
<コード> {コード> //ピン5に接続されているLEDをオンにします
arduino.digitalWrite(5、PinState.HIGH);
<コード>} コード> <コード> コード> private void OffButton_Click(object sender、RoutedEventArgs e)
<コード> {コード> //ピン5に接続されているLEDをオフにします
arduino.digitalWrite(5、PinState.LOW);
<コード>} コード>
4.11 x86、x64、およびARM構成でUWPアプリをテストビルドする
[5]ユニバーサルアプリのデプロイとテスト。
このセクションでは、ハードウェアLEDをArduinoデバイスに接続し、デスクトップとWindows 10 Phone *でアプリを実行します。
デスクトップでテスト
5.1デスクトップアプリをスタートアッププロジェクトとして設定する
5.2ターゲットをx86およびローカルマシンに設定します。デスクトップUWPアプリを再構築する
<図>5.3Arduinoピン5をハードウェアLEDに接続します。 GND、VCC、および適切な抵抗を直列に接続します。
以前のブログで言及されているように Windows 10 IoT Raspberry PI 2 GPIO LED、スイッチなどのテストIOを実装するために開発ボードを使用しています。同様のボードがない場合は、を使用することをお勧めします。 「点滅する」ハードウェア構成 ただし、ボタンハンドラーのピン設定の極性を逆にする必要があります。
5.4 Arduinoデバイスの電源を入れ、Bluetoothモジュールをデスクトップとペアリングします(Passkey =1234)。 ..これを行う方法を知っていると思います。
5.5。アプリを実行します。
5.6アプリがBluetoothデバイスに接続しても問題ないかどうかを尋ねられる可能性があります..OK
5.7アプリの機能をテストします。ボタンハンドラーにブレークポイントを設定し、デバッグできることを確認します。
5.8 64ビットデスクトップを使用している場合は、x64に対して4.1から4.6を繰り返します。
5.9デスクトップでBluetoothをオフにする
次に、電話が開発用に構成されていると仮定して、Windows 10Phoneをテストします。
5.10電話の電源を入れ、[設定] / [Bluetooth]に移動して、電源を入れます。 Bluetoothモジュールとペアリングします(パスキー=1234)。
5.11スタートアッププロジェクトとしてWindowsユニバーサルアプリを続行する..
5.12ターゲットをARM 、、デバイスに設定し、再構築します
5.11 USBシリアル経由で電話をデスクトップに接続し、アプリをデプロイします。
Raspberry PI2をテストします
これは進行中の作業です。このセクションの最後にある注記を参照してください
5.13リモートデバッガーは、Win 10IoT用に構成されたRPI2に既にインストールされ、アクティブになっています。
5.14 RPI2のIPアドレスを決定します(例:Windows IoT Core Watcherを使用)
<図>5.15プロジェクトのプロパティ-デバッグでターゲットをリモートマシン、認証なしに設定し、IPアドレスを入力します
<図>5.16UWPアプリを再構築する
5.17RPI2にアプリをデプロイしてテストします。
Bluetooth経由で接続するRPI2バージョンをまだ持っていません:
- メインのBluetoothはまだサポートされていません
- アイデアや成功があれば、コメントを残してください。
- 進捗があればここで更新します
[6] UIを「かなりアップ」
以下は、UIをきれいにし、Bluetoothの接続ボタンと切断ボタンを追加します。
6.1 UI GRID XAMLコードを次のように変更します( PS:前のボタンのグリッド行への変更に注意してください ):
2つのボタンを追加&amp; amp; amp;
<コード> グリッド> コード>
UIには大きなボタンがあり、よりカラフルで使いやすさが向上しています。 ユーザーが4歳の孫娘とテストした後、これに到達しました!。
ProgressRing アプリが接続している間、が表示されて循環します。
6.2 OnConnectionEstablished()の下部に挿入:
OnConnectionEstablished()
で
// BTが接続されているので、プログレスリングをオフにします
this.progress1.IsActive =false;
this.progress1.Visibility =Visibility.Collapsed;
<コード> コード>
6.3 [接続]ボタンと[切断]ボタンに次のハンドラーを追加します。
新しいボタンのイベントハンドラーを追加する
private void ConnectButton_Click(object sender、RoutedEventArgs e)
<コード> {コード> //これらのパラメータはBluetoothには関係ありません-ArduinoFirmata、SerialConfig.SERIAL_8N1を除く
bluetooth.begin(115200、SerialConfig.SERIAL_8N1);
this.ConnectButton.IsEnabled =false;
<コード> コード> // BTを接続して進行状況を表示する
this.progress1.IsActive =true;
this.progress1.Visibility =Visibility.Visible;
<コード>} コード> <コード> コード> private void InterconnectButton_Click(object sender、RoutedEventArgs e)
<コード> {コード> bluetooth.end();
this.OnButton.IsEnabled =false;
this.OffButton.IsEnabled =false;
this.ConnectButton.IsEnabled =true;
this.DisconnectButton.IsEnabled =false;
<コード>} コード>
6.4次の行をコメントアウトするか、MainPageConstructorから[接続]ボタンハンドラーにあるように削除します。
bluetooth.begin(115200、SerialConfig.SERIAL_8N1);
6.5次の状態管理をOnButtonハンドラーに追加します
OnButton_Cllick()
this.OffButton.IsEnabled =true;
this.OnButton.IsEnabled =false;
6.6そして、OffButtonハンドラーには次のようになります。
OffButton_Click
this.OffButton.IsEnabled =false;
this.OnButton.IsEnabled =true;
6.7セクション5のように、3つのターゲットすべてにアプリをデプロイしてテストします
[7]プッシュボタン入力を追加
Windows 8.1 Universalアプリのこの拡張機能では、Arduinoピン5でのプッシュボタンGPIO入力が容易になり、その状態がUIに表示されます。入力は、値を定期的に読み取ることによって最初に検出されます。
DigitalPinChangedイベントのハンドラーを実装することで、機能が向上します
7.1次のように両方のUAのUIXAMLコードでグリッドコントロールを変更します。
UIにテキストボックスを追加する
<コード> グリッド> コード>
7.2 MainPageクラスで、入力ピンを指定します。
-クラスの最上位の宣言で、入力ピンを追加します:
MainPage宣言
private const int PB_PIN =6;
-OnConnectionEstablishedハンドラーで、input ::
に設定します。OnConnectionEstablished
arduino.pinMode(PB_PIN、PinMode.INPUT);
7.3、次のように入力をポーリングするタイマーを追加します。
-クラスの最上位の宣言:
MainPage宣言
//ポーリングモードでは、タイマーティックが入力をサンプリングします
private DispatcherTimer pbPolltimer;
-コンストラクターでタイマーを設定します:
MainPage()
this.pbPolltimer =new DispatcherTimer();
this.pbPolltimer.Interval =TimeSpan.FromMilliseconds(250);
this.pbPolltimer.Tick + =PBTimer_Tick;
this.pbPolltimer.Stop();
-タイマーティックイベントハンドラーを追加します
ポーリングタイマーティックハンドラーの追加
PinState pbPinValue =PinState.LOW;
<コード> コード> private void PBTimer_Tick(object sender、object e)
<コード> {コード> PinState pbPinValueTemp =arduino.digitalRead(6);
Pushbutton_Pressed(pbPinValueTemp);
<コード>} コード>
-PushButton_Pressed()を実装します:
PushButton_Pressed()を追加
private void Pushbutton_Pressed(PinState pbPinValueTemp)
<コード> {コード> if(pbPinValue!=pbPinValueTemp)
<コード> {コード> //変更された場合は値を書き込む
TxtPin6.Text ="Pushbutton:" + pbPinValueTemp.ToString();
<コード> pbPinValue =pbPinValueTemp; }
<コード>} コード>
7.4押しボタンスイッチが必要です。ありがたいことに、私の開発ボードはこれらを提供しているので、私はそれを使用しています。そのような獣がいない場合は、反対の回路を実装してください。
Windows 8.1ユニバーサルアプリのこの拡張機能では、Arduinoピン5でのプッシュボタンGPIO入力が容易になり、その状態がUIに表示されます。入力は、値を定期的に読み取ることによって最初に検出されます。 Win 10 IoT Raspberry PI 2(RPI2)で、報告されています デジタル入力が登録される頻度にいくつかのバグがあり、これはRTM for Win 10IoTで修正される予定です。
その後、DigitalPinChangedイベントのハンドラーを実装することで機能が改善されます
この状況では、ハードウェアのデバウンスを次のように改善できます。
-スイッチの両端に小さなコンデンサを配置して、RC遅延としてデバウンスするハードウェアを追加します。
-この回路にシュミットトリガーも追加します。
RPI2には、ソフトウェア構成を介してデバウンスを追加するオプションがあります。
RPI2には、ソフトウェア構成を介してデバウンスを追加するオプションがあります。<図>7.5以前と同様に、ターゲット上でアプリをビルド、デプロイ、テストします
ソフトウェアでシミュレートされたLEDをUIに追加して、スイッチの状態を表示しましょう。
7.6両方のユニバーサルアプリのグリッドXAMLコードのUIに以下を追加します。
-別の行定義を追加します(下部)::
-次の楕円形コントロールをその行に追加します:
UIに楕円を追加します
7.72つのカラーブラシ定義を上部のMainPageクラス宣言に追加します。
宣言に色を追加する
//ハードウェアプッシュボタンが押された/押されていないときの楕円の色
private SolidColorBrush redBrush =new SolidColorBrush(Windows.UI.Colors.Red);
private SolidColorBrush grayBrush =new SolidColorBrush(Windows.UI.Colors.LightGray);
7.8次のようにこれらの色でLEDの操作を実装します。
-クラスコンストラクタで初期色を設定します:
コンストラクター内
//楕円のオフカラーから開始
this.PBStatusLED.Fill =grayBrush;
-PushButtonPressed()で、ボタンの状態に応じて色を設定します:
Pushbutton_Pressed()に追加
switch(pbPinValue)
<コード> {コード> case PinState.HIGH:
this.PBStatusLED.Fill =redBrush;
break;
case PinState.LOW:
this.PBStatusLED.Fill =grayBrush;
break;
<コード>} コード>
7.9ターゲットでアプリをビルド、デプロイ、テストします。..Wala!
デジタルイベントを使用してこのコードを改善します。
7.10タイマーに関連するすべてのコードをコメントアウトしますが、PushButtonPressed()関数は残します。したがって、タイマーティックイベントハンドラーに分離する理由。
7.11アクション内のOnConnectionEstablished()イベントハンドラーにイベントデリゲート仕様を追加します
OnConnectionEstablishedに追加
arduino.AnalogPinUpdatedEvent + =Arduino_AnalogPinUpdated;
次のようにイベントハンドラーの実装を試みることができます:
無効なDigitalPinUpdated
private async void Arduino_DigitalPinUpdated(byte pin、PinState pinValue)
<コード> {コード> if(pin ==PB_PIN)
<コード> {コード> Pushbutton_Pressed(pinValue);
}
<コード>} コード>
ただし、イベントはメインUIスレッドとは別のスレッドで実行されるため、これは失敗します。これは、.NETWindowsフォームの if(InvokeRequired)と同じ問題です。 シナリオ。
7.12次のようにイベントハンドラを実装します
DigitalPinUpdatedを追加
private async void Arduino_DigitalPinUpdated(byte pin、PinState pinValue)
<コード> {コード> <コード> コード> await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal、()=>
<コード> {コード> if(pin ==PB_PIN)
<コード> {コード> Pushbutton_Pressed(pinValue);
}
<コード> コード> });
<コード>} コード>
7.13ターゲット上でアプリをビルド、デプロイ、テストします。ワラ
[8]アナログ入力を追加
アプリ機能のこの拡張機能は、UA UIにプログレスバーを追加して、ハードウェアのポテンショメータのレベルを表示します。
アナログ入力はA0、ピン14を介して行われます。
繰り返しますが、私の開発ボードはこの目的のためにポテンショメータを提供しますが、そのようなものがない場合は、この回路を実装する必要があります:<図>アナログ入力ピンはピン14(A0)です。 ピン19(A5)へ
arduino.pinMode(ANALOG_PIN、PinMode.ANALOG);
上記のコメントは非常に適切です。イベントハンドラの署名は、ピン番号ではなく、アナログピンインデックス(0〜5)を提供します。
アナログ値の範囲は0〜1024です。(10ビット)
//注:アナログインデックスではなく、実際のピン番号が必要です:
arduino.pinMode(ANALOG_PIN、PinMode.ANALOG);
8.0ポーリングタイマーを再度有効にし、MainPageクラスのプッシュボタンイベントを無効にします
8.1 UI XAMLコードのグリッドコントロールで、前と同じようにグリッドに別の行を追加し、ProgressBarを追加します。
UIにプログレスバーを追加する
<コード> コード>
8.2次のようにアナログピンコードを追加します。
-MainPageクラスの上部でピンを宣言します:
アナログピンを追加
private const int ANALOG_PIN =14;
<コード> コード>
-上記のようにOnConnectionEstablished()でモードをアナログに設定します
-タイマーティックイベントに以下を追加します:
タイマーティックハンドラーに追加
<コード> //注:アナログ読み取りピン番号はアナログインデックスです int PinValue =arduino.analogRead(ANALOG_PIN-14);
this.analogBar.Value =PinValue;
8.3ターゲット上でアプリをビルド、デプロイ、テストします。ポテンショメータの位置を変えて、ProgressBarの変化を観察します。
イベントドリブンバージョンの場合
8.4再度、ポーリングタイマーコードをコメントアウトします。
8.5アナログイベントハンドラデリゲート仕様をOnConnectionEstablished()に追加します。
アナログピンモードの設定
//注:アナログibndexではなく実際のピン番号が必要です:
arduino.pinMode(ANALOG_PIN、PinMode.ANALOG);
8.6 Arduino_DigitalPinUpdatedイベントハンドラーメソッドを追加します:
AnalogPinUpdatedを追加
private async void Arduino_AnalogPinUpdated(byte pin、ushort PinValue)
<コード> {コード> //注:ピン番号はアナログインデックスです
if(pin ==ANALOG_PIN -14)
<コード> {コード> await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal、()=>
<コード> {コード> this.analogBar.Value =PinValue;
});
}
<コード>} コード>
UIの更新も非同期で行う必要があることに注意してください。
8.7ターゲットでアプリをビルド、デプロイ、テストします。
[9] PWM出力を追加
アナログ出力をPWMとして実装し、LEDを駆動する(スライダーで暗くする)のはリーダーに任されています。
- PWMピン:
3、5、6、9、10、および11> - ピンをPWMとして設定するには:
arduino.pinMode(PWM_PIN、PinMode.PWM)> - PWMレベルを設定するには
arduino.analogWrite(byte、ushort)> - analogWriteの値は0〜255(ushortパラメーター)です
後の段階でこれに対する解決策を提供するかもしれません。
[1]実際には以前のバージョンのBluetoothモジュールを使用しましたが、機能は同じようです。
コード
- WindowsRemoteArduino_Win10.zip
WindowsRemoteArduino_Win10.zip C#
「Blinky」の拡張バージョン入力、出力、アナログ入力
Fancier UI
プレビューなし(ダウンロードのみ)。
回路図
製造プロセス
- ラズベリーパイユニバーサルリモコン
- Windows IoT:顔認識ドア
- Windows 10 IoTCoreおよびSHT15
- Windows 10 IoT Core for Raspberry Pi3モデルB +
- GoPiGo v2 with Windows IoT
- リモートサプライチェーンチームをサポートするアプリとデバイス
- Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
- LCDアニメーションとゲーム
- IOT-ESP8266、Arduino、超音波センサーを使用したスマートジャー
- PCBとIoTのガイド
- ITおよびOT向けのCiscoIntrosIoTリモートモニタリングソリューション