Связь по Bluetooth между Arduino и PyBluez

Я пытаюсь установить связь по Bluetooth между платой Arduino Uno (с экраном bluetooth) и моей ОС Linux, используя Python PyBluez.

Я успешно подключил свой ноутбук к Uno. Я могу подключиться к плате, однако плата не считывает отправляемые данные и не может отправлять данные.

Вот эскиз Arduino

#include <SoftwareSerial.h>

#define RxD 0    //receive data on digital 0
#define TxD 1 //transmit on digital 1

SoftwareSerial blueToothSerial(RxD, TxD);
int counter = 0;
int incoming;
void setup(void){
  Serial.begin(9600);
  //pinMode(RxD,INPUT);
  //pinMode(TxD,OUTPUT);
  setupBlueToothConnection();
}

void setupBlueToothConnection(){
  blueToothSerial.begin(19200);
  blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  blueToothSerial.print("\r\n+STNA=SeeedBTSlave\r\n"); //set the bluetooth name as     "SeeedBTSlave"
  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  //blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable
  Serial.println("The slave bluetooth is inquirable!");
  delay(2000); // This delay is required.
  blueToothSerial.flush();
} 

void loop(){
  if(blueToothSerial.available())
     Serial.println(blueToothSerial.read());
  blueToothSerial.write('x');
}

И мой модуль Python:

import bluetooth
import sys
bd_addr = "00:12:10:23:10:18" #itade address

port = 1
sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((bd_addr, port))
print 'Connected'
sock.settimeout(1.0)
sock.send("x")
print 'Sent data'

data = sock.recv(1)
print 'received [%s]'%data

sock.close()

У меня Arduino IDE 1.0.4, на моем ноутбуке Ubuntu 11.10.


person mingxiao    schedule 18.03.2013    source источник
comment
Можете ли вы отправлять и получать данные на / с платы Arduino с помощью последовательного монитора внутри Arduino IDE?   -  person 4d4c    schedule 19.03.2013
comment
Кажется, у меня работает. Я загрузил ваш скрипт на свой Arduino Uno. И выполнил скрипт python. Это результат: user@ubuntu:~/$ python w.py Connected Sent data received [2]. Вы уверены, что у вас есть рабочее соединение с вашим устройством Arduino и Bluetooth?   -  person 4d4c    schedule 19.03.2013
comment
Какой щит Bth вы используете: этот?   -  person angelatlarge    schedule 19.03.2013
comment
Нет, RS232   -  person 4d4c    schedule 19.03.2013
comment
@ ton1c да, я могу отправлять / получать данные через последовательный монитор внутри Arduino IDE.   -  person mingxiao    schedule 27.03.2013
comment
@angelatlarge Нет, я не использую Seeed Shield и не использую RS232, я использую itead BT shield ссылка   -  person mingxiao    schedule 27.03.2013
comment
@ ton1c Мой модуль python печатает «Отправлено», однако я не вижу отправленных данных на последовательном мониторе среды IDE. И мой модуль застревает на recv ()   -  person mingxiao    schedule 27.03.2013
comment
Нужна ли вообще библиотека SoftwareSerial? Кто-то с аналогичной проблемой, не используйте библиотеку SoftwareSerial.   -  person mingxiao    schedule 28.03.2013
comment
Подождите, как и все аналогичные платы Bth, этот экран по умолчанию использует 9600 бод. Почему у вас blueToothSerial.begin(19200); вместо blueToothSerial.begin(9600);?   -  person angelatlarge    schedule 28.03.2013
comment
Вы пробовали использовать программный серийный номер на контактах 2 и 3?   -  person Jack Wilson    schedule 19.10.2016


Ответы (2)


Эта ваша строка:

data = sock.recv(1)

может не получать достаточно байтов, поэтому попробуйте эту информацию, опубликованную Тимом: Получение только одного байта из сокета

person TomoMiha    schedule 26.08.2017

Используя Itade Studio Bluetooth Shield, вы должны загрузить код без прикрепленного экрана, а затем прикрепить его. Мне любопытно, так ли это с другими устройствами bluetooth.

Для завершения, чтобы установить связь между вашим ноутбуком и Arduino Uno w / BT shield:

  1. Соедините свой ноутбук с экраном bluetooth

  2. Загрузите код Arduino с отключенным экраном.

  3. Прикрепите щит

  4. Запустите модуль python.

На экране itade вы знаете, когда соединение установлено, когда светодиод D1 горит зеленым, а не мигает зеленым.

person mingxiao    schedule 27.03.2013