自学python单片机编程-用Python语言控制单片机-可编程逻辑-与非网

早年,虽然 Python 是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言。遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼。

然而今时不同往日!

硬件圈同样非常关注Python!

说到 Python用于硬件开发。很多人可能想到的是树莓派等支持 linux 系统的(树莓派和 Arduino 应用 Python 的的例子实在是多,比如,利用 Raspberry Pi 的硬件和 Python 语言来完成一个机器人制作。),然而现在 Python 已经完全可以脱离系统,直接进行单片机的开发了。

用 Python 语言控制单片机

MicroPython 是在单片机上可以跑的 Python,你可以通过 Python 脚本语言开发单片机程序。MicroPython 基于 ANSI C,语法跟 Pyton 3 基本一致,拥有自家的解析器、编译器、虚拟机和类库等。目前它支持基于 32-bit 的 ARM 处理器,比如 STM32F405、STM32f407 等,也就是说 ARM 处理器 STM32F405 上直接可运行 Python 语言,用 Python 语言来控制单片机。

借助 Micro Python,用户完全可以通过 Python 脚本语言实现硬件底层的访问和控制,比如说控制 LED 灯泡、LCD 显示器、读取电压、控制电机、访问 SD 卡等。

下面这篇美国 EDN 发布的文章,介绍了 Python 在实时嵌入式系统中扮演的角色:Python's role in developing real time embedded systems。

Python 具有良好的跨平台性,比如 Linux 和 Windows,或是诸如 Raspberry Pi 等单板计算机。不过,随着 Python 的日益普及,人们可能会问,在实时嵌入式系统中是否也有 Python 的一席之地。答案是肯定的。下面是开发人员发现 Python 在实时嵌入式系统开发中有可能扮演的五个主要角色。

作用# 1 设备调试和控制

在嵌入式软件开发过程中,开发人员常常需要分析总线通信量,如 USB、SPI 或 I2C。有的分析仅仅是出于调试目的,但有时则需要控制总线分析仪并发送信息至嵌入式系统。许多总线分析仪和通信工具都有友好的用户接口,可以用来控制工具。他们通常还提供一种方法来开发脚本,也可以用来控制工具。Python 是一种普遍支持的脚本语言,有时则是一些工具的接口,或是用来控制工具。

作用# 2–自动化测试

通过 Python 控制工具在嵌入式系统中发送和接收消息的能力,使得利用 Python 构建自动化测试(包括回归测试)成为可能。Python 脚本可以设置嵌入式系统进入不同的状态,设置配置文件,并测试所有可能的干扰以及系统与外部环境的相互作用。使用 Python 开发自动化测试的好处是,回归测试可以开发持续测试并训练系统。任何的代码变动导致的 bug 或不合格的结果都将被实时的检测出来。

作用# 3–数据分析

通过 Web 简单地搜索 Python 库,你会发现,有许多免费强大的 Python 库都可以用来开发应用程序。Python 可以用来接收非常重要的嵌入式系统数据,然后存储到数据库或是本地进行分析。开发者还可以使用 Python 开发实时可视化功能来展现临界参数,或是存储这些参数用于后续分析。使用 Python 进行数据分析的优点之一是当基础性工作完成之后,新功能的植入会显得比较简单。

作用# 4–实时软件

Python 已经证实了自己的强大性和易使用性,甚至发现它是作为一门编程语言进入实时嵌入式系统。是的,嵌入式软件本身就是用 Python 写的而不是 C/C++。用于实时软件最广泛的 Python 版本是 MicroPython,大多是设计在 ARM Cortex-M3/4 微控制器上运行。MicroPython 并不孤立。Synapse 和 OpenMV 公司在嵌入式系统中既使用 MicroPython 也使用他们自己的 Python port。对 MicroPython 感兴趣的读者可能对 DesignNews(EDN 的姐妹机构)的继续教育课程也感兴趣。

作用# 5–学习面向对象编程

