【问题标题】:SD card image transfer using xbee使用 xbee 传输 SD 卡图像
【发布时间】:2015-01-24 10:23:47
【问题描述】:

我尝试从 arduino(20KB - JPEG - 使用 SD 库)读取 SD 卡图像并通过 Xbee(系列 2)传输由于 xbee 的限制,必须中断到 60 个字节并发送直到完整的文件发送。我认为,图像存储在 ASCII 字符中。

 void setup() {

 Serial.begin(115200);

 if (!SD.begin()) {

Serial.println("begin failed");
return;
       }

 file = SD.open("PIC00.JPG");

 }
   void loop() {
   Serial.flush();

char buf[64];
if(file) {
while (file.position() < file.size())
         { 
   while (file.read(buf, sizeof(buf)) == sizeof(buf))  // read chunk of 64bytes 
         {

        Serial.write(buf); // Send to xbee via serial
         delay(50); 
         }

      }
       file.close();
} }

但是这种方法,我在串行写入时看不到完整的图像传输。过了一会儿,我才知道图像的开头是 Y(ascii 字符)和 U(结束字符)。我只能看到结束开始字符 Y 看不到正确的结束字符。

请指教...努力解决这个问题。非常感谢...

【问题讨论】:

    标签: arduino xbee


    【解决方案1】:

    JPEG 实际上是二进制数据。要发送它,请使用 Serial.write() 的版本,其中包含要发送的字节数的长度参数。否则,它会认为您正在尝试发送一个以 null 结尾的字符串。

    (将bytesread 声明为函数顶部的byte。)

    while ((bytesread = file.read(buf, sizeof(buf))) > 0)
    {
        Serial.write(buf, bytesread); // Send to xbee via serial
        delay(50); 
    }
    

    另外请注意,延迟可能不够——您确实应该使用带有硬件流控制的串行端口(从 XBee 模块监控 /CTS),以便您知道何时可以清楚地向它发送数据。

    【讨论】:

    • 没有尝试这种方法,因为通过串口(xbee)连续发送所有数据。将延迟从 50 毫秒减少到 5 毫秒。并且图像大小小于 3KB,因此,虽然照片和分辨率不是很好,但仍然有效。谢谢。
    • Chandra,如果你有硬件流控制,你就不需要使用延迟了。随着延迟,缓慢的网络连接可能会导致您溢出 XBee 上的串行缓冲区。延迟是一种破解/解决方法,使用流量控制是正确且可靠的解决方案。
    • 我从未尝试过硬件流控制。因此,不得不打扰发送方 Xbee 和接收方 Xbee 使用配置的硬件流控制。对吗?
    • 发送者和接收者都不需要使用硬件流控制。请记住,主机和 XBee 之间的串行连接只会影响这些设备之间的通信——它不会影响网络上的其他主机。您可以让 XBee 模块使用不同的波特率,带或不带流量控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 2011-08-27
    • 2015-12-27
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多