Skip to content

Latest commit

 

History

History
312 lines (228 loc) · 19.6 KB

File metadata and controls

312 lines (228 loc) · 19.6 KB

1.3 python的硬件知识

​ 本节将讲述linux基础命令、python与开源硬件、常用的python书籍三部分。

​ 之所以把linux基础命令划分到硬件模块有两个原因:1、大多数人学习python时,只有在后期才会使用;2、大多数人仅仅是使用其较少的命令操作,而这些操作从知识层面来讲是没有技术含量的,就像不需要懂电脑底层一样,会使用即可。对笔者而言,主要使用MAC进行日常学习,因此linux仅仅做部分环境使用,它不像上一节的辅助软件工具那样,需要频繁的使用和修改。真正去做linux相关工作的,不能把其划分到硬件领域。

​ 虽然python是高级语言,但不代表其不能与硬件结合。它可以和其他语言搭配进行硬件操作,简化算法;也可以像树莓派那样的开源硬件一样进行事物处理。本书只做介绍,不进行硬件配置学习。

1.3.1 linux基础命令

趣话:1991 年 林纳斯(Linus) 就读于赫尔辛基大学期间,对 Unix 产生浓厚兴趣,尝试着在Minix 上做一些开发工作因为 Minix 只是教学
使用,因此功能并不强,林纳斯 经常要用他的终端 仿真器(Terminal Emulator) 去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,
他自己编写了磁盘驱动程序和文件系统,这些在后来成为了 Linux 第一个内核的雏形。

linux介绍

​ Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的**多用户、多任务、支持多线程和多CPU的操作系统。**它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

​ Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

​ 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。内核源码网址:http://www.kernel.org。所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中。

linux内核版本

​ 内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。Linux 内核版本又分为 稳定版 和 开发版,两种版本是相互关联,相互循环。
稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序。
​ 开发版:由于要试验各种解决方案,所以变化很快。

linux发行版本

​ Linux 发行版(也被叫做 GNU/Linux 发行版)通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。如Ubuntu、Redhat、Fedora、openSUSE、Linux Mint、Debian、Manjaro、Mageia、CentOS、Arch

应用领域

**服务器领域:**Linux 在服务器领域的应用是其重要分支;Linux 免费、稳定、高效等特点在这里得到了很好的体现。早期因为维护、运行等原因同样受到了很大的限制;近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛

**嵌入式领域:**近些年来 Linux 在嵌入式领域的应用得到了飞速的提高。Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广。

linux常用命令

最常用的7个命令

序号 命令 对应英文 作用
01 ls list 查看当前文件夹下的内容
02 pwd print wrok directory 查看当前所在文件夹
03 cd [目录名] change directory 切换文件夹
04 touch [文件名] touch 如果文件不存在,新建文件
05 mkdir [目录名] make directory 创建目录
06 rm [文件名] remove 删除指定的文件名
07 clear clear 清屏

一些常用命令的选项参数说明

ls命令:查看目录下文件信息
参数 含义
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合 -l 以人性化的方式显示文件大小
cd命令:切换目录
命令 含义
cd 切换到当前用户的主目录(/home/用户目录),用户登陆的时候,默认的目录就是用户的主目录。
cd ~ 切换到当前用户的主目录(/home/用户目录)
cd . 切换到当前目录
cd .. 切换到上级目录
cd - 可进入上次所在的目录
rm命令:删除文件
参数 含义
-i 以进行交互式方式执行
-f 强制删除,忽略不存在的文件,无需提示
-r 递归地删除目录下的内容,删除文件夹时必须加此参数
mv命令:移动或重命名
参数 含义
-f 禁止交互式操作,如有覆盖也不会给出提示
-i 确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件
-v 显示移动进度
cp命令:拷贝
参数 含义
-a 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-f 已经存在的目标文件而不提示
-i 交互式复制,在覆盖目标文件之前将给出提示要求用户确认
-r 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
-v 显示拷贝进度
grep命令:文本搜索
grep [-选项] ‘搜索内容串’文件名
例:grep 'a' 1.txt
选项 含义
-v 显示不包含匹配文本的所有行(相当于求反)
-n 显示匹配行及行号
-i 忽略大小写