Python 是一门免费的编程语言,可以跨多个平台使用,对于学生和非编程人员而言比较简单。该语言与 C 语言不同,它也是现代式的,并且可以在自由形态的脚本类型中结构化,或是作为一个复杂的面向对象的体系结构。Python 本身也很灵活。甚至还有这种情景:没有编程经验的电气工程师可以利用 Python 写出有用的测试脚本或用最少的时间实施电板检查。

Python 的学习曲线并不陡峭,熟悉 Python 学习曲线的开发人员发现,当你有了其它语言的基础之后,学习 Python 比学习任意其他的编程语言都要简单。出于这些原因,当开发人员看到 Python 扮演着编程孵化器角色,并吸收其它缺乏经验的工程师对宜早不宜迟的设计周期做出贡献时,不应该感到惊讶。

什么?Python+FPGA!?

夏宇闻老师几个月前在微信上推荐了一个帖子,说的是有人用 Digilent 的 PYNQ-Z1 板卡实现了超强的加速性能。

早年,关于 FPGA 的开发都是基于硬件描述语言,从开始的 VHDL 到现在更为流行的 Verilog,软件应用也从由最开始的汇编语言发展到现在的 c/c++实现,这些都是目前为大多数 FPGA 开发者所熟悉的 FPGA 发展路程。上个月,IEEE 收录了一篇关于使用 Python 开发 FPGA 应用的论文。

在美国纳帕举行的第 25 届关于可编程计算机器领域 IEEE 国际讨论会上,一篇名为"评估通过 Python 快速开发异构处理器 FPGA 应用性能”的短篇论文获得了最佳短篇论文奖。这篇论文主要讨论了 Python 开发 FPGA 应用的优势和效率,论文中针对 Digilent 的 PYNQ-Z1 板卡(内部集成一个 Xilinx Zynq SoC),通过支持 Python 编程和 Jupyter Notebooks 框架的 PYNQ 开发环境,应用 Python 对此板卡进行开发编程,并最终评估开发结果的优势和效率。值得一提的是,发表这篇论文的作者都是业界大佬,包括高级计算机科学家 AndrewG.Schmidt、计算机科学家 Gabriel Weise 以及来自美国南加州大学工程技术科学协会的研究室主任 Matthew French。在论文中,Matthew French 教授主要就利用 PYNQ 开发环境,应用 Python 语言对 Xilinx Zynq 器件进行编程应用开发时对 FPGA 器件的影响、性能结果以及瓶颈影响进行了评估。此外,各位教授就基于 Python 的开发结果与已经存在的基于 C 语言的开发及手动开发结果进行了比较分析。

在论文中,各位教授还对 PYNQ 开发环境的优缺点进行了阐述:

首先来说,PYNQ 应用开发框架是一个开源的开发环境,提供了标准的可以约束芯片 I/O 引脚的"Overlay”比特流,同时,开发人员可以在此开发环境中,利用 Python 对 FPGA 进行快速编程开发。此外,PYNQ 开发环境内部集成标准的编程范式,支持 HDMI 和视频流的输出输出,同时具有两组 12pin 的 PMOD 连接器和一个兼容 Arduino 的连接器(可以连接或配置为 Arduino 系列板卡)。其中,默认的 overlay 中实例化了多个可以驱动多 I/O 接口的微 Blaze 处理器核,也可以配置一些支持图像滤波功能和试验 SIMT(单指令,多线程)编程软逻辑 GPU 的 overlay。同时,PYNQ 也提供了支持比特流编程的 API 和可扩展的通用 Python 库和包,并且可以通过存储映射 I/O(MMIO)直接寻址可编程逻辑单元,另外还支持 DMA 交易(不需要经过器件驱动和核模块之间的不断握手确认)。

其次,就目前来说,PYNQ 还不支持任何高级的综合,也无法将 Python 应用直接移植到 FPGA 中。这就意味着,开发者依然原型必须使用 FPGA 来创建一个设计,即当 PYNQ 提供一个支持板卡 IO 接口的 Overlay 框架以时,任何用户逻辑依然必须由开发者亲自创建并综合。不过,开发者仍然可以使用高级综合工具或上面提到的 Python-to-HDL 工程来完成这个任务,但是最终,开发者依然需要基于此设计并创建一个整合了 Python 代码比特流文件。

