使用PySerial将HC-05收发器连接到MSP430G2

时间:2015-08-10 07:18:12

标签: python bluetooth arduino pyserial msp430

所以我一直试图将this HC-05 transceiver连接到我的MSP-430G2。由于我使用的是MacBook,我尝试使用PySerial发送消息。我正在使用:

  • OS X 10.9.5
  • Python 2.7
  • MSP-430G2553
  • Energia 0101E0016

这是我的Energia代码:

int gLed = GREEN_LED;

void setup()
{
  pinMode(gLed, OUTPUT);
  digitalWrite(gLed,LOW);
  Serial.begin(9600);
}

void loop()
{
  int buf_size = Serial.available();
  if (buf_size > 0) {

    char input = Serial.read();
    if (input == '1'){
      digitalWrite(gLed, HIGH);
    }
    else if (input == '0'){
      digitalWrite(gLed, LOW);
    }
  }    
}

在微控制器上验证并上传后,我将3.3V连接到VCC,GND连接到地,TXD-RXD从收发器连接到微控制器上的P1.2-P1.1(相反,意味着收发器上的TXD进入P1.2(RXD),反之亦然),GND和VCC从收发器到微控制器两侧的顶部GND和VCC引脚。然后我将我的笔记本电脑与HC-05配对,并使用Python中的以下脚本发送消息:

import serial

s = serial.Serial(port='/dev/tty.HC-05-DevB', baudrate=9600)

s.write('1')

什么都没发生。绝对没有。而且我很难理解我正在弄乱的是什么步骤,因为它可能是其中任何一个。它是PySerial吗?是我如何连接它?这是我的Energia代码吗?任何线索都会有很大帮助。非常感谢你。

更新:此代码有效:

void loop()
{
  int buf_size = Serial.available();
  if (buf_size > 0) {
      digitalWrite(gLed, HIGH);
      delay(1000);
      digitalWrite(gLed, LOW);
      delay(1000);
    }
}   

在我编写完之前的Python脚本后,LED开始闪烁。值得注意的是,在我在Python中编写s.write('1')(或任何其他字符串作为参数)后,它才开始闪烁。在我写完s.close()并从我的电脑取消配对HC-05收发器后,它也不会停止。

我认为这意味着建立了一种联系,但是某些原因使if语句不能正常工作。非常感谢你们所有人'救命。如果有人能帮我弄清楚消息评估的错误,我真的很感激。

更新2:此代码也有效:

void loop()
{
  int buf_size = Serial.available();
  if (buf_size > 0) {
      char input = Serial.read();
      if (input){
        digitalWrite(gLed, HIGH);
        delay(1000);
        digitalWrite(gLed, LOW);
        delay(1000);
    }
  }    
}

每当我发送输入时,指示灯会亮起然后熄灭。它一直关闭,直到我发出另一个输入。我认为这意味着收发器接收输入并将其传送到微处理器。问题可能是微处理器不理解我发送的输入。

问题是我发送的单字节char消息是我之前在Energia代码中确定的。我正在使用Python 2.7,我尝试了许多不同的方式从PySerial发送消息,包括:s.write('1')s.write(1)s.write(b'1')s.write('1'.encode())s.write(bytearray('1'))。在这一点上,我真的不知道如何以一种帮助我解决这个问题的方式发送它,但我相信我现在能够将它缩小到PySerial。

更新3:情况变得更加怪异。根据输入使MCU闪烁后,我注意到以下情况。

当我使用s.write('1')时,蓝牙收发器收到的二进制文件是' 11110100。'在此之后,我尝试使用s.write('2')s.write('3'),我意识到我们的MCU收到的是同一个二进制文件:' 11110100。'我做的下一件事是尝试s.write('4'),我意识到它给出了与s.write('1')相同的结果。我编写了以下脚本来尝试它(还包括通过LED闪烁打印输入的脚本)。

void loop()
{
  int buf_size = Serial.available();
  if (buf_size > 0) {
    char input = Serial.read();
    if (byte(input) == B11110100){
        for (int i=0; i < 10; i++){
          digitalWrite(rLed, HIGH);
          delay(100);
          digitalWrite(rLed, LOW);
          delay(100);
      }
    }
    else if (input){
        digitalWrite(gLed, HIGH);
        digitalWrite(rLed, HIGH);
        delay(1000);
        digitalWrite(gLed, LOW);
        digitalWrite(rLed, LOW);
        delay(1000);
        for (int i=0; i < 8; i++){
          int val = bitRead(input,i);  // get the voltage from the microphone
          if (val == 0){
              digitalWrite(rLed, HIGH);
              delay(1000);
              digitalWrite(rLed, LOW);
          }
          else if (val == 1){
              digitalWrite(gLed, HIGH);
              delay(1000);
              digitalWrite(gLed, LOW);
          }
          delay(1000);
       }
    }
  }  
}

s.write('1')s.write('4')都提供相同的输出。任何人都知道这可能是什么?非常感谢您的帮助和时间。

解决方案:我意识到Energia并未设置为使用我的MSP模型,而是一个密切相关的模型。修复解决了所有问题。谢谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

我之前使用过HC-06将Arduino的串口连接到MacBook,而棘手的部分是找到合适的端口。
配对后,列出ls /dev/{tty,cu}.*的可用端口并尝试不同的端口。对我来说,它为单个设备显示了两个不同的端口。