我实现了一个简单的CmdMessenger示例,允许Arduino通过串行端口与PC机通信。在
该程序打算侦听串行等待命令“0;”。输入此命令时,Arduino读取温度传感器并将温度结果写入串行。在
从serial monitor可以正常工作,但是我不能使用pySerial与PYthon一起使用它。我觉得我在python实现中做了一些错误的事情,下面是代码片段: 编辑:如果我在调试模式下运行(在PyCharm上),下面的代码将按预期运行。我在这条线上给乞讨设置了一个断点:
if (not self.serialConnection.isOpen()): ...
从那里用“恢复程序”运行就可以了。我不知道为什么它不在“正常模式”下运行。在
^{pr2}$以及queryTemperature方法的调用:
from temp_read import *
dObject = Temperature('COM3')
print dObject.queryTemperature();
程序没有完成。它似乎在循环中停止:
while self.serialConnection.inWaiting() == 0:
pass
下面是arduino的草图:
#include <CmdMessenger.h>
#include <OneWire.h>
#include <DallasTemperature.h>
int pinTemp = 13;
CmdMessenger cmdMessenger = CmdMessenger (Serial);
OneWire oneWire (pinTemp);
DallasTemperature sensors (&oneWire);
enum {
kReadTemperature,
kStatus,
};
void attachCommandCallbacks (){
cmdMessenger.attach (onUnknownCommand);
cmdMessenger.attach (kReadTemperature, onReadTemperature);
}
void onStatus (){
Serial.println ("status");
}
void onUnknownCommand (){
Serial.println ("unknow");
}
void onReadTemperature (){
Serial.println ("readTemp");
sensors.requestTemperatures();
delay (1500);
float temp = sensors.getTempCByIndex(0);
cmdMessenger.sendCmd(kStatus, (float) temp);
}
void setup() {
Serial.begin(115200);
sensors.begin ();
cmdMessenger.printLfCr();
attachCommandCallbacks();
}
void loop() {
cmdMessenger.feedinSerialData();
}
它没有使用您的代码,但是为了实现相同的功能,我为CmdMessenger(https://github.com/harmsm/PyCmdMessenger)编写了一个健壮的python接口。您可以使用它来执行此任务,方法是:
对arduino草图的更改将添加
^{pr2}$kSendTemperature
到初始命令枚举:替换send命令以二进制字符串形式发送浮点:
并删除额外的
Serial.Println(XXX)
命令。在相关问题 更多 >
编程相关推荐