Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.
Forum Updated to NodeBB v4.3 + New Features

Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.

Scheduled Pinned Locked Moved Unsolved General and Desktop
42 Posts 4 Posters 8.0k Views 1 Watching
  • 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.
  • mrjjM mrjj

    @jsulm
    Hi
    Àhh on first ready signal, it will call the slot and the
    waitForReadyRead + loop will then read all remaining data.
    Ok that should actually do it.
    ( if really never breaks the while loop)

    jsulmJ Online
    jsulmJ Online
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #7

    @mrjj Yes, possible that the timeout kicks in and terminates the loop before everything was received.

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    mrjjM 1 Reply Last reply
    0
    • jsulmJ jsulm

      @mrjj Yes, possible that the timeout kicks in and terminates the loop before everything was received.

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #8

      @jsulm
      Hi
      I also wonder if that would happen if image was say 1 MB.

      But it should be clear to poster if its called more than once with the
      qDebug()<<ba.size()<<"sizeeeee:";

      1 Reply Last reply
      0
      • R Rika

        @jsulm Thank you for replying. I tried sending images from a PC (using Realterm to send pictures), on my Pi 4, I ran the receiving program and got the images. Could the error be in the sending program?

        jsulmJ Online
        jsulmJ Online
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #9

        @Rika I suggest you implement the receiving part in a proper way: without mixing asynchronous and synchronous ways to read data. Remove the loop from serial::on_readdata(). Put QByteArray ba as member variable in the class. Accumulate data in ba untill you got all data.

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        R 1 Reply Last reply
        1
        • R Offline
          R Offline
          Rika
          wrote on last edited by
          #10

          @jsulm @mrjj I used qDebug to find out how much data was sent and received. I sent a 30kB image, the data I got from "qDebug()<<ba.size()<<"sizeeeee:";" was 132, I tried many times and all received 132. I used different photos, they gave different results but always the same.

          jsulmJ 1 Reply Last reply
          0
          • R Rika

            @jsulm @mrjj I used qDebug to find out how much data was sent and received. I sent a 30kB image, the data I got from "qDebug()<<ba.size()<<"sizeeeee:";" was 132, I tried many times and all received 132. I used different photos, they gave different results but always the same.

            jsulmJ Online
            jsulmJ Online
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #11

            @Rika Please read https://doc.qt.io/qt-5/qserialport.html#waitForReadyRead "This function blocks until new data is available for reading and the readyRead() signal has been emitted" and my previous post (no need for waitForReadyRead and the loop).

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            2
            • jsulmJ jsulm

              @Rika I suggest you implement the receiving part in a proper way: without mixing asynchronous and synchronous ways to read data. Remove the loop from serial::on_readdata(). Put QByteArray ba as member variable in the class. Accumulate data in ba untill you got all data.

              R Offline
              R Offline
              Rika
              wrote on last edited by Rika
              #12

              @jsulm You mean this?

              void serial::on_readdata()
              {
                  QByteArray ba(serialPort->readAll());
                  qDebug()<<ba.size()<<"sizeeeee:";
                  QFile newDoc("/home/pi/Desktop/imagexx.jpg");
                          if(newDoc.open(QIODevice::WriteOnly)){
                              newDoc.write(ba);
                          }
                          newDoc.close();
              }
              
              jsulmJ 1 Reply Last reply
              0
              • R Rika

                @jsulm You mean this?

                void serial::on_readdata()
                {
                    QByteArray ba(serialPort->readAll());
                    qDebug()<<ba.size()<<"sizeeeee:";
                    QFile newDoc("/home/pi/Desktop/imagexx.jpg");
                            if(newDoc.open(QIODevice::WriteOnly)){
                                newDoc.write(ba);
                            }
                            newDoc.close();
                }
                
                jsulmJ Online
                jsulmJ Online
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #13

                @Rika No, not like this. Please read my post above "Put QByteArray ba as member variable in the class. Accumulate data in ba untill you got all data."

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                R 1 Reply Last reply
                1
                • jsulmJ jsulm

                  @Rika No, not like this. Please read my post above "Put QByteArray ba as member variable in the class. Accumulate data in ba untill you got all data."

                  R Offline
                  R Offline
                  Rika
                  wrote on last edited by
                  #14

                  @jsulm Sorry, I don't really understand what you mean. Can you give an example with code?

                  jsulmJ 1 Reply Last reply
                  0
                  • R Rika

                    @jsulm Sorry, I don't really understand what you mean. Can you give an example with code?

                    jsulmJ Online
                    jsulmJ Online
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    @Rika

                    void serial::on_readdata()
                    {
                        ba.apend(serialPort->readAll());
                        qDebug()<<ba.size()<<"sizeeeee:";
                        if (ba.size() == imageSize) {
                            QFile newDoc("/home/pi/Desktop/imagexx.jpg");
                            if(newDoc.open(QIODevice::WriteOnly)){
                                newDoc.write(ba);
                            }
                            newDoc.close();
                        }
                    }
                    

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    R 1 Reply Last reply
                    2
                    • jsulmJ jsulm

                      @Rika

                      void serial::on_readdata()
                      {
                          ba.apend(serialPort->readAll());
                          qDebug()<<ba.size()<<"sizeeeee:";
                          if (ba.size() == imageSize) {
                              QFile newDoc("/home/pi/Desktop/imagexx.jpg");
                              if(newDoc.open(QIODevice::WriteOnly)){
                                  newDoc.write(ba);
                              }
                              newDoc.close();
                          }
                      }
                      
                      R Offline
                      R Offline
                      Rika
                      wrote on last edited by
                      #16

                      @jsulm I tried it and it failed, I sent 31021 bytes and always received 241 bytes.

                      mrjjM 1 Reply Last reply
                      0
                      • R Rika

                        @jsulm I tried it and it failed, I sent 31021 bytes and always received 241 bytes.

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #17

                        @Rika
                        So it only shows
                        qDebug()<<ba.size()<<"sizeeeee:";
                        1 time with size 241 ?

                        R 1 Reply Last reply
                        0
                        • mrjjM mrjj

                          @Rika
                          So it only shows
                          qDebug()<<ba.size()<<"sizeeeee:";
                          1 time with size 241 ?

                          R Offline
                          R Offline
                          Rika
                          wrote on last edited by Rika
                          #18

                          @mrjj No, the last time was 241. My old way it also received only 241 bytes, so I was thinking of the possibility of an error sent by the program.

                          mrjjM 1 Reply Last reply
                          0
                          • R Rika

                            @mrjj No, the last time was 241. My old way it also received only 241 bytes, so I was thinking of the possibility of an error sent by the program.

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by
                            #19

                            @Rika said in Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.:

                            No, the last time was 241.

                            So you do get mutiple
                            qDebug()<<ba.size()<<"sizeeeee:";
                            messages ?

                            R 1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @Rika said in Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.:

                              No, the last time was 241.

                              So you do get mutiple
                              qDebug()<<ba.size()<<"sizeeeee:";
                              messages ?

                              R Offline
                              R Offline
                              Rika
                              wrote on last edited by
                              #20

                              @mrjj
                              144 sizeeeee:
                              160 sizeeeee:
                              176 sizeeeee:
                              192 sizeeeee:
                              208 sizeeeee:
                              224 sizeeeee:
                              240 sizeeeee:
                              241 sizeeeee:

                              jsulmJ mrjjM 2 Replies Last reply
                              0
                              • R Rika

                                @mrjj
                                144 sizeeeee:
                                160 sizeeeee:
                                176 sizeeeee:
                                192 sizeeeee:
                                208 sizeeeee:
                                224 sizeeeee:
                                240 sizeeeee:
                                241 sizeeeee:

                                jsulmJ Online
                                jsulmJ Online
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #21

                                @Rika As I already said: you have to accumulate all these data in ba and when you got everything then you store it in the file.
                                Again the code:

                                void serial::on_readdata()
                                {
                                    ba.apend(serialPort->readAll());
                                    qDebug()<<ba.size()<<"sizeeeee:";
                                    if (ba.size() == imageSize) {
                                        QFile newDoc("/home/pi/Desktop/imagexx.jpg");
                                        if(newDoc.open(QIODevice::WriteOnly)){
                                            newDoc.write(ba);
                                        }
                                        newDoc.close();
                                    }
                                }
                                

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                R 1 Reply Last reply
                                0
                                • R Rika

                                  @mrjj
                                  144 sizeeeee:
                                  160 sizeeeee:
                                  176 sizeeeee:
                                  192 sizeeeee:
                                  208 sizeeeee:
                                  224 sizeeeee:
                                  240 sizeeeee:
                                  241 sizeeeee:

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by mrjj
                                  #22

                                  @Rika
                                  But it stops at 241 every time?

                                  Maybe its due to data.
                                  Could you try in your sent function

                                  void serial::on_pushButton_2_clicked()
                                  {
                                  
                                  
                                          QByteArray ba;
                                          ba.fill('A', 1000);
                                          if(serialPort->isOpen()==true){
                                              serialPort->write(ba);
                                              qDebug()<<ba.size()<<"size_send:";
                                          }
                                  }
                                  

                                  and see if that changes how you the reading goes.
                                  This just sends 1000 A.

                                  Also i wonder if write will copy the data and then send / if write sent it all there as else we have the issue of the sent buffer running out of scope.

                                  R 1 Reply Last reply
                                  0
                                  • jsulmJ jsulm

                                    @Rika As I already said: you have to accumulate all these data in ba and when you got everything then you store it in the file.
                                    Again the code:

                                    void serial::on_readdata()
                                    {
                                        ba.apend(serialPort->readAll());
                                        qDebug()<<ba.size()<<"sizeeeee:";
                                        if (ba.size() == imageSize) {
                                            QFile newDoc("/home/pi/Desktop/imagexx.jpg");
                                            if(newDoc.open(QIODevice::WriteOnly)){
                                                newDoc.write(ba);
                                            }
                                            newDoc.close();
                                        }
                                    }
                                    
                                    R Offline
                                    R Offline
                                    Rika
                                    wrote on last edited by
                                    #23

                                    @jsulm I have made your way, the above is the result from qDebug (). It only received 241 bytes so file imagexxx.jpg was not created. (my imageSize= 31021).

                                    J.HilkJ 1 Reply Last reply
                                    0
                                    • R Rika

                                      @jsulm I have made your way, the above is the result from qDebug (). It only received 241 bytes so file imagexxx.jpg was not created. (my imageSize= 31021).

                                      J.HilkJ Online
                                      J.HilkJ Online
                                      J.Hilk
                                      Moderators
                                      wrote on last edited by
                                      #24

                                      @Rika said in Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.:

                                      @jsulm I have made your way, the above is the result from qDebug (). It only received 241 bytes so file imagexxx.jpg was not created. (my imageSize= 31021).

                                      at this point, you're not getting away with a simple I've tried that, it does not work.

                                      @jsulm is absolutely correct. Show us your actual code


                                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                      Q: What's that?
                                      A: It's blue light.
                                      Q: What does it do?
                                      A: It turns blue.

                                      mrjjM R 2 Replies Last reply
                                      1
                                      • mrjjM mrjj

                                        @Rika
                                        But it stops at 241 every time?

                                        Maybe its due to data.
                                        Could you try in your sent function

                                        void serial::on_pushButton_2_clicked()
                                        {
                                        
                                        
                                                QByteArray ba;
                                                ba.fill('A', 1000);
                                                if(serialPort->isOpen()==true){
                                                    serialPort->write(ba);
                                                    qDebug()<<ba.size()<<"size_send:";
                                                }
                                        }
                                        

                                        and see if that changes how you the reading goes.
                                        This just sends 1000 A.

                                        Also i wonder if write will copy the data and then send / if write sent it all there as else we have the issue of the sent buffer running out of scope.

                                        R Offline
                                        R Offline
                                        Rika
                                        wrote on last edited by
                                        #25

                                        @mrjj I tried with 1000 A, received only 190

                                        1 Reply Last reply
                                        0
                                        • J.HilkJ J.Hilk

                                          @Rika said in Unable to send and receive images between 2 Raspberry connected to Zigbee via UART.:

                                          @jsulm I have made your way, the above is the result from qDebug (). It only received 241 bytes so file imagexxx.jpg was not created. (my imageSize= 31021).

                                          at this point, you're not getting away with a simple I've tried that, it does not work.

                                          @jsulm is absolutely correct. Show us your actual code

                                          mrjjM Offline
                                          mrjjM Offline
                                          mrjj
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #26

                                          @J-Hilk
                                          Do you know if write blocks ?
                                          QByteArray ba; // local
                                          ba.fill('A', 1000);
                                          if(serialPort->isOpen()==true){
                                          serialPort->write(ba); // blocks here ? as ba is by reference

                                          J.HilkJ 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