find命令:查找文件

示例命令 含义
find ./ -name test.sh 查找当前目录下所有名为test.sh的文件
find ./ -name '*.sh' 查找当前目录下所有后缀为.sh的文件
find ./ -name "[A-Z]*" 查找当前目录下所有以大写字母开头的文件
find /tmp -size 2M 查找在/tmp 目录下等于2M的文件
find /tmp -size +2M 查找在/tmp 目录下大于2M的文件
find /tmp -size -2M 查找在/tmp 目录下小于2M的文件
find ./ -size +4k -size -5M 查找当前目录下大于4k,小于5M的文件
find ./ -perm 777 查找当前目录下权限为 777 的文件或目录

tar命令:归档

tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。

 tar [参数] 打包文件名 文件
参数 含义
-c 生成档案文件,创建打包文件
-v 列出归档解档的详细过程,显示进度
-f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
-t 列出档案中包含的文件
-x 解开档案文件

gzip命令:解压缩

tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。

gzip  [选项]  被压缩文件

解压: tar zxvf 压缩包包名    

压缩: tar cvzf 压缩包包名 文件1 文件2 ...
选项 含义
-d 解压
-r 压缩所有子目录

chmod命令:修改权限

字母法:chmod u/g/o/a +/-/= rwx 文件
数字法:chmod 777 文件
[ u/g/o/a ] 含义
u user 表示该文件的所有者
g group 表示与该文件的所有者属于同一组( group )者,即用户组
o other 表示其他以外的人
a all 表示这三者皆是
[ +-= ] 含义
+ 增加权限
- 撤销权限
= 设定权限
rwx 含义
r read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。
w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。
字母 说明
r 读取权限,数字代号为 "4"
w 写入权限,数字代号为 "2"
x 执行权限,数字代号为 "1"
- 不具任何权限,数字代号为 "0"

1.3.2 python与开源硬件

python与开源硬件之间的关系

硬件平台 操作系统 python运行环境
普通PC windows 安装windows版本python后的运行环境
普通PC Linux linux一般都自带python运行环境
普通PC Mac Mac自带python运行环境
pcDuino Lubuntu 自带python运行环境
树莓派(Raspberry) Arch Linux 自带python运行环境

开源硬件定义

​ 先看一下开源软件的定义:它被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制。开放源码软件通常是有copyright的,它的许可证可能包含这样一些限制: 蓄意的保护它的开放源码状态,著者身份的公告,或者开发的控制。什么意思呢?就是说,尽管它有版权,但是将软件的源代码公开,本着共享的精神,使得他人可以借鉴和使用;如果软件有bug,他人可以指正;任何人都可以将自己的研究成果加入其中,促进其发展。

​ 开源硬件类似开源软件,不同之处在于,开源硬件是把硬件的源代码公开,即公开硬件开发板源码。其中包括硬件原理图、机械绘图、物料清单、板子布局、硬件模块设计和电路图。软件开发人员根据这些公开的信息,可以自由的折腾,搭建自己的硬件应用系统——通过搭接以及软件编写完成指定功能。

​ 实际上,在最早的时候硬件都是开源的。包括打印机、电脑、甚至苹果电脑,他们的整个设计原理图是公开的。在上个世纪六七十年代的时候,很多公司在思考“为什么要开放自己的资源”。于是,在那一时期很多公司都选择闭源。这种情况再加上很多的贸易壁垒、技术壁垒、专利版权等,就出现了不同公司之间的互相起诉,类似于三星和苹果那样。这种做法在一定程度上有利于创新,但是会阻碍小公司创新者或者个体创新的发展。

​ 2005年冬季Arduino诞生,作为一款便携灵活、方便上手的开源电子原型平台,能够通过各种各样的传感器来感知环境并做一些操作。我们熟知的ARM芯片便是它的杰作。

