I'm tinkering with an iPhone-controlled RC car chassis that is the base of my robotics project. The chassis is controlled with a WiRC Wi-Fi module. It has eight outputs to control electronic speed controllers and servos.
I'd like to improve my robot's ability to avoid obstacles using sensors. For this purpose, I have an Arduino board which I can interface with various inexpensive rangefinders and proximity sensors. I'm looking for examples or demo projects that would connect an iPhone to an Arduino board using Bluetooth to send commands to the board and receive data from the board. Is what I'm thinking of possible?
Thank you for any links to projects or hardware boards that may interact with an iPhone using Bluetooth. It's great if some of these boards have an SDK to simplify development.
Unfortunately, standard Bluetooth communications with devices on iOS is restricted to devices within the MFi program, so you're not going to be able to use that with your Arduino board. However, the new Bluetooth 4.0 LE protocol that is supported in newer iOS devices (iPhone 4S, Retina iPad) is open and can be used to connect any LE device.
iOS 5.0 introduced a new framework for this in Core Bluetooth, and I highly recommend watching the two sessions from WWDC 2012 about this. They also have some sample code on the topic. I've been using this myself to connect to some sensors, and it works well for a low-bandwidth application like temperature, proximity, or heart rate sensing.
There are several BT LE modules out there, and it looks like Dr. Michael Kroll is about to start producing an Arduino shield for LE communication, which would make it trivial to add this kind of capability onto an Arduino board.
It's probably a bit late for your project, but the RedBear BLE Shield coupled with an Arduino works great. There is even a robotic truck project built around this combination in Building iPhone and iPad Electronics Projects.
You can access the BLE shield using Objective C, but it's also possible to avoid a Mac entirely and use techBASIC, which lets you program right from the iPhone or iPad.
Related
I have done some research on core bluetooth framework. Successfully setup discovery of peripheral of other iPhone, connect, discovered services and characteristics and write some values. All went well. Surprisingly come to know there is apple MIFI program (need to research on it).
In excitement I ordered iPhoneSE, HC-05 bluetooth module, Arduino Builder's Kit R2 with original Arduino UNO. It took some days/wasted in shipment and decent amount and now it's not working.
I write proper set up/initialization for peripheral and central classes, adopted delegates and I think it's all correct. However I am not able to connect to HC-05 bluetooth module.
Observations:
On a Android device i turned on bluetooth in device settings, HC-05
was able to be discovered, enter 0000/1234 (password as per
documentation). And yes i was able to connect it. It means HC-05 is
not malfunctioning.
On a iPhoneSE iOS v11.0, Setting -> turn on bluetooth. But HC-05 is
not discoverable.
I simply want to be successfully discover and connect to HC-05 module using BLE technology. Then with delegate methods look up services/characteristics and then try to on/off led.
I can provide more info and background if needed.
I need some help and direction so that I can purchase the correct bluetooth module which connect to iPhone, and I am sure I can do it.
Thanks.
To answer above question-
HC-05 will not connect iPhone. Because HC_05 is not bluetooth low energy.
I have used AT-09 from amazon.
I have written complete article how I achieved it here, and challanges I faced with solution.
The HC-05 isn't compatible with iOS.
This is because Apple uses MFi Licensing Program and HC-05 is not licensed.
To get things working go for a module supporting minimal BT Version V4.0 BLE. Even better, BT Version: V4.2 BLE & V5.0 (better range and larger packet-size), if iOS (v11.0) supports it.
I am not going to recommend a specific model, that's what Google is for.
Apple devices under the MFi licensing scheme only support limited profiles.
HC-05 is based on Bluetooth 2.0. What will work for Apple mobile devices (iPhone, iPad) will be those modules that utilise Bluetooth 4.0 or Bluetooth Low Energy (BLE).
I know some basic about iOS programming, now i want to connect my app to another non iphone device e.g. connecting to a bluetooth device that can control a light bulb on and off, or control any furnitures.
My question is, besides iOS xcode, what kind of program i need to learn in order to achieve my goal?
Is there any sources that i can learn from it?
For Bluetooth Low Energy devices, you can use the CoreBluetooth framework to access them.
For Classic Bluetooth devices or accessories that make use of the Dock connector, the protocols are not open, and joining the Made for iPhone (MFi) program is required. I do not suggest this for beginning.
My suggestion is to buy for example a Polar Heart Rate Belt that supports Bluetooth Low Energy. These use standard protocols. Sample code is available from Apple that shows how to read out the heart rate from such a device.
As soon as you have mastered the heart rate monitor example, a next step would be to acquire a programmable Bluetooth Low Energy chip (however, often, the development tools for those are rather expensive!). Those chips can be programmed with custom profiles to listen for Bluetooth Low Energy connections and then performing defined operations (lighting a LED) when writes to characteristics occur. So, you are not limited to heart rate monitors and similar devices.
Keywords that you can search for: GATT protocol, Bluetooth Low Energy, CoreBluetooth.
I know that it's a steep learning curve for beginners, but the area is pretty new. However, I can assure you that it's a fun area.
I also think that you should look in to embedded C programming for the slave device (Heart Rate Monitor)
You could get a tod Smart Beacon Development kit for ~$150 and then use BGScript to code the firmware to control the BLE device from your phone or pc. todhq.com for more info.
I have written a code that transfers the data from one i-Device to another i-Device, but since Apple is coming with official unlocked devices, I want to extend the solution to transfer data from an i-Device to another platform based device.
What changes it will require? How to write this code?
Is there any reference that I can use?
Obviously you can not use the Game kit to communicate with a non-iOS devices.
You would have 2 options:
1 - Enroll the "Made for iPhone" program which allows you to create your own communication protocol, but I think you can not use bt profile for data exchange(like png,mp3..), this program is related to the development of external accessories like bt headsets etc. In this case you have to use EA Framework.
2 - If you want to develop apps for jailbroken devices, you can look at BTStack.
I have a project where I need my iPhone to communicate with an Arduino. Bluetooth seems like the best option for the communication. How should I program my iPhone (what framework?) to communicate with the Bluetooth Mate or do Apple's restrictions prevent this? Is it possible with a jailbroken iPhone? Is there a better way other than Bluetooth? Sample code would be helpful.
Thanks in advance
Actually you can make it happen now without Jailbreaking or MFi enrollment.
Take a look ate Bluetooth 4.0 in newer iOS devices and Arduino BT 4.0 shield.
This might help: http://blog.makezine.com/2012/03/19/bluetooth-4-0-from-arduino-to-iphone-no-jailbreaking-no-mfi/
Meanwhile there is an Arduino shield available from Seeedstudio: Bluetooth Low Energy Shield
Devices following the Bluetooth 4.0 specification can be accessed by all iPhone/iPad models with a Bluetooth 4.0 chip inside (currently iPhone 4S, 5 and iPad 3) running with iOS 6. You no longer need to be part of the MFI program or jailbreak the device for most purposes. Use the Core Bluetooth Framework that's also discussed in the WWDC 2012 videos Core Bluetooth 101 (Core OS) and Advanced Core Bluetooth (Core OS).
It's been a while since I was in contact with embedded bluetooth-to-iphone devices, but as far as I remember you have to buy authentication chips from apple.
Apple MFi
But as jailbreak is an option this might work. But I never tried this, because I once was in possession of some authentication chips.
I found btstack with a quick googling, maybe it's helpful.
Try instaling bluetoth iBlueNova, and it will comunicate with each device.
Yes, the best way to do this would be to use Blynk. Make an account, copy the example code, and get started with the Blynk app!
Apple's OS app sandbox prevents generic (Classic non-BLE) Bluetooth serial data comm on stock OS devices, except for a few companies registered in their MFi program.
The most reliable and possibly the easiest solution is to the use the Arduino Ethernet shield with a physical network connection to your WiFi router. The Arduino would host web pages or respond directly to http that did your work for you.
No jailbreaking, no BT programming, no serial com port stuff. Just regular old web pages. Sweet stuff.
The simplest solution would be to navigate with any browser on your network, including your iPhone, to your Arduino and issues commands.
Example:
http://192.168.1.101/?1
192.168.1.101 = the IP of your Arduino
?1 would mean PIN13 pulled high (i.e. turn on the LED)
Your code would be something like:
EthernetClient client = server.available();
while (client.connected())
{
if (client.available())
{
char cVar = client.read();
if (cVar != '?') return;
Serial.Print(cVar)
if (cVar == '1') digitalWrite(13, HIGH); //turn on the led
}
}
That code is quick and dirty so don't hold it against me!
Let me know what you decide and how it works out. I need to go read up on http://blog.makezine.com/2012/03/19/bluetooth-4-0-from-arduino-to-iphone-no-jailbreaking-no-mfi/
Thanks for that link ygbr!
What is the best way to realize wireless communication between an embedded system (based on an AVR controller) and the iPhone? I think there are only two options: either WiFi or BlueTooth. The range is not really a problem, since both devices should stay in the same room.
I have no idea, if there are any useful WiFi boards that can be connected to an AVR based microcontroller system (or any small microcontroller), any hints would be highly welcome.
I guess the better solution would be BlueTooth, but there is also the problem: which BlueTooth board is best suited for attachment to an AVR system, and is it possible to use the iPhone BlueTooth stack for (serial) communication over BlueTooth with the AVR device.
I hope that somebody already realized such a system and can give some helpful tips...
You can get modules for both WiFi and Bluetooth that will connect to an embedded system through a UART interface, however a WiFi module will have far more processing power than your AVR microcontroller, often with spare capacity and I/O to execute additional user code, so connecting one to an AVR maybe somewhat redundant in many cases.
Bluetooth modules are simpler, less expensive, and the data-rate is better matched to the AVR's capabilities. For example these Parani modules. I have used them between an embedded system and a Laptop PC's Bluetooth, so given appropriate communications software, there is no technical reason why it could not be used with an iPhone I think. However this may be the flaw, on the PC the device was recognised as a virtual serial port, I don't know whether iPhone supports 'legacy' communications in quite the same way.
For comparison, a WiFi solution
From what I know, BlueTooth is very limited on the iPhone: There is only very few BlueTooth-Profiles implemented, and - even if they can be extended with a jailbroken iPhone - I doubt this is easy to use from the application layer.
On the other side, transferring via WiFi requires a lot of processing power and memory since much more things have to be implemented before you can even start transferring data: 802.11, cdma/ca, arp, tcp. That's a big task.
Is it an option to build a hardware extension to the iPhone ? You might be able to get the serial connection and power out of the dock connector. Then even ZigBee could be very helpful.
Here's an article you might find helpful. I would lean toward a WiFi solution just because of the added flexibility available.
http://www.embedded.com/design/networking/215801088
-t
Some of the other people at the office have done AVR <- Bluetooth -> Symbian and AVR <- Bluetooth -> PC solutions without trouble. There is lots of info, reference designs and source available. I have no idea of how hard it would be to use Bluetooth on Iphone.
The exact module is probability also not important as long as it got some type of serial interface (I2C,SPI) to interface to the AVR and some source code show how to use the module.
Is it an 8-bit or 32-bit AVR? For the AVR32 processors there's support
for WiFi in the Atmel 1.5.0 Software Framework using SD-card-mounted
WiFi modules from HD Wireless (http://www.hd-wireless.se), including
an IP stack (lwIP). Be aware that you need Ad-Hoc (IBSS) support to
connect directly to the iPhone.
There is WiSnap kit. It can connect directly to a standard RS232 interface or through the TTL UART interface to embedded processors. We are planning to use it in our project. It also has Ad-Hoc support.
There are some usage examples and an iPhone application for connection setup.
http://serialio.com/products/mobile/wifi/WiSnapKit1.php
What are you trying to communicate between your AVR and the Iphone? The Iphone is made for the web along with everything apple (which AVR's are decidedly not). So what works well is an embedded device that exposes a web-interface. Like the Transmission bittorrent client on Linux. Also nowadays many low-power small form-factor linux platforms exist that will allow you to do this.
For instance Gumstix has an ARM based platform that runs linux and includes WiFi (Overo Fire).