「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
Windows 10 IoT Coreの評価を実施中。
以下のコマンドで切り替え可能。
setbootoption.exe headless shutdown /r /t 0
setbootoption.exe head shutdown /r /t 0
Raspberry Pi 3 MODEL B
micro USB(Androidと同じ)
スイッチとして機能する機器(開発用PCとRaspberry Pi 3を接続する)
ipconfig /all netsh interface ip show config netsh interface ip set address "Ethernet" static [IPアドレス] [サブネットマスク] [デフォゲ]
net user Administrator [パスワード]
setcomputername [新しいマシン名]
Windows 10がインストールされた開発用PCを準備する。
Windows 10 用のWindows SDKをダウンロードしてインストールする。
iotstartup list
iotstartup add headed 完全パッケージ名の先頭部分
iotstartup add headed IoTCoreDefaultApp
[ターゲットバージョン]と[最小バージョン]を選択する。
<Capabilities> <!-- アプリケーションがカスタムデバイスにアクセスできるようにする --> <iot:Capability Name="lowLevelDevices" /> <!-- LightningインターフェースのデバイスGUID ID --> <DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141"/> </Capabilities>
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10" IgnorableNamespaces="uap mp iot">
Option 2: Referencing the library
Apple PiのLEDのGPIO numberについては、下記を参照のこと。
LEDの制御(青色LED1=GPIO 5、白色LED2=GPIO 6)
using System.Threading.Tasks; using Windows.Devices; using Windows.Devices.Gpio; using Microsoft.IoT.Lightning.Providers; namespace App1 { /// <summary> /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。 /// </summary> public sealed partial class MainPage : Page { /// <summary> /// GpioPin #5は青色 /// GpioPin #6は白色 /// </summary> private readonly int LED_PIN = 6; /// <summary>GpioPin</summary> private GpioPin _gpioPin; /// <summary>Lチカを実装する。</summary> public MainPage() { this.InitializeComponent(); // LightningProviderが利用可能かどうかチェックする。 if (LightningProvider.IsLightningEnabled) { // LowLevelDevicesAggregateProviderを取得 LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider(); } // GpioControllerを取得 GpioController gpioCtrl = GpioController.GetDefault(); if (gpioCtrl == null) { return; } // GpioControllerでGpioを取得 this._gpioPin = gpioCtrl.OpenPin(LED_PIN); // GpioPinでGpioPinをコントロール。 this._gpioPin.SetDriveMode(GpioPinDriveMode.Output); this._gpioPin.Write(GpioPinValue.High); this.loop(); } /// <summary> /// UIをハングさせないよう、asyncなloop内でawaitを使用する。 /// System.Threading.Threadが無いので、こうなる。 /// </summary> private async void loop() { while (true) { // GpioPinでGpioPinをコントロール。 await Task.Delay(1000); this._gpioPin.Write(GpioPinValue.Low); await Task.Delay(1000); this._gpioPin.Write(GpioPinValue.High); } } } }
using System.Text; using System.Threading.Tasks; using Windows.Devices; using Windows.Devices.I2c; using Microsoft.IoT.Lightning.Providers; // 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください namespace App1 { /// <summary> /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。 /// </summary> public sealed partial class MainPage : Page { /// <summary> /// Raspberry Pi 3で GPIO端子の I2C機能を有効化する方法 /// (ラズパイ3の GPIO端子の I2C機能を有効にして各種センサーを繋げる方法まとめ) /// http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_gpio_enable_i2c/ /// </summary> private readonly byte _Lcd_Addr = 0x3e; /// <summary>I2cDevice</summary> private I2cDevice _Lcd; public MainPage() { this.InitializeComponent(); this.Loaded += MainPage_Loaded; } /// <summary>Loaded</summary> /// <param name="sender"></param> /// <param name="e"></param> private async void MainPage_Loaded(object sender, RoutedEventArgs e) { await this.InitLcd(); await this.DisplayLcd(); } /// <summary> /// LCDを初期化する。 /// 電子工作 - .NET 開発基盤部会 Wiki > 周辺機器 > LCD(液晶ディスプレイ)> I2C LCD AQM0802 /// https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C#b226d3e8 /// </summary> private async Task InitLcd() { // LightningProviderが利用可能かどうかチェックする。 if (LightningProvider.IsLightningEnabled) { // LowLevelDevicesAggregateProviderを取得 LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider(); } // I2cControllerを取得 I2cController i2cCtrl = await I2cController.GetDefaultAsync(); if (i2cCtrl == null) { return; } // I2cControllerでLCDを取得。 this._Lcd = i2cCtrl.GetDevice(new I2cConnectionSettings(this._Lcd_Addr)); // 初期化 await WriteLcdCmd(0x38, 1); // 行数の設定 await WriteLcdCmd(0x39, 1); // 拡張コマンドの設定開始 await WriteLcdCmd(0x14, 1); // 内部OSC周波設定 await WriteLcdCmd(0x70, 1); // コントラスト設定 await WriteLcdCmd(0x56, 1); // パワー/アイコン コントラスト設定 await WriteLcdCmd(0x6c, 250); // Follower設定 await WriteLcdCmd(0x38, 1); // 拡張コマンドの設定終了 await WriteLcdCmd(0x0c, 1); // ディスプレイ オン await WriteLcdCmd(0x01, 2); // ディスプレイ クリア } /// <summary>LCDに表示する</summary> /// <returns>Task</returns> private async Task DisplayLcd() { await WriteLcdCmd(0x01, 2); // ディスプレイ クリア // 一行目を指定して await WriteLcdCmd(0x80, 1); // Set DDRAM Address await WriteLcdDisplay("RzPi3"); // Write data to RAM // 二行目を指定して await WriteLcdCmd(0xc0, 2); // Set DDRAM Address await WriteLcdDisplay("ApplePi"); // Write data to RAM } /// <summary>LCDにコマンドを送る</summary> /// <param name="cmd">byte</param> /// <param name="waitTime_msec">int</param> /// <returns>Task</returns> private async Task WriteLcdCmd(byte cmd, int waitTime_msec) { // I2cDeviceでLCDをコントロール。 // 10 bit 書くので2 byte で先頭は空なので 0. this._Lcd.Write(new byte[] { 0, cmd }); await Task.Delay(waitTime_msec); } /// <summary>LCDに表示する</summary> /// <param name="msg">string</param> /// <returns>Task</returns> private async Task WriteLcdDisplay(string msg) { byte[] bytesMSG = Encoding.ASCII.GetBytes(msg); // I2cDeviceでLCDをコントロール。 foreach (byte b in bytesMSG) { // 10 bit 書くので2 byte で先頭は・・・ this._Lcd.Write(new byte[] { 0x40, b }); // 先頭0x40は? } await Task.Delay(1); } } }
https://github.com/ms-iot/samples
Tags: :インフラストラクチャ, :Windows, :IoT