社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1297|回复: 7

[原创] micropython入门教程-Lesson1

[复制链接]

17

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-10 15:00:36 | 显示全部楼层 |阅读模式
本帖最后由 Chocho 于 2017-2-13 09:45 编辑

microPython基础语法
目录
目录.. 1
更新历史.. 2
microPython简介.. 2
本文目标.. 2
变量数据类型.. 2
字符型... 3
布尔类型... 3
整型... 3
浮点型... 4
元组(Tuple) 4
列表(List) 4
字典(Dict) 5
引用... 6
基础语法.. 6
分号和冒号... 7
循环... 7

函数... 8

更新历史
  
日期
  
版本
描述
2016-01-12
0.1
初始版本




1microPython简介
Damien George是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法:能否用Python语言来控制单片机,进行实现对机器人的操控呢?

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

Damien为了突破这种限制,他花费了六个月的时间来打造Micro Python。它基于ANSI C,语法跟Pyton 3基本一致,拥有自家的解析器、编译器、虚拟机和类库等。目前他支持很多32-bit处理器,比如说STM32系列,esp8266,esp32,rtl8195a,nrf51822等。

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


2、本文目标
阅读本文后,可以对micropython有个初步了解,主要涉及变量数据类型和基础语法。为了防止枯燥,深入的语法内容我们会结合后面的例子给大家详细讲解,建议手动敲入代码进行实际操作,以加深理解。

3变量数据类型 字符型
字符型是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。' '或   " "本身只是一种表示字符的符号,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'mOK"包含的字符是I,',m,空格,O,K这6个字符,示例:

>>>str=“hello DFRobot”
>>>Print(str)
hello DFRobot

   str是定义的一个字符串变量并赋值为helloDFRobot,然后输出该字符串。

布尔类型
一个布尔值只有两种值,要么是True 、要么是False(注意首字母大写)。
应用例子:
      
>>>True
True
>>>3>2
True
>>>5>7
False

S159E~S]GH8Y4%D[WWHDQ2Y.png

  and运算是与运算,只有所有都为Trueand运算结果才是True

>>>Trueand True
True
>>>Trueand False
False

or运算是或运算,只要其中有一个为True,or运算结果就是True

>>>Trueor True
True
>>>Trueor  False
True

   not运算是非运算,它是一个单目运算符,把True变成FalseFalse变成True
      
>>>not True
      False
      >>>not 1>5
      True

布尔值经常用在条件判断中,eg:

        >>>def int(age):
if age>=18:
        print(‘adult’)
else:
         print(‘teenager’)
        



此内容由EEWORLD论坛网友Chocho原创,如需转载或用于商业用途需征得作者同意并注明出处


整型
创建一个新整型变量和给变量赋值是相同的过程,a = 123 或 b = -123 等号左边是变量名,右边是要赋的值,就是这么简单。自然赋值时候的数据要是整数才行,整数简单理解为(正整数和负整数),micropython目前可以支持的整型数据类型变量前的操作符有:加(+)、减(-)、乘(×)、除(/)和幂(**)。

A)DLOK3QX896@O}1)~@1C.png

浮点型
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23×109和12.3×108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23×109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。如果以上你不能理解,那么就一句话---浮点数就是不精确的小数。浮点数运算可能会有四舍五入的误差。


>>>pi=3.14
>>>print(pi)
3.14

  在不同的平台下(比如:esp32esp8266ameba等),输出的π值可能会不同。
元组(Tuple)
tuple是一种有序列表,tuple和list非常类似,但是tuple一旦初始化就不能修改,显示只有1个元素的tuple时,会加一个逗号。eg:

>>>t=(1,)
>>>t
(1,)

     如上我们定义的就是一个tuple,t=(1,)
如果没有逗号,这定义的就不是tuple,eg:

>>>t=(1)
>>>t
1

当把两个元祖合在一起输出时,它的输出结果是两个元祖所有的元素,eg:

>>>t1=(1,2,3)
>>>t2 = (4,5,6)
>>>Print(t1+t2)
(1,2,3,4,5,6)
      
列表(List)
list内容可更改,list是一种有序的集合,可以随时添加和删除其中的元素
      
>>>l=[1,2,3,4]
>>>print(l)
[1,2,3,4]
      
定义一个l=[1,2,3,4]的list,
变量l就是一个list,用len()函数可以获得list元素的个数

>>>len(l)
4

用索引来访问list中每一个位置的元素,记得索引是从0开始的。

>>>l[2]
3
>>>l[0]
1

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置。

>>>l[1]=9
>>>print(l)
[1,9,3,4]

list是一个可变的有序表, 可以把元素插入到指定的位置,比如索引号为1的位置,insert(i,x)在位置i插入x,其余元素向后推,如果i大于列表长度,就在最后添加,如果i小于0,就在最开始添加。

>>>l.insert(1,6)
>>>print(l)
[1,6,2,3,4]

要删除指定位置的元素,用pop(i)方法,其中i是索引位置。

>>>l.pop(2)
3
>>>print(l)
[1,2,4]

字典(Dict)
microPython内置了字典:dict的支持,dict全称dictionary,在C++和java等其他语言中也称为map,使用键-值(key-value)存储,一般在内存中以红黑树方式存储,具有极快的查找速度。

>>>d={‘df’:4, ’yu’:18, ’wu’:15}
>>>d[‘yu’]
18

dict指的是字典,而在使用的时候,如果我们直接用dict来表示字典,这样显得有点麻烦,所以我们就用d来代表dict,当然如果觉得不麻烦,也可以直接用dict
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

