14686|24

111

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

micropython之十万个为什么 [复制链接]

 
 
关于本帖

有鉴于EEWorld坛主的热情,许诺发个PCBA给我评估。作为回报,我把我的学习体验贴在坛子了。

因为EE的背景,我最熟悉的是8051汇编和C。不过最近在Arduino/mbed上大量用了C++开发。使用Python是从辅助开发工具时开始的,Python可以从物联网各个环节切入,Python可以用于
FPGA/CPLD,嵌入式软件,桌面程序,服务器(Web/IoT Server+BigData)和手机APP开发中。此外,我还为FSL的KL25Z用Python做了自动测试,服务器,ISP下载等。

所以.......

如果你是工程师,你要学Python;
如果你是很懒的工程师,你更要学Python;
如果你是喜欢DIY的工程师,你更加要学Python。
如果你是喜欢炒股票的工程师,你不学Python就亏了。

适用范围广度可以与Python一拼的语言是Java和Javascript。(关于编程语言的争论我不回复。)

为什么要用Python

我记得一位高人对我说,要别人的钱,别人的脑子,办你的事情。Python可以帮你一把。Python自带很多很多......的库,所以在物联网背景下,可以做很多事情。

而且作为胶水语言,Python有多个版本。基于C的CPython和Cython,基于JVM的Jython,基于Python子集和JIT的PyPy,基于.net的IronPython,基于Javascript的Pyjs/Brython,还有被Ruby吸血的RubyPython。所以Python和C/Java/.net-C#/JS/Ruby之间可以很好地互相勾搭。也就是因为这点,Python可以获取大量的Java企业应用库......

此外,无论你把Python作为脚本,还是OOP试验田,还是AOP编程,都可以。作为程序员可以同一工具下完成编程思想的升级改造。

嵌入式版本

Python适用面广,语法简单。用于嵌入式是迟早的事情。无论是ARM Cortex-M0/3/4,还是Cortex-A5/7/8/9,MIPS,x86,Quark都不在话下。micropython是目前最流行的嵌入式Python VM和开发环境。官方分支有:STM32HAL/ESP8266/CC3000/UNIX版本,还有细小分支如Teensy(FSL KL),PIC16,而第三方分支有microbit和WiPy/LoPy。前者是micropython为BBC microbit开发,而后者是基于CC3000和ESP32(Wifi+BLE双模)和LoRa长距离WSN而开发的版本。

其他嵌入式Python还有Pymite和Viper。以及大家交叉编译的CPython,OpenEmbedded版本,OpenWRT版本,以及Debian/Ubuntu的ARM/MIPS版本,Lego ev3-dev版本.......Symbian版本,Telit GPRS MODEM版本......

所以.......
Python大法好,赶紧到碗里来。

为什么在嵌入式中使用Python
因为二次开发是现在开发的核心价值。现在的“智能”硬件真的一点儿都不智能,只能够说是互联产品,它本身不智能,智能在云端了。但是用户应用应该具备二次开发和环境,这以后会是一个标配。所以光有C/C++这种贴近硬件的语言是不够的,针对应用应该有自己的运行时:Java,Python,Javascript。

micropython的野望

有没有注意到micropython有个UNIX版本?而UNIX版本中还有组件管理工具:upip?这就是构建micropython生态的节奏。那么他要和CPython竞争么?我觉得还不是。但是在ARM9等只有busybox的SBC里面,它的优势很明显。大家可以不用自己恶搞CPython了。因为micropython天生就是交叉编译的。

micropython的限制

由于在裸机上,micropython在设计中不仅需要了解C/Python间区别,还需要了解标准Python和microPython间区别。否则,micropython有个天生的麻烦,不支持JTAG/SWD调试。你们懂得,在于实时有关的环境中,有时候没有调试让人抓狂。所以ISR方面需要额外处理。

最新回复

有这个就不用太极老师傅了,这个做好了可比老师教的动作标准呦  详情 回复 发表于 2017-9-13 12:53

赞赏

2

查看全部赞赏

点赞 关注
 
 

回复
举报

111

帖子

0

TA的资源

一粒金砂(高级)

推荐
 
mars4zhu 发表于 2016-4-16 18:13
实用性不大。。。。。一般涉及到Python的都是上层应用,谁会在一个单片机上做上层应用呢?单片机踩个数据做 ...

