Arduino и iPhone. Передаем данные по аудио проводу

Для того чтобы подружить iPhone либо смартфон на Android и Arduino можно использовать готовые платы расширения позволяющие использовать такие способы передачи данных как Bluetoth и Wifi. Помимо беспроводных способов существует также другой способ - используя аудио разъем.

Для этого нам также понадобится специальная плата SoftModem под Arduino. Внешний вид платы представлен на рисунке ниже, как видно на ней есть специальный переключатель, который имеет два положения-одно используется при работе с телефонами Samsung, другое под iPhone и Android.

Самое главное при использовании данной платы расширения правильно ее подключить и не допустить попадания высокого напряжения (напряжения питания Arduino) на аудио выход телефона или смартфона. В противном случае iPhone сломается и его придется воспользоватся сервисом по ремонту iPhone.

Внешний вид платы SoftModem

Передаем данные по аудио проводу

arduino-ipone1

arduino-ipone2

В данном примере мы подключим iPhone к Arduino и будем управлять инфракрасным светодиодом. Для этого нам понадобится специальная программа под iPhone и специальная библиотека под Arduino.

Схема подключения

arduino-ipone3

Код команды из телефона передается через аудиоканал на вход Arduino, где происходит его анализ и в соответсвии с полученным сигналом происходит включение и выключение инфракрасного светодиода. На приемнике происхоид обратный процесс декодирования полученног сигнала.

Код программы под Arduino

In the steup function, we need to initialize the buffer and soft modem.
void setup()
{
Serial.begin(9600);
// Initialize the buffer with a capacity for 4 bytes
buffer.init(4);
delay(1000);
modem.begin();
}
In the loop() function, Arduino will keep listening to the soft modem. While soft modem is available, we read 2 bytes from the soft modem. Then check if we need to clear the buffer. If not, we put the 2 bytes into the buffer. This is how we get the command from soft modem. When we get the command, we simply use a IRsend to send the command to the IR LED under NEC Protocol.
void loop() {
while(modem.available()){
int c = modem.read();
if((buffer.getSize() == 4 || buffer.getSize() == 0) && c == 0xFF) {
buffer.clear();
} else {
buffer.put(c);
}
}
if(buffer.getSize() == 4) {
long cmd = buffer.getLong();
Serial.print("Sending cmd: ");
Serial.println(cmd, HEX);
irsend.sendNEC(cmd, 32); // NEC Protocol command
delay(100);
}

iOs Application

The demo app is very simple. We have 2 buttons on the main view, and each button represents a command. We also have an info view, in which you can change the command for both buttons. Once the button is pressed, we will use a serial generator to encode a audio signal representing the command, and the signal will be received by the soft modem.
- (void)buttonPressed:(UIButton*)button {
NSString* buttonKey = (button.tag == 1) ? @"first" : @"second";
NSString* hex = [[NSUserDefaults standardUserDefaults] stringForKey:buttonKey];
hex = [hex substringFromIndex:2];
NSData* hexData = [hex hexToBytes];
//NSLog(@"%@", hex);
//NSLog(@"%@", [hex hexToBytes]);
[APP_DELEGATE.generator writeByte:0xff];
[APP_DELEGATE.generator writeBytes:[hexData bytes] length:hexData.length];
}

Проект на Гитхаб

Похожий проект Arduino irremoteв котором arduino выступает в качестве приемника, а управление осуществляется при помощи пульта дистанционного управления.

Более подробно про этот проект можно почитатьна сайте источнике

Добавить комментарий


Защитный код
Обновить

Последние комментарии

Последнии темы форума

  • Нет сообщений для показа