The short answer is yes, it is possible to use Bluetooth without pairing. However, it is still going to always be a point-to-point link. There are also potential issues with not using pairing (mainly the lack of security and the lack of good support for this mode of operation). Whether it can be done depends on your receiver's Bluetooth hardware. I'm assuming you're using 'standard' Bluetooth instead of Bluetooth low-energy (which is completely different and not particularly well supported in mobile phones). If you're using low-energy then you're transmitter would be a low-energy device and you're receiver would be something that listens for the messages. I've not used this, so I can't give you any information on this so I'll stick with 'normal' Bluetooth.
As I see it, there are two issues to overcome:
Turning off pin pairing
Automatic connection initiation
I'll cover number 2 first as I get the impression that this is what you're really interested in (apologies if I'm reading this wrong). In order to do this from a phone or other 'master' device, it would have to continuously search for remote Bluetooth devices. When it recognised one that was applicable, it would automatically connect to it and send some data or other that would initiate whatever action was required. Others have mentioned the use of the Bluetooth friendly name for this process and that is certainly one way to do it. My experiences of Bluetooth friendly names (especially but not exclusively with the Microsoft Bluetooth stack) is that they are not that robust a method of scanning. You'd probably do far better to use the Bluetooth Device Class, which is broadcast at the same time as the unique device address. This device class has a large number of pre-specified entries for things like mobile phones, laptops, desktops etc etc. If you use one of the non-standard device classes (e.g. 00:00:00), you'll instantly be able to filter out the vast majority of Bluetooth devices. You can then connect to the remaining device and do some sort of request-acknowledge communication to initiate your action. If you make this suitably obscure (or check the friendly name as a second consideration), it should implicitly filter out any remaining incorrect devices.
Regarding number 1, pin pairing isn't particularly logical if you're creating transient connections, but it still may be the best way to achieve what you want to do. If you want to avoid pin pairing, it can be turned off and an un-paired connection can be made. How you do this depends on the Bluetooth receiver implementation, but here's a few examples:
- Bluegiga WT12: use the command SET BT AUTH *
- National Semiconductor LMX9838: use GAP_SET_SECURITY_MODE command with security mode 1 (no pairing)
etc.
Connecting to the device can then be done without pairing. If the device initiating the connection is the same as the receiver, this is very straightforward. If you're using a Windows PC, you can go through the laborious create a new connection process and choose "don't use a pin", although Windows will probably still ask you for a pin when you connect (0000 usually works, but it's very flaky). If you're using python with pybluez, it's very simple:
import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))
If, however, you want to connect from a mobile phone, it gets much more complicated. The Android SDK doesn't seem to really support unpaired connections:
The current Android Bluetooth API's require devices to be paired
before an RFCOMM connection can be established. (Pairing is
automatically performed when you initiate an encrypted connection
with the Bluetooth APIs.)
(from http://developer.android.com/guide/topics/connectivity/bluetooth.html). There are ways around this, but they're very complicated and not well supported. If you're using an iPhone, then Bluetooth connectivity is a whole different can of worms (licensing etc), so I'll leave that for now.
Having said all of that, pretty much every API I've ever looked at allows pairing and unpairing to be carried out (with the notable exception of python/pybluez, but that's just a wrapper around the Microsoft stack on Windows, so you can always call the low level function directly). So, when you've spotted a device with the right device class, why not just automatically pair (with a predefined pairing pin number), make the connection, send the data that's required, disconnect and then unpair. None of this would require any user intervention and as long as you're not doing it thousands of times (which could potentially cause issues with EEPROM wear), it shouldn't cause you any problems. It'll also save you a lot of hassle with trying to get different APIs to work well with what is perceived as a non-standard method of using Bluetooth.