与Sparkfun蓝牙伙伴的Pyserial通信只响应一条消息

时间:2017-07-24 19:07:43

标签: python bluetooth arduino pyserial serial-communication

我正在使用Arduino Mega 2560和许多步进电机和磁编码器来构建机器人来记录它的运动。

我的环境是:

  • Arduino Mega 2560
  • 来自Sparkfun的蓝牙伴侣
  • Python 3.6.1
  • Pyserial 2.7
  • Windows 10

这是我试图在Python端使用的代码:

#This code is designed to test the communication between the python based code
#and a bluetooth mate connected to an Arduino Mega
# Author: Tynan Stack
# Date: July 24 2017
# Python 3.6.1 Pyserial 2.7

import serial
from time import sleep
ser = serial.Serial()
ser.baudrate = 115200
ser.port = 'COM7'
ser
ser.open()
sleep(8)
print("sending data")
ser.write(b'u\r\n')
print("data sent")
sleep(2)
ser.write(b"u\r\n")
sleep(8)

ser.close()

以下是处理通信的Arduino代码的相关部分:

void loop() {
  // put your main code here, to run repeatedly:


  if(Serial3.available()){
    Serial.println("Its avalible");
    timer = micros();
    data = (char)Serial3.read();
    Serial.print(data);
    if(data == 'u'){//this corresponds to the linear stepper motor moving the stage up
      Linear.SpinTheMotor(LOW, 1.8,720);
    }
    if(data == 'd'){ //this corresponds to the linear stepper motor moving the stage down
      Linear.SpinTheMotor(HIGH, 1.8,720);
    }
    if (data == 'a'){
      Angular1.SpinTheMotor(LOW, 0.018, 15);
      Delays(micros(),1000);
      Angular1.SpinTheMotor(HIGH, 0.018, 15);
    }
    if(data == 'b'){
      Angular2.SpinTheMotor(LOW,0.018,15);
      Delays(micros(),1000);
      Angular2.SpinTheMotor(HIGH,0.018,15);
    }

  }
  if(digitalRead(BUTTONPIN)==LOW){
    BluetoothCycle();
    }
  bluetoothPrint();
}

对于其他命令,它们或者向步进电机控制器发送命令,或者将数据从Mega发送到蓝牙芯片以由计算机接收。数据从蓝牙芯片传输到计算机相当一致,而从计算机到芯片的数据稀疏,通常只包含一个字母,如代码所示。

我遇到的问题是,如果我使用像Coolterm这样的串口连接软件来连接蓝牙芯片一切正常,我可以向Arduino发送多个命令来执行。然而,当我通过我的Python代码连接到蓝牙芯片时,只收到第一条消息并由Arduino执行。我尝试了各种尚未解决的不同解决方案。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我遇到的问题与pyserial使用的参数有关。我需要包含以下声明:

bluetoothconnection1.rtscts = 1
bluetoothconnection1.dsrdtr = 1

这些启用了解决我的问题的硬件流控制。