我对硬件相当陌生。我想使用NodeMCU和Python来控制LED灯。我在nodeMCU中上传了一个Arduino代码,然后使用pyserial库来获得串行输出。但是,当我尝试向端口提供输入时,它不起作用。我不知道问题出在哪里。
这是arduino代码:
int inputVal = 0;
const int ledPin = 5; //D1 pin of NodeMCU
void setup() {
Serial.begin(9600);
delay(100);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, 0);
}
void loop() {
while(Serial.available()>0){
inputVal = Serial.read();
}
Serial.println(inputVal);
if(inputVal==1){
digitalWrite(ledPin, HIGH);
Serial.println("LED is ON");
}
else{
digitalWrite(ledPin, LOW);
Serial.println("LED is OFF");
}
Serial.println("");
}
以下是python代码:
import serial
global ser
ser = serial.Serial("COM8", baudrate=9600, timeout=10,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS)
while(True):
ser.write(bytes(1))
line = ser.readline()
print(line.decode('utf8'))
python中的输出结果是:
0
LED is OFF
0
LED is OFF
0
LED is OFF
等等。ser.write((函数并没有在串行端口上将值写为1。当我更改Arduino代码中inputVal的值时,LED亮起,Arduino串行监视器上的输出为1 LED is ON
,这意味着电路连接和Arduino码工作正常。
我还注意到,我使用的COM端口可以同时使用python或arduino。用inputVal=1
上传arduino代码后,LED亮起,arduino串行监视器开始显示(1个LED亮起(。但是,我一运行python代码,led就关闭了,python输出结果是0 LED is OFF
。请帮帮我。
还有,有没有一种方法可以让我完全通过python控制NodeMCU,而不需要先使用arduino代码?
python的输出是正确的。bytes(integer)
创建了一个提供大小的数组,在您的情况下,所有数组都初始化为null size=1,bytes(1)
,所以您的输出是0x00
。如果您尝试bytes(10)
,则输出将是b'x00x00x00x00x00x00x00x00x00x00'
。
你需要做的是将ser.write(bytes(1))
更改为ser.write(bytes('1',encoding= 'utf-8'))
,它应该可以工作