什么是MicroPython

MicroPython是 Python3语言 的精简高效实现,经过优化可在微控制器和受限环境中运行。MicroPython包含了诸如交互式提示,任意精度整数,闭包,列表解析,生成器,异常处理等高级功能。 且足够精简,适合运行在只有256k的代码空间和16k的RAM的芯片上。
MicroPython尽可能与普通Python兼容,让您轻松将代码从桌面传输到微控制器或嵌入式系统。MicroPython微型化了大部分的标准库模块,为每个模块实现了Python功能的一个子集。为了便于扩展,MicroPython 版本的标准Python 模块通常有 u (“micro”) 前缀。MicroPython与CPython之间的区别,主要涉及标准库和类型,但也有一些语言级的特性。

MicroPython快速参考

Internal LEDs(板载指示灯)

参见pyb.LED

  1. from pyb import LED
  2. led = LED(1) # 1 =红色,2 =绿色,3 =黄色,4 =蓝色
  3. led.toggle()
  4. led.on()
  5. led.off()
  6. # LED 3和4支持PWM强度(0-255)
  7. LED(4).intensity() # 得到强度
  8. LED(4).intensity(128) # 将强度设置为一半

Internal switch(板载开关)

参见pyb.Switch

  1. from pyb import Switch
  2. sw = Switch()
  3. sw.value() # 返回True或False
  4. sw.callback(lambda: pyb.LED(1).toggle())

Pins and GPIO(引脚和通用接口)

参见pyb.Pin

  1. from pyb import Pin
  2. p_out = Pin('X1', Pin.OUT_PP)
  3. p_out.high()
  4. p_out.low()
  5. p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
  6. p_in.value() # 获取引脚值,0或1

Delay and timing(延时和计时)

参见time模块:

  1. import time
  2. time.sleep(1) # 延时一秒钟
  3. time.sleep_ms(500) # 延时500毫秒
  4. time.sleep_us(10) # 延时10微秒
  5. start = time.ticks_ms() # 获取毫秒计数器的值
  6. delta = time.ticks_diff(time.ticks_ms(), start) # 计算时差

Timers(计时器)

pyb.Timer

  1. from pyb import Timer
  2. tim = Timer(1, freq=1000)
  3. tim.counter() # 得到计数器值
  4. tim.freq(0.5) # 0.5 Hz
  5. tim.callback(lambda t: pyb.LED(1).toggle())

RTC(实时时钟)

参见pyb.RTC

  1. from pyb import RTC
  2. rtc = RTC()
  3. rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # 设定指定的日期和时间
  4. rtc.datetime() # 获取日期和时间

External interrupts(外部中断)

参见pyb.ExtInt

  1. from pyb import Pin, ExtInt
  2. callback = lambda e: print("intr")
  3. ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)

ADC(模拟到数字转换)

参见pyb.Pinpyb.ADC

  1. from pyb import Pin, ADC
  2. adc = ADC(Pin('X19'))
  3. adc.read() # 读取值0-4095

DAC(数模转换)

参见pyb.Pinpyb.DAC

  1. from pyb import Pin, DAC
  2. dac = DAC(Pin('X5'))
  3. dac.write(120) # 输出介于0和255之间

PWM(脉冲宽度调制)

参见pyb.Pinpyb.Timer

  1. from pyb import Pin, Timer
  2. p = Pin('X1') # X1具有TIM2,CH1
  3. tim = Timer(2, freq=1000)
  4. ch = tim.channel(1, Timer.PWM, pin=p)
  5. ch.pulse_width_percent(50)

UART(串行总线)

参见pyb.UART

  1. from pyb import UART
  2. uart = UART(1, 9600)
  3. uart.write('hello')
  4. uart.read(5) # 最多读取5个字节

I2C总线

硬件I2C可通过I2C('X') 和在pyboard的X和Y半部分使用I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过明确指定sclsda引脚而不是总线名称,也可以使用软件I2C 。有关更多详细信息,请参见 machine.I2C

  1. from machine import I2C
  2. i2c = I2C('X', freq=400000) # 创建硬件I2c对象
  3. i2c = I2C(scl='X1', sda='X2', freq=100000) # 创建软件I2C对象
  4. i2c.scan() # 返回从站地址列表
  5. i2c.writeto(0x42, 'hello') # 向地址为0x42的从站写入5个字节
  6. i2c.readfrom(0x42, 5) # 从从机读取5个字节
  7. i2c.readfrom_mem(0x42, 0x10, 2) # 从从站0x42读取2个字节,从站存储器0x10
  8. i2c.writeto_mem(0x42, 0x10, 'xy') # 将2个字节写入从站0x42,从站存储器0x10

注意:有关旧式I2C支持的信息,请参见pyb.I2C

SPI总线

参见pyb.SPI

  1. from pyb import SPI
  2. spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
  3. spi.send('hello')
  4. spi.recv(5) # 在总线上接收5个字节
  5. spi.send_recv('hello') # 发送和接收5个字节

CAN总线(控制器局域网)

参见pyb.CAN

  1. from pyb import CAN
  2. can = CAN(1, CAN.LOOPBACK)
  3. can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
  4. can.send('message!', 123) # 发送ID为123的消息
  5. can.recv(0) # 在FIFO 0上接收消息

General board control(通用板控制)

参见pyb模块。

  1. import pyb
  2. pyb.repl_uart(pyb.UART(1, 9600)) # 在UART(1)上复制REPL
  3. pyb.wfi() # 暂停CPU,等待中断
  4. pyb.freq() # 获取CPU和总线频率
  5. pyb.freq(60000000) # 将CPU频率设置为60MHz
  6. pyb.stop() # 停止CPU,等待外部中断

Servo control(伺服电机控制)

参见pyb.Servo

  1. from pyb import Servo
  2. s1 = Servo(1) # 伺服位置1(X1,VIN,GND)
  3. s1.angle(45) # 移至45度
  4. s1.angle(-60, 1500) # 在1500毫秒内移至-60度
  5. s1.speed(50) # 用于连续旋转伺服

更多资料请查看官方文档(英文):http://docs.micropython.org/en/latest/library/index.html
MicroPython支持的标准库资料参见:http://docs.micropython.org/en/latest/library/index.html
MicroPython与CPython的区别参见:http://docs.micropython.org/en/latest/genrst/index.html

免费Python教程:
Runoob.com:https://www.runoob.com/python3/python3-tutorial.html
廖雪峰的python教程:https://www.liaoxuefeng.com/wiki/1016959663602400