36154


Raspberry Pi3にRaspberry Pi Relay Board v1.0をつけて  
Windows10 IoT core + VB.NET でコントロールしたいと思っています。

Raspberry Pi Relay Board v1.0  
<http://wiki.seeed.cc/Raspberry_Pi_Relay_Board_v1.0/>

Pythonのコードはあるのですが、どうやってVB.NETで書けばよいかわかりません。  
I2Cデバイスとの接続はできましたが、どんなバイト値を書き込めば動くのかさっぱりです。  
どなたかサポート頂けませんでしょうか？


CC BY-SA 3.0
2017-07-02T16:07:18.433
36045
2017-07-06T13:20:14.337
24174
question
raspberry-pi vb.net windows-10
Raspberry Pi Relay BoardをWindows10 IoTで動かしたい


なんとかPythonライブラリをVB.NET化し、動作可能になったので  
自己解決ですが、クラス化したものを残しておきます。  
バイト値（2進数）をいじるのは難しいですね・・・

[code]

    Imports Windows.Devices.Enumeration
    Imports Windows.Devices.I2c
    
    Friend Class RelayDevice
    
        Private Const DEVICE_NAME As String = "I2C1" 'Raspbery PIではこれがデフォルト
        Private Const DEVICE_MODE As Byte = &H6 '00000110
        Private DEVICE_DATA As Byte = &HFF '11111111
    
        Private _deviceAddress As Byte
    
        Private RelayDevice As I2cDevice
    
        Public Sub New(DEVICE_ADDRESS As Byte)
            '&H20 00100000がデフォルト値
            _deviceAddress = DEVICE_ADDRESS
            InitI2cDevice()
        End Sub
    
        Private Async Sub InitI2cDevice()
            'デバイスを初期化し、使えるようにする
            Dim deviceName = I2cDevice.GetDeviceSelector(DEVICE_NAME)
            Dim deviceList = Await DeviceInformation.FindAllAsync(deviceName)
            Dim deviceId = deviceList(0).Id
            Dim connectionSetting = New I2cConnectionSettings(_deviceAddress)
            connectionSetting.BusSpeed = I2cBusSpeed.FastMode
            connectionSetting.SharingMode = I2cSharingMode.Exclusive
    
            RelayDevice = Await I2cDevice.FromIdAsync(deviceId, connectionSetting)
        End Sub
    
        Public Sub Dispose()
            RelayDevice.Dispose()
        End Sub
    
        Public Sub RelayOn(RelayNum As Integer)
            '11111110 でリレー１だけ点灯
            '11111101 でリレー２だけ点灯
            '11111011 でリレー３だけ点灯
            '11110111 でリレー４だけ点灯
            'DEVICE_REG_DATA &= ~(0x1 << (relay_num - 1))
            DEVICE_DATA = CByte(DEVICE_DATA And (Not (&H1 << (RelayNum - 1))))
            RelayDevice.Write(New Byte() {DEVICE_MODE, DEVICE_DATA})
        End Sub
    
        Public Sub RelayOff(RelayNum As Integer)
            '11110001 でリレー１だけ消灯
            '11110010 でリレー２だけ消灯
            '11110100 でリレー３だけ消灯
            '11111000 でリレー４だけ消灯
            'DEVICE_REG_DATA |= (0x1 << (relay_num - 1))
            DEVICE_DATA = CByte(DEVICE_DATA Or (&H1 << (RelayNum - 1)))
            RelayDevice.Write(New Byte() {DEVICE_MODE, DEVICE_DATA})
        End Sub
    
        Public Sub RelayOnAll()
            DEVICE_DATA = &HF0 '11110000 ですべて点灯
            RelayDevice.Write(New Byte() {DEVICE_MODE, DEVICE_DATA})
        End Sub
    
        Public Sub RelayOffAll()
            DEVICE_DATA = &HFF '11111111 ですべて消灯
            RelayDevice.Write(New Byte() {DEVICE_MODE, DEVICE_DATA})
        End Sub
    
    End Class
    
[/code]


CC BY-SA 3.0
2017-07-06T13:20:14.337
36154
2017-07-06T13:20:14.337
24174
36045
answer