实用性是随着成本下降而呈现指数上升的。的确micropython(或者eLua,javascript,Java)都有这个问题,其高端MCU平台价格面临低端MPU的侵蚀。但是在某个窗口应用,比如功耗敏感型中,MCU依然比MPU有优势。而且micropython针对Linux的upip比CPython更加适合嵌入式。

BBC的micro:bit micropython就是micropython的分支。运行在nRF51822中,如果你买个百度Duband手环,或许可以让micropython运行在手环中。你或许会问,手环里运行python实用么?

我不想做个布道士,但是事实教育我们:用户的需求永远超越工程师的想象力。他们会不断推动我们去实现。他们接受了彩色LCD替代黑白LCD的高功耗,接受了高速4G对于电池的消耗,他们可以接受手机产品寿命不长。但是他们追求不断地变化。

实际上,越来越多的开发权利已经从底层交到用户手中。在我眼里,联网设备!=智能设备。可穿戴设备中运行用户脚本或APP可以产生出更多的迭代和智能应用。

这好比当前设计二进制的数学家也想象不到现在的应用一个道理。如果返回来说,手环仅仅是个数据采集前端。那么运行智能手环配上python,可以做到:

VR数据采集;
大众体育的动作规范,如太极拳;
无人机的控制前端;
桌面电脑系统的控制;
门禁控制;
LBS控制;
智能旅游.......

请继续开脑洞。
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
说实在的,dcexpert把文档都翻译完了。我还没有想到micropython拿来做什么实际用途。任何项目都需要一定时间去完成。切换引脚,读读ADC之类活的都被别人抢光了。

我觉得应该从算法上去考虑,碾压一下C/C++语言的开发效率,会比较突出Python的意义。

点评

Python也有很多人用在数据分析上。 Python是个比较优秀的脚本  详情 回复 发表于 2016-4-8 14:38
 
 
 

回复

129

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
allankliu 发表于 2016-4-8 05:31
说实在的,dcexpert把文档都翻译完了。我还没有想到micropython拿来做什么实际用途。任何项目都需要一定时 ...

Python也有很多人用在数据分析上。
Python是个比较优秀的脚本

点评

了解。但是数据分析大多集中在服务器端,在micropython中缺乏对应库。 所以micropython眼下最大的价值是: 二次开发; 高层算法; 开发效率; 可玩性......  详情 回复 发表于 2016-4-9 09:31
个人签名昵称:灰小子
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

4
 
我准备先搞个“micropython与太极拳”实验性项目。

Pyboard和microbit上有3D加速度仪,可以用来记录太极拳动作(其实需要N个传感器,我先记录其中一路)。然后通过记录高手和菜鸟的动作差异来指导习拳者。

理想的平台应该是:micropython + 3D + BLE。目前我会用WiFi替代BLE。

第一,记录3D传感器数据;
第二,在micropython中做初步数据融合,想充分利用Python的math浮点计算;
第三,在主机Python中重建3D模型轨迹(需要小伙伴帮忙,可能采用Python做3D建模,或者Processing Java面对桌面和Android建模);

这种思路也会用于行走姿态的统计和纠正。

至于完成度能够到何种程度,不太好说。

点评

有这个就不用太极老师傅了,这个做好了可比老师教的动作标准呦  详情 回复 发表于 2017-9-13 12:53
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(中级)

5
 
好东西,一定要学习下,
 
 
 

回复

1274

帖子

2

TA的资源

版主

6
 
太极拳!

点评

我老了,所以打太极拳。  详情 回复 发表于 2016-4-8 21:58
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

7
 
本帖最后由 allankliu 于 2016-4-9 09:26 编辑

首先我想测试桌面CPython和micropython的math库之间的区别。

桌面与micropython math库对比

函数简介
Python2.7.11
micropython3.4
math.e
自然对数
>>> math.e
2.718281828459045

>>> math.e
2.718282
math.pi
圆周率PI
>>> math.pi
3.141592653589793

>>> math.pi
3.141593

math.sqrt(x)
平方根函数>>> math.sqrt(2)
1.4142135623730951

>>> math.sqrt(2)
1.414214

math.pow(x,y)
x的y次方
>>> math.pow(2,10)
1024.0

>>> math.pow(2,10)
1024.0

math.exp(x)e的x次方
>>> math.exp(2)
7.38905609893065

>>> math.exp(2)
7.389056

