在串口工具里无法检测到Python发出的信息

研究了几天的串口通信,想要实现用Python发送串口信息给Arduino主板控制其他设备

但现在在串口工具里无法检测到Python发出的信息(这个调试工具应该是能够不占用串口监视的),而且下位机也没反应(用Arduino串口监视器测试时是能正常检测到串口的发送和接收)

代码附上

↓Python端

另外Python在运行程序的时候Arudino的Tx指示灯有在闪烁,这证明串口发送是没问题的?

第一次进行串口通信编程,希望得到前辈指正!

参考下:https://www.cnblogs.com/lanceyu/p/10201236.html

Arduino  的码呢?你这直接挑 0 很有问题。

自动选号如:

def findArduino(portsFound):
    global arduino_port

    commPort = 'None'
    numConnection = len(portsFound)

    for i in range(0, numConnection):
        port = portsFound[i]
        strPort = str(port)
        print(f'Searching #{i + 1}:\t{strPort}')

        if 'Arduino' in strPort or 'CH340' in strPort:
            splitPort = strPort.split(' ')
            commPort = (splitPort[0])
            arduino_port = i
    return commPort
Main:
connectPort = findArduino(plist)
if connectPort != 'None':
    serialFd = serial.Serial(port=connectPort, baudrate=115200, timeout=10)
    print(f'Found Arduino connected to {serialFd.name}')
else:
    print('Connection Issue!')

对不起,我用 115200 测,应该改回 9600。

谢谢各位大佬!根据一楼大佬的链接终于跑通程序了T^T

但是Python向串口发送数据的时候,串口工具还是无法检测,好奇怪

python:

import serial.tools.list_ports
import serial
import time


def get_ports():
    ports = serial.tools.list_ports.comports()
    return ports


def findArduino(portsFound):
    commPort = 'None'
    numConnection = len(portsFound)

    for i in range(0, numConnection):
        port = portsFound[i]
        strPort = str(port)
        print(f'Searching #{i + 1}:\t{strPort}')

        if 'Arduino' in strPort or 'CH340' in strPort:
            splitPort = strPort.split(' ')
            commPort = (splitPort[0])
    return commPort


def write_read(x):
    global serialFd
    serialFd.flushInput()
    serialFd.write(bytes(x, 'utf-8'))
    time.sleep(0.5)
    line = 'None'
    if serialFd.in_waiting > 0:
        line = serialFd.readline().decode('utf-8').rstrip()

    return line


# ====================================
# Main
# ====================================
plist = get_ports()
serialFd = None

connectPort = findArduino(plist)
print('Port found: ' + connectPort)

if connectPort != 'None':
    serialFd = serial.Serial(port=connectPort, baudrate=115200, timeout=60)
    print(f'Found Arduino connected to {serialFd.name}')
else:
    print('Connection Issue!')

serialFd.flush()

while True:
    num = input("Enter a number: ")  # Taking input from user
    value = write_read(num)
    print(value)  # printing the value

arduino:

int x;

void setup() {
  Serial.begin(115200);
  Serial.println("Ready at 115200 bps:"); // print "Ready" once
  Serial.setTimeout(1);
}

void loop() {
  if (Serial.available() > 0) {
    String c = Serial.readString(); // incoming
    Serial.print("I received: ");
    Serial.println(c); // outgoing
  }
}

上面,我自己的测试结果:

C:\Python38\python.exe D:/Arduino/py/chk_arduino.py
Searching #1:	COM9 - USB-SERIAL CH340 (COM9)
Port found: COM9
Found Arduino connected to COM9
Enter a number: 333
I received: 333
Enter a number: No way
I received: No way
Enter a number: 

没问题,发什么就收什么。

还有,serial monitor 是无法和 pySerial 合作的。Error: COM port occupied.

打开 serial monitor, pySerial 又无法运行。反正两个是死对头啦!因为两个在抢同一条通道。

串口工具也是用同一条道,pySerial 都已经占位了,怎么能测出来。

除非你自己收集 pySerial 所有的 write=输出 和 read=输入 归纳写成另外一个窗口。用 

PyQt5 或者 Kivy 或者 OpenCV 都可以写。