本书涉及的部件很多,都有自己独有的开发和运行环境,包括STM32开发板的Python环境、树莓派Python环境、Linux服务器Python环境等。由于开发板、服务器并不是每个读者都容易获取的资源,因此搭建Python环境最直接的方式是在个人计算机上安装Linux环境。
Python是跨平台的编程语言,能够在Windows、Mac、Linux等多个平台上运行。此处的环境指的不仅是Python开发环境,也是Python运行环境。需要注意的是,本书内容涉及的范围很广,在后续的章节中还需要使用Linux环境进行网关嵌入式环境的搭建、嵌入式交叉编译等知识的讲解,以及Linux环境模拟后台服务器的开发和测试。本书通过在个人计算机上安装VMware运行Ubuntu(Linux的发行版)的方式搭建Linux Python环境,为了环境的一致性和便利性,建议读者安装同样的Python开发环境。
VMware(Virtual Machine ware)使得在Windows平台上运行Linux系统成为现实。与安装双系统的方式相比,VMware采用完全不同的概念。双系统在同一个时刻只能运行一个系统,在系统切换时,需要重新启动计算机。VMware可实现真正的“同时”运行,多个操作系统在Windows平台上,就像标准的应用程序那样可任意切换。每个操作系统都可以进行虚拟分区、配置而不影响真实的硬盘数据,非常适合学习和测试。
进入VMware官网下载VMware Workstation11,按照提示信息一步一步地完成安装即可。初次启动VMware的界面如图2.1所示。
图2.1 初次启动VMware的界面
进入Ubuntu官网下载桌面版Ubuntu,版本为Ubuntu15.04。
在VMware的初始界面上单击“创建新的虚拟机”开始进行Ubuntu的安装,在弹出的界面上默认选择“典型”后,单击“下一步”进入操作系统映像选择界面。
在如图2.2所示的界面上选择之前下载的后缀为iso的ubuntu映像文件:ubuntu-15.04-desktop-i386.iso后,单击“下一步”,在出现的新界面上完成用户名和密码的设置,继续按安装向导完成剩余步骤的设置和安装。Ubuntu安装成功之后,输入设置好的用户名和密码登录系统,此时,通过Ctrl+Alt+T组合键即可打开命令行终端。至此,读者已成功打开了Linux世界的大门!
图2.2 操作系统映像选择界面
此时估计读者已迫不及待地想要开始编写代码了,不要着急,工欲善其事,必先利其器,接下来还需要对开发环境进行一些必要的配置。这些配置能够让读者在开发过程中如虎添翼。
VMware Tools是VMware Workstation自带的一款工具。它的作用就是可以将文件由主机直接拖到虚拟机。如果不安装,则无法实现虚拟机和主机之间的文件传输,操作虚拟机时,在主机和虚拟机之间必须使用Ctrl键切换;如果安装了,就不需要使用Ctrl键切换,直接退出即可,使虚拟机真正成为计算机的一部分。
在VMware Workstation的“虚拟机(M)”选项列表中单击“安装VMware Tools(T)”进行安装。需要注意的是,虚拟机必须处于运行状态才能安装,否则安装选项是灰色的,无法被选中,如图2.3所示。
图2.3“安装VMware Tools(T)”选项界面
在安装完成之后,再次查看,选项应当变为“重新安装VMware Tools(T)”,表示VMware Tools已经安装成功,如图2.4所示。
图2.4 VMware Tools安装成功界面
本书在后续服务器开发的章节中会使用Ubuntu模拟真实服务器进行物联网服务器程序的开发和测试,并将开发完成且测试通过的代码部署在真实服务器上。此外,由于在Python的程序开发过程中会频繁地从互联网上下载第三方类库,因此需要对虚拟机的网络进行适当的配置,以满足对开发环境的要求。虚拟机的网络配置需要实现两个功能:
· 能够使树莓派、个人计算机、虚拟机三者互相通信;
· 虚拟机能够访问外网。
桥接模式和NAT模式的区别
虚拟机的网络配置比较常用的两种网络模式分别是桥接模式和NAT模式。
桥接模式:桥接模式的网络相当于虚拟机的网卡和主机的物理网卡均连接到由虚拟机软件提供的VMnet0虚拟交换机上,虚拟机和主机是平等的,相当于在一个网络中的两台计算机,当设置虚拟机的IP与主机在同一网段时,即可实现主机与虚拟机之间的通信。在这种模式下,VMware虚拟出来的操作系统就像局域网中的一台独立主机,可以访问局域网中的任何一台计算机。假设树莓派、主机、虚拟机连接在同一个IP地址(192.168.0.1)的路由器下,它们三者的IP处于同一网段,则彼此之间能够互相通信。桥接模式下的网络拓扑如图2.5所示。
NAT模式:虚拟系统借助NAT(网络地址转换)功能,通过主机所在的网络访问公网,也就是说,使用NAT模式可以实现在虚拟系统里访问互联网,简单地讲,就是主机构建一个局域网,在局域网中只有一台计算机,也就是虚拟机。NAT模式下的网络拓扑如图2.6所示。
图2.5 桥接模式下的网络拓扑
图2.6 NAT模式下的网络拓扑
图2.6中,局域网1中有树莓派和主机两台计算机,由主机构建一个局域网2,只有虚拟机一台计算机;局域网1中的其他计算机,如树莓派是无法访问虚拟机的,虚拟机可以与主机进行通信,采用NAT模式的最大优势是虚拟机接入互联网非常简单,只需要主机能够访问互联网,不需要进行IP地址、子网掩码、网关等一系列配置即可实现虚拟机上网。
本书在项目实战的开发过程中会使用虚拟机运行服务器程序,树莓派扮演嵌入式网关的角色,使用主机的浏览器访问服务器提供的Web界面,项目的运行建立在三者能够互相通信的基础之上,显然需要采用桥接模式配置虚拟机的网络。
配置虚拟机的网络为桥接模式
在VMware Workstation的“编辑(E)”选项中选择“虚拟网络编辑器(N)”选项,如图2.7所示。
图2.7 “虚拟网络编辑器(N)”选项界面
在弹出的窗口中单击右下角的“更改设置”后,在新窗口中选中虚拟网卡VMnet0,在“VMnet信息”栏中将其设置为“桥接模式”,“桥接到”的意思是选择主机网卡,此处选择“自动”即可,如图2.8所示。
图2.8 VMnet0桥接模式设置
由于虚拟机会被当作服务器,因此需要将IP地址配置为静态IP,方便开发和测试,进入虚拟机,执行命令vi/etc/network/interfaces,编译如下内容:
执行命令/etc/init.d/networking restart重启网络,使用ifconfig命令查看网络是否配置成功,同时使用ping命令或浏览器验证是否可以访问外网。
有了VMware Tools之后,即可在主机和虚拟机之间进行文件的复制和拷贝,当文件数量非常大时,由于拷贝的工作量巨大无比,因此需要使用一种主机和虚拟机之间文件的共享方式,虽然可以使用共享文件夹的方式实现,但是有一个隐患,就是主机(假设是Windows系统)和虚拟机(Linux系统)之间的文件系统是不兼容的,经常会出现一些问题。笔者不推荐这种方式,而是采用Samba服务来实现主机和虚拟机之间的文件共享。
(1)下载并安装Samba。
在Ubuntu中安装Samba非常方便,执行一条命令即可,即
(2)在Ubuntu中创建共享目录。
例如,在根目录中创建名为share_folder的共享目录,即
此外,需要更改该目录的权限,给予最大执行权限,即
(3)修改Samba的配置文件。
打开Samba的配置文件/etc/samba/smb.conf,在其末尾添加
(4)重启Samba服务。
(5)在主机中添加虚拟机Samba共享目录的磁盘映射。
(6)例如,在Win10系统中,在主机“计算机”地址栏中输入\\192.168.0.4(虚拟机IP地址)后,即可看到名为Share的虚拟机共享文件夹,右键单击Share文件夹选择“映射网络驱动器”选项,在弹出的界面上选择想要设置的盘符(如设置为Z盘),即可将虚拟机中的share_folder文件夹映射为主机中的网络磁盘。
(7)主机的Z盘和虚拟机的share_folder目录等价,如果需要拷贝数量庞大的文件,则放在此目录下即可实现主机和虚拟机的文件共享,且不会出现文件系统或格式异常,非常方便。
在Ubuntu虚拟机中,按下组合键Ctrl+Alt+T打开Linux命令行终端,输入命令python-V,查看当前运行的Python版本。
Ubuntu系统默认的Python版本为2.7.9,本书采用的是Python3,需要进行修改。
进入python命令所在的目录/usr/bin,即
通过ls-l python*命令可以列出当前系统安装好的所有Python版本,且可以看到Python调用的是Python2,需要将其修改为Python3。
首先删除Python命令,即
然后将Python指向Python3,建立它们之间的软链接,即
再次执行python-V查看版本结果,即
至此,整个开发和运行环境已配置妥当。再次重申一下,如果仅仅想要学习Python的语法,那么环境的安装和配置过程非常简单。由于本书不仅仅是讲解Python语法,还包括嵌入式Linux开发、服务器后台程序开发,因此环境安装和配置过程略显繁琐,希望读者能够静下心来一步一步地跟随笔者完成相关的配置。磨刀不误砍柴工!