本教程由MicroPython中文社区制作,资料来源于MicroPython官方文
档、国内社区活动、网友经验分享等。
在保留本说明和版权的情况下,欢迎转载和分享
作者:shaoziyang
时间:2016年11月
MicroPython中文社区版权所有,保留所有权利
Copyright by MicroPython Chinese community
2
使用MicroPython前,需要了解一些基本的使用方法:
硬件
大部分MicroPython开发板都是通过串口(或者USB转串口方式)和计
算机连接,部分版本支持Wifi,可以通过wifi进行连接。
通过USB连接时,通常会产生两个设备:虚拟磁盘和虚拟串口。用户
程序可以复制到虚拟磁盘运行,也可以通过串口编写和调试程序。
软件
软件不要使用一般的串口助手类软件,而需要使用终端软件,如超级
终端、putty、xshell、SecureCRT、MobaXterm等。
通过串口连接时,绝大部分使用了下面的参数:
115200, n, 8, 1,无流量控制
驱动
在Windows下使用STM32的pyboard开发板时,第一次连接会提示安装
串口驱动,同时会出现一个PYBFLASH虚拟磁盘,串口驱动就在这个虚
拟磁盘上。
在Linux和MacOS下无需安装串口驱动。
REPL
通过终端连接到开发板后,就可以通过REPL发送命令,编写和调试程
序了,REPL下的用法和标准的python类似。
3
下面是网上关于MicroPython的介绍
Damien George是一名计算机工程师,他每天都要使用Python语言
工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想
法:能否用Python语言来控制单片机,进行实现对机器人的操控
呢?
要知道,Python是一款比较容易上手的脚本语言,而且有强大的社
区支持,一些非计算机专业领域的人都选它作为入门语言。遗憾的
是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼。
Damien为了突破这种限制,他花费了六个月的时间来打造Micro
Python。它基于ANSI C,语法跟Pyton 3基本一致,拥有自家的解
析器、编译器、虚拟机和类库等。目前他支持基于32-bit的ARM处
理器,比如说STM32F405。
借助Micro Python,用户完全可以通过Python脚本语言实现硬件底
层的访问和控制,比如说控制LED灯泡、LCD显示器、读取电压、控
制电机、访问SD卡等。
与此同时,Damien还给大家带来了一款专门为Micro Python而打造
的开发板,它基于STM32F405单片机,通过USB接口进行数据传输。
该开发板内置4个LED灯、一个加速传感器、时钟模块,可在3V-10V
之间的电压正常工作。值得一提的是,它遵守MIT协议开源,被授
权人拥有复制、修改、发行和再授权的权利。
MicroPython在2014成功的在kickstarter上众筹,获得很高的评价,
现在越来越多的开发者开始使用MicroPython。
目前MicroPython有多个不同硬件平台的移植版本,包括
STM32F4/F7/L4系列、ESP8266、ESP32、NXP MK20DX256、microchip
PIC33、Infineon XMC4700、nRF51822、CC3200、MSP432等。其中以
STM32和ESP8266为主要版本。除了官方维护的版本外,还有众多爱好
者移植的版本。
MicroPython采用了MIT授权方式,这是最宽松的授权方式,任何人都
可以使用它,也可以用于商业应用。
实际上,除了MicroPython外,在嵌入式上还有其它一些python版
4
本,只是影响力不大。如更早的时候有pymite项目,可以在avr上运
行python;还有一些不开源的商业项目,如:SNAPpy,能够在C8051
和AVR上运行。但是这些项目的功能不如micropython,。
5
pyboard主要是针对STM32系列的单片机
6
PYBoard 快速指南
通用控制
import pyb
pyb.delay(50) # wait 50 milliseconds
pyb.millis() # number of milliseconds since bootup
pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
pyb.wfi() # pause CPU, waiting for interrupt
pyb.freq() # get CPU and bus frequencies
pyb.freq(60000000) # set CPU freq to 60MHz
pyb.stop() # stop CPU, waiting for external interrupt
LEDs
from pyb import LED
led = LED(1) # red led
led.toggle()
7
led.on()
led.off()
Pins 和 GPIO
from pyb import Pin
p_out = Pin('X1', Pin.OUT_PP)
p_out.high()
p_out.low()
p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
p_in.value() # get value, 0 or 1
电机控制
from pyb import Servo
s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
s1.angle(45) # move to 45 degrees
s1.angle(-60, 1500) # move to -60 degrees in 1500ms
s1.speed(50) # for continuous rotation servos
外中断
from pyb import Pin, ExtInt
callback = lambda e: print("intr")
ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE,
callback)
定时器
from pyb import Timer
tim = Timer(1, freq=1000)
tim.counter() # get counter value
tim.freq(0.5) # 0.5 Hz
tim.callback(lambda t: pyb.LED(1).toggle())
PWM (pulse width modulation)
from pyb import Pin, Timer
8