[EDIT]The standard RFCOMM/SPP implementation is available in rev.2.0 of the library.[/EDIT]
I am pleased to announce addition of Bluetooth dongles to the family of USB devices supported by USB Host Shield. Bluetooth dongles are affordable, interface is well documented, and USB transport layer is very simple. Even though full Bluetooth protocol is heavy and takes a lot of program space, it can be stripped down quite a bit for a particular application. One good example of such approach is Richard Ibbotson’s HID over Bluetooth implementation – see Wiimote Game Controller Interfacing article for details. I wanted to have simple communication transport over Bluetooth which would fit into Arduino and the code I’m presenting in this article is doing just that – it’s lightweight terminal program allowing two Arduinos talk to each other over Bluetooth. The code has been developed by George Lgotkin.
The source is hosted in GitHub repository. Standard Arduino library format of the code has not been tested yet, for now it’s easier to just copy all the files in a directory and open btclass_h.pde
in Arduino IDE. To use the program, you need two Arduinos, two USB Host Shields, and two Bluetooth dongles. You need to compile and load the sketch into both Arduinos and then open two terminal windows, one to a serial port of each Arduino – this can be done from a single computer. Don’t use Arduino IDE built-in terminal. Also, SPI library shipped with recent versions of Arduino IDE is not compatible with USB Host library, if you have compiler errors related to SPI, replace your library with one from Arduino-0018 or the Playground. Serial port speed is set to 115200 in the sketch, it can be changed in setup()
, if necessary.
Sketch starts by printing short help (see screenshot below) and then waits for the command. In order for two Bluetooth devices to talk to each other, one has to be the server and another one client. In one terminal, type ‘S’ and press Enter. This starts the server. If you are curious, type ‘M’, Enter – the address of the module will be printed. Note that if you send address request before starting the server, address containing all zeroes will be returned.
To establish connection, type ‘C’, Enter in other terminal. The sketch will print “Connecting…”. After some time ( 30 seconds or less ) both terminals will print “Connected”. Now type something in one terminal and press Enter – the string you just typed will appear in other terminal window. Easy.
This code is just a small example, error handling is minimal. It works better if no other Bluetooth radios are transmitting nearby. If client Arduino reports “Connected” but server doesn’t, it means that client has connected to some other server, most likely your laptop or phone. This can also be used to your advantage for testing – start Bluetooth on a PC and then see if both Arduinos are able to connect to it in client mode.
It is possible to instruct client Arduino to connect to a particular host. Look into Serial.cpp
file. InbufAnalyse
function contains addrA.bytes
array initialization. You can initialize it with address of the Bluetooth dongle connected to other Arduino (note that address bytes are loaded backwards), recompile, load, and then use ‘A’ instead of ‘C’ for client connection.
The code has been tested with different Bluetooth dongles from different manufacturers and they all seem to work fine. Sometimes one dongle refuses to work as a client so alternating server and client roles on Arduino may help. If you see any other errors, leave a comment here and I’ll try to help.
In this sketch, communication occurs over plain HCI so it can’t be used to talk to a PC or a phone. On the other hand, the code takes less than 11K of program space and can be used on Atmega168-based Arduinos. The code which implements SDP, L2CAPS and RFCOMM is in the works and will be released soon along with the documentation. For the time being, play with this code and tell me what you think.
Enjoy,
Oleg.
Damn, I had written a long, long, LONG post, but all I would really like to do is to THANK YOU!
I’ve been looking for years for a simple and cost-effective way to put cheap $2 BT dongles to uCs, so I could put BT in every project I make. You have obviously realized how cool it would be if our projects could talk to our cellphones and computers wirelessly and you’re probably trying to make it work so I won’t bother you asking why it doesn’t work, but you might have not though it would also be cool if there was a way to make the uC (not necessarily an Arduino; I like atmega48 because of their price and availability) talk directly to the ICs in our BT dongles. Many of these ICs already have I2C, SPI or UART, so it seems feasible. I’ll (hopefully) spend my next vacation working on your code to try to make it work without USB on my regular atmega48s. If you could also provide some documentation or maybe point out what needs to be modified to make this idea feasible, I would be very thankful!
Once again, congratulations for the excellent job you did there!
I also spent some time exploring this topic for similar reasons – USB BT dongles on eBay are $1 shipped. I don’t think you can use SPI or I2C of BT chips to transfer data – they seem to be there for firmware programming only. USART may be used if it’s a)supported in the firmware as HCI transport and b)pins are routed out. I’m yet to find such a dongle but if you have one, changing George’s code to USART is simple – only HCI layer needs to be modified, and transport is documented in BT spec.
The BT code will be expanded to support RFCOMM so talking to laptops, phones and such will be possible. At present, tt’s not the most cost-effective BT solution for Arduino. However, I’m working on a version of USB Host library which will not be dependent on Arduino definitions and support multiple devices via a hub. When this is done, BT radio can be used concurrently with whatever USB peripherals you have in a project.
The USB chips used in the dongles are not well documented on their interface except the CSR devices. The CSR devices do have USART and SPI interfaces as well as USB and I2C to access the EEPROM. However the cheap dongles do not seem to bring these signals out from under the BGA chip.
Low cost USB dongles which use the CSR tend to use the ROM version which is more limted than the flash based devices. Many chips which say they are CSR in the descriptors are not true CSR.
The pricing of CSR based boards (often flash based too) which expose the other interfaces has dropped significantly, so you might meet your goal, but maybe not with the USB dongle.
http://cgi.ebay.co.uk/2-pcs-Serial-Bluetooth-RF-Transceiver-Module-rs232-/330452405153?pt=LH_DefaultDomain_0&hash=item4cf07f8ba1
I’ve connected my dongle but the address is My BDADDR:0:0:0:0:0:0! Why? Thanks!
Have you started server first, as described in the article?
I’ve another one returning all zeros also. It looks like a CSR modem. This is what USB desc reports:
01
—
Device descriptor:
Descriptor Length: 12
Descriptor type: 01
USB version: 0200
Device class: E0
Device Subclass: 01
Device Protocol: 01
Max.packet size: 40
Vendor ID: 0A12
Product ID: 0001
Revision ID: 3164
Mfg.string index: 00
Prod.string index: 02
Serial number index: 00
Number of conf.: 01
Configuration descriptor:
Total length: 00B1
Num.intf: 02
Conf.value: 01
Conf.string: 00
Attr.: C0
Max.pwr: 00
Interface descriptor:
Intf.number: 00
Alt.: 00
Endpoints: 03
Intf. Class: E0
Intf. Subclass: 01
Intf. Protocol: 01
Intf.string: 00
Endpoint descriptor:
Endpoint address: 81
Attr.: 03
Max.pkt size: 0010
Polling interval: 01
Endpoint descriptor:
Endpoint address: 02
Attr.: 02
Max.pkt size: 0040
Polling interval: 01
Endpoint descriptor:
Endpoint address: 82
Attr.: 02
Max.pkt size: 0040
Polling interval: 01
Interface descriptor:
Intf.number: 01
Alt.: 00
Endpoints: 02
Intf. Class: E0
Intf. Subclass: 01
Intf. Protocol: 01
Intf.string: 00
Endpoint descriptor:
Endpoint address: 03
Attr.: 01
Max.pkt size: 0000
Polling interval: 01
Endpoint descriptor:
Endpoint address: 83
Attr.: 01
Max.pkt size: 0000
Polling interval: 01
Interface descriptor:
Intf.number: 01
Alt.: 01
Endpoints: 02
Intf. Class: E0
Intf. Subclass: 01
Intf. Protocol: 01
Intf.string: 00
Endpoint descriptor:
Endpoint address: 03
Attr.: 01
Max.pkt size: 0009
Polling interval: 01
Endpoint descriptor:
Endpoint address: 83
Attr.: 01
Max.pkt size: 0009
Polling interval: 01
Interface descriptor:
Intf.number: 01
Alt.: 02
Endpoints: 02
Intf. Class: E0
Intf. Subclass: 01
Intf. Protocol: 01
Intf.string: 00
Endpoint descriptor:
Endpoint address: 03
Attr.: 01
Max.pkt size: 0011
Polling interval: 01
Endpoint descriptor:
Endpoint address: 83
Attr.: 01
Max.pkt size: 0011
Polling interval: 01
Interface descriptor:
Intf.number: 01
Alt.: 03
Endpoints: 02
Intf. Class: E0
Intf. Subclass: 01
Intf. Protocol: 01
Intf.string: 00
Endpoint descriptor:
Endpoint address: 03
Attr.: 01
Max.pkt size: 0019
Polling interval: 01
Endpoint descriptor:
Endpoint address: 83
Attr.: 01
Max.pkt size: 0019
Polling interval: 01
Interface descriptor:
Intf.number: 01
Alt.: 04
Endpoints: 02
Intf. Class: E0
Intf. Subclass: 01
Intf. Protocol: 01
Intf.string: 00
Endpoint descriptor:
Endpoint address: 03
Attr.: 01
Max.pkt size: 0021
Polling interval: 01
Endpoint descriptor:
Endpoint address: 83
Attr.: 01
Max.pkt size: 0021
Polling interval: 01
Interface descriptor:
Intf.number: 01
Alt.: 05
Endpoints: 02
Intf. Class: E0
Intf. Subclass: 01
Intf. Protocol: 01
Intf.string: 00
Endpoint descriptor:
Endpoint address: 03
Attr.: 01
Max.pkt size: 0031
Polling interval: 01
Endpoint descriptor:
Endpoint address: 83
Attr.: 01
Max.pkt size: 0031
Polling interval: 01
Addr:1(0.0.1)
Here is the output from PS3BT
PS3 Bluetooth Library Started
Bluetooth Dongle Initialized
No response to HCI Reset
HCI Reset complete
Local Bluetooth Address: 00:00:00:00:00:00
Wait For Incoming Connection Request
This is what my MacBook reports in system info
BT2.0:
Product ID: 0x0001
Vendor ID: 0x0a12 (Cambridge Silicon Radio Ltd.)
Version: 31.64
Speed: Up to 12 Mb/sec
Location ID: 0xfa130000 / 7
Current Available (mA): 500
Current Required (mA): 0
Yes, i do. I shall want connect my android phone to arduino with USB Host Shield and bluetooth dongle then i used this code source for my arduino board.
Please, have you some suggest? Thanks 🙂
This is strange. I have a dongle which returns addredd 11:11:11:11:11:11 but never saw one returning all zeroes. Try it in Linux and see what it says.
Ok, i shall try it this evening. Thanks.
Ok, i tried your suggest but it didn’t work. Please, can you help me??? Are you sure that is possible to connect my phone to arduino via bluetooth? Thanks
The code posted here won’t work with the phone or any other standard serial over RFCOMM implementation. I have code for standard serial, will post soon.
Hi Oleg!
Could you post a link to the source code?
I’am building an arduino based quadrotor using detais I could find at home and I’d like to use my android as rc control 🙂
I’ll put arduino with usb host shield and attached bluetooth dongle on it and will use bluetooth as radio link.
Thanks!
The link to the code is in the article, first line of the second paragraph.
Is that standard serial over RFCOMM implementation? I tryed to connect from android to the arduino with bluetooth dongle.
Unfortunatelly, every time I keep getting “Connection refused” exception from the android.
At the same time, arduino output says its connected and some unreadable symbols. Here is a screenshot.
Do you have any ideas what it could be?
Thanks!
Great work! Nice to see that this project is still alive. With RFCOMM support this opens up a whole lot of possibilities like using the amarino toolkit (http://www.amarino-toolkit.net/) to communicate and read sensors from an android phone.
Infact, i’m interested to amarino 🙂
Hi Oleg
Great work too! When you mention standard serial, could this be used to connect to a mobile phone using the serial port profile? Is it possible to post the code? Thanks
Hello Oleg,
Just wondering about supporting multiple devices using your Host Shield design. Aside from an extra USB port, what other modifications would be required to both read an HID device such as a mouse, and also connect to an Android device using a Bluetooth Dongle? Is this a reasonable goal?
Thank you,
Next revision of the library will support USB hubs so you would be able to communicate to multiple devices. However, it is unlikely that a code for two devices, hub and full Bluetooth (not the type described in this article) would fit into Atmega328P; it will be more on a scale of 1280 or 2560.
Hi Oleg,
Any progress with RFCOMM implementation? Thank you!
I put it on a back burner for now
Hi Oleg,
How much work do you think it is? Is there any other way to communicate with something like Android or iPhone over bluetooth? Thanks.
With embedded development you never know how much is left until you finish. I have an RFCOMM code which works with Linux and some phones. It doesn’t work with windows stacks, I don’t yet know why. I got android phone yesterday, when I have time I’ll check it and post the code as-is, leaving windows support for later.
You won’t be able to connect to iphone via RFCOMM.
hello,
from where i can get this usb host
thank you
Hi,
You can get it from here -> http://www.circuitsathome.com/products-page/arduino-shields/
Hi,
Do you have News about Bluetooth dongle and Android phones?
The code I had won’t work with Android; it was probably too simple to negotiate full RFCOMM. I’m planning to redo it at some point in the future.
Oleg,
It’s Jason again! I’ve tried to run your sample code but to no avail. I have the same exact bluetooth dongle as in the picture, and yet when I compile and run everything I am unable to input. Is it a setting on PuTTY or something simple like that?
Thank you for the quick replies and help!
Don’t forget to press
Enter
after typing ‘S’, ‘C’, etc. To get the actual connection, you’d need two Arduinos running this code, it is not compatible with standard Bluetooth serial protocol.Nevermind. I figured out that my VDIP1 is interfering with the serial signals. Any ideas on what I can do to make both work simultaneously.
Does the bluetooth code for the host use all serial pins? Or can I assign it to use specific pin numbers?
USB Host Shield doesn’t use serial pins.
That is what I thought initially, but everytime I try to run the code while the VDIP1 is connected…it doesn’t work. It’s not the power, because I can power the VDIP1 while running the code just fine. But the second I plug in the two serial pins for the VDIP, the bluetooth program will not let me input.
That’s terminal. Serial pins go to USB to serial converter on Arduino and then to a PC. The USB host is working fine, you just can’t communicate with it.
Ah, I see. So there wouldn’t be any way to connect the pins to the VDIP1 while maintaining communication with the USB host?
Form what I see in VDIP1 datasheet, you can share SPI. Alternatively, you may try using SoftSerial to get a second serial port on Arduino.
Yes! After tinkering with the NewSoftSerial library, I was able to get both your bluetooth dongle program and a VDIP1 readtest program without any interference. It’s now using pins 5 and 6 instead of 3 and 4. Not sure why, but everything works now.
Thanks a bunch!
Fantastic work there Oleg! Really innovative of you to come up with such a great shield! I’m planning to buy it for my next arduino project. I want to communicate through Bluetooth to symbian/android device as well as to my pc using a Bluetooth dongle. Is there a way for serial rfcomm over bluetooth using the current setup yet?
This code won’t work with standard rfcomm – I’m looking into expanding it but don’t know when I’ll be able to post working code.
Is there any way to read sensor values in arduino to android/symbian phone or to pc running xp or win 7.?
Is this sketch compatible with v2.0 of USB Host Shield library?
I am able to run it in v1.0 of USB Host shield library though.
Can you show the output with an error?
No, it is not.
hi….oleg and everyone
can we communicate Arduino with Bluetooth USB dongle to Android Tablet Bluetooth???
Is it possible???
plz reply ASAP…..
thanx in advance
Not with this code. In order to communicate with Android phones you’d need standard SPP implementation which I don’t have.
Hi,
Will this code works with a Sparkfun USB Host shield or just with the Circuitsathome’s one? because this one cost twice the one from Sparkfun (sorry for the rivalry :P)!
And do you know if the SPP implementation in order to communicate with an Android device trough Amarino toolkit will be possible soon?
Thanks in advance and i apologize for my poor English: I’m french
I just lowered the price to my full-sized USB Host Shield to $25.00.
Oh cool!
And for the SPP?
It’ll be huge to be able to use a simple dongle and an android smartphone to drive a robot!
SPP is difficult; I have plans to develop full Bluetooth stack for this shield but it would take some time.
Okay i’ll patient 🙂
However that’s a really great work congratulation!!
Next step wi-fi maybe? 😛 thanks for your quick response!
Hello Mr Oleg.
Do you have a code.pde about Arduino host shield connect with android phone by Usb bluetooth ?
If yes,can you reply to my email.
Thankyou very much.
I’m from VietNam
No, sorry, I don’t.
Hello Mr Oleg.
Why don’t ?
-I think ,it’s easy for the best engineer as you.
-Because i see at:
http://iteadstudio.com/product/iteaduino-adk-mega2560/
– The final sentence is :On board USB host makes it easy to interact with USB devices like pen drivers, keyboard, mouse, Bluetooth dongles.
-So that ,i think Arduino mega ADK can connect usb bluetooth with android phone.
Thankyou very much.
Best Regards.
You need to ask whoever made this claim – it wasn’t me.
Hello Mr Oleg.
Why don’t you help me!.
I don’t know what ‘s purpose this web ?
I saw this picture on your web:
http://www.circuitsathome.com/wp/wp-content/uploads/2011/02/UHS2_mega2560_bt.jpg
Taipscode,
I think you are being very unfair to Oleg on this topic.
Oleg has gone to great lengths to develop his own products:
http://www.circuitsathome.com/products-page/arduino-shields/
Also he has published his hardware designs for other to build and modify.
Oleg has dilligently developed and published arduino libraries for these products and made them available to others under the GPL2 license. Though this circuits@home site is mainly geared towards the more experianced hobbyists and experimenters, Oleg has provided massive support for users of his own products and often dervived products too.
You need to understand that the ADK Mega 2560 you have is a product derived from those of Oleg. The responsibility for the performance and the claims of that product belong with the supplier. If you feel the supplier has misrepresented their product, then contact them directly. I did note the suppliers does say:
“Iteaduino ADK Main Board works like Arduino Mega 2560 with inbuilt USB Host Shield. Hence, this Main Board can be connected to any USB devices. Users have to write their own drivers for using this feature.”
It is not clear to me how the ADK Mega 2560 board forks software from the developments of Oleg. This should have been considered and published by the ADK board developers, since it was clear Oleg was building new enhancements to the USB libraries for his own boards. Maybe you should ask this on Google ADK or Arduino forums.
Thankyou Richard.
I know ,Mr Oleg is the best engineer ,so i need his help ,it’s little document about Arduino mega ADK host shield connect with usb bluetooth,usb mouse.
On the forum of Arduino isn’t a good engineer like Mr Oleg.General is newbie like me.
It is possible to connect a BT dongle through a usb hub? I would connect my android to my nikon using both your projects (cameracontrol + bt code)
A hub is not device-specific; it is possible to connect any USB device through a hub. However, BT is not yet supported in r.2.0 of the USB Host library and code from this library is written for old library where hub is not implemented. If you want to communicate to Android, I recommend using this idea -> http://theiopage.blogspot.com/2011/08/yanis-android-wireless-eos-controller.html
Oh,i see ,Arduino mega Adk don’t support usb 2.0 ,so it’s can not connect with usb bluetooth.
I also used Hc05 bluetooth connect with Arduino successfully.
Thankyou Mr Oleg very much.
Best Regards.
Hi everone ,
I am trying to communicate between my wt 32 bluegiga and arduino. I was looking for some code which can help in connecting the wt 32 with other bluetooth device automatically. ex headsets.
i need a routine code for these commands.
can any one help ?
INQUIRY 5 // command given
INQUIRY_PARTIAL 00:18:6b:af:d1:15 200404 // response from the WT 32 /Bluetooth add.(00:18:6b:af:d1:15)
INQUIRY_PARTIAL 00:22:5f:f7:92:8b 000000
INQUIRY 2 // no of decives found
INQUIRY 00:18:6b:af:d1:15 200404
INQUIRY 00:22:5f:f7:92:8b 000000
2) pair 00:18:6b:af:d1:15 // command given
PAIR 00:18:6b:af:d1:15 OK // response
3) call 00:18:6b:af:d1:15 1108 hsp-ag // commande given
CALL 0 // response
CONNECT 0 HSP 5
Nobody help you ,you should make yourself.
Mr Oleg never help anybody.
He only like performance .
After he died ,nobody can use knowledge of him.
Hello Mr Oleg.
I want to buy code usb bluetooth with arduino mega adk communicate with android phone.
Can you give me the price and account to send money ?
I am not joke,i really want to buy this code .
Thanks.
I don’t have Bluetooth SPP code for library rev.2.0.
Hey Oleg,
Just an FYI really. This guy http://ytai-mer.blogspot.com/2011/10/ioio-over-bluetooth-or-who-needs-cables.html has managed to add on Bluetooth support to talk to Android phones.
Mat
Thanks for the hint! Looks like really nice BT stack, I’ll take a look at it to see if I can use it.
Oh,really?
So sad!!! ,thanks.
Hi Oleg – thanks a bunch for this great code. I’m wondering if you can answer a question – I have this shield (http://www.freetronics.com/products/usbdroid) and a generic USB Bluetooth dongle. I’m trying to be able to send/recieve small bits of data via the Bluetooth (eventually to an Android phone for DC motor control), but I’m not sure how to load a sketch or library in my Arduino IDE to get things going. I basically want to achieve what’s discussed in this tutorial (http://arduino.cc/playground/Learning/Tutorial01) but via the USB-Bluetooth since it’s a dongle, not a modem. Can your code be modified for this purpose, or can hyou suggest another approach? Thanks.
This code doesn’t support standard RFCOMM which is necessary to talk to Android via BT. Another approach would be to develop HCI serial code for Android or RFCOMM for USB Host.
Ok, thanks for the input Oleg. Is any of the HCI code on this page useful as a starting point? http://www.circuitsathome.com/mcu/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part-3
yes
I’ve just taken a quick shot at integrating the HCI code from this page and the BTStack. I didn’t realize that this topic had been raised on this page and would hate to duplicate the work of others. Is anyone else working on it? The phone will pair but not connect, so I suspect that I’ve made almost no progress (I think pairing is an HCI level operation) and, given that I know almost nothing about BT I may not make any further progress.
Slightly off topic but another very useful piece of this puzzle that may be helpful to others is this Google AppInventor project. I was able to open it and add a text box and a button in the app that successfully send text strings to my PC over a BT connection. http://ai.kittywolf.net/index.php/BlueTooth_Client_Connect
I’m testing this Bluetooth library on Arduino v1.0 IDE
with USB Host Shield library version felis-USB_Host_Shield_2.0-4dcef5e
but I can’t go through it.
Does this BT library support Arduino v1.0 ?
This code works with legacy library only -> https://github.com/felis/USB_Host_Shield . Legacy library is not compatible with 1.0 and probably never will, you may want to get older revision of Arduino IDE (0022-0023).
I can compile successfully on arduino 0023 using the version of USB Host Shield you provide.
Thanks for the reply !
Phil,
I have the code for RFComm based on the BTStack implementation. I’m stuck in some other projects so haven’t had a chance find some testers and get it out to the world. If you’re interested in working with it, maybe Oleg can give you my e-mail and we can communicate directly.
Jim
I’m also half-way done on porting your code to 2.0. I have BT dongle init/transfers written, the only thing left is to interface it to your layer. If you’re interested, I can send you what I’ve done so far and share my thoughts on interfacing to BTStack.
Oleg,
2.0 support would be great. If you send me what you have I may have some time to look at it shortly (have to get rid of one other project first).
I think that ALL that is needed for BTStack is modification of bt_h.cpp, specifically an implementation of these methods:
void TBT::HCI_Poll(void)
uint8_t TBT::ACL_Poll(void)
uint8_t TBT::HCI_Send(uint8_t Abytes_count, int8_t * Abytes)
uint8_t TBT::ACL_Send(uint8_t Abytes_count, int8_t * Abytes)
With that, BTStack will take care of the rest.
Jim
I have got a doubt. I am the beginner, working with arduino. Is it possible to connect usb dongle to arduino board?
Any update on the RFCOMM functionality? I have been looking for a way to connect an Android phone to the Arduino via a bluetooth dongle but I am not having any luck…
is it possible for you to upload codes of l2cap and sdp for arduino megaadk… via usb dongle..our project is near its deadline. Thank you
Hello Oleg,
quite an impressive work in such a short time given that you had to dig into so many areas.
For an imminent private project of mine with a tight deadline I need the ability to control an Arduino application remotely via Android Smartphone. I’m therefore interested to develop this RFCOMM functionality and have started yesterday to take PS3PT apart. First step was to support the HCI inquiry process. I’m now working on the masterslave switching and its effect on the HCI state machine and the message exchange. Next I’ll have to see what to still add to the L2CAP handling code of PS3BT, and then I would do the RFCOMM itself.
Is there any source code in your cupboard that I could profit from?
Or should I better stop the fun and joy of programming and buy a BTM-222 …
Many thanks in advance.
Kind regards,
Sebastian
I’m actually nearly finished with a RFCOMM library, see the dev branch at github: https://github.com/felis/USB_Host_Shield_2.0/blob/dev/RFCOMM.cpp. There is even a example as well: https://github.com/felis/USB_Host_Shield_2.0/blob/dev/examples/RFCOMM/RFCOMM.ino it works perfect with both Android and mac os x, but I’m still trying to make it work with Windows.
Regards
Lauszus
Hey guys, me again 😀 I was able to get the USB -> PS3 interface working, so now I’m trying for Bluetooth.
Sam Arduino MEGA ADK Rev 3. I’m using an actiontec USB->Bluetooth adapter BM200B. I think it’s a Cambridge chip, but not sure. I’ve ordered some Bluetooth dongles that I am much more willing to think will work, but I wanted to try this one in case it did, while I wait.
I load the sketch PS3BT and I ge what looks like success:
PS3 Bluetooth Library Started
Bluetooth Dongle Initialized
No response to HCI Reset
HCI Reset complete
Local Bluetooth Address: 00:20:E0:CC:2A:92
Wait For Incoming Connection Request
But I’m not sure what to do next. I skimmed the 3 part series and it seems the OP is talking about development, not usage.
Somehow I need to get the BT adapter’s hardware/MAC address into the the PS3 controller, right? This is where I am stuck…
On a related note, if I need to connect a hub to get them both plugged in, will that be automatic software magic-ness, or do I need to load a library and set up some code?
I figured it out! haha!
You have to go through an iterative process to get things going. First off the 2.0 library does work with Bluetooth now. That was unclear in the OP and comments due to their age. I managed to get this working with an Arduino MEGA ADK Rev 3 and a Cirago BTA-3210.
Step 1.
You need to run the PS3BT code with the BT dongle plugged in if you don’t have the MAC address already. If you do have the MAC, you can skip this part. Some dongles have the address on a sticker; some are too small for that.
Step 2.
Hard code the MAC into the program in the commented out line:
// PS3BT PS3(&Btd,0x00,0x15,0x83,0x3D,0x0A,0x57); // This will also store the bluetooth address – this can be obtained from the dongle when running the sketch
This will send this address to the PS3 controller when connected. All you need to do is replace the hex digits after the “0x”. Make sure not to fat-finger it.
Step 3.
Remove the BT adapter and plug USB in the PS3 controller to the USB host port or your arduino setup. USB is hot swappable but you can remove power first if you like.
Step 4.
Reboot (or boot) your arduino. The modified code will send that address to the PS3 controller so that the controller can initiate the connection to the adapter. This is a similar process to how you pair a controller to a PS3.
Step 5.
Remove the USB cable from the PS3 controller to the arduino and plug your BT adapter back in.
Step 6.
Reboot/boot your arduino.
Step 7.
If it’s going to work, it should work. I think the PlayStation button initiates the pairing. You might see all the LEDs flash at once for a bit while it gets started.
So I fat fingered the Actiontec’s address and then switched to a different adapter. Since this works, I will use it. Maybe later I’ll try out the Actiontec again. or maybe on another project. This adapter is also much smaller and more convenient to use.
I did send an email to Cirago, the manufacturer, since their site/page/manual didn’t include spec’s for the radio and I was ignored.
What should I change the MAC address to to connect the controller? After going through the process, the controller’s LED’s don’t even blink, as if it never even found the MAC address to the Bluetooth dongle.
Also, should I comment out the “PS3BT PS3(&Btd); // This will just create the instance” and use “//PS3BT PS3(&Btd,0x00,0x15,0x83,0x3D,0x0A,0x56); // This will also store the bluetooth address – this can be obtained from the dongle when running the sketch”? I tried it, and it still never worked. Just wanted to know if I was doing something wrong.
First you have to plug in the dongle. Then the program will print the Bluetooth address.
See the readme for more information: https://github.com/felis/USB_Host_Shield_2.0#ps3-library
Is it possible to connect two PS3 controllers to the same dongle on a android board?
Should the code be modified to achieve that?
Yes it is! Check out this example I just wrote: https://github.com/felis/USB_Host_Shield_2.0/blob/master/examples/Bluetooth/PS3Multi/PS3Multi.ino 🙂
I have ardurino mega ADK and ı have a bluetooth dongle, I pulged it in usb port of mega adk.
I am using bluetoothhostshield 2.0. When ı open ardurino peers with computer. Computer opens a port for it. When ı search bluetooth devices ı can see ardurinos bluetooth signal. Here is the problem: when ı connectted pc and ardurino ver bluetooth ı cant send or recive anything over port. My port data sender sowftware freeses when ı try to send data, how can ı solve this problem? everything works fine but ı cannot cominicate :/ pls hellllllppp :((
What OS are you using? Windows, Mac, Linux etc.
windows 7 home premium..
Try this guide: http://wiki.opticon.com/index.php/How_to_pair_a_Bluetooth_Serial_Port_Profile_device_with_a_Microsoft_Bluetooth_Stack_running_Vista32 I know it’s for Windows Vista, but it works the same way in Windows 7.
ı did all them many time, when ı try to connect to out port its succesfull but when ıtry to send signal vith it it freezes. program works fine with ardurino on usb cable means program has no problem.
I fıgure out something:
When I pair my pc and ardurino it is freezing but after one minute, ı get the “hello from ardurio” message. (spp example of the libary sends this message when connection sucsecfull).
Every time I try to connect it taked exactly 1 minute. (time is between :entering paskey time – message time)
Now tell me why cant I still send anything :S
That sounds strange. Is it exactly one minute?
Could you try it on a different Windows machine and tell me if it works?
ı tried it on xp and 7 and it always took 60 seconds to be get normal 🙂 but still cant send message.
I found that: but what does this error means and how can ı solve it ?
http://www.facebook.com/photo.php?fbid=10151492173800676&set=a.10151492173550676.549612.643125675&type=3&theater
@Vasilya
Try to remove these lines: https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp#L314-L315 og https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp#L318
Maybe your dongle doesn’t return the poll time correctly, but remember to add a delay in your main loop – for instance delay(1).
@Caner
Try to uncomment these lines and post the output again: https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp#L20 and https://github.com/felis/USB_Host_Shield_2.0/blob/master/SPP.cpp#L20. Are you using the example provided or your own code?
vasilya is me too 🙂 we are same people 🙂 so you know my codes 🙂 ı will try your suggestions and feedback 🙂 thanx for your help 🙂
all report :
SPP Bluetooth Library Started
BTD Init
Addr: 01
Endpoint descriptor:
Length: 07
Type: 05
Address: 81
Attributes: 03
MaxPktSize: 0010
Poll Intrv: 01
Endpoint descriptor:
Length: 07
Type: 05
Address: 82
Attributes: 02
MaxPktSize: 0040
Poll Intrv: 00
Endpoint descriptor:
Length: 07
Type: 05
Address: 02
Attributes: 02
MaxPktSize: 0040
Poll Intrv: 00
Bluetooth Dongle Initialized
HCI Reset complete
Local Bluetooth Address: 00:1F:81:00:08:30
The name is set to: Arduino
Wait For Incoming Connection Request
Incoming Connection Request
Remote Name: CANER
HCI event error: 06
HCI event error: 06
Connected to Device: 0C:60:76:E7:E3:00
L2CAP Connection Request – PSM: 00 01 SCID: 00 40 Identifier: 01
SDP Incoming Connection Request
SDP Configuration Request
SDP Successfully Configured
Disconnected SDP Channel
L2CAP Connection Request – PSM: 00 03 SCID: 00 41 Identifier: 04
RFCOMM Incoming Connection Request
RFCOMM Configuration Request
RFCOMM Successfully Configured
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: 2F PF_BIT: 10
Received SABM Command – RFCOMM Data: 3 73 1 D7
Received Key Request
Wait For Incoming Connection Request
Bluetooth pin is set too: 1234
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
Received UIH Parameter Negotiation Command – RFCOMM Data: 1 EF 15 81 11 2 E0 0 0 40 0 0 0 AA
RFCOMM Channel: 1 Direction: 0 CommandResponse: 1 ChannelType: 2F PF_BIT: 10
Received SABM Command – RFCOMM Data: B 73 1 92
L2CAP Connection Request – PSM: 00 01 SCID: 00 42 Identifier: 06
SDP Incoming Connection Request
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
Send UIH Modem Status Response – RFCOMM Data: 1 EF 9 E1 5 B 8C AA
Send UIH Modem Status Command – RFCOMM Data: 1 EF 9 E3 5 B 8D AA
SDP Configuration Request
SDP Successfully Configured
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
Send UIH Modem Status Response – RFCOMM Data: 1 EF 9 E1 5 B 8D AA
Send UIH Modem Status Command – RFCOMM Data: 1 EF 9 E3 5 B 8D AA
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
Send UIH Command with credit – RFCOMM Credit Data: 9 FF 1 64 5C
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
Send UIH Modem Status Response – RFCOMM Data: 1 EF 9 E1 5 B 5 AA
Send UIH Modem Status Command – RFCOMM Data: 1 EF 9 E3 5 B 8D AA
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
Received UIH Remote Port Negotiation Command – RFCOMM Data: 1 EF 15 91 11 B 7 0 0 0 0 1 0 AA
RFCOMM Connection is now established
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
RFCOMM Channel: 0 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 0
RFCOMM Channel: 1 Direction: 0 CommandResponse: 1 ChannelType: EF PF_BIT: 10
RFCOMM Data Available: 0 – Credit: 0x1A
Disconnected SDP Channel
Disconnected RFCOMM Channel
HCI Disconnected from Device
Wait For Incoming Connection Request
Everything seems alright, but for some reason you computer disconnect both channels just after they are established!
Could you a different computer?
windows 7 home premium
Hi,
I followed all the steps but I cant connect the PS3 controller… both the dongle and the PS3 blink blink blink but they never pair…
I also followed the instructions to uncomment those lines to get more detailed debug data and uploaded again to Arduino but the result is the same… no more debug…
When I connect arduino I get:
PS3 Bluetooth Library Started
Bluetooth Dongle Initialized
HCI Reset complete
Write class of device
Local Bluetooth Address: 00:1B:10:00:2A:EC
Wait For Incoming Connection Request
As soon as I press the button in PS3 controller I get:
PS3 Bluetooth Library Started
Bluetooth Dongle Initialized
HCI Reset complete
Write class of device
Local Bluetooth Address: 00:1B:10:00:2A:EC
Wait For Incoming Connection Request
Incoming Connection Request
but nothing happens and after a while the PS3 controller disconnects
Help would be highly appreciated!
Thank you!
P.S. I tried already 2 PS3 COntrollers but the result is the same… if I connect the BT dongle directly on the PC the PS3 controller is detected but cant pair (i think this is expected in windows). If i try to connect my phone it works just fine. My PS3 controllers are original.
Try to change this line: https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp#L852 to 0x01 instead. If that doesn’t work then your dongle isn’t working correctly. You will have to try a different one 🙂
Thanks for your reply! I did change the line but the result is the same…
I have 2 questions though:
1. why I cant see more debug details if I uncommented the lines as you describe?
2. You mean my dongle is not working correctly for PS3? Because it works fine in windows…
Thanks again!
Which dongle do you recommend for PS3 that I can buy in amazon? It cant be just a matter of luck…
To get more debugging information you will have to uncomment the following line: https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp#L20.
It doesn’t look like the dongle is supported. Are you using the exact same dongle under Windows? With what software?
No it’s not a matter of luck, but try to explain the seller that you will need a Bluetooth dongle with one bulk input endpoint, one bulk output endpoint and one interrupt input endpoint. Furthermore it has to support 2.0+EDR. Most sellers don’t have a clue what all this means…
I decided to try a new dongle and it worked perfectly 🙂
With and without debug mode 🙂
I bought this one: http://www.amazon.com/gp/product/B003VWXXLM/ref=oh_details_o04_s00_i00?ie=UTF8&psc=1
It took 15 days to arrive (I only realized it was being shipped from Singapore when I received the package)
Thank you Lauszus for your support!
Glad to hear you got it working! You are welcome 🙂
I got the same symptoms for the hanging on “Incoming Connection Request”. Here is my verbose output:
PS3 Bluetooth Library Started
BTD Init
Addr: 01
Endpoint descriptor:
Length: 07
Type: 05
Address: 81
Attributes: 03
MaxPktSize: 0010
Poll Intrv: 01
Endpoint descriptor:
Length: 07
Type: 05
Address: 82
Attributes: 02
MaxPktSize: 0040
Poll Intrv: 00
Endpoint descriptor:
Length: 07
Type: 05
Address: 02
Attributes: 02
MaxPktSize: 0040
Poll Intrv: 00
Bluetooth Dongle Initialized
HCI Reset complete
Write class of device
Local Bluetooth Address: 00:1F:81:00:02:50
Wait For Incoming Connection Request
Class of device: 00 05 08
Incoming Connection Request
HCI event error: 06
HCI event error: 06
HCI event error: 06
HCI event error: 06
Connection Failed
Wait For Incoming Connection Request
You dongle is not supported. Try a different one.