也正是由于 PYNQ 存在这方面的缺陷,论文的作者并没有简单依赖现存的 PYNQ API 接口和 overlay,他们开发出一个基于 Redsharc 项目的特定应用程序内核进行研究。

结果如何呢?论文最后,作者对给出了 Python 开发 Zynq 应用的各项评估结果。结果中给出了通过 c/c++实现这项研究的一般图像处理管道性能,以及定制的硬件加速器和 Python 实现的性能结果(下图所示),帮助我们更好地理解了 Python + FPGA 开发环境的性能和能。表中可以看出,结果十分明显,通过 PYNQ 实现较 c 实现速度提高了 30 倍之多,更甚者,从结果中可以看出,当 Python 实现时有更加有效的可用库时,比如 OpenCV,其性能可以增长更多。

5b5fc164e0193-thumb.png

Python 软件实现和 FPGA 性能潜力的结合是一个非常有意义的工作,将会开创出一个类似于树莓派和 Arduino 的广大的开发者社区。Python+FPGA 是一个广阔的未经勘察过的领域——一个全新的更加高效的开发空间——通过 PYNQ 开发环境将会吸引更多的系统开发者加入的领域。

日前在赛灵思 OPENHW2017 创新大赛暨教师峰会上,北京理工大学嵩天副教授《Python 编程语言和 PYNQ 在中国》的演讲,科普了 Python 编程风靡全球的原因。

Python 编程语言举例,只用了 21 行代码就完成了一个图像素描的处理,Python 大大提升了开发效率。

5b5fc164e30fd-thumb.png

5b5fc1661681f-thumb.png

人工智能和机器学习走热,让 Python 从众多编程语言中脱颖而出。

5b5fc1653a457-thumb.png

5b5fc165a8b77-thumb.png

5b5fc165788b7-thumb.png

还等什么呢?

人生苦短,我用 Python

附 11 大编程语言薪资排行榜

编程语言有很多,但并非每一种的需求或工资都相同。人工智能和机器学习走热,让 Python 从众多编程语言中脱颖而出。下文将综合各种信源,以不同编程语言在美国市场的相关薪资水平、人气和前景,为你提供一些参考。

薪资水平

使用国外招聘网站 Indeed.com 将编程语言的薪资水平划分为 9 档:基于这个结果,Ruby/Ruby on Rails 看起来会让你挣得最多,而 Python,C++,iOS 和 Java 也是体面的选择。如果薪资是你的主要关注点,那么也许 C,PHP 和 SQL 不是最理想的选择……

5b5fc16594fb3-thumb.png

而下面是来自 gooroo.io 的数据,根据每条招聘启事给出的薪酬范围取了平均数:懂 Ruby,C++ 或Java 的开发人员看上去起始工资更高。Python 和 Ruby 开发人员的薪资潜力最大,这可能意味着好的 Ruby/Python 开发人员市场缺口相对较大。

5b5fc1660d870-thumb.png

有些人可能对"拜金求职”这种事情比较嗤之以鼻,但是即便你不太关注薪资,每种语言的需求(有多少招聘职位)和供应(有多少开发人员了解语言)情况,你也得多少了解一些吧。

工作需求

根据你熟悉的编程语言找到工作的可能性有多大?以下是来自 Indeed.com 的工作趋势:

可以看到,C,SQL,Java和 Java 在招聘启事中经常被提到,而 C#,C++ 和 Python 也是表现不错的语言。

5b5fc1652da68-thumb.png

另一方面,如果你的目标是在创业公司工作,那么可能 Indeed.com 的工作趋势不是你应该参考最佳的指标。我们找到了 AngelList 网站,这里有更多美国初创公司发布的职位,来看看基于 AngelList 的软件开发人员需要的编程技巧:再一次地,Java 高居榜首。但是,美国创业公司似乎更喜欢 Python 和 Java,对这两者的需求超过了 Ruby(两年前 Ruby 最受欢迎),PHP,C 或 C#。

5b5fc1653be9e-thumb.png

供应情况