常见的开源硬件

Arduino

​ Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。

​ 它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。

​ Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是通过 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。

​ 趣话:Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,该酒吧是以1000年前意大利国王Arduin的名字命名的。为了纪念这个地方,他将这块电路板命名为Arduino。

​ 其特点为:

**跨平台:**Arduino IDE可以在Windows、Macintosh OS X、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
**简单清晰:**Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 avr-gcc库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。
**开放性:**Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
**发展迅速:**Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。

​ 因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。

树莓派

​ Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。自问世以来,受众多计算机发烧友和创客的追捧,曾经一“派”难求。别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全”。

​ 它是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100 以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。 Raspberry Pi B款只提供电脑板,无内存、电源、键盘、机箱或连线。

pcDuino

​ pcDuino是一种高性能,高性价比的迷你PC的平台,能够运行PC操作系统,如Ubuntu和Android的ICS等。它可以通过内置HDMI接口输出视频到电视或显示器屏幕。

​ pcDuino专门针对开源社区快速增长的需求,即希望有一个平台可以运行完整的PC操作系统,容易使用的工具链和兼容流行的Arduino开放的生态系统,如Arduino shield和开源项目等。

​ pcDuino的硬件性能指标远超树莓派,性能稳定,做工精良。pcDuino迷你计算机的CPU采用1GHz ARM Cortex A8内核,DRAM为1GB,板载存储达到2GB Flash, 完全兼容Arduino接口。另外,pcDuino 可以从NAND或者从mini-SD卡(TF卡)启动,在NAND Flash内有出厂预装了ubuntu系统,拿到手即可使用。

可在pcDuino上用python实现一些应用,比如
在pcDuino上通过网页的形式控制LED灯的开关:即实现一个web服务器,并实现各种彩灯闪烁的效果等。
在pcDuino上运行simpleCV实现图像处理时,可以使用python库函数simpleCV来实现图像处理
,包括摄像头采集数据与处理,可以比肩Photoshop了。
在pcDuino上用python语言实现远程无线视频监控等等。

1.3.3 python学习使用的一些书籍

​ 在python学习中,建议大家尽可能的阅读和查询官方文档,这样可以更好的帮助我们。除此之外,本节主要介绍了笔者学习和工作中经常查阅的一些书籍,此处声明本书也综合学习借鉴了这些书籍的讲解,通过分类列出,供大家按需查询。

基础学习
《21天学通python》
《python硬件编程实战》
《python学习手册》第四版
《python标准库》
《python袖珍指南》第五版
《用python重写了C语言经典100例》
《编写高质量代码——改善python程序的91个建议》
《python Cookbook》第三版英文
高级学习
《python核心编程》第三版
《正则表达式必知必会》
《python网络编程基础》
《python web开发学习实录》
《数据结构与算法 python语言描述》
《python自动化运维技术与最佳实践》
《深入python3》
《python编程实战——运用设计模式、并发和程序库创建高质量程序》
《Diango Web开发指南》
《the Diango book 2.0》
《Flask web开发:基于python的web应用开发实战》
《shell脚本学习指南》
数据分析
《利用python进行数据分析》
《python科学计算》第三版
《python数据分析基础》
《常用数据挖掘算法总结及python实现》
《贝叶斯思维:统计建模的python学习法》
《python数据可视化编程实战》
《python金融大数据分析》
《量化投资以python为工具》
爬虫
《python网络爬虫实战》
《Beautifulsoup4官方英文文档》
《用python写网络爬虫》
《learning scrappy》
机器学习
《使用python分析社交网络数据》
《deeplearnbook0.5》
《机器学习》马志华
《Tensorflow实战Google深度学习框架》
《headfirst-tensorflow》
《Hands-On Machine Learning with Scikit-Learn&TensorFlow》
《Fundamentals of Deep Learning》
《机器学习系统设计 python2014》
《深度学习》(Ian Goodfellow)