{"id":7185,"date":"2015-05-20T15:51:14","date_gmt":"2015-05-20T06:51:14","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/?p=7185"},"modified":"2015-05-20T15:52:56","modified_gmt":"2015-05-20T06:52:56","slug":"firmata-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6-xamarin-android-%e3%81%8b%e3%82%89-arduino-%e3%81%ab%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"http:\/\/www.moonmile.net\/blog\/archives\/7185","title":{"rendered":"Firmata \u3092\u4f7f\u3063\u3066 Xamarin.Android \u304b\u3089 Arduino \u306b\u63a5\u7d9a\u3059\u308b"},"content":{"rendered":"<p>\nWindows Remote Arduino \u3092\u5229\u7528\u3057\u3066 Arduino \u6226\u8eca\u3092\u52d5\u304b\u3059 | Moonmile Solutions Blog<br \/>\n<a href=\"http:\/\/www.moonmile.net\/blog\/archives\/7168\">http:\/\/www.moonmile.net\/blog\/archives\/7168<\/a>\n<\/p>\n<p>\n\u3067\u306f\u3001Windows \u304c\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u5316\u3057\u3066\u3044\u308b Firmata \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5229\u7528\u3057\u3066 Arduino \u306b\u63a5\u7d9a\u3057\u305f\u308f\u3051\u3067\u3059\u304c\u3001Firmata \u30d7\u30ed\u30c8\u30b3\u30eb\u81ea\u4f53\u306f\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u3069\u306e\u3088\u3046\u306a\u8a00\u8a9e\u3067\u3082\u8ab0\u3067\u3082\u4f5c\u308c\u307e\u3059\u3002\n<\/p>\n<p>\nfirmata\/arduino<br \/>\n<a href=\"https:\/\/github.com\/firmata\/arduino\">https:\/\/github.com\/firmata\/arduino<\/a>\n<\/p>\n<p>\ngithub \u306e readme \u3092\u773a\u3081\u308b\u3068\u3001.NET \u5b9f\u88c5\u3082\u3042\u308a\u307e\u3059\u3002\u30bd\u30fc\u30b9\u3092\u898b\u3066\u3044\u304f\u3068 COM \u7d4c\u7531\u3067 Arduino \u306b USB \u30b1\u30fc\u30d6\u30eb\u3092\u523a\u3057\u3066\u4f7f\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u308c\u3092\u3061\u3087\u3063\u3068\u4fee\u6b63\u3059\u308c\u3070 Bluetooth \u306e\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u5bfe\u5fdc\u306b\u3067\u304d\u307e\u3059\u3088\u306d\u3002\u3068\u3044\u3046\u3053\u3068\u3067\u3001Bluetooth 2.0 \u306e\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u3067\u3042\u308b RFCOMM \u3092\u4f7f\u3063\u3066\u66f8\u304d\u63db\u3048\u3066\u3044\u304d\u307e\u3059\u3002\n<\/p>\n<p>\nFirmata.NET | imagitronics.org<br \/>\n<a href=\"http:\/\/www.imagitronics.org\/projects\/firmatanet\/\">http:\/\/www.imagitronics.org\/projects\/firmatanet\/<\/a>\n<\/p>\n<p>\n2 \u3064\u3042\u308b\u4e2d\u3067\u306f\u3001Firmata.NET \u306e\u307b\u3046\u304c\u30b3\u30fc\u30c9\u304c\u77ed\u304b\u3063\u305f\u306e\u3067\u3001\u3053\u308c\u3092\u5229\u7528\u3057\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u3092\u4f7f\u3063\u3066\u3001Android \u4e0a\u304b\u3089 Firmata \u3092\u901a\u3057\u3066 Arduino \u3092\u64cd\u4f5c\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002\u78ba\u304b\u3001\u30d6\u30e9\u30a6\u30b6\u3084 Node.js \u304b\u3089\u4f7f\u3046\u30d1\u30bf\u30fc\u30f3\u304c\u591a\u3044\u306e\u3067\u3059\u304c\u3001Xamarin.Android \u304b\u3089 C# \u3067\u6271\u3048\u308b\u3068\u30cd\u30a4\u30c6\u30a3\u30d6\u30a2\u30d7\u30ea\u3068\u3057\u3066\u4f5c\u308c\u308b\u306e\u3067\u4fbf\u5229\u3067\u3057\u3087\u3046\u3002\u3061\u306a\u307f\u306b\u3001\u30b3\u30fc\u30c9\u81ea\u4f53\u306f\u3001\u77ed\u3044\u306e\u3067 Xamarin \u306e Starter \u7248\uff08\u7121\u511f\u7248\uff09\u3067\u3082\u52d5\u4f5c\u78ba\u8a8d\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u7121\u511f\u7248\u306e\u5834\u5408 128KB \u5236\u9650\u306a\u306e\u3067\u3001\u305d\u306e\u306a\u304b\u3067\u53ce\u307e\u3063\u3066\u3044\u308b\u3068\u601d\u308f\u308c\u307e\u3059\uff08\u6b63\u78ba\u306a\u5927\u304d\u3055\u306f\u308f\u304b\u3089\u306a\u3044\uff09\u3002\n<\/p>\n<p><h2>RFCOMM \u7248\u306e Firmata \u3092\u4f5c\u308b<\/h2>\n<\/p>\n<p>\n\u3056\u3063\u304f\u308a\u3068\u79fb\u690d\u3057\u305f\u306e\u304c\u4ee5\u4e0b\u3067\u3059\u3002Android \u306e Bluetooth \u3092\u4f7f\u3046\u305f\u3081\u306b\u3001BluetoothAdapter.DefaultAdapter \u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002\n<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nclass Arduino\n{\n    public static int INPUT = 0;\n    public static int OUTPUT = 1;\n    public static int LOW = 0;\n    public static int HIGH = 1;\n\n    private const int MAX_DATA_BYTES = 32;\n\n    private const int DIGITAL_MESSAGE = 0x90; \/\/ send data for a digital port\n    private const int ANALOG_MESSAGE = 0xE0; \/\/ send data for an analog pin (or PWM)\n    private const int REPORT_ANALOG = 0xC0; \/\/ enable analog input by pin #\n    private const int REPORT_DIGITAL = 0xD0; \/\/ enable digital input by port\n    private const int SET_PIN_MODE = 0xF4; \/\/ set a pin to INPUT\/OUTPUT\/PWM\/etc\n    private const int REPORT_VERSION = 0xF9; \/\/ report firmware version\n    private const int SYSTEM_RESET = 0xFF; \/\/ reset from MIDI\n    private const int START_SYSEX = 0xF0; \/\/ start a MIDI SysEx message\n    private const int END_SYSEX = 0xF7; \/\/ end a MIDI SysEx message\n\n    \/\/ private SerialPort _serialPort;\n    private int delay;\n\n    private int waitForData = 0;\n    private int executeMultiByteCommand = 0;\n    private int multiByteChannel = 0;\n    private int&#x5B;] storedInputData = new int&#x5B;MAX_DATA_BYTES];\n    private bool parsingSysex;\n    private int sysexBytesRead;\n\n    private volatile int&#x5B;] digitalOutputData = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };\n    private volatile int&#x5B;] digitalInputData = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };\n    private volatile int&#x5B;] analogInputData = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };\n\n    private int majorVersion = 0;\n    private int minorVersion = 0;\n    \/\/ private Thread readThread = null;\n    private object locker = new object();\n\n    \/*\n    Guid serviceGuid = Guid.Parse(&quot;00001101-0000-1000-8000-00805f9b34fb&quot;);\n    RfcommDeviceService rfcommService;\n    StreamSocket socket;\n    DataWriter writer;\n    DataReader reader;\n    *\/\n\n    BluetoothSocket _socket;\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ \n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;serialPortName&quot;&gt;String specifying the name of the serial port. eg COM4&lt;\/param&gt;\n    \/\/\/ &lt;param name=&quot;baudRate&quot;&gt;The baud rate of the communication. Default 115200&lt;\/param&gt;\n    \/\/\/ &lt;param name=&quot;autoStart&quot;&gt;Determines whether the serial port should be opened automatically.\n    \/\/\/                     use the Open() method to open the connection manually.&lt;\/param&gt;\n    \/\/\/ &lt;param name=&quot;delay&quot;&gt;Time delay that may be required to allow some arduino models\n    \/\/\/                     to reboot after opening a serial connection. The delay will only activate\n    \/\/\/                     when autoStart is true.&lt;\/param&gt;\n    public Arduino(string serialPortName, Int32 baudRate, bool autoStart, int delay)\n    {\n        \/*\n        _serialPort = new SerialPort(serialPortName, baudRate);\n        _serialPort.DataBits = 8;\n        _serialPort.Parity = Parity.None;\n        _serialPort.StopBits = StopBits.One;\n        *\/\n        if (autoStart)\n        {\n            this.delay = delay;\n            this.Connect();\n            this.Open();\n        }\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Creates an instance of the Arduino object, based on a user-specified serial port.\n    \/\/\/ Assumes default values for baud rate (115200) and reboot delay (8 seconds)\n    \/\/\/ and automatically opens the specified serial connection.\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;serialPortName&quot;&gt;String specifying the name of the serial port. eg COM4&lt;\/param&gt;\n    public Arduino(string serialPortName) : this(serialPortName, 115200, true, 8000) { }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Creates an instance of the Arduino object, based on user-specified serial port and baud rate.\n    \/\/\/ Assumes default value for reboot delay (8 seconds).\n    \/\/\/ and automatically opens the specified serial connection.\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;serialPortName&quot;&gt;String specifying the name of the serial port. eg COM4&lt;\/param&gt;\n    \/\/\/ &lt;param name=&quot;baudRate&quot;&gt;Baud rate.&lt;\/param&gt;\n    public Arduino(string serialPortName, Int32 baudRate) : this(serialPortName, baudRate, true, 8000) { }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Creates an instance of the Arduino object using default arguments.\n    \/\/\/ Assumes the arduino is connected as the HIGHEST serial port on the machine,\n    \/\/\/ default baud rate (115200), and a reboot delay (8 seconds).\n    \/\/\/ and automatically opens the specified serial connection.\n    \/\/\/ &lt;\/summary&gt;\n    public Arduino() : this(Arduino.list().ElementAt(list().Length - 1), 115200, false, 8000) { }\n\n\n    public void Connect()\n    {\n        BluetoothAdapter adapter = BluetoothAdapter.DefaultAdapter;\n        if (adapter == null)\n        {\n            throw new Exception(&quot;No Bluetooth adapter found.&quot;);\n        }\n        if (!adapter.IsEnabled)\n        {\n            throw new Exception(&quot;Bluetooth adapter is not enabled.&quot;);\n        }\n        BluetoothDevice device = (from bd in adapter.BondedDevices\n                                    where bd.Name == &quot;HC-06&quot;\n                                    select bd).FirstOrDefault();\n        if (device == null)\n        {\n            throw new Exception(&quot;Named device not found.&quot;);\n        }\n        _socket = device.CreateRfcommSocketToServiceRecord(UUID.FromString(&quot;00001101-0000-1000-8000-00805f9b34fb&quot;));\n        _socket.Connect();\n        return;\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Opens the serial port connection, should it be required. By default the port is\n    \/\/\/ opened when the object is first created.\n    \/\/\/ &lt;\/summary&gt;\n    public void Open()\n    {\n        \/\/ _serialPort.Open();\n\n        \/\/ Thread.Sleep(delay);\n\n        byte&#x5B;] command = new byte&#x5B;2];\n\n        for (int i = 0; i &lt; 6; i++)\n        {\n            command&amp;#91;0&amp;#93; = (byte)(REPORT_ANALOG | i);\n            command&amp;#91;1&amp;#93; = (byte)1;\n            \/\/ _serialPort.Write(command, 0, 2);\n            _socket.OutputStream.Write(command, 0, command.Length);\n        }\n\n        for (int i = 0; i &lt; 2; i++)\n        {\n            command&amp;#91;0&amp;#93; = (byte)(REPORT_DIGITAL | i);\n            command&amp;#91;1&amp;#93; = (byte)1;\n            \/\/ _serialPort.Write(command, 0, 2);\n            _socket.OutputStream.Write(command, 0, command.Length);\n        }\n        command = null;\n\n        \/*\n        if (readThread == null)\n        {\n            readThread = new Thread(processInput);\n            readThread.Start();\n        }\n        *\/\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Closes the serial port.\n    \/\/\/ &lt;\/summary&gt;\n    public void Close()\n    {\n        \/\/ readThread.Join(500);\n        \/\/ readThread = null;\n        \/\/ _serialPort.Close();\n        _socket.Close();\n        _socket = null;\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Lists all available serial ports on current system.\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;returns&gt;An array of strings containing all available serial ports.&lt;\/returns&gt;\n    public static string&#x5B;] list()\n    {\n        \/\/ return SerialPort.GetPortNames();\n        return new string&#x5B;] { &quot;HC-06&quot; };\n\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Returns the last known state of the digital pin.\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;pin&quot;&gt;The arduino digital input pin.&lt;\/param&gt;\n    \/\/\/ &lt;returns&gt;Arduino.HIGH or Arduino.LOW&lt;\/returns&gt;\n    public int digitalRead(int pin)\n    {\n        return (digitalInputData&#x5B;pin &gt;&gt; 3] &gt;&gt; (pin &amp; 0x07)) &amp; 0x01;\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Returns the last known state of the analog pin.\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;pin&quot;&gt;The arduino analog input pin.&lt;\/param&gt;\n    \/\/\/ &lt;returns&gt;A value representing the analog value between 0 (0V) and 1023 (5V).&lt;\/returns&gt;\n    public int analogRead(int pin)\n    {\n        return analogInputData&#x5B;pin];\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Sets the mode of the specified pin (INPUT or OUTPUT).\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;pin&quot;&gt;The arduino pin.&lt;\/param&gt;\n    \/\/\/ &lt;param name=&quot;mode&quot;&gt;Mode Arduino.INPUT or Arduino.OUTPUT.&lt;\/param&gt;\n    public void pinMode(int pin, int mode)\n    {\n        byte&#x5B;] message = new byte&#x5B;3];\n        message&#x5B;0] = (byte)(SET_PIN_MODE);\n        message&#x5B;1] = (byte)(pin);\n        message&#x5B;2] = (byte)(mode);\n        \/\/ _serialPort.Write(message, 0, 3);\n        _socket.OutputStream.Write(message, 0, message.Length);\n        message = null;\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Write to a digital pin that has been toggled to output mode with pinMode() method.\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;pin&quot;&gt;The digital pin to write to.&lt;\/param&gt;\n    \/\/\/ &lt;param name=&quot;value&quot;&gt;Value either Arduino.LOW or Arduino.HIGH.&lt;\/param&gt;\n    public void digitalWrite(int pin, int value)\n    {\n        int portNumber = (pin &gt;&gt; 3) &amp; 0x0F;\n        byte&#x5B;] message = new byte&#x5B;3];\n\n        if (value == 0)\n            digitalOutputData&#x5B;portNumber] &amp;= ~(1 &lt;&lt; (pin &amp; 0x07));\n        else\n            digitalOutputData&amp;#91;portNumber&amp;#93; |= (1 &lt;&lt; (pin &amp; 0x07));\n\n        message&amp;#91;0&amp;#93; = (byte)(DIGITAL_MESSAGE | portNumber);\n        message&amp;#91;1&amp;#93; = (byte)(digitalOutputData&amp;#91;portNumber&amp;#93; &amp; 0x7F);\n        message&amp;#91;2&amp;#93; = (byte)(digitalOutputData&amp;#91;portNumber&amp;#93; &gt;&gt; 7);\n        \/\/ _serialPort.Write(message, 0, 3);\n        _socket.OutputStream.Write(message, 0, message.Length);\n    }\n\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Write to an analog pin using Pulse-width modulation (PWM).\n    \/\/\/ &lt;\/summary&gt;\n    \/\/\/ &lt;param name=&quot;pin&quot;&gt;Analog output pin.&lt;\/param&gt;\n    \/\/\/ &lt;param name=&quot;value&quot;&gt;PWM frequency from 0 (always off) to 255 (always on).&lt;\/param&gt;\n    public void analogWrite(int pin, int value)\n    {\n        byte&#x5B;] message = new byte&#x5B;3];\n        message&#x5B;0] = (byte)(ANALOG_MESSAGE | (pin &amp; 0x0F));\n        message&#x5B;1] = (byte)(value &amp; 0x7F);\n        message&#x5B;2] = (byte)(value &gt;&gt; 7);\n        \/\/ _serialPort.Write(message, 0, 3);\n        _socket.OutputStream.Write(message, 0, message.Length);\n    }\n\n    private void setDigitalInputs(int portNumber, int portData)\n    {\n        digitalInputData&#x5B;portNumber] = portData;\n    }\n\n    private void setAnalogInput(int pin, int value)\n    {\n        analogInputData&#x5B;pin] = value;\n    }\n\n    private void setVersion(int majorVersion, int minorVersion)\n    {\n        this.majorVersion = majorVersion;\n        this.minorVersion = minorVersion;\n    }\n\n    \/*\n    private int available()\n    {\n        return _serialPort.BytesToRead;\n    }\n    *\/\n} \/\/ End Arduino class\n<\/pre>\n<p>\n\u63a5\u7d9a\u3042\u305f\u308a\u306f\u3001\n<\/p>\n<p>\nAndroid \u304b\u3089 Bluetooth+RFCOMM \u3092\u5229\u7528\u3057\u3066\u30e2\u30fc\u30bf\u30fc\u5236\u5fa1\u3092\u3059\u308b | Moonmile Solutions Blog<br \/>\n<a href=\"http:\/\/www.moonmile.net\/blog\/archives\/6826\">http:\/\/www.moonmile.net\/blog\/archives\/6826<\/a>\n<\/p>\n<p>\n\u3068\u540c\u3058\u3088\u3046\u306b\u66f8\u3044\u3066\u3044\u307e\u3059\u3002\u72ec\u81ea\u306b RFCOMM \u3092\u4f7f\u3063\u305f\u5834\u5408\u306f\u81ea\u524d\u3067 Android\/Arduino \u306e\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u4f5c\u3089\u306a\u3051\u308c\u3070\u3044\u3051\u307e\u305b\u3093\u304c\uff08\u3068\u306f\u3044\u3048\u3001\u81ea\u5206\u306e\u5834\u5408\u306f 8 \u30d0\u30a4\u30c8\u56fa\u5b9a\u306b\u3057\u3066\u3042\u308b\u306e\u7c21\u5358\uff09\u3001Firmata \u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u4f7f\u3046\u3068\u3001GPIO \u7b49\u3092\u305d\u306e\u307e\u307e\u4f7f\u3046\u5206\u306b\u306f\u624b\u8efd\u3067\u3059\u3002<br \/>\n\u30d0\u30a4\u30ca\u30ea\u9001\u4fe1\u3092\u3057\u3066\u3044\u308b\u3068\u3053\u3082\u305d\u306e\u307e\u307e\u79fb\u690d\u3002\u4eca\u56de\u306f\u30c6\u30b9\u30c8\u7684\u306a\u3082\u306e\u306a\u306e\u3067\u3001Android \u306e\u53d7\u4fe1\u5074\u306f\u7701\u7565\u3057\u307e\u3057\u305f\u3002\u3082\u3046\u3061\u3087\u3063\u3068\u6574\u7406\u3057\u3066\u3001\u305d\u306e\u3046\u3061 github \u3078\u3002\n<\/p>\n<p><h2>\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u3092\u8a2d\u5b9a\u3059\u308b<\/h2>\n<\/p>\n<p>\nBluetooth \u3092\u6271\u3046\u306e\u3067\u3001\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u3066\u304a\u304d\u307e\u3059\u3002<br \/>\n\u305f\u3076\u3093\u3001&#8221;BLUETOOTH&#8221; \u3060\u3051\u30c1\u30a7\u30c3\u30af\u3059\u308c\u3070 ok \u3067\u3059\u3002\n<\/p>\n<p><a href='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2015\/05\/wpid-dworkblogimage20150520_02org.jpg'><img border='0' src='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2015\/05\/wpid-dworkblogimage20150520_02thum.jpg'\/><\/a><\/p>\n<p><h2>UI \u3068 MainActivity<\/h2>\n<\/p>\n<p>\n\u3053\u3093\u306a\u753b\u9762\u3092\u4f5c\u3063\u3066\u304a\u304d\u307e\u3059\u3002\n<\/p>\n<p><a href='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2015\/05\/wpid-dworkblogimage20150520_03org.jpg'><img border='0' src='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2015\/05\/wpid-dworkblogimage20150520_03thum.jpg'\/><\/a><\/p>\n<p>\n5\u30d4\u30f3\u306b LED \u3092\u3064\u3051\u308b\u306e\u3067\u3001pinMode \u306a\u3069\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\n<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class MainActivity : Activity\n{\n    Arduino arduino;\n    protected override void OnCreate(Bundle bundle)\n    {\n        base.OnCreate(bundle);\n\n        \/\/ Set our view from the &quot;main&quot; layout resource\n        SetContentView(Resource.Layout.Main);\n\n        \/\/ Get our button from the layout resource,\n        \/\/ and attach an event to it\n        arduino = new Arduino();\n        FindViewById&lt;Button&gt;(Resource.Id.buttonConnect).Click += (s, e) =&gt; { \n            arduino.Connect();\n            FindViewById&lt;Button&gt;(Resource.Id.buttonConnect).Text = &quot;connected.&quot;;\n        };\n        FindViewById&lt;Button&gt;(Resource.Id.buttonOpen).Click += (s, e) =&gt; { \n            arduino.Open();\n            FindViewById&lt;Button&gt;(Resource.Id.buttonOpen).Text = &quot;Firmata opend&quot;;\n            arduino.pinMode(5, Arduino.OUTPUT);\n            arduino.digitalWrite(5, Arduino.LOW);\n        };\n\n        FindViewById&lt;Button&gt;(Resource.Id.buttonLEDon).Click += OnClickLedOn;\n        FindViewById&lt;Button&gt;(Resource.Id.buttonLEDoff).Click += OnClickLedOff;\n    }\n\n    void OnClickLedOn(object sender, EventArgs e)\n    {\n        arduino.digitalWrite(5, Arduino.HIGH);\n    }\n    void OnClickLedOff(object sender, EventArgs e)\n    {\n        arduino.digitalWrite(5, Arduino.LOW);\n    }\n}\n<\/pre>\n<p>\nConnect \u3068 Open \u306f\u540c\u6642\u306b\u3084\u3063\u3066\u3082\u3044\u3044\u3068\u601d\u3044\u307e\u3059\u3002RFCOMM \u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092 Sync \u306e\u307b\u3046\u306e\u975e\u540c\u671f\u95a2\u6570\u3092\u4f7f\u3048\u3070\u3088\u304b\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u3072\u3068\u307e\u305a\u540c\u671f\u7684\u306b\u4f5c\u3063\u3066\u3044\u307e\u3059\u3002\u307e\u3042\u3001\u53d7\u4fe1\u56de\u308a\uff08\u6e29\u5ea6\u3084\u6e7f\u5ea6\u30c7\u30fc\u30bf\u3068\u304b\uff09\u3092\u304d\u3061\u3093\u3068\u4f5c\u3063\u3066\u3001await\/async \u3092\u4f7f\u3048\u3070\u7d50\u69cb\u3059\u3063\u304d\u308a\u3059\u308b\u30cf\u30ba\u3067\u3059\u3002\n<\/p>\n<p><h2>\u5b9f\u884c\u3057\u3066\u307f\u308b<\/h2>\n<\/p>\n<p>\n\u30d3\u30eb\u30c9\u3092\u3057\u3066\u5b9f\u6a5f\u3067\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\u3002\u3046\u3061\u306e Android \u306f 4.1.2 \u3068\u3044\u3046\u53e4\u3044\u30bf\u30a4\u30d7\u306a\u306e\u3067\u3059\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u307e\u3057\u305f\u3002Bluetooth \u7d4c\u7531\u306a\u306e\u3067\u3001\u30a2\u30af\u30bb\u30b9\u30dd\u30a4\u30f3\u30c8\u3068\u304b\u304c\u5fc5\u8981\u306a\u3044\u306e\u3067\u6238\u5916\u3067\u3082\u4f7f\u3048\u307e\u3059\u3088\u306d\u3002\u307e\u3042\u3001\u6238\u5916\u3067\u4f7f\u3063\u3066\u3001\u3069\u3046\u3068\u3044\u3046\u3053\u3068\u306f\u306a\u3044\u306e\u3067\u3059\u304c\u3002\n<\/p>\n<p><a href='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2015\/05\/wpid-dworkblogimage20150520_05org.jpg'><img border='0' src='http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2015\/05\/wpid-dworkblogimage20150520_05thum.jpg'\/><\/a><\/p>\n<p>\n\u3053\u308c\u306f\u3053\u308c\u3067\u6574\u7406\u3057\u3066\u3001\u5f8c\u3067 Arduino \u6226\u8eca\u3082\u52d5\u304b\u305b\u308b\u3088\u3046\u306b\u7d44\u307f\u76f4\u3057\u3044\u304d\u307e\u3057\u3087\u3046\u3002\u3042\u3068\u3001\u9069\u5f53\u306a\u8ddd\u96e2\u30bb\u30f3\u30b5\u30fc\u3084\u52a0\u901f\u5ea6\u30bb\u30f3\u30b5\u30fc\u3092\u4ed8\u3051\u3066\u3001\u5024\u3092\u3068\u308c\u308b\u3088\u3046\u306b\u3044\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Windows Remote Arduino \u3092\u5229\u7528\u3057\u3066 Arduino \u6226\u8eca\u3092\u52d5\u304b\u3059 | Moonmile Solutions Blog http:\/\/www.moonmile.net\/blog\/archives\/71 &hellip; <a href=\"http:\/\/www.moonmile.net\/blog\/archives\/7185\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[64,71,62],"tags":[],"class_list":["post-7185","post","type-post","status-publish","format-standard","hentry","category-android","category-arduino","category-xamarin"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/7185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=7185"}],"version-history":[{"count":1,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/7185\/revisions"}],"predecessor-version":[{"id":7186,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/7185\/revisions\/7186"}],"wp:attachment":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=7185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=7185"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=7185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}