math.expm1(x)
e的x次方减1
>>> math.expm1(2)
6.38905609893065

>>> math.expm1(2)
6.389056

math.log(x)
e的对数
>>> math.log(10)
2.302585092994046

>>> math.log(10)
2.302585

math.log2(x)
2的对数
>>> math.log(2,10)
0.30102999566398114

>>> math.log10(2)
0.30103
math.log10(x)
10的对数
>>> math.log(10,2)
3.3219280948873626
>>> math.log2(10)
3.321928

math.cosh(x)
双曲余弦函数>>> math.cosh(2)
3.7621956910836314

>>> math.cosh(2)
3.762196

math.sinh(x)
双曲正弦函数
>>> math.sinh(2)
3.6268604078470186

>>> math.sinh(2)
3.62686

math.tanh(x)
双曲正切函数
>>> math.tanh(2)
0.9640275800758169

>>> math.tanh(2)
0.9640275

math.acosh(x)
反双曲余弦函数
>>> math.acosh(2)
1.3169578969248166

>>> math.acosh(2)
1.316958

math.asinh(x)
反双曲正弦函数
>>> math.asinh(2)
1.4436354751788103
>>> math.asinh(2)
1.443635

math.atanh(x)
反双曲正切函数
>>> math.atanh(0)
0.0

>>> math.atanh(0)
0.0

math.cos(x)
三角余弦函数
>>> math.cos(math.radians(60))
0.5000000000000001

>>> math.cos(math.radians(60))
0.5

math.sin(x)
三角正弦函数
>>> math.sin(math.radians(30))
0.49999999999999994

>>> math.sin(math.radians(30))
0.5

math.tan(x)
三角正切函数
>>> math.tan(math.radians(30))
0.5773502691896257
>>> math.tan(math.radians(30))
0.5773503

math.acos(x)
反三角余弦函数
>>> math.acos(math.sqrt(2)/2)
0.7853981633974483
>>> math.acos(math.sqrt(2)/2)
0.7853982
math.asin(x)
反三角正弦函数
>>> math.asin(math.sqrt(2)/2)
0.7853981633974484

>>> math.asin(math.sqrt(2)/2)
0.7853982

math.atan(x)
反三角正切函数
>>> math.atan(0.5773503)
0.5235987987060793

>>> math.atan(0.5773503)
0.5235988

math.degrees(x)
弧度转度
>>> math.degrees(math.pi)
180.0

>>> math.degrees(math.pi)
180.0

math.radians(x)
度转弧度
>>> math.radians(45)
0.7853981633974483

>>> math.radians(45)
0.7853982

math.erf(x)
x的误差函数
>>> math.erf(1)
0.842700792949715

>>> math.erf(1)
0.8427008

math.erfc(x)
x的余误差函数
>>> math.erfc(1)
0.157299207050285
>>> math.erfc(1)
0.1572992

math.gamma(x)
x的gamma函数>>> math.gamma(1)
1.0

>>> math.gamma(1)
1.0

math.lgamma(x)
x绝对值的自然对数的gamma函数
>>> math.lgamma(1)
0.0

>>> math.lgamma(1)
0.0


在评估的时候,有些数学函数都已经忘记其具体用法和意义了。带入参数未见得是有实际数学意义的。

结论

micropython一定使用了STM32F4XX内置Cortex-M4F的FPU。该FPU是单精度的,所以micropython的math库也是单精度的。和桌面系统CPython采用双精度有所不同。不过在许多硬件如CUDA GPU,MCU中大多采用单精度FPU。

简单整数除法,micropython也可能采用FPU计算。在桌面Python中:
>>> 10/3
3

在micropython中,
>>>10/3
3.333333

这和桌面版有较大区别。

不知道在其他没有FPU的Cortex-M0/M3处理器中,micropython的浮点库会如何实现。应该是基于软件浮点库。

FPU在一些应用中,如飞控IMU,可穿戴产品中会大量使用。单精度大多数情况下足够了。


 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

8
 

我老了,所以打太极拳。
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

9
 
dirtwillfly 发表于 2016-4-8 14:38
Python也有很多人用在数据分析上。
Python是个比较优秀的脚本

了解。但是数据分析大多集中在服务器端,在micropython中缺乏对应库。

所以micropython眼下最大的价值是:
二次开发;
高层算法;
开发效率;
可玩性......
 
 
 

回复

6105

帖子

4

TA的资源

