6620|14

111

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

『micropython』pyboard + SX127X/CC11XX [复制链接]

 
 
本帖最后由 allankliu 于 2016-5-27 12:12 编辑

好久没有冒泡。今天混一篇。

研究micropython有多方面的需求。其中有一项就是IoT网关的二次开发。大家EE背景也算是IT行业的一部分,现在两创中IOT/IOE的项目特别多。我平时就总是接到此类需求。有的要求做整体方案,有的要求做云服务器等等。我的旧友旧同事中也有类似的业务。

现有的开发模式

但是我观察下来,他们的硬件端的开发模式是类似的:

MCU:ARM Cortex-M3/M4 MCU
IoT:CAN/RS485/RF433/RF2.4G/Zigbee/6LowPAN
B/E:Eth/WiFi/BLE/BT SPP/GPRS
固件平台:C/C++,以C为主,C++为辅。

这些方案最苦逼的事情就是对接,需要根据OEM客户进行修改。但有一点,越接近应用层,越接近消费者,各种无聊的修改就越多。比如某个界面的控件等等。要么交付所有源码给客户,客户会收下源码,开发还是你。要么交付库,那么麻烦更多。

micropython/Python赋予二次开发能力

而micropython/Lua/node.js/java(对不起,Java一开始就是面对嵌入式的)之所以进入嵌入式,其中一个理由就是赋予OEM客户,乃至消费者以二次开发能力。

所以,我最近在阅读Python与硬件相关设计的书籍。总体上说,我比较倾向以下技术组合:
  • 硬件:ARM9/Cortex-A + USB/UART IoT dongle。
  • 软件:Ubuntu + sysfs或网络驱动 + CPython + PyUSB/PySerial/socket
  • 应用:MQTT/ZeroMQ/Redis + Python Web + SQLite

利用USB的即插即用,也可以动态修改整体设备的配置。我倾向这种组合,还有一个原因是:ARM9/Cortex开发板的成本非常低,甚至低于pyboard BOM。

如果STM32F40X如果价格够低,比如整体BOM低于CNY30。但我觉得micropython可以构建更加简单的IoT产品。
  • 硬件:STM32F40X或其他中低端MCU,UART/SPI IoT dongle;
  • 软件:RTOS + IoT dongle stack;
  • 应用:用户应用 + 网盘/REST API

IoT/IP连接接口
IoT/IP这些接口无外乎几类:

UART:ESP8266,BLE;
SPI:CC1100,SX1276等没有内置MCU的RFIC,或者Microchip的ETH/USB到SPI的桥接IC;
APB:ARM外设总线等,可以内置CAN总线模块;
I2C,相对较少。
USB,pyboard中大多数做device。但以后host/otg会较多。

SPI总线
各类总线中,SPI是连接各类IOT的高速接口。简单,有效。所以我测试了一下pyboard的SPI串口。

SPI是许多物联网RFIC的缺省通讯方式。基于SPI类,可以构建CC11XX/nRF24L01/SX1267等设备子类。笔者在pyboard中做个一个localloop的测试,即MOSI与MISO(即X7/X8)短接。如果从MISO返回的数值等于MOSI的输出。则工作正常。

  1. from pyb import SPI
  2. buf = bytearray(10)
  3. spi = SPI(1, SPI.MASTER, baudrate=9600000, polarity=1, phase=0, crc=0x07)
  4. data = spi.send_recv(b'0123456789')
  5. spi.send_recv(b'0123456789', buf)
  6. #spi.send_recv(buf, buf)

  7. print(repr(buf))
复制代码



