Python serial.write()不适用于NodeMCU



我对硬件相当陌生。我想使用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')),它应该可以工作

最新更新