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