【esp8266 micropython】之一 micropython入门教程-Arduino中文社区 - Powered by Discuz! Archiver

Chocho 发表于 2017-2-13 09:58

【esp8266 micropython】之一 micropython入门教程

本帖最后由 Chocho 于 2017-3-7 10:53 编辑

1、microPython简介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
and运算是与运算,只有所有都为True,and运算结果才是True
       >>>Trueand True      True      >>>Trueand False      False
or运算是或运算,只要其中有一个为True,or运算结果就是True
      >>>Trueor True      True      >>>TrueorFalse      True
   not运算是非运算,它是一个单目运算符,把True变成False,False变成True             >>>not True       False       >>>not 1>5       True
布尔值经常用在条件判断中,eg:
      >>>def int(age):      if age>=18:             print(‘adult’)      else:             print(‘teenager’)
         具体效果如下:      整型创建一个新整型变量和给变量赋值是相同的过程,a = 123 或 b = -123 等号左边是变量名,右边是要赋的值,就是这么简单。自然赋值时候的数据要是整数才行,整数简单理解为(正整数和负整数),micropython目前可以支持的整型数据类型变量前的操作符有:加(+)、减(-)、乘(×)、除(/)和幂(**)。

浮点型浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,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
   在不同的平台下(比如:esp32、esp8266、ameba等),输出的π值可能会不同。元组(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)       (1,2,3,4,5,6)      列表(List)list内容可更改,list是一种有序的集合,可以随时添加和删除其中的元素             >>>l=       >>>print(l)      
定义一个l=的list,变量l就是一个list,用len()函数可以获得list元素的个数
       >>>len(l)       4
用索引来访问list中每一个位置的元素,记得索引是从0开始的。
   >>>l   3   >>>l   1
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置。
       >>>l=9       >>>print(l)      
list是一个可变的有序表, 可以把元素插入到指定的位置,比如索引号为1的位置,insert(i,x)在位置i插入x,其余元素向后推,如果i大于列表长度,就在最后添加,如果i小于0,就在最开始添加。
       >>>l.insert(1,6)       >>>print(l)      
要删除指定位置的元素,用pop(i)方法,其中i是索引位置。
       >>>l.pop(2)       3       >>>print(l)      
字典(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。
对于可变的对象(包括:字典型(dictionary)、列表型(list)),a作为b的一个引用被创建,a和b的元素公用相同的内存地址,a和b的元素共享。4.基础语法 分号和冒号每行不需要写分号结束,和其他语言有些不一样。当然,你写分号也没有问题,对于条件和函数,后面要紧跟冒号。如果在条件和函数后没有紧跟冒号,就会报如下错误:

循环for循环for循环可以遍历任何序列的项目,如一个列表或者一个字符串,for循环的语法格式如下:                 foriterating_var in sequence:                statements(s)
   eg:         >>>for i in range(5):            . . .      print(i)         0         1         2         3         4
具体效果如下:

while循环while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:         while判断条件:               执行语句….    eg:            >>>i=9            >>>while(i>0):            . . .    print(i)            . . .      i-=1         9         8         7         6         5         4         3         2         1
具体效果如下:
执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假false时,循环结束。函数在microPython中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。我们以自定义一个求绝对值的my_abs和一个求和的add函数为例。
         >>>defmy_abs(x):            . . .   ifx>=0:            . . .      returnx            . . .   else:            . . .      return-x            . . .         >>>my_abs(5)         5         >>>my_abs(-6)         6
函数定义结束后需要按两次回车重新回到>>>提示符下:
         >>>defadd(a,b):            . . .      retrun a+b            . . .         >>>add(4,2)         6

zhang209a 发表于 2017-3-17 23:18

这家不错,有云平台支持,还便宜 https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w5003-15649713856.4.nhVutH&id=544047170422&scene=taobao_shop

IntoRobot-W6/W7物联网WiFi模组ESP8266EX智能硬件开发板
采用业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80MHz 和 160MHz支持标准的IEEE802.11 b/g/n 协议和完整的TCP/IP协议栈,可作为主模式构建独立的网络控制器,也可以作为从机搭载于其他主机MCU

zhang209a 发表于 2017-3-17 23:19

本帖最后由 zhang209a 于 2017-3-17 23:26 编辑

牛叉技术贴啊 沙发
这家不错,有云平台支持,还便宜 https://item.taobao.com/item.htm ... 2&scene=taobao_shop

IntoRobot-W6/W7物联网WiFi模组ESP8266EX智能硬件开发板
采用业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80MHz 和 160MHz支持标准的IEEE802.11 b/g/n 协议和完整的TCP/IP协议栈,可作为主模式构建独立的网络控制器,也可以作为从机搭载于其他主机MCUhttps://img.alicdn.com/imgextra/i3/83713066/TB2jnXFca8lpuFjy0FpXXaGrpXa_!!83713066.png

awsd 发表于 2017-4-25 16:00

8266是个好东西
页: [1]
查看完整版本: 【esp8266 micropython】之一 micropython入门教程