如果不短接MOSI/MISO,返回数值是:
  1. >>>
  2. PYB: sync filesystems
  3. PYB: soft reboot
  4. bytearray(b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff')
复制代码



短接后返回数值是:

  1. >>>
  2. PYB: sync filesystems
  3. PYB: soft reboot
  4. bytearray(b'0123456789')
复制代码


在mbed网站中已经找到许多RFIC的C++类库(CC1101/CC2500/CC2530/CC2650/nRF51/nRF24L01)。花费一点时间可以很容易移植成为此类SPI设备的Python类。

返回数值说明,SPI收发正常。但我继续测试了pyboard的SPI总线速度极限。LoRaWAN虽然速度不高,但是如果对接FSK器件,那么大部分WSN的空口速率在250Kbps,而SPI速率都在2Mbps左右。此例中,最初的SPI速度设置为600000,即600K,距离SX1276的10M速度还有距离。但设置到9.6M依然工作正常。

所以,在micropython/Python中,将Buffer bytearray设置长度为256B,工作在较高频率问题不大。

最新回复

汇总在此: 【MicroPython】——by allankliu https://bbs.eeworld.com.cn/forum. ... 2739&fromuid=536508  详情 回复 发表于 2016-6-17 11:31
点赞 关注(1)
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
是预备自己移植一个无线通信的库吗?
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
我的一大堆废话,被你浓缩成一句话。

对,首先打算针对SX1276做点对点和星型。可能近期会用上。Port是最后一步了,先找轮子,找不到再自己造。
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(初级)

4
 
现在的MicroPython很流行啊。。。什么片子都能移植啊。。。

eeworld.com.cn.png (8.84 KB, 下载次数: 3)

eeworld.com.cn.png
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

5
 
话说micropython要跑顺畅,对具体的CPU到底有多高要求?多高时钟,多大RAM多大FLASH? 用lua可能到达10K级,这也是为什么我对lua更感兴趣的原因
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

6
 
本帖最后由 allankliu 于 2016-6-12 10:36 编辑
辛昕 发表于 2016-6-2 10:15
话说micropython要跑顺畅,对具体的CPU到底有多高要求?多高时钟,多大RAM多大FLASH? 用lua可能到达10K级, ...

我记得我回答过类似的问题?之前也是您?

首先,我对语言偏好之间的争论兴趣不大。不知道10K级别是指RAM还是ROM?

其次,我也很关心Lua,因为据说Lua的速度比较快。但我一直没空去构建一个完整的Lua Project。而且虽然Lua在服务器端也很牛,但是我打算直接调到Golang或者Python pypy加速。

第三,主流的eLua使用的MCU配置和Python基本都是类似的:32KB RAM+256KB ROM。这也是我一直没有动手的原因。

第四,最简单的PyMite最初是在AVR上跑。STM32F103也没有问题,mbed上的冈本把PyMite移植到了几乎所有的mbed micro。至于Viper也是以STM32F103为基础。所以没有问题。

物联网全链条开发中,有以下若干语言可以用于全栈开发:
1)Java(深嵌入式,嵌入式Linux,网关,服务器,不含网页前端,大数据,移动端,可并发,3D建模AR/VR)
2)Javascript(深嵌入式,嵌入式Linux,网关,服务器,含网页前端,单线程,3D建模AR/VR,移动端)
3)Python(IC/FPGA设计,深嵌入式,嵌入式Linux,网关,服务器,网页前端+js编译器,大数据,3D建模,移动端)
4)Go和Swift

我给我的客户就是这样说,要计较的是总的成本:人力*开发周期。人力成本取决于对于技术掌握度和市场供应关系,开发周期取决于采用的技术。没错,Python慢,尤其耗费CPU,那又如何?pypy加速好了,或者多买两台服务器就好了,才多少钱?开发耽搁N个月,又损失多少钱?

在性能过剩的时代,不必纠结性能。如果纠结嵌入式系统的性能,ASM和C最棒了。DSP还用汇编做优化呢。那是有特殊目的的。

我为什么纠结于全链条开发?因为IOT开发环节长,所以采用统一语言开发可以节省很多事情。比如说,同一个通讯协议,用Python写完之后,设备端和服务器端都可以用同一模块!同样的Python Web,我可以运行在阿里云/AWS/百度,可以运行在微机和VMware,也可以在树莓派,也可以是Android手机。

话说,我们为什么要抛弃C/C++,用Java/Python/Lua/Node?因为性能比C高?如果不是因为性能,拿性能来比较不是南辕北辙?如果说性能,Windows上IOCP是最佳异步实现,但是Windows Server的市场份额逐年降低。

我们使用Java/Python/Lua/Node,是因为他们提供的二次开发能力,以及丰富的开发者生态链!那么,生态链上开发者会在乎性能么?他们在乎的是成本,完整度和社群交流。

就嵌入式领域(深嵌入式,如MCU),简单操作GPIO,还是C就好了。不过物联网要求我们更多操作和软件堆栈,所以生态链的价值体现出来了。

其他网友意见:
http://my.oschina.net/yisenn/blog/26183
http://blog.csdn.net/suxinpingtao51/article/details/8508428
https://www.zhihu.com/question/21717567
http://www.tuicool.com/articles/Q3y2Ar

 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

7
 
allankliu 发表于 2016-6-12 10:34
我记得我回答过类似的问题?之前也是您?

首先,我对语言偏好之间的争论兴趣不大。不知道10K级别是指R ...

额,10K级当然是 rom,ram的话,10K级能死人了。
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

8
 
allankliu 发表于 2016-6-12 10:34
我记得我回答过类似的问题?之前也是您?

首先,我对语言偏好之间的争论兴趣不大。不知道10K级别是指R ...

elua上支持的器件确实不算多,这也是我已经放弃elua,直接从原生lua开始着手的原因。
我玩这些的套路一向比较非主流,我不在意它们的整体环境,而是喜欢从中抽取部分
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

9
 
allankliu 发表于 2016-6-12 10:34
我记得我回答过类似的问题?之前也是您?

首先,我对语言偏好之间的争论兴趣不大。不知道10K级别是指R ...

关于全链条,你说的很对,可惜我不是太懂,真的不好意思。
我最近也越来越发现自己的技能和经验过度集中于 C。

说到观念转变,最近确实很痛苦,我以前对细节方面的纠结太大了,一直想治这病,一直没治好,看看这阵子痛苦过去会不会好点。
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

10
 