>>>d[‘li’]=12
>>>d=[‘li’]
12

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉

>>>d[‘jack’]=10
>>>d[‘jack’]
10
>>> d[‘jack’]=9
>>> d[‘jack’]
9

要删除一个key,用pop(key)方法,对应的value也会从dict中删除

>>>d.pop(‘yu’)
18
>>>d
{‘df’:4’, ’wu’:15}

引用
对于不可变的对象(包括:int、字符串(string)、float、(数值型number)、元组),a作为b的一个拷贝被创建,a和b将指向不同的内存地址,a和b相互独立,
eg:
>>>a=”I am ouki”
>>>b=a
>>>print(b)
I am ouki
>>>a=”hello DFRobot”
>>>Print(b)
I am ouki

我们定义a=” I am ouki”,然后把a的值赋给b,输出b的值就是I am ouki,此时a的值依然是I am ouki,我们再给a赋一个新的值a=”helloDFRobot”,然后我们再来输出b,b的值不会改变,依然是I am ouki。

E5B$YAWC7JOW@`G~$ZL@9.png
对于可变的对象(包括:字典型(dictionary)、列表型(list)),a作为b的一个引用被创建,a和b的元素公用相同的内存地址,a和b的元素共享。
P6BMVQQD$SY)H`UASY0K%(W.png
4.基础语法 分号和冒号
每行不需要写分号结束,和其他语言有些不一样。当然,你写分号也没有问题,对于条件和函数,后面要紧跟冒号。如果在条件和函数后没有紧跟冒号,就会报如下错误:

C4JW9YIB%TD}VRB3HJ.png

[PE5`~IWP%TPOARK}M$M.png
循环
for循环
for循环可以遍历任何序列的项目,如一个列表或者一个字符串,for循环的语法格式如下:
                foriterating_var in sequence
                statements(s)

eg:
>>>for i in range(5):
. . .        print(i)
0
1
2
3
4

YE2M{2DJ35MFB[)V00POUHL.png

while循环
while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:
         while判断条件:
               执行语句….
eg:
>>>i=9
>>>while(i>0):
. . .    print(i)
. . .        i-=1
  9
  8
  7
  6
  5
  4
  3
2
1

Z3PX%ZG3J~RAIBQF5N_E$[H.png
执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假false时,循环结束。
函数
microPython中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。我们以自定义一个求绝对值的my_abs和一个求和的add函数为例。

>>>def  my_abs(x):
. . .     if  x>=0:
. . .        return  x
. . .     else:
. . .        return  -x
. . .
>>>my_abs(5)
5
>>>my_abs(-6)
6

函数定义结束后需要按两次回车重新回到>>>提示符下:

>>>def  add(a,b):
. . .      retrun a+b
. . .
>>>add(4,2)
6



此帖出自编程基础论坛
PWA}0$Q$PRDBA~7B3@U1IPV.png

microPython基础语法V0.2.doc

172 KB, 下载次数: 22



回复

使用道具 举报

1198

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2017-2-10 15:40:12 | 显示全部楼层
不错,感谢分享!


回复

使用道具 举报

10

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-10 20:44:19 | 显示全部楼层
谢谢分享,学习了


回复

使用道具 举报

17

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2017-2-24 10:27:24 | 显示全部楼层
michael_llh 发表于 2017-2-10 15:40
不错,感谢分享!



回复

使用道具 举报

17

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2017-2-24 10:27:53 | 显示全部楼层
xmgh1208 发表于 2017-2-10 20:44
谢谢分享,学习了

相互学习


回复

使用道具 举报

27

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-8-25 16:01:44 | 显示全部楼层
你好楼主,非常感谢您耐心的讲解,有如下两个问题请教。先行谢过!
我的开发板是pyb,通过连接usb口是很容易的借助putty运行命令进行试验的,但是问题来了:
1、PyBoard上通过usb虚拟出的一个com3(我的机器上认出来的就是com3),但是此串口已经和putty工具相连了,如果我想操作其它串口,比如让com2发数据,com4接收到(已通过杜邦线把com2/4连接),这样的需求,在putty这种命令行下面就搞不定了吧?? 请问,这个时候是不是只有靠把程序写入main.py中才能实现我说的需求了?
2、如果把程序写入main.py运行,假如程序出现问题,我又该如何调试呢? 怎么样看程序运行情况或者出错情况呢?貌似Python不能像vs那样打断点或者单步跟踪之类的吧?


回复

使用道具 举报

192

TA的帖子

71

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2017-8-25 16:44:46 | 显示全部楼层
楼主,后续的也一起发了吧?


回复

使用道具 举报

7503

TA的帖子

48

TA的资源

版主

Rank: 6Rank: 6

爱原创

发表于 2017-9-11 23:36:46 | 显示全部楼层
脚本语言用于单片机确实很了不起,可以提供很大的想象空间。
比如某种程度上,它可以完美实现IAP功能。

不知道micropython编译出来大概要多大,网上没看到相应的数据。

但是,对于单片机而言,micropython是否太大,是我选择脚本语言的最重要前提。
比如在知道micropython之前,其实我更先知道的是lua。
不管是原始的lua还是github上的出现的 为单片机嵌入式裁剪过的 eLua,
后者我没试过,前者我编译过,大概100多K的样子。

对于常见的单片机,这个体积太大了。
所以限制了应用。
没有一件事情是容易的,所以,起念头时,一定要好好琢磨


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-11-20 15:37 , Processed in 0.433257 second(s), 20 queries , Redis On.

快速回复 返回顶部 返回列表