HC-05 Bluetooth のインターフェースはシリアル通信なので Netduino からシリアル通信すれば良いだろう、ってことで試してみました。配線は TA7291P モータードライバと HC-05 を使ってモーターを無線制御 | Moonmile Solutions Blog とほぼ同じ。HC-05 との通信線が、D2, D3 に割り当てられていて COM2 で接続するところが違います。たぶん、COM1 は D1, D2 の組み合わせでないかと。Joe’s Blog: Using a Cheap Bluetooth Shield on the Netduino を参考にして作っています。

ブレッドボード
TA7291P は外部電源からモーターを動かすことができるので、単三2個の電池はモーターを動かすために接続します。
![]()
回路図
電池のほうにもパスコンがあったほうがいいのか?一応、回路図を。
![]()
C# のコード
public class Program
{
public static void Main()
{
// write your code here
new Program().main();
}
public void main()
{
OutputPort pin8 = new OutputPort(Pins.GPIO_PIN_D8, false);
OutputPort pin9 = new OutputPort(Pins.GPIO_PIN_D9, false);
// D2,D3 に接続すると COM2 がつながる
SerialPort serial = new SerialPort(SerialPorts.COM2, 9600, Parity.None, 8, StopBits.One);
serial.DataReceived += (s, e) =>
{
byte[] data;
// 2バイト連続で送られてこないことがあるので、
// 1バイトずつ読み込む
// たぶん, writer.WriteString("MF") な感じで送っているから?
byte data1 = (byte)serial.ReadByte();
if (data1 == (byte)'M')
{
byte data2 = (byte)serial.ReadByte();
switch (data2)
{
case (byte)'F': // 前進
Debug.Print("motor forward");
data = System.Text.Encoding.UTF8.GetBytes("forward-");
serial.Write( data, 0, 8);
pin8.Write(true);
pin9.Write(false);
break;
case (byte)'B': // 後進
Debug.Print("motor back");
data = System.Text.Encoding.UTF8.GetBytes("back----");
serial.Write( data, 0, 8);
pin8.Write(false);
pin9.Write(true);
break;
case (byte)'0': // 停止
Debug.Print("motor stop");
data = System.Text.Encoding.UTF8.GetBytes("stop----");
serial.Write( data, 0, 8);
pin8.Write(false);
pin9.Write(false);
break;
}
}
};
/// シリアル受信開始
serial.Open();
/// 無限待ち
Thread.Sleep(Timeout.Infinite);
}
}
new SerialPort でシリアルポートを初期化して、Read/Write します。Read は複数バイト取れるのですが、送信する(ストアアプリ)方で、writer.WriteString(“MF”) な感じで送信しているせいか、1バイトずつ送られてくることがあります。仕方がないので ReadByte を使って1バイトずつ読み込みます。まあ、これでもスピードは十分かと。
Write のほうもバイナリで送るので、Arduino のように println がないのでデバッグにはちょっと使いづらいのですが、Netduino の場合は Debug.Print することで、Visual Studio に出力することができます。ブレークポイントも置いてプログラムを止めることもできるので、実はデバッグは非常にやりやすいです。Android 実機を Xamarin Studio で操作している感覚で使えます。このあたりは、Netduino 自体の要求スペックが高いことと、.NET Framework であることが効果をあげていますね。プロトタイプ的に Netduino で探っていって、Arduino にコードを移すことも考えられるでしょう。…が、壊してしまうと Netduiono のほうが高いので、そのあたりは安い Arduino(びんぼうでいいのとか)をつかってバンバン試すってのもありですね。