我们再来看开发人员这边,根据网站 Codementor 的数据:当然,这个结果并不能准确反映实际市场的情况,但可以作为参考。例如,虽然移动应用业务已经蓬勃发展了一段时间,但 Objective-C 专家仍然很少。由于 Objective-C 开发人员供应不足,他们的薪资自然相对更高。

5b5fc165366fd-thumb.png

另一方面,PHP 在劳动力中的供应量很大,因此雇主有更多的选择,在薪资方面议价能力更强。同时,市场对 PHP 开发人员的需求也不如 Java,SQL或 Java 那么多。 因此,PHP 开发人员普遍收入较少。这个情况也体现在了我们文章一开始的那张图里面(参见图 2)。

Java 是个很特殊的例子。尽管供应量最大,但 Java 开发人员并不处于薪水层的底线。

了解每种语言的需求和供应情况,薪资信息,我们需要看看各大语言前景。

Github 过去 16 年编程语言迁徙:更多人转而使用 Python

一种编程语言将来的发展前景如何?首先,这在很大程度上取决于其社区的发展,因为新鲜血液 / 采用率是使语言受欢迎的保障。因此,让我们来看看人们最感兴趣的语言是什么:

5b5fc165af4d8-thumb.png

根据谷歌搜索,2016 年使用 Python 的兴趣大增。

其次,Github 的项目数量能够从一定程度上体现出语言的流行程度。

5b5fc164ece50-thumb.png

同时,我们还需要注意——开发人员或许有过这样的体验,在挣扎完成第 N 个艰难晦涩的项目后,心想:"我可以用这种语言做这件事,但为什么不换种语言更加愉快地工作呢?”分析了 4500 万 GitHub 用户、393 种不同的语言以及 10 TB 的源代码后,Waren Long 在博客 source{d} 发表博文,用详尽的数据和科学的方法展现了过去 16 年 Github 用户编程语言的大变迁(也就是从一种语言换到另一种语言的情况)。

使用 5 种最流行的语言(Java,C,C ++,PHP,Ruby)其中一种的开发人员,最有可能用切换到 Python,平均 24% 的机率。

5b5fc165b4525-thumb.png

过去 16 年,Python 和 Java 逐渐取代了 C 语言。

5b5fc1653381a-thumb.png

Python 在 2014 年成为美国高校入门课程最受欢迎语言

最后,为了想要学习编程语言的读者,我们简要介绍一下各种编程语言。

I. 动态语言(Dynamic Languages)

动态语言通常更容易让初学者学习,因为它们灵活而有趣。你可以从头开始快速构建一个应用程序,需要的代码数量较少,并且没有硬性规则。由于动态语言通常是非常高级(high level)的语言,所以你会花更少的时间纠结细节,更多的时间学习编程概念,这也是动态类型的语言受初学者欢迎的一个原因,初学者一般都会因能够构建事物和快速看到结果得到反馈而鼓舞。

Java

不要与 Java 混淆了,Java 是主要用于前端开发的客户端脚本语言。Java 在所有浏览器中都兼容,用于创建交互式 Web 应用程序,通常是通过诸如 jQuery 和前端框架(比如 AngularJS,Ember.js,React 等)的库来创建。Java 也可以通过 Node.js 平台用作服务器端语言。过去两年来,Node.js 开发社区已经有了很大的发展,现在你可以在这里找到很多资源。你还可以通过使用诸如 phonegap 这样的框架,用 Java 构建混合移动应用程序。Facebook 的 React Native 能让你使用 Java 构建本地移动应用程序。不过,Java 的难度很高,因为它是无类型的语言,因此很难调试。也有静态类型的版本,比如 Microsoft 的 Type 或 JSX,在 React 上使用。

Ruby

有了 Ruby,开发人员可以很开心地工作。Ruby 的流行得益于 Ruby on Rails 框架,Ruby 与英语很类似,而 Rails 框架(是全栈 Web 框架)有"开箱即用”的工具,让开发工作变得简单。因此,很多人会建议你首先学习 Ruby。Ruby 主要用于后端开发,一些常用大网站,比如 Airbnb,Shopify,Bloomberg,Hulu,Slideshare 都是使用 Ruby on Rails 构建的。

