Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Qt Quick QML Read Data over Serial Port and Show on GUI

Qt Quick QML Read Data over Serial Port and Show on GUI

Scheduled Pinned Locked Moved QML and Qt Quick
22 Posts 4 Posters 23.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    valliammal
    wrote on last edited by
    #13

    So finally He agreed , He needs to set some values to make it to work.

    " We need to go to Linux terminal and set the budrate every time off it to work. "

    So this is his fault. And I kept trying with QTSerialPort several time and it had returned with CanReadWrite() as false.

    I had provided the right soln and I know it is right. His serial port is not getting value with CanReadWrite() as true. He is now telling this.

    In linux terminal port, He is setting some baud rate to make it to work.
    I had verified , for corrections, 4 times on his port and made the normal way to work. Now for this , He is telling

    this is not his fault. CanReadWrite() as true only QT Serial Port will work.

    If QTSerialPort is working fine, then CanReadWrite() will return value as true.
    ie the proof. So why it is returned as false?. whether he again claims that His serial port baud rate or his on off of device, or no data had come?.

    we work by hrs. we are not infront of the machine and checking and doing it. When it returns false as value, I am sure it had not worked. He is now taking more time than needed.

    As Expert always , I gives best soln. I had checked this and told him. Now I am really doubt to work with him again.

    1 Reply Last reply
    0
    • M Offline
      M Offline
      matinzk
      wrote on last edited by
      #14

      [quote author="valliammal" date="1418522987"]So finally He agreed , He needs to set some values to make it to work.

      " We need to go to Linux terminal and set the budrate every time off it to work. "

      So this is his fault. And I kept trying with QTSerialPort several time and it had returned with CanReadWrite() as false.

      I had provided the right soln and I know it is right. His serial port is not getting value with CanReadWrite() as true. He is now telling this.

      In linux terminal port, He is setting some baud rate to make it to work.
      I had verified , for corrections, 4 times on his port and made the normal way to work. Now for this , He is telling

      this is not his fault. CanReadWrite() as true only QT Serial Port will work.

      If QTSerialPort is working fine, then CanReadWrite() will return value as true.
      ie the proof. So why it is returned as false?. whether he again claims that His serial port baud rate or his on off of device, or no data had come?.

      we work by hrs. we are not infront of the machine and checking and doing it. When it returns false as value, I am sure it had not worked. He is now taking more time than needed.

      As Expert always , I gives best soln. I had checked this and told him. Now I am really doubt to work with him again.[/quote]

      You're mixing things up.

      The Qt terminal example uses the QtSerialPort library, and works fine on our machine. This means that it initialises the serial port correctly and hence reads it fine. Therefore there is nothing wrong with the actual serial port.

      Your code needs this command to run on Linux terminal in order for it to work:
      stty -F /dev/ttyUSB0 115200

      This makes things very manual!

      If the code that you tried with QtSerialPort library returns false with CanReadWrite(), there must be something wrong with your code and not with the actual serial port. As explained above Qt terminal example works fine and it does makes used of the QtSerialPort library.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        matinzk
        wrote on last edited by
        #15

        Hi guys, we have managed to use QtSerialPort libraries to achieve what we need.

        Our serial read code runs in a separate thread in a forever to receive the data and update the GUI.

        Here is the serial code. Would you kindly have a look and make sure it is good to go?

        Our data that arrives looks like this:-
        234|654\n

        @QString elem0;
        QString elem1;

        forever {

                if (serialPort.waitForReadyRead(1500))  //set the timeout time for the port
                {
        
                    serialPort.flush();      /make sure there is no old data every time we want to read
              
                    QByteArray data;
                    QStringList myArrayOfNums;
        
                              if (serialPort.canReadLine())   //If we can read the data then read it
                              {
                                       data = serialPort.readLine();  //Read line of data as Byte Array
                
                                       QString myData(data);     //Convert the received the data to String
                                       myArrayOfNums = myData.split("|");   //Split the data as it's delimited and put into a String List
        
                                       //USE THE FINAL DATA
                                       elem0 = myArrayOfNums[0].simplified(); //simplified removes any white spaces/characters
                                       elem1 = myArrayOfNums[1].simplified();
                                       
                                       qDebug() << elem0;
                                       qDebug() << elem1;
                                }
        
        
                }@
        

        One thing we've noticed is that when waitForReadyRead() is set to for example waitForReadyRead(30), so only 30 millisecs, then waitForReadyRead() returns false quite alot. Does anyone know the reason for that?

        Additionally if we monitor the data that arrives into the Qt application, every often canReadLine() also returns false. Is there a way to make sure it always returns true so receiving data can become smoother and loss of data eliminated?

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #16

          Why not it in asynchronous mode and use readyRead() + readAll() ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          1
          • M Offline
            M Offline
            matinzk
            wrote on last edited by
            #17

            With readAll() some data still gets missing.

            Is it best to send data to the app with a "\n" at the end or with 2 different identifiers at the beginning and end?

            1 Reply Last reply
            0
            • M Offline
              M Offline
              matinzk
              wrote on last edited by
              #18

              Actually most of the issues are sorted.

              Still not using readyRead() though. However I have connected our microcontroller to our Raspberry Pi via the UART (Rx/Tx pins) with a level shifter.

              The Qt app cannot read anything from the /dev/ttyAMA0. It all works fine if the microcontroller is connected to the Raspberry Pi via USB.

              Is this normal?

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #19

                Depends, do you have the rights to read/write from /dev/ttyAMA0 ?

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  matinzk
                  wrote on last edited by
                  #20

                  Yes there are permissions.

                  I can send data if I connect the rx/tx pins of the RPi to a FTDI board and send data from a terminal program from a PC.

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #21

                    I mean does your user have the rights to access that device ? What does ls -la /dev/ttyAMA0 return ?

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      Memento Mori
                      wrote on last edited by
                      #22

                      port access example: https://github.com/ncp1402/ql-serial
                      application example: https://github.com/ncp1402/qcsvlog

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved