Sending image-data over the MySensors network.


  • Admin

    Awesome! Really simple and clean example (and perl script!).



  • Thanks. :)
    There was much try and error involved to get this running.
    But i'm still looking forward for suggestions/discussion about the implementation of a STREAM feature.

    What do you guys think about a fixed routing while streaming?
    The init of the stream could be started by a special payload, when the gateway receives this message it generates a "stream-id". It would link this stream-id to the node-id and sensor-id and send the stream-id back to the sensor. Repeaters in the middle of the way, to the node, would also remember the link betweend stream-id and node-id.
    After this point the node would begin to stream its content only with the stream-id assigned, which would free up to 30bytes per package.

    The gateway itself could reverse this process and send out "normal" looking "commands".

    The stream-id will be freed at the moment the stream is completed or a timeout occurs.


    This ist just a suggestion by me.


  • Admin

    Yes, would be nice to free up some payload space for this type of data.

    Just a bit worried about allocating things (dynamically or statically) for the stream information (beside the extra code). Pretty cramped already.

    What happens if you just increase the RF24 datarate in MyConfig? Do you lose much data?


  • Admin

    @Oitzu nice, I'll think about implementing this in MYSController for testing purposes.



  • @hek said:

    Yes, would be nice to free up some payload space for this type of data.

    Just a bit worried about allocating things (dynamically or statically) for the stream information (beside the extra code). Pretty cramped already.

    I think by deactivating not used features with pre-compile directives this problem could be solved. Need to look into this again. But i remember there are large chunks of unused code compiled in if you, by example, only want to use the lib for a "pure" node.

    What happens if you just increase the RF24 datarate in MyConfig? Do you lose much data?

    Didn't tried yet. The target for this application is a long range communication. So i keeped the datarate low in my tests.
    BUT i need to note: Most of the 40 seconds, at this moment, is probably a result of the slow UART connection to the camera. The camera-chip has spi but it isn't breaked out on the board. There are boards out there with the same chip + SPI! Users reported the transfer over SPI to the MCU takes about 1 second!

    @tekka nice to hear. :) Let me know if i can support somehow.



  • Update!
    I changed the camera to a faster SPI model.
    http://de.aliexpress.com/item/ArduCAM-M-2MP-Camera-Shield-OV2640-2MP-SPI-Camera-module/32307177889.html?ws_ab_test=201407_5,201444_5,201409_3

    The camera delivers a 2MP picture in under 1 seconds over SPI.

    But i'm running in a dead end, with MySensors not supporting proper streams.
    A 2MP (100kb) takes about 20 seconds with MySensors.
    Main problem atm is IMHO with the mysensors transmitting style:

    	rf24.powerUp();
    	rf24.stopListening();
    	rf24.openWritingPipe(TO_ADDR(to));
    	bool ok = rf24.write(data, len, to == BROADCAST_ADDRESS);
    	rf24.startListening();
    	return ok;
    

    would be more effective to do something like:

    	rf24.powerUp();
    	rf24.stopListening();
    	rf24.openWritingPipe(TO_ADDR(to));
    ///loop here over more than 1 packet
    
    rf24.writeFast(data, len, to == BROADCAST_ADDRESS);
    
    //end of loop
    	rf24.startListening();
    	return ok;
    

    The stopListening -> openWritingPipe -> startListening just takes to much time.

    Unfortunately i failed a try to implement this... it seems i'm just not experienced enough.



  • Hi,

    I'm currently trying to use your solution, @Oitzu.
    The Node-part is working fine. Have a little problem on the Pi-side.
    The RF-device is directly connected to the Pi, so I'm using a Serial Gateway script on the Pi (https://github.com/mysensors/Raspberry). The serial data is then send over /dev/ttyUSB20, that is working fine.
    I know that I need to adjust the following lines of the Perl script:

    use Device::SerialPort;
    use POSIX qw(strftime);
    use Data::Dumper;
    use Time::HiRes qw (sleep);
    use Time::HiRes qw(time);
    my $port = Device::SerialPort->new("/dev/ttyUSB1");
    

    But it seems I'm just to stupid to do this by myself :grin:
    I would suggest that I can delete the first line and change the last line to something like this:

    my $port = "/dev/ttyUSB20";
    

    Can someone help me with the right syntax?

    Thanks!



  • @thomas1412 said:

    Hi,

    I'm currently trying to use your solution, @Oitzu.
    The RF-device is directly connected to the Pi, so I'm using a Serial Gateway script on the Pi (https://github.com/mysensors/Raspberry). The serial data is then send over /dev/ttyUSB20, that is working fine.
    I know that I need to adjust the following lines of the Perl script:

    use Device::SerialPort;
    use POSIX qw(strftime);
    use Data::Dumper;
    use Time::HiRes qw (sleep);
    use Time::HiRes qw(time);
    my $port = Device::SerialPort->new("/dev/ttyUSB1");
    

    But it seems I'm just to stupid to do this by myself :grin:
    I would suggest that I can delete the first line and change the last line to something like this:

    my $port = "/dev/ttyUSB20";
    

    Can someone help me with the right syntax?

    The RPi Serial Gateway creates a symlink "/dev/ttyMySensorsGateway" you should use that as Device for more consistent results.

    I srsly don't know why you would delete the first line. I'm pretty sure you need to use the Device::Serialport Perl-Module. ;)

    Also try to run the script as root. The created device files tend to have root-only access rights.



  • Hi,

    thanks for the quick reply and your help
    It turned out my problem was the not installed serialport perl library.. Now I'm a step further.
    Unfortunately there's another problem now.. :smile:
    After sending three or four packages the next six packages are failing to send. And this over and over again.
    Seems that the SerialGateway is too slow in some way..

    send: 254-254-0-0 s=255,c=0,t=17,pt=0,l=5,sg=0,st=ok:1.5.1
    send: 254-254-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:0
    sensor started, id=254, parent=0, distance=1
    send: 254-254-0-0 s=3,c=0,t=23,pt=0,l=0,sg=0,st=ok:
    Sending Picture of 13048 Bytes.
    send: 254-254-0-0 s=3,c=1,t=25,pt=0,l=5,sg=0,st=ok:START
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=ok:FFD8FFFE00244900020D0000000000000000000000000000
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=ok:00F0004001070032120B510451040000FFDB008400020101
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=ok:020101020201020202020203040303020203050404030406
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=fail:0607070606060607080A0907070A080606090C090A0A0B0B
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=fail:0B0B07080C0D0C0B0D0A0B0B0B0102020203020305030305
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=fail:0B0706070B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=fail:0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=fail:0B0B0B0B0B0BFFFE0005000000FFC000110800F001400301
    send: 254-254-0-0 s=3,c=1,t=24,pt=6,l=24,sg=0,st=fail:2100021101031101FFC401A2000001050101010101010000```

  • Admin

    Might be a powering issue of the radio. Put a bigger cap on it.



  • Adding a capacitor hasn't helped.
    I changed the setup using now a serial gateway on a separate Arduino instead of having it directly on the Pi. This is working fine. So it seems that the serial gateway on the Pi was the problem..



  • @thomas1412 said:

    This is working fine. So it seems that the serial gateway on the Pi was the problem..

    I tested this, and yes, the Pi serial gateway seems to be the problem, clogging up on some point and stops.
    The problem itself seems to be in the pseudo terminal created. If i rewrite the gateway that the data with type 24 (image data) is not written to the pseudo terminal the sending works fine.

    The Pi serial gateway has atm afaik no maintainer and needs some love.



  • Hello, this is my first arduino project: sending a file (jpeg, pdf, txt) from an arduino sd card module to android phone using arduino uno and bluetooth module HC-05
    It's possible with this hardware?

    If it's possible can someone please send me the source code and android app use it to receive the file
    thank you


  • Admin

    @Zied-BEN-HAMMOUD

    I doubt anyone has the sourcecode ready for an app/sketch shuffling data over bluetooth. The MySensors library doesn't handle bluetooth communication so you should probably look elsewhere.


Log in to reply
 

Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.