什么是MicroPython
MicroPython是 Python3语言 的精简高效实现,经过优化可在微控制器和受限环境中运行。MicroPython包含了诸如交互式提示,任意精度整数,闭包,列表解析,生成器,异常处理等高级功能。 且足够精简,适合运行在只有256k的代码空间和16k的RAM的芯片上。
MicroPython尽可能与普通Python兼容,让您轻松将代码从桌面传输到微控制器或嵌入式系统。MicroPython微型化了大部分的标准库模块,为每个模块实现了Python功能的一个子集。为了便于扩展,MicroPython 版本的标准Python 模块通常有 u (“micro”) 前缀。MicroPython与CPython之间的区别,主要涉及标准库和类型,但也有一些语言级的特性。
MicroPython快速参考
Internal LEDs(板载指示灯)
参见pyb.LED。
from pyb import LEDled = LED(1) # 1 =红色,2 =绿色,3 =黄色,4 =蓝色led.toggle()led.on()led.off()# LED 3和4支持PWM强度(0-255)LED(4).intensity() # 得到强度LED(4).intensity(128) # 将强度设置为一半
Internal switch(板载开关)
参见pyb.Switch。
from pyb import Switchsw = Switch()sw.value() # 返回True或Falsesw.callback(lambda: pyb.LED(1).toggle())
Pins and GPIO(引脚和通用接口)
参见pyb.Pin。
from pyb import Pinp_out = Pin('X1', Pin.OUT_PP)p_out.high()p_out.low()p_in = Pin('X2', Pin.IN, Pin.PULL_UP)p_in.value() # 获取引脚值,0或1
Delay and timing(延时和计时)
参见time模块:
import timetime.sleep(1) # 延时一秒钟time.sleep_ms(500) # 延时500毫秒time.sleep_us(10) # 延时10微秒start = time.ticks_ms() # 获取毫秒计数器的值delta = time.ticks_diff(time.ticks_ms(), start) # 计算时差
Timers(计时器)
from pyb import Timertim = Timer(1, freq=1000)tim.counter() # 得到计数器值tim.freq(0.5) # 0.5 Hztim.callback(lambda t: pyb.LED(1).toggle())
RTC(实时时钟)
参见pyb.RTC
from pyb import RTCrtc = RTC()rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # 设定指定的日期和时间rtc.datetime() # 获取日期和时间
External interrupts(外部中断)
参见pyb.ExtInt。
from pyb import Pin, ExtIntcallback = lambda e: print("intr")ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
ADC(模拟到数字转换)
from pyb import Pin, ADCadc = ADC(Pin('X19'))adc.read() # 读取值0-4095
DAC(数模转换)
from pyb import Pin, DACdac = DAC(Pin('X5'))dac.write(120) # 输出介于0和255之间
PWM(脉冲宽度调制)
from pyb import Pin, Timerp = Pin('X1') # X1具有TIM2,CH1tim = Timer(2, freq=1000)ch = tim.channel(1, Timer.PWM, pin=p)ch.pulse_width_percent(50)
UART(串行总线)
参见pyb.UART。
from pyb import UARTuart = UART(1, 9600)uart.write('hello')uart.read(5) # 最多读取5个字节
I2C总线
硬件I2C可通过I2C('X') 和在pyboard的X和Y半部分使用I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过明确指定scl和sda引脚而不是总线名称,也可以使用软件I2C 。有关更多详细信息,请参见 machine.I2C。
from machine import I2Ci2c = I2C('X', freq=400000) # 创建硬件I2c对象i2c = I2C(scl='X1', sda='X2', freq=100000) # 创建软件I2C对象i2c.scan() # 返回从站地址列表i2c.writeto(0x42, 'hello') # 向地址为0x42的从站写入5个字节i2c.readfrom(0x42, 5) # 从从机读取5个字节i2c.readfrom_mem(0x42, 0x10, 2) # 从从站0x42读取2个字节,从站存储器0x10i2c.writeto_mem(0x42, 0x10, 'xy') # 将2个字节写入从站0x42,从站存储器0x10
注意:有关旧式I2C支持的信息,请参见pyb.I2C。
SPI总线
参见pyb.SPI。
from pyb import SPIspi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)spi.send('hello')spi.recv(5) # 在总线上接收5个字节spi.send_recv('hello') # 发送和接收5个字节
CAN总线(控制器局域网)
参见pyb.CAN。
from pyb import CANcan = CAN(1, CAN.LOOPBACK)can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))can.send('message!', 123) # 发送ID为123的消息can.recv(0) # 在FIFO 0上接收消息
General board control(通用板控制)
参见pyb模块。
import pybpyb.repl_uart(pyb.UART(1, 9600)) # 在UART(1)上复制REPLpyb.wfi() # 暂停CPU,等待中断pyb.freq() # 获取CPU和总线频率pyb.freq(60000000) # 将CPU频率设置为60MHzpyb.stop() # 停止CPU,等待外部中断
Servo control(伺服电机控制)
参见pyb.Servo。
from pyb import Servos1 = Servo(1) # 伺服位置1(X1,VIN,GND)s1.angle(45) # 移至45度s1.angle(-60, 1500) # 在1500毫秒内移至-60度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