allankliu 发表于 2016-6-12 10:34
我记得我回答过类似的问题?之前也是您?

首先,我对语言偏好之间的争论兴趣不大。不知道10K级别是指R ...

我对lua的主要兴趣也是在这里。
和你基本一样。

所以我比较喜欢的是,用lua来封装c/c++
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

11
 
allankliu 发表于 2016-6-12 10:34
我记得我回答过类似的问题?之前也是您?

首先,我对语言偏好之间的争论兴趣不大。不知道10K级别是指R ...

额,貌似刚明白你的观点。
支持py。
基本认同你的观点,尤其是在我不放弃治疗的情况下。

~~~
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

12
 
辛昕 发表于 2016-6-12 11:25
额,貌似刚明白你的观点。
支持py。
基本认同你的观点,尤其是在我不放弃治疗的情况下。

~~~

仔细回看我的回复,语气有些冲。反问句用得多了。为此我需要先向你说声对不起。

其实Python vs. Lua的对比之前就有好多人和我提过,所以我曾经推荐EEWORLD开辟此类工程的专项:Lua,Python,C#,Java,Javascript/node,BASIC......每种语言都有其适用的地方。但能够占据多少份额,真的很难说。大家各花入各眼呗。其实,作为工程师,我喜欢安装各类IDE,编译器,收集各种PCB。这毛病大家都有,但是做项目呢?还是拿最熟悉的来用。

我曾经在汇编上做过很多项目(8048/8051/ARM7/MSP430/AVR)。

在汇编层面,考虑的细节太多,,8048每2KB要切换一次Bank,最多8级堆栈深度...

总算盼着嵌入式C普及,但是不同生态间API和编译器差异造成一大堆的条件编译...

ARM一统江湖,最多的是mbed C++,总算是可以跨越MCU,编译和调试器...

但是物联网需要更多环节:Android Java,PHP Web,shell/awk/perl......


坦白地说,采用不同的语言开发,实在让我有点儿累。所以,我开始采用Python。这种需求是从服务器端,移动端倒过来推动到设备端。


其实,十多年前我看到一家美国公司推出过类似设计:虚拟机基于寄存器设计。可以自定义寄存器和用户指令,比如将TCP/IP,文件系统,GUI,CloseCaption,Teletext等封装在自定义寄存器和指令中。只要指令是正交的即可。但是该虚拟机过于灵活,只停留在汇编级 别。事而Assembler采用Perl编写。虚拟机的性能因为实际上取决于C编译器。所以性能差不多就是C的20~50%左右。但是该设计最大问题在于 只停留在汇编级别,没有实现更高程度的抽象化。无法流行起来,很快就淹没了。


Lua的虚拟机性能好,或许以后会有其他语言嫁接在Lua虚拟机之上。就像Jython和Scala之类的方式。
其实我觉得Lua的日后对手应该是Go以及基于JVM的各类语言。因为他们之间的速度下相差不大。虽然现在Go仅限于服务器领域,但是迟早会进入嵌入式。
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

13
 
allankliu 发表于 2016-6-12 23:25
仔细回看我的回复,语气有些冲。反问句用得多了。为此我需要先向你说声对不起。

其实Python vs. Lua的 ...

额,大神,语气啥的,不要客气。
我也经常那样,能理解能理解。

反正这些我确实都是小白。

好,继续看。

我不得不承认,你近乎全栈,了解和视野远比我只做 单片机开发 的 要宽广。

其实今天节后我工作有点忙乱,所以坐在座位上也不太好意思太努力看贴和回帖。

我的想法无非是
每种工具都有特定的性能和特点——我以前就很反对C++写成C的。
但是我回想了一下你说的重点

全栈,用一个统一的工具是很好的,因为这样降低了整体的人力要求(成本),也就减少了各自维护的成本和压力。
毕竟用的一把斧头。
至于性能什么的。

说实在,计算机领域,用高射炮打蚊子的事情很多,挺好的没什么大不了。
就像unix的原则,不用白不用。

而我最近在反思以前自己的纠结和代码洁癖上,也不断反思自己至今 除了C什么都不会的德行。

软件的价值是体现在使用价值上,而非如何开发和开发过程,看来,我似乎更关心我们开发者的日子怎么好过点。
也许我以后会考虑往这方面发展?
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

14
 
allankliu 发表于 2016-6-12 23:25
仔细回看我的回复,语气有些冲。反问句用得多了。为此我需要先向你说声对不起。

其实Python vs. Lua的 ...

我对 python lua这类脚本语言最初的兴趣来源于

我对于 文本描述软件 这种行为非常感兴趣。

说实话,我至今对python lua都使用的很少。
但是我对他们的理解停留在 shell/cmd上,我在windows/linux上体会到这玩意在组合小exe程序然后快速组合程序上尝到甜头,所以我特别在意 在裸机单片机上 也这么来。

这样可以产生很多想象空间。
甚至可能是我知道的最简单的 动态加载 “应用软件”的 单片机 IAP方案。
个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

1万

帖子

2854

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测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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