本帖最后由 辉哥的歌 于 2016-5-4 00:06 编辑
1. 引言 第3讲“我的’潘多拉魔盒’ 3- USB无线网卡和VNC远程登陆”中,我们已经可以从笔记本电脑端远程登陆NanoPi M2,从而可把7寸的触摸屏去掉了。这样带来3个好处:
1) 省去了一个屏幕的空间和重量,明显轻巧化了NanoPi M2作为控制器的系统;
2) 直接使用笔记本的键盘和鼠标就可以对NanoPi M2进行操作,从而更具可操作性;
3) 屏幕去掉之后,CPU S5P4418的温度明显下降了,加上小的散热片手触不烫。
为了进一步完成我的项目“智能车多功能遥控器开发”,我需要使用NanoPi M2的GPIO做控制操作和状态反馈的输入,以及无线串口
通信的输出。为了加快开发进度,简化开发过程,并不希望涉及GPIO的底层驱动开发。根据使用RaspberryPi 2B的经验,我决定使用Python作为开发语言,还有一个原因是Python有丰富的第三方库。本节原计划做Python IDE的安装和使用,但让人惊喜的是所装的Debian系统自带了Python 2.7可以直接使用,而需要做的就是安装Python第三方的GPIO驱动,而在安装过程发现,直接用NanoPi M2下载gpio 0.1.2库总死机,根本下载不了,而我手里也没有优盘。从而不得不在GPIO开发之前实现笔记本电脑和NanoPi的文件传输。因此,有了本节的两大内容:
1) Samba服务器的搭建;
2) GPIO开发初探。
2. Samba服务器的搭建 其实,关于Samba服务器的搭建在《创客秘籍》和之前NanoPi2的试用报告中均有涉及,其中大神级烧友3guoyangyang7在“跟着小狂玩nanopi2之家庭服务器篇”中有较为详细的描述。
1)创客秘籍下载:http://wiki.friendly
ARM.com/wiki/index.php/NanoPi_M2/zh
本文则是站在巨人的肩膀上,进行了细化,把可能遇到的问题细节顺便再强调一下:
第1步,远程登陆VNC:通过putty登陆到NanoPi M2,效果如图1所示,过程不明的请参考第3讲“我的’潘多拉魔盒’ 3- USB无线网卡和VNC远程登陆”:
图1 通过Putty远程登陆NanoPi M2
第2步,下载安装Samba文件:输入命令sudo apt-get install samba samba-common-bin回车即可,有个前提强调一下:就是NanoPi M2一定要一定连上网络(可参考第3讲)。
图2 安装samba文件命令
第3步,建立用于共享的文件夹:
创建命令:mkdir /home/fa/share 回车
然后可从VNC上打开窗口界面(参见第3讲),可检查/home/fa下是否存在这个share的文件夹,如过存在,说明建立成功。当然也可以直接在窗口界面下直接建立共享文件夹,和windows系统建立方法一样(见图3),这里就不多赘述。
图3 直接在窗口模式下建立共享文件夹
第4步,配置Samba服务器目录文件:
使用命令:vi /etc/samba/smb.conf (如图4),回车后打开smb.conf的配置文件如图5所示,然后根据命令窗口最下方的提示按E键进入文件内部。使用上下左右键,将光标移动到图6所示位置,加入图6所示光标下方的一段命令。这里需要强调一下:在输入命令之前需使用Insert键,切换到可编辑的模式后才能输入(见图7),编辑完成后需使用ESC键退出编辑模式,然后直接输入“:wq”命令回车(见图8),即可保存编辑后退出smb.conf的配置文件。
图4 输入打开smb.conf文件的命令
图5 打开smb.conf文件
图6 进入文件内部后移动光标至此处
图7 使用Insert键切换到编辑模式添加图示[share]及下面一段命令
图8 使用ESC键退出Insert模式后输入 :wq 命令退出文件
其中,Path是步骤3中所建立的共享文件的路径,validusers是设置一个用户名,需要强调的是:这个用户名将要用于windows系统登录samba服务器时使用。
第5步,创建Samba用户名并设置密码
使用命令:smbpasswd -a fa 回车后即完成登陆密码设置,且密码为:fa,如图9所示。当然你也可以设置成其它密码,只要自己能记住就行。
图9 设置samba服务器登陆密码为fa
此式samba服务器的用户名和密码都设置完毕了,在第8步从笔记电脑端第一次登陆时需要用到:
用户名:fa
密码:fa
第6步,赋予修改权限,重启samba服务
在设置完成账户密码后需赋予share文件夹修改权限,否则以后只能看到文件夹却不能拖入文件,这里可
使用命令:chmod 777 -R /home/fa/share 回车即可
使用命令:/etc/init.d/samba restart 回车即可完成重启
第7步,从笔记本电脑端登陆samba共享文件
在笔记本电脑的windows系统下,打开网络,即可看到NANOPI2的图标,如图10所示。
这里需要强调的是:在此之前请确认你的电脑在你所连接的wifi网络下启用了网络共享的功能,如图11所示。
图10 打开网络可以看到NANOPI2图标
图11 启用文件和打印机共享
第8步,从笔记本端下载gpio 0.1.2驱动库文件并拷入到共享文件
第一次打开NANOPI2图标,会显示登陆的用户名和密码,按照第5步设置的填入即可,如图12所示。
图12 第一次登陆请输入用户名和密码
第9步,确认该文件已经到NanoPi M2的存储目录中
登陆完成后,就可以打开NANOPI2的图标看到所建立的share文件夹,如图13所示。然后将gpio-0.1.2.tar.gz和其它你想共享到NanoPi M2的文件直接拖入share文件夹即可,如图14所示。
图13 打开NANOPI2图标可看到share文件夹
图14 将gpio-0.1.2.tar.gz文件拖入share文件夹
然后从NanoPi M2系统中可以看到,共享的文件已经在share文件夹中了,如图15所示。
图15 文件成功共享至NanoPi M2中
同时连接到该wifi网络下的其他设备,如手机也可以将文件进行共享,如图16所示。
图16 手机共享成功
3. GPIO开发初探 通过samba服务器搭建,完成了电脑端到NanoPiM2端的文件传输,从而将GPIO的驱动库文件gpio-0.1.2.tar.gz在无需第三方存储设备情况下,共享到NanoPi M2中。接下来就可以进行GPIO的开发使用了。
(1) 下载GPIO驱动库
使用笔记本电脑端(台式机也行),登陆网址:https://pypi.python.org/pypi/gpio/0.1.2
直接下载即可,并有相关的使用函数介绍。
图17 登陆网址下载gpio-0.1.2bar.gz库
(2) 安装GPIO驱动库
具体安装步骤如下:
1) 使用命令:cd /home/fa/share 切换到share目录下;
2) 使用命令:ls 查看share文件夹的所有文件;
3) 使用命令:tar -zxvf gpio-0.1.2.tar.gz解压gpio-0.1.2.tar.gz文件;
4) 使用命令:ls 查看share文件发现多了一个gpio-0.1.2 文件夹说明解压成功;
5) 使用命令:cd gpio-0.1.2 进入文件夹;
6) 使用命令:ls 查看gpio-0.1.2文件夹中的内容,发现有setup.py文件;
7) 使用命令:python setup.py install 安装GPIO的驱动库。
所有命令及效果如图18所示(python setup.py 后落下了 install ,请自行加上)。
图18 解压GPIO库文件
(3) GPIO初步开发示例—流水灯
1) 硬件准备及接线
所需硬件为:3个Led灯,3个电阻200Ω~ 500Ω都可以,还有四根公母排线。然后接线如图19所示。
图19 Led灯与NanoPi M2的GPIO接线图
图20 插线的GPIO的接口号如红圈所示
2) python程序编写
程序编辑有两种方式:第一是在shell中直接创建文件夹目录和程序文件;第二是在窗口模式下使用gedit文档编辑。这里主要介绍第一种,因为第二种很简单,直接打开编辑器,把程序写进去即可,文件后缀名改为.py。
在shell中使用python编程步骤如下:
a) 使用命令:mkdir /home/fa/python 创建一个名为python的文件夹;
b) 使用命令:cd /home/fa/python/ 切换到python文件夹下;
c) 使用命令:vim Led.py 创建Led.py的文件,并进入脚本编辑模式(使用Insert键):
d) 编辑程序代码如附录I所示;
e) 退出脚本:先使用ESC键退出Insert模式,再输入命令“:wq”回车即可
f) 在shell中调用脚本:python /home/fa/python/Led.py
所得效果如图21~23所示,三个灯逐个点亮,并循环十次后全部熄灭。
图21 第一个等点亮
图22 第二个灯点亮
图23 第三个灯点亮
图 24 循环点亮效果
附言:由于本节内容较多,可能出现编辑错误,如有任何问题还请大家多多指教!
附 录 I
流水灯python 源程序:
#!/home/fa/python
import gpio
led1 = 63 # 32 + GPIO31 = 63
led2 = 72 # 64 + GPIOC8 = 72
led3 = 71 # 64 + GPIOC7 = 71
Led = [led1,led2,led3]
for x in range(3):
gpio.setup(Led[x],'out')
for x in range(10):
gpio.set(Led[0],1)
gpio.set(Led[1],0)
gpio.set(Led[2],0)
time.sleep(.5)
gpio.set(Led[0],0)
gpio.set(Led[1],1)
gpio.set(Led[2],0)
time.sleep(.5)
gpio.set(Led[0],0)
gpio.set(Led[1],0)
gpio.set(Led[2],1)
time.sleep(0.5)
print 'good bye'
gpio.set(Led[0],0)
gpio.set(Led[1],0)
gpio.set(Led[2],0)
print 'OK'
0