所以我一直试图将this HC-05 transceiver连接到我的MSP-430G2。由于我使用的是MacBook,我尝试使用PySerial发送消息。我正在使用:
这是我的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模型,而是一个密切相关的模型。修复解决了所有问题。谢谢大家的帮助。
答案 0 :(得分:0)
我之前使用过HC-06将Arduino的串口连接到MacBook,而棘手的部分是找到合适的端口。
配对后,列出ls /dev/{tty,cu}.*
的可用端口并尝试不同的端口。对我来说,它为单个设备显示了两个不同的端口。