版主

10
 
好,学习一下!
 
 
 

回复

659

帖子

1

TA的资源

纯净的硅(中级)

11
 
实用性不大。。。。。一般涉及到Python的都是上层应用,谁会在一个单片机上做上层应用呢?单片机踩个数据做个控制就可以了。。。。。。

稍微上层一点的应用,现在的ARM开发板,跑操作系统的Linux,那里就支持原生的Python,一个个人爱好者开发的Micropython工具,首先一点准确性稳定性都是未知的呢。。。。。。

点评

实用性是随着成本下降而呈现指数上升的。的确micropython(或者eLua,javascript,Java)都有这个问题,其高端MCU平台价格面临低端MPU的侵蚀。但是在某个窗口应用,比如功耗敏感型中,MCU依然比MPU有优势。而且micro  详情 回复 发表于 2016-4-20 11:22
 
 
 

回复

659

帖子

1

TA的资源

纯净的硅(中级)

12
 
就好像Arduino,应用够广泛的了啊,,,,除了学习和玩具,有几个实用产品用到呢?

点评

公开资料中,Arduino产品化的确不多。但是,谁产品化后会告诉你呢? 其实,采用开源产品做工程非常多。其次,Arduino的架构设计的产品已经不在少数了。AVR+Arduino C++库,可以做不少产品啊。迭代速度要比自己开  详情 回复 发表于 2016-4-20 11:03
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

13
 
mars4zhu 发表于 2016-4-16 18:14
就好像Arduino,应用够广泛的了啊,,,,除了学习和玩具,有几个实用产品用到呢?

公开资料中,Arduino产品化的确不多。但是,谁产品化后会告诉你呢?

其实,采用开源产品做工程非常多。其次,Arduino的架构设计的产品已经不在少数了。AVR+Arduino C++库,可以做不少产品啊。迭代速度要比自己开发快,不过我还是喜欢mbed。
 
 
 

回复

1万

帖子

203

TA的资源

管理员

15
 
汇总在此:
【MicroPython】——by allankliu
https://bbs.eeworld.com.cn/forum ... 2739&fromuid=536508

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

16
 
Python除了效率低,资源占用大,其实优点很多的!

点评

Python执行效率较低。甚至比Java还低!唯一比Python低的只有Ruby。 不过不同的Python可以多方面改进性能。即便在Pymite这个早期嵌入式Python中。提供了与C语言的底层接口,所以可以用C开发底层API,交给Python去  详情 回复 发表于 2016-7-20 08:04
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

17
 
白芷 发表于 2016-6-22 21:36
Python除了效率低,资源占用大,其实优点很多的!

Python执行效率较低。甚至比Java还低!唯一比Python低的只有Ruby。

不过不同的Python可以多方面改进性能。即便在Pymite这个早期嵌入式Python中。提供了与C语言的底层接口,所以可以用C开发底层API,交给Python去使用。这一点其实和Lua比较像了。
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

18
 
LZ太极打得怎么样了

点评

您还记得这个梗啊。谢谢。我之后稍微研究了一下。发现瓶颈在于6DoF的卡尔曼滤波。表达式看的我有些晕。所以搁置了。  详情 回复 发表于 2017-5-28 07:31
 
 
 

回复

1

帖子

0

TA的资源

禁止发言

19
 
allankliu 发表于 2016-4-8 20:35
首先我想测试桌面CPython和micropython的math库之间的区别。

桌面与micropython math库对比


在评估 ...

10/3 这个并不是 CPython 跟 MicroPython 的差异导致的。
造成结果不同的原因是,CPython 在 3.x 的时候更改了 / 符号的默认行为,而 MicroPython 是 Python 3 的子集,所以结果才会不一样。
在 Python 3 中,
  1. >>> 10 / 3
  2. 3.3333333333333335
  3. >>> 10 // 3
  4. 3
复制代码

在 Python 2 中,
  1. >>> 10 / 3
  2. 3
  3. >>> from __future__ import division
  4. >>> 10 / 3
  5. 3.3333333333333335
  6. >>> 10 // 3
  7. 3
复制代码
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

20
 
gmyu 发表于 2017-3-2 16:19
LZ太极打得怎么样了

您还记得这个梗啊。谢谢。我之后稍微研究了一下。发现瓶颈在于6DoF的卡尔曼滤波。表达式看的我有些晕。所以搁置了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表