weixin_43231421
Luzeera
采纳率50%
2021-01-08 12:27 阅读 27

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

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

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

代码附上

↓Python端

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

10条回答 默认 最新

  • 已采纳
    qq_15228737 奋斗的小小鱼 2021-01-08 12:42
    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-08 16:47

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

    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-08 16:50

    自动选号如:

    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!')
    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-08 16:51

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

    点赞 评论 复制链接分享
  • weixin_43231421 Luzeera 2021-01-08 17:04

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

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

    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-09 08:27

    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: 

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

    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-09 08:29

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

    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-09 08:31

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

    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-09 08:38

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

    点赞 评论 复制链接分享
  • fly_bear_unknown 无厘头编程 2021-01-09 08:50

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

    PyQt5 或者 Kivy 或者 OpenCV 都可以写。
    点赞 评论 复制链接分享

相关推荐