从PC传输文件给树莓派是我们通信的重要意义,这样才能将我们需要的交叉编译好的可执行文件传送给树莓派,让它执行任务,达到我们的目的要求。这一节我们就传输的各种方式进行比较,看看哪种是我们所需要的高效的方法。
器材
硬件
- 实验主板一块,raspberrypi(树莓派);
- 5V/1A电源一个;
- microUSB线一根;
- USB-TTL串口线一根(FT232RL芯片或PL2303芯片)。
自备器材:
- PC(Windows 10)一台;
- ENDUP无线USB网卡;
- 迷你无线路由器;
软件
- PC上的sftp访问软件,windows下使用FileZilla
- PC上串口传输文件的工具,使用超级终端HyperTRM
步骤
1. 配置SAMBA客户端
我们开始对samba进行最基本的配置,即利用samba来实现电脑读写树莓派间上指定文件夹内的文件,我们先使用下面命令在树莓派上安装SAMBA
sudo apt-get install sambasudo apt-get install samba-common-bin
安装完成后,我们在/etc/samba/文件夹中找到SAMBA的配置文件smb.conf,我们只需要一个简单smb.conf。可以输入下面的内容:
#设置全局的SAMBA日志存放的地方[global] log file = /var/log/samba/log.%m#设置共享的临时文件夹的物理路径和各种属性[tmp] comment = Temporary file space path = /tmp read only = no public = yes
保存完毕后输入命令sudo /etc/init.d/samba restart
重启samba服务,此时由于还没创建samba用户,我们还需要设置SAMBA支持的用户。在/etc/samba/文件夹下建立smbpasswd文件,使用命令sudo touch /etc/samba/smbpasswd
再给samba添加用户名为pi的用户,使用命令sudo smbpasswd -a pi
,设置好登陆密码,然后此时会显示添加成功。
此时再PC端打开网上邻居(win10是网络),可以看到raspberry:
输入设置好的用户名与密码:
这时可以进去了,会发现我们设置好的共享文件夹(这里为主目录下的tmp文件夹)。
我们可以传输一个txt文件进去:
然后在SSH终端查看,发现已经文件已经传输到了树莓派上:
2. 不同文件传输方式的比较
下面我尝试各种与树莓派传递文件的方式,并且做比较。采用的传递文件方式有:
- 通过SAMBA共享;
- 通过sftp传递;
- 通过串口XModem协议传递;
经测试他们的对比如下:
传递方式 | 速度 | 可靠性 | 易用性 |
---|---|---|---|
SAMBA | 快 | 安全性一般,传输稳定 | 需要一定的配置工作 |
sftp | 中等 | 经过加密,安全可靠 | 非常易用(windows下) |
串口XModem | 慢 | 安全,传输非常不稳定 | 难以使用 |
下面是它们传输文件的过程:
(1)SAMBA
前面已经做了示范,这里就不再重复了。
(2)sftp
windows下直接使用FileZilla进行传输,打开FileZilla,输入树莓派的IP地址和密码:
连接后即可看到里面的文件架构,传输一个文件进去:
(3)串口XModem
首先我们需要禁止树莓派本身的串口命令行界面,让它先把这个控制台释放开,让系统不占用串口。使用命令sudo vi /etc/inittab
打开并注释掉这一行:
#Spawn a getty on Raspberry Pi serial lineT0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
然后sudo reboot
重启。随即开机后立即安装串口工具minicom。使用指令sudo apt-get install minicom
,然后用指令minicom -D /dev/ttyAMA0
打开minicom。先按Ctrl+A,再按Z,调出命令介绍界面。
接收文件是R,按提示按R。此时会让你选接收文件的协议
我们选择xmodem,然后会提示让你输入文件名。输入我们要传输的文件名,然后此时我们可以看到minicom已经在串口不断地尝试去接收文件了。
在PC端,我们在windows使用超级终端去发送文件:
选择文件发送即可(经测试实际上根本无法发送成功=。=)。
另,在SSH终端下也是可以直接传输文件的,通过scp命令即可:
从服务器上下载文件
scp [email protected]:/path/filename /var/www/local_dir(本地目录)
例如scp [email protected]:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)
上传本地文件到服务器
scp /path/filename [email protected]:/path
经实践,个人认为除了串口其他都是可以参照传输文件的方法。