Python

Python 是另一种强烈推荐初学者学习语言,Python 也是美国顶尖大学最受欢迎的入门级介绍语言。开发人员使用 Python 构建桌面应用程序和网络应用程序,Python 也是数据挖掘的好工具。此外,Python 在科学计算,数据分析和生物信息学的学术界尤其受欢迎。Google,Dropbox,Pinterest,Instagram,Reddit,BitTorrent,Civilization IV 等都是用 Python 构建的。

不仅如此,Python 从 2014 年起就成为美国顶级高校入门级课程教学语言(Introductory Teaching Language):

5b5fc165883df-thumb.png

下面是部分美国顶级高校计算机相关课程使用编程语言列表:

5b5fc1656405c-thumb.png

美国顶级高校入门级课程使用编程语言的情况

PHP

PHP 是一种服务器端脚本语言,通常被认为是初学者友好的。要理解 PHP 代码要做什么比较容易,因此 PHP 很容易学。大多数网站都是用 PHP 构建的,因为这种语言是专门针对网络的。Facebook,维基百科,Yahoo!, Tumblr,Wordpress 等都是用 PHP 构建的。

II. 静态语言

使用静态类型的语言构建的应用程序有更高的可扩展性、稳定性和可维护性。静态语言在通过类型检查查找错误时一般更严格,并且需要更多的代码来构建一个原型。游戏引擎、移动应用和企业级后端通常使用静态类型的语言构建。

Java

作为通用语言,Java 用于构建 Android 应用程序、桌面应用程序和游戏。Java 也常用作企业级后端开发的服务器端语言——90% 的财富 500 强公司使用 Java。此外,用于存储和处理大数据的 Hadoop 是基于 Java 的流行框架,Yahoo,Facebook 和 Amazon Web Services 等企业都在用 Hadoop。

C

C 常用于编程系统软件,是操作系统的通用语言(lingua franca)。C 几乎影响了本文中提到的所有编程语言,尤其是 Objective-C 和 C++。所以,如果你知道 C 语言的话,你可能更容易学习其他流行的语言。由于 C 语言需要用更复杂的代码来执行简单的任务,所以初学者如果把 C 语言作为第一语言往往很难保持动力。但是,从长远看,C 语言的知识肯定对你程序员的工作有所帮助。

Objective-C

Objective-C 是建立在 C 语言之上的一层,因此是静态的。话虽这么说,Objective-C 也可以用于动态打字。Apple 的 Swift 是一种静态语言,与 Objective-C 兼容,但它的静态类型使其更有弹性。Swift 受 Python 启发而来,旨在为新手轻松编写新手,旨在修复 Objective-C 的一些问题。

C++

C++ 是基于 C 语言的一种强大的语言,专为编程系统软件而设计,但也被用于构建游戏 / 游戏引擎,桌面应用程序,移动应用程序和网络应用程序。C++ 功能强大且速度很快,Facebook 用 C++ 已经开发出了好几个高性能、高可靠性的组件。许多软件都用 C++ 构建,包括 Adobe Systems,Amazon,Paypal,Chrome 等。与 C 语言类似,C++ 通常被认为不太好让初学者自己学习。所以,如果你决定学习 C++ 作为你的第一个编程语言,建议与人讨论或找一个导师。

C#

C# 用于微软的 .NET 框架,主要在 Microsoft Windows 上运行。C# 用于 Web 开发、游戏开发和一般 Microsoft 开发。此外,Xamarin 一直在开发一个名为 Mono 的开源项目,该项目旨在将 C# 移植到其他平台,为 Linux 开发人员带来更好的开发工具。最近,你还可以使用 C# 通过 Xamarin 为 iOS 和 Android 构 建原生手机应用。

III. 其他

SQL

SQL("Sequel”)或结构化查询语言,是用于与数据库通信的查询语言。虽然SQL 不能用于构建应用程序,但它用于管理使用关系数据库管理系统(RDMS)的应用程序中的数据。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值