我想在BeagleBone和我的笔记本电脑之间建立一个串行连接。这类似于我之前成功使用过的一个Arduino和笔记本电脑的设置。问题是,虽然机器之间显然有信号传递,但输出似乎已损坏。
BB连接到TX和RX线上的Bluesmirf Silver。
我用Python编写了一个类来处理串行通信。当BB和Arduino之间通信时,这个工作很好,所以我非常确信我已经处理好了pins、mux模式等的设置。
但同样的代码,当通过Bluesmirf时无法工作。当所有设置为19200波特8-N-1时,从BB发送到笔记本电脑的文本将以一系列0xE0字符的形式到达。改变波特率(是的,我在两端都很小心地改变它)可以改变笔记本电脑上出现的东西——有时什么都通不过,有时显然是随机的。不过,大多数情况下,字节的值似乎很高。在19200,显示的通过字节数比发送的字符数多2或3个字节。
在使用serial()将self.serPort定义为串行端口(即PySerial)后,我使用以下命令发送文本(作为字符串“sendStr”传递):
self.serPort.write(sendStr.encode('utf-8', 'replace'))
我试过用ascii代替utf-8
在同一个程序中,我以同样的方式将同一个字符串发送给Arduino,Arduino将其回传给Arduino,那里一切正常。只是那些经过蓝军的东西让我伤心。
(据记录,在笔记本电脑MacBookPro上,我正在使用CoolTerm发送和接收。在我之前的设置中,一个Arduino通过Bluesmirf与笔记本电脑通信,笔记本电脑正在运行一个处理草图。我试过同样的BB设置素描,但仍然没有乐趣)。
有什么想法吗?
最佳答案
好吧,您的问题似乎是由于您忽略了配置BlueSMIRF模块本身。实际上,您在计算机端指定的波特率并不重要,因为您可以使用任何波特率,而且不必与BeagleBone上使用的波特率相同(尽管如果它高于Beagle上的波特率,但如果不够小心,可能会出现缓冲区溢出错误)。
另一方面,蓝色模块需要进行配置,以便其本地UART接口(链接到BeagleBone)的波特率与后者相同。为此,请参阅Roving Network用户手册(当前可以找到here)中的命令指南。
根据数据表,您需要:
(1)进入命令模式(在通电后的前60秒内执行此操作,您可以从PC到蓝牙模块远程执行所有配置):$$$
(不发送ASCII 13和10字符)
(2)发送命令:SU,19
(按回车键,即发送ASCII 13和10个字符)
这将设置您的RN-42模块在您的BlueSMIRF到19200波特,与您的BeagleBone相同。你应该停止看到你看到的错误(根据我从你的评论推断,这可能是由于BlueSMIRF波特率设置为57.6K)。
请注意,完成配置后,需要重置模块。
关于python - BeagleBone和Python的蓝牙串行问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11065117/