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

    @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 Offline
          jsulmJ Offline
          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 Offline
                J.HilkJ Offline
                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
                    • 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

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

                      @J-Hilk

                      Send:

                      #include "ui_serial.h"
                      #include <QDebug>
                      #include <QBuffer>
                      #include <QPixmap>
                      #include <QFile>
                      
                      
                      serial::serial(QWidget *parent) :
                          QMainWindow(parent),
                          ui(new Ui::serial)
                      {
                          ui->setupUi(this);
                      
                          serialPort = new QSerialPort(this);
                          serialPort->setPortName("ttyAMA0");
                          serialPort->setBaudRate(QSerialPort::Baud115200);
                          serialPort->setDataBits(QSerialPort::Data8);
                          serialPort->setStopBits(QSerialPort::OneStop);
                          serialPort->setFlowControl(QSerialPort::NoFlowControl);
                          serialPort->open(QIODevice::ReadWrite);
                      
                          if (serialPort->isOpen() == true){
                              qDebug() <<"Port Opened....";
                              connect(serialPort, SIGNAL(readyRead()), this, SLOT(on_readdata()));
                          }
                      }
                      void serial::on_pushButton_2_clicked()
                      {
                          QFile* imageFile = new QFile("/home/pi/Desktop/image.jpg");
                              imageFile->open(QIODevice::ReadOnly);
                              QByteArray ba = imageFile->readAll();
                              imageFile->close();
                              delete imageFile;
                              if(serialPort->isOpen()==true){
                                  serialPort->write(ba);
                                  qDebug()<<ba.size()<<"size_send:";
                              }
                      }
                      

                      Rec:

                      #include "serial.h"
                      #include "ui_serial.h"
                      #include <QtSerialPort/QSerialPort>
                      #include <QDebug>
                      #include <QBuffer>
                      #include <QPixmap>
                      #include <QFile>
                      #include <QMessageBox>
                      
                      serial::serial(QWidget *parent) :
                         QMainWindow(parent),
                         ui(new Ui::serial)
                      {
                         ui->setupUi(this);
                      
                         serialPort = new QSerialPort(this);
                         serialPort->setPortName("ttyAMA0");
                         serialPort->setBaudRate(QSerialPort::Baud115200);
                         serialPort->setDataBits(QSerialPort::Data8);
                         serialPort->setStopBits(QSerialPort::OneStop);
                         serialPort->setFlowControl(QSerialPort::NoFlowControl);
                         serialPort->open(QIODevice::ReadWrite);
                      
                         if (serialPort->isOpen() == true){
                             qDebug() <<"Port Opened....";
                             connect(serialPort, SIGNAL(readyRead()), this, SLOT(on_readdata()));
                         }
                      
                      }
                      
                      serial::~serial()
                      {
                         delete ui;
                         serialPort->close();
                      }
                      
                      
                      void serial::on_readdata()
                      {
                         ba.append( serialPort->readAll());
                         qDebug()<<ba.size()<<"sizeeeee:";
                         if (ba.size() == 31021) {
                             QFile newDoc("/home/pi/Desktop/imagexx.jpg");
                                 if(newDoc.open(QIODevice::WriteOnly)){
                                     newDoc.write(ba);
                                 }
                                 newDoc.close();
                         }
                      //    ui->label->setText(ba);
                      
                      //      QPixmap b;
                      //      if(b.loadFromData(ba,"JPG")){
                      //          ui->label->setPixmap(b);
                      //      }
                      
                      }
                      
                      
                      1 Reply Last reply
                      0
                      • mrjjM mrjj

                        @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 Offline
                        J.HilkJ Offline
                        J.Hilk
                        Moderators
                        wrote on last edited by
                        #28

                        @mrjj IIRC, it's passed on to the OS during the write call and that copies the data. But I'm not entirely sure 😬


                        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 1 Reply Last reply
                        0
                        • J.HilkJ J.Hilk

                          @mrjj IIRC, it's passed on to the OS during the write call and that copies the data. But I'm not entirely sure 😬

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

                          @J-Hilk
                          Yeah i was wondering since its a board if that still happens as it would
                          make sense we get cut if not.

                          @Rika
                          Can you try this

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

                          and tell me if we still only get up to 190 bytes with the sizeeeee message.

                          R 1 Reply Last reply
                          1
                          • mrjjM mrjj

                            @J-Hilk
                            Yeah i was wondering since its a board if that still happens as it would
                            make sense we get cut if not.

                            @Rika
                            Can you try this

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

                            and tell me if we still only get up to 190 bytes with the sizeeeee message.

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

                            @mrjj I tried, still only get 190.
                            16 sizeeeee:
                            32 sizeeeee:
                            64 sizeeeee:
                            64 sizeeeee:
                            14 sizeeeee:

                            mrjjM 1 Reply Last reply
                            0
                            • R Rika

                              @mrjj I tried, still only get 190.
                              16 sizeeeee:
                              32 sizeeeee:
                              64 sizeeeee:
                              64 sizeeeee:
                              14 sizeeeee:

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

                              @Rika
                              Good testing.
                              So even it says
                              qDebug()<<ba.size()<<"size_send:";
                              1000 size_send
                              you only get
                              5 lines of
                              16 sizeeeee:
                              32 sizeeeee:
                              64 sizeeeee:
                              64 sizeeeee:
                              14 sizeeeee:
                              ?

                              R 1 Reply Last reply
                              0
                              • mrjjM mrjj

                                @Rika
                                Good testing.
                                So even it says
                                qDebug()<<ba.size()<<"size_send:";
                                1000 size_send
                                you only get
                                5 lines of
                                16 sizeeeee:
                                32 sizeeeee:
                                64 sizeeeee:
                                64 sizeeeee:
                                14 sizeeeee:
                                ?

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

                                @mrjj Sometimes 4 lines, sometimes 7 lines, but the total is 190 bytes. With 500-A, received only 230

                                mrjjM 1 Reply Last reply
                                0
                                • R Rika

                                  @mrjj Sometimes 4 lines, sometimes 7 lines, but the total is 190 bytes. With 500-A, received only 230

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

                                  @Rika
                                  Ok
                                  if we do
                                  ba.fill('A', 10);
                                  do you then get all ?

                                  R 1 Reply Last reply
                                  0
                                  • mrjjM mrjj

                                    @Rika
                                    Ok
                                    if we do
                                    ba.fill('A', 10);
                                    do you then get all ?

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

                                    @mrjj yes.

                                    mrjjM 1 Reply Last reply
                                    0
                                    • R Rika

                                      @mrjj yes.

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

                                      @Rika
                                      So it seems data get cut over some size.

                                      What Os is running on the boards ?

                                      Also maybe Zigbee has some sort of max transfer size ?

                                      R 1 Reply Last reply
                                      0
                                      • mrjjM mrjj

                                        @Rika
                                        So it seems data get cut over some size.

                                        What Os is running on the boards ?

                                        Also maybe Zigbee has some sort of max transfer size ?

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

                                        @mrjj I use raspbian. I tried using a PC connected to zigbee and sent photos to my Pi4 + Zigbee with Realterm, my Pi4 received the photos. I think the error is in the program sends the data.

                                        1 Reply Last reply
                                        0
                                        • J.HilkJ Offline
                                          J.HilkJ Offline
                                          J.Hilk
                                          Moderators
                                          wrote on last edited by
                                          #37

                                          well, lets narrow it down,
                                          write returns a quint64 with the actual number of bytes written to the serialport, what does that return ?

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

                                          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.

                                          R 1 Reply Last reply
                                          1

                                          • Login

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