Python serial.write() 不适用于 NodeMCU

Python serial.write() not working for 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) 创建一个提供大小的数组,在你的情况下全部初始化为空大小= 1,bytes(1),所以如果你尝试bytes(10)你的输出是0x00输出将是 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'.

您需要做的是将 ser.write(bytes(1)) 更改为 ser.write(bytes('1',encoding= 'utf-8')) 应该可以工作