【发布时间】:2024-11-27 14:40:02
【问题描述】:
我正在用 arduino uno 作为温度控制器建造一个种植箱/玻璃容器。 arduino 的简单草图:如果 DS18B20 传感器的温度低于 25'C,则打开继电器,加热电缆连接到该继电器。循环 30 秒,每次 Serial.print(temperature) 到 PC,我正在收集数据并制作延时照片。 ---> 这就是问题所在。
一段时间后(从 15 分钟到 4 小时)。与 PC 的串行通信停止。当我尝试将新草图上传到 arduino 时,我收到一条错误消息: avrdude: ser_open(): can't set com-state for "\.\COM3"
我需要拔下并重新插入 USB 电缆(或在 Windows 设备管理器中将其关闭再打开),还需要重新启动正在收集数据的 Python 应用程序。 (非常不满意的修复)。
所以我的问题是: 1. 为什么? 2.如何解决? 3.或者如何做一些变通方法,例如从代码中重置COM端口(最好是python2.7)
附言。我在做什么以及它是如何工作(和不工作)的例子在这里:Life of pepper
PS2。我的目标是为植物创造可控的栖息地,在那里我可以看到行为因温度、日间持续时间、光照强度、湿度而异。
请帮助我:-)。
ARDUINO UNO 素描
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the A
rduino
#define ONE_WIRE_BUS 2
#define PIN_HEATING 6
float temperatura = 30.0;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
pinMode(PIN_HEATING, OUTPUT);
}
void loop(void)
{
delay(30000);
if(temperatura<25.0){
digitalWrite(PIN_HEATING, HIGH);
}
else{
digitalWrite(PIN_HEATING, LOW);
}
sensors.requestTemperatures(); // Send the command to get temperatures
// After we got the temperatures, we can print them here.
// We use the function ByIndex, and as an example get the temperature from the first sensor only.
temperatura = sensors.getTempCByIndex(0);
Serial.print("#");
Serial.print(temperatura);
}
PYTHON2.7 接收部分
import serial #pySerial
ser = serial.Serial()
ser.port = "COM3"
ser.open()
data = ser.read_all().split("#")
datasize = len(data)
if datasize>1:
temp = data[datasize-1]
tempstr = " / " + str(temp) + "'C"
else:
tempstr=" / ----- "
【问题讨论】:
标签: python-2.7 arduino serial-port usb