Hi,
I Use the Spider-Board with the Bluetooth-Module, but I do not see the bluetoothdevice on my devices (PC and mobilephone)
First I used the Example on the Bluetooth Documentation of GHI.
https://www.ghielectronics.com/docs/159/bluetooth-module#1575
using System.Threading;
using Gadgeteer.Modules.GHIElectronics;
using Microsoft.SPOT;
namespace change_this_to_your_namespace
{
public partial class Program
{
void ProgramStarted()
{
bluetooth.SetDeviceName("Gadgeteer");
bluetooth.BluetoothStateChanged += new Bluetooth.BluetoothStateChangedHandler(bluetooth_BluetoothStateChanged);
bluetooth.DataReceived += new Bluetooth.DataReceivedHandler(bluetooth_DataReceived);
//The timer gives the device enough time to initialize.
Gadgeteer.Timer timer = new Gadgeteer.Timer(1000, Gadgeteer.Timer.BehaviorType.RunOnce);
timer.Tick += new Gadgeteer.Timer.TickEventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(Gadgeteer.Timer timer)
{
//You only need to enter pairing mode once with a device. After you pair for the first time, it will
//automatically connect in the future.
if (!bluetooth.IsConnected)
bluetooth.ClientMode.EnterPairingMode();
}
void bluetooth_BluetoothStateChanged(Bluetooth sender, Bluetooth.BluetoothState btState)
{
Debug.Print(btState.ToString());
}
void bluetooth_DataReceived(Bluetooth sender, string data)
{
Debug.Print(data);
sender.ClientMode.SendLine(data); //echoes the data back to the device.
}
}
}
Than I tried other excamples like:
using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Touch;
using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
In this excample i also used F11 for compile step by step.
There I receive a message: "bluetooth_42.cs not found"
namespace Bluetooth_Spider
{
public partial class Program
{
private Bluetooth.Client client;
// This method is run when the mainboard is powered up or reset.
void ProgramStarted()
{
client = bluetooth.ClientMode;
bluetooth.SetDeviceName("Gadgeteer");
bluetooth.SetPinCode("0000");
bluetooth.SetDeviceBaud(38400);
bluetooth.DataReceived += new Bluetooth.DataReceivedHandler(bluetooth_DataReceived);
button.ButtonPressed += new Button.ButtonEventHandler(button_Presses);
Debug.Print("Program Started");
}
private void button_Presses(Button sender, Button.ButtonState state)
{
button.ToggleLED();
if (button.IsLedOn) client.EnterPairingMode();
}
private void bluetooth_DataReceived(Bluetooth sender, string data)
{
Debug.Print("Daten: " + data);
}
}
}
But no device found.
The last I was trying, is the driver and testprojekt from RoSchmi:
Here the Program.cs of the project
// Copyright RoSchmi 2014, License: Apache 2.0
// The class Bluetooth.cs in this application is driver for the GHI Bluetooth Module
// The class can be used in other Gadgeteer Mainboards. It was tested for Spider, Cerbuino Bee, Cobra-2 and Raptor
// In this application for Cerbuino Bee the Bluetooth-Module is connected to Socket 2, the GHI Button-Module to Socket 3
// and optinally an rs232 Module on Socket 1
// The application was created on Visual Studio 2012 Express, NETMF Version 4.2, GHI SDK Version 2013 R3
//
// When the application is deployed and started, the LEDs on the Bluetooth Module should blink alternating blue and red.
// If they do not blink blue and red, press the Button Module to enter pairing mode.
// Then the pairing with your Windows PC should be done according to your Windows Version. As Pairing code enter "0000".
// After successful pairing you have look, which serial ports are used for for the Bluetooth connection by your PC
// Then you can start e.g. Teraterm in Tab "File" open a new serial connectin with one of the two serial ports that are
// used for the bluetooth connection by your PC (one of the two should work)
// If the connection is established you'll receive a Message: "Hello from TinCLR, Message Nr. xx" every second
//
// Instead of using serial ports you can use the a connection through the 32feet.net library as shown in my
// GHI CodeShare entry "FEZ/PC Bluetooth File Transfer Server/Client"
// Note:
// ******************* Reference: Gadgeteer.Serial must be added *****************************
using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Touch;
using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using GTI = Gadgeteer.Interfaces;
using Gadgeteer.Modules.RoSchmi;
using Gadgeteer.Modules.GHIElectronics;
namespace Bluetooth_Pairing_Test
{
public partial class Program
{
//********** Presets: Parameter to be changed by users ***************************
const string MyDeviceName = "MySpider"; // Device Name
const string MyPinCode = "0000"; // Pin Code
const int MySocketNumber = 11; // The SocketNumber of the mainboard to which the BT-Module is connected
const long BT_Device_Baudrate = 38400; // Baudrate
// possible baudrates 9600, 19200, 38400, 57600, 115200, 230400, 460800
const bool ReadMode_ByteArray = false; // false: data are received as strings -Event: bluetooth_DataReceived
// true: data are received as byte array-Event: bluetooth_DataByteArrayReceived
const bool FastReadMode = true; // true: switch to transmit without parsing
// false: data are always parsed for BT-module messages
const int MyEventDelay = 20; // Choose higher value if data received events queue up ( 20 = standard)
// has no effect in ReadMode_ByteArray Mode in combination with FastReadMode
const int SendInterval = 1000; // In this time interval we send a message to the BT-Module
//**************** End Parameter to be changed by user ***************************
static private Bluetooth bluetooth;
static private Bluetooth.Client client;
static int MessageCounter = 0; // Counter to count the sent messages
static long BytesTransferred = 0;
static long LastBytesTransferred = 0;
static long baudrate = 0;
static long events = 0;
static long lastevents = 0;
static long eventspersec = 0;
static long showEvent = 0;
byte[] datadrain = new byte[2000]; // Dummy, here we can put the received data
// timerSendData is used to fire in interval to send data to the BT-Module
GT.Timer timerSendData;
// timer, used to calculate statistics every 2 seconds (not needed in applications)
GT.Timer CalculateBaudrate;
// timerEnterPairing is used to enter pairing mode automatically
GT.Timer timerEnterPairing;
string dataLine1 = null; // used to process incoming data in eventhandler: bluetooth_DataReceived (as String)
string dataLine2 = null; // used to process incoming data in eventhandler: bluetooth_DataByteArrayReceived (as Byte Array)
byte[] ReceivedBytes; // used to process incoming data in eventhandler: bluetooth_DataReceived (as String)
SerialBuffer mySerialBuffer; // used to connect incoming data chunks and split after LineFeed (0x0A)
#region ProgramStarted()
// This method is run when the mainboard is powered up or reset.
void ProgramStarted()
{
Debug.Print("Program Started");
// Set up an optional RS232 Module with baudrate 38400 to send data to another PC
// you can leave it away if you have no RS232 module
//******************************************************************
/*
try
{
rs232.Initialize(38400, GTI.Serial.SerialParity.None, GTI.Serial.SerialStopBits.One, 8, GTI.Serial.HardwareFlowControl.NotRequired);
}
catch (Exception e)
{
Debug.Print(e.ToString());
}
if (!rs232.serialPort.IsOpen)
{
rs232.serialPort.Open();
}*/
// *****************************************************************
// Event handler for button to enter pairing mode
button.ButtonPressed += new Button.ButtonEventHandler(button_ButtonPressed);
// Set a timer to enter pairing mode after 3 seconds
timerEnterPairing = new GT.Timer(3000,GT.Timer.BehaviorType.RunOnce);
timerEnterPairing.Tick +=new GT.Timer.TickEventHandler(timerEnterPairing_Tick);
// Set a timer to send data to the BT-Module in intervals
timerSendData = new GT.Timer(SendInterval);
timerSendData.Tick += new GT.Timer.TickEventHandler(timerSendData_Tick);
timerSendData.Stop();
CalculateBaudrate = new GT.Timer(2000, GT.Timer.BehaviorType.RunContinuously);
CalculateBaudrate.Tick += new GT.Timer.TickEventHandler(CalculateBaudrate_Tick);
CalculateBaudrate.Start();
// define a bluetooth module running on socket: "MySocketNumber", baudrate: "BT_Device_Baudrate"
Debug.Print("Program Message: Initialize Bluetooth module on Port " + MySocketNumber.ToString()
+ " Baudrate: " + BT_Device_Baudrate.ToString());
bluetooth = new Bluetooth(MySocketNumber, BT_Device_Baudrate);
bluetooth.EventDelay = MyEventDelay; // Choose higher value in "Presets" if data received events queue up ( 20 = standard)
// has no effect in ReadMode_ByteArray Mode in combination with FastReadMode
// Set the Mode to receive data as Strings or as Byte Array depending on the settings in "Presets"
bluetooth.SetReadMode_ByteArray(ReadMode_ByteArray);
// Set up eventhandler for state changes
bluetooth.BluetoothStateChanged += new Bluetooth.BluetoothStateChangedHandler(bluetooth_BluetoothStateChanged);
// Set up eventhandler to receive data from the Bluetooth module as Strings or as Byte Arrays (only one is needed)
bluetooth.DataReceived += new Bluetooth.DataReceivedHandler(bluetooth_DataReceived);
bluetooth.DataByteArrayReceived += new Bluetooth.DataByteArrayReceivedHandler(bluetooth_DataByteArrayReceived);
Debug.Print("Program Message: Set Bluetooth module to Client Mode" + "\r\n");
client = bluetooth.ClientMode;
Thread.Sleep(200);
Debug.Print("Program Message: Set Device Name: " + MyDeviceName + "\r\n");
bluetooth.SetDeviceName(MyDeviceName);
Thread.Sleep(2000); // time was not tested
Debug.Print("Program Message: Set Device Pincode" + "\r\n");
bluetooth.SetPinCode(MyPinCode);
Thread.Sleep(2000); // time was not tested
/*
Debug.Print("Program Message: Set BT-Device to: Disable Auto-connect " + "\r\n");
bluetooth.DisableAutoConnect();
Thread.Sleep(200);
*/
Debug.Print("Program Message: Set BT-Device to: Enable Auto-connect " + "\r\n");
bluetooth.PermitAutoConnect();
Thread.Sleep(200); // time was not tested
Debug.Print("Program Message: Set BT-Device to: PermitBeConnected" + "\r\n");
bluetooth.PermitBeConnected();
Thread.Sleep(200); // time was not tested
bluetooth.serialPort.DiscardInBuffer();
bluetooth.serialPort.DiscardOutBuffer();
Thread.Sleep(200);
mySerialBuffer = new SerialBuffer(256);
timerSendData.Start();
timerEnterPairing.Start();
}
#endregion
#region CalculateBaudrate_Tick (this is needed only to calaculate statistics)
void CalculateBaudrate_Tick(GT.Timer timer)
{
baudrate = ((BytesTransferred - LastBytesTransferred) / 2) * 10;
LastBytesTransferred = BytesTransferred;
eventspersec = (events - lastevents) / 2;
lastevents = events;
}
#endregion
#region timerSendData_Tick Sends a message over the Bluetooth Connection
void timerSendData_Tick(GT.Timer timer)
{
//Debug.Print("Program Message: ____________________________timerSendData ticked");
// check to see that the bluetooth module is connected, and if so send a message over the connection
if (bluetooth.IsConnected)
{
//Debug.Print("Program Message: BT is connected, so I send the message: " + "Hello from TinyClr, Message No.: " + MessageCounter.ToString());
client.Send("Hello from TinyClr, Message No.: " + MessageCounter.ToString() + "\r\n");
MessageCounter++;
}
else
{
Debug.Print("Program message: BT is not connected, cannot send message");
}
}
#endregion
#region button_ButtonPressed Enter Pairing Mode
void button_ButtonPressed(Button sender, Button.ButtonState state)
{
// check to see that the bluetooth module is connected, and if so do nothing
if (bluetooth.IsConnected)
{
Debug.Print("Program Message: You pressed the button but BT was connected, so not activating pairing mode");
}
// otherwise, just go into first-time pairing mode.
else
{
Debug.Print("Program Message: You pressed the button and BT was not connected, so I go to pairing mode");
client.EnterPairingMode();
}
}
#endregion
#region timerEnterPairing_Tick Enter Pairing Mode
void timerEnterPairing_Tick(GT.Timer timer)
{
if (!bluetooth.IsConnected)
{
Debug.Print("Enter pairing mode by timer event");
client.EnterPairingMode();
}
}
#endregion
// You have the choice to receive the data as strings or as ByteArrays. You need only one
#region Eventhandler -- Receive data as Strings
// Select this output mode with the bluetooth.SetReadMode_ByteArray(false) command
private void bluetooth_DataReceived(Bluetooth sender, string data)
{
ReceivedBytes = System.Text.UTF8Encoding.UTF8.GetBytes(data);
mySerialBuffer.LoadSerial(ReceivedBytes, 0, ReceivedBytes.Length);
// To see the chunks of data we can activate this Debug.Print
//Debug.Print("\r\n Program Message: Received chunk of data (String Mode). Byte-Count: " + data.Length.ToString() + " Data: " + HexEncoding.ToString(ReceivedBytes, 0, ReceivedBytes.Length) + "\r\n" + data + "\r\n");
while ((dataLine1 = mySerialBuffer.ReadLine()) != null)
{
// Debug.Print("Line Received: " + dataLine1);
// If we have a RS232 module connected we can send the received data to another PC
rs232.serialPort.Write(dataLine1 + "\r\n");
// parse the data sentence here if needed
}
}
#endregion
#region Eventhandler -- Receive data as Byte Arrays
// Select this output mode with the bluetooth.SetReadMode_ByteArray(true) command
void bluetooth_DataByteArrayReceived(Bluetooth sender, byte[] data, int startIndex, int ByteCount)
{
BytesTransferred += ByteCount;
events++;
Array.Copy(data, startIndex, datadrain, 0, ByteCount); // Dummy for the time it takes to get the data (they are not valid for a long time)
// *************************************************************************************
// if we want to see from time to time a short segment of the data, we send them over rs232
// we cannot see longer segments as we get buffer overflows
/*
if ((events > showEvent + 50) && (events < showEvent + 53)) // arbitrary values to show some transmitted data
{
mySerialBuffer.LoadSerial(data, startIndex, ByteCount);
showEvent = events;
}
*/
// ************************************************************************************
if (ByteCount < 100) // for short messages we send it over rs232
{
mySerialBuffer.LoadSerial(data, startIndex, ByteCount);
}
else // for high speed data we only send the statistics
{
rs232.serialPort.Write("Bytes Transferred: " + BytesTransferred.ToString() + " Bytes per event: " + ByteCount.ToString() + " Estimated Baudrate: " + baudrate.ToString() + " Received Events per sec: " + eventspersec.ToString() + "\r\n");
}
while ((dataLine2 = mySerialBuffer.ReadLine()) != null)
{
// If we have a RS232 module connected we can send the received data to another PC
rs232.serialPort.Write(dataLine2 + "\r\n");
// parse the data sentence here if needed
}
}
#endregion
#region Eventhandler signalizing that the BTSTATE of the Bluetooth module has changed
void bluetooth_BluetoothStateChanged(Bluetooth sender, Bluetooth.BluetoothState btState)
{
// here the bluetooth module's state has changed. First, just debug print the value so we know what is happening
Debug.Print("New state:" + btState.ToString());
// If the state is now "connected", we can do stuff over the link.
if (btState == Bluetooth.BluetoothState.Connected)
{
Debug.Print("\r\n Program Message: BT-Connection established, BTSTATE: " + btState.ToString() + "\r\n");
bluetooth.SetFastReadMode(FastReadMode); // Set fastReadMode, depending on the flag in presets
Thread.Sleep(1000); // do this to wait for BT module to connect;
client.Send("\r\nConnected to Fez\r\n");
}
// if the state is now "disconnected", you might need to stop other processes but for this example we'll just confirm that in the debug output window
if (btState != Bluetooth.BluetoothState.Connected)
{
// Debug.Print("\r\n" + "Program Message: Bluetooth disconnected, BTSTATE: " + btState.ToString() + "\r\n");
}
}
#endregion
}
}
No device found.
I don’t know what to do to get my module to work.
greetings
Dave