Micro:bit MicroPython 教学纲要
阅读掌握文档内容,了解 BBC micro:bit 的 MicroPython 编程,可以作为教授少年儿童 MicroPython 的教学纲要。
用于撰写 python 语言的少儿编程的入门课程的依据。
Python 是当今最流行的编程语言之一,掌握这个技能可以应用到各个领域中。
BBC 的 micro:bit 卡使用 Python 的一种版本叫 MicroPython ,可以无缝移植到树莓派设备。
MicroPython 并不包含 Python 所有标准库。然而,MicroPython 有一个专门用于控制 micro:bit 库模块 microbit 。
教学纲要面向少年儿童,循序渐进和潜移默化介绍 Python 知识。
在学习和使用 Python 中会遇到不少的失败,但这没什么,失败是编程很好的学习体验 (Failure is how good software developers learn)。
要大胆的阅读和使用计算机英文单词,这是学习和使用英文的好机会,要知道没用经常使用的知识就会很快的被大脑遗忘。
教学内容
- Python 语言
- microbit 模块
- 编程常识和计算机思维
- 计算机英语
阅读对象
先行了解
学习建议
教学硬件
micro:bit
带有蜂鸣器的扩展卡
电脑
USB-A,MicroUSB线缆
一对鳄鱼钳线缆
教研参考
你好世界 Hello world
案例:你好世界
from microbit import *
display.scroll("Hello, World!")
display.scroll(strings)
显示滚动字符串。用双引号或单引号连在一起部分叫字符串。display 就是一个对象 ( object
具体指向) microbit 模块的物理显示 ( LED 灯)。
当敲响 display. 时可以看到 display 所有命令 (实际上,就是方法 method
),scroll 就是其中一个方法,用括号表示。
括号中间的就是参数。scroll 需要知道显示什么字符串就是参数,使用双引号括起来的字符串。
错误提示
当出现错误时,micro:bit 就会显示错误的行号,帮助我们查找错误。
Python 是区分大小写的。如果出现 NameError 表示输入名称有错误。
如果出现 SyntaxError 则表示 MicroPython 无法理解代码,
这时候通常查看是否遗漏了 "
或 :
。
如果 micro:bit 停止反应,无法刷入新的代码或者进入 REPL 模式,你可以直接断电重启。
就是按 micro:bit 上的 reset 键或者拔掉 USB 线重新接入。
运行结果

练习
1. 替换滚动显示的字符串
请复制代码到编辑器上,并刷入 micro:bit 卡,查看结果。案例都应当运行一遍再做练习
图像 Images
通过 MicroPython 可以轻松控制 micro:bit 上 5×5 LED 灯。
案例:显示开心
from microbit import *
display.show(Image.HAPPY)
运行结果

练习
1. 替换不同的内置图片三种以上
2. 内置图像有很多,试着记住三个图像的英文单词
内置图像:
- Image.HEART
- Image.HEART_SMALL
- Image.HAPPY
- Image.SMILE
- Image.SAD
- Image.CONFUSED
- Image.ANGRY
- Image.ASLEEP
- Image.SURPRISED
- Image.SILLY
- Image.FABULOUS
- Image.MEH
- Image.YES
- Image.NO
- Image.CLOCK12, Image.CLOCK11, Image.CLOCK10, Image.CLOCK9,
Image.CLOCK8, Image.CLOCK7, Image.CLOCK6, Image.CLOCK5,
Image.CLOCK4, Image.CLOCK3, Image.CLOCK2, Image.CLOCK1
- Image.ARROW_N, Image.ARROW_NE, Image.ARROW_E,
Image.ARROW_SE, Image.ARROW_S, Image.ARROW_SW,
Image.ARROW_W, Image.ARROW_NW
- Image.TRIANGLE
- Image.TRIANGLE_LEFT
- Image.CHESSBOARD
- Image.DIAMOND
- Image.DIAMOND_SMALL
- Image.SQUARE
- Image.SQUARE_SMALL
- Image.RABBIT
- Image.COW
- Image.MUSIC_CROTCHET
- Image.MUSIC_QUAVER
- Image.MUSIC_QUAVERS
- Image.PITCHFORK
- Image.XMAS
- Image.PACMAN
- Image.TARGET
- Image.TSHIRT
- Image.ROLLERSKATE
- Image.DUCK
- Image.HOUSE
- Image.TORTOISE
- Image.BUTTERFLY
- Image.STICKFIGURE
- Image.GHOST
- Image.SWORD
- Image.GIRAFFE
- Image.SKULL
- Image.UMBRELLA
- Image.SNAKE
自定义图像 DIY Images
案例:自定义图像
from microbit import *
boat = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
display.show(boat)
Image LED 灯
每行五个 LED 灯共五行,所有用5串数字表示。数字 0 表示关闭,数值越大亮度越高,9 表示最亮。
直接一行写
python 语法会自动合并两个字符串中间的空白符号。
也可以这样写:
boat = Image("05050:05050:05050:99999:09990")
练习
1. 试一试用一行代码替换五行。
2. 实现一个自己满意的图像,分享给朋友。
动画 Animation
通过列表让静态的图像动起来
用一对方括号括起来,每个条目用逗号隔开,如果是字符串用引号,数字不要用引号,
如果数字加上单双引号就表示字符串。
可以进行不同的定义:
shopping = ["Eggs", "Apples", "Tomatoes" ]
primes = [2, 3, 5, 7, 11, 13, 17, 19]
mixed_up_list = ["hello!", 1.234, Image.HAPPY]
案例:转动的时钟
from microbit import *
display.show(Image.ALL_CLOCKS, loop=True, delay=100)
练习
1. 改为旋转的箭头
Image.ALL_ARROWS
所有箭头的图像(元组)
案例:沉船
from microbit import *
boat1 = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
boat2 = Image("00000:"
"05050:"
"05050:"
"05050:"
"99999")
boat3 = Image("00000:"
"00000:"
"05050:"
"05050:"
"05050")
boat4 = Image("00000:"
"00000:"
"00000:"
"05050:"
"05050")
boat5 = Image("00000:"
"00000:"
"00000:"
"00000:"
"05050")
boat6 = Image("00000:"
"00000:"
"00000:"
"00000:"
"00000")
all_boats = [boat1, boat2, boat3, boat4, boat5, boat6]
display.show(all_boats, delay=200)
练习
1. 把沉船设置为循环显示,使用不同速度来显示
2. 试着自定义一张动画
按钮 Buttons
我们通过代码让设备完成一些操作时,我们称之为输出 output
,而相反的过程就成为输入 input
。
输出可以理解成运行结果,输入就是让设备接收信号进行处理。micro:bit 上的按钮 A 和 B ,
就是对设备的信号输入。
在 microbit 中这两个按钮的对象就是 button_a , button_b
案例:显示按下A键的次数
from microbit import *
sleep(10000)
display.scroll(str(button_a.get_presses()))
练习
1. 修改时间或者去掉 str() 结果会怎样
事件循环 Event Loops
有时我们需要程序一直等待其他事件发生。比如说,循环执行某段代码直到按下按钮。
要实现循环就是要关键词 while 。它会检查添加是否为 True ,如果是真的就会一直重复执行这段代码,
如果是 False ,就跳出这段代码,执行后续代码。
Python 用相同的空格表示同个层次的代码,默认是4个空格,
Python 编辑器我们习惯把 tab 键设置为4个空格。
我们把这称之为嵌套。
案例:事件循环
from microbit import *
while running_time() < 10000:
display.show(Image.ASLEEP)
display.show(Image.SURPRISED)
running_time()
running_time 函数表示自从上次设备启动的到现在的时间(微秒)。
按下 micro:bit 上的 reset 键可重新启动设备。
while running_time() < 10000:
判断设备运行时间是否小于10000微秒(就是10秒)。
如果小于10秒,就显示图像 Image.ASLEEP 。
如果大于10秒,就跳出执行
display.show(Image.SURPRISED)
最后显示惊讶的表情图像
练习
1. 更改事件循环时间和显示的图像
事件处理 Handling an Event
如果我们想无限时间循环执行,直到我们按下按钮,要怎么做呢?
无限循环很简单
while True:
# 执行事务
案例:事件处理
from microbit import *
while True:
if button_a.is_pressed():
display.show(Image.HAPPY)
elif button_b.is_pressed():
break
else:
display.show(Image.SAD)
display.clear()
if, elif 和 else
```
if 如果真:
# 执行某些事务
elif 否则如果真:
# 执行另一些事务
else 否则:
# 执行其它事务
```
练习
1. 简化上面代码
2. 当同时按a和b按钮时,进行判断显示(提示:Python 逻辑词有 and , or ,not 逻辑)
输入/输出 Input/Output
micro:bit 卡底部有一排金属条,我们习惯称为金手指,实际上就是输入/输出的扩展针,简称 I/O 针。
其中有几个特别大,这是容易接上外部设备,分别是 0,1,2,3v 和 GND 。计算机计数都是从 0 开始的。
每个针对应 microbit 的对象称为 pinN ,这里的 N 就是针的数字。比如金手指上的 0 就叫着 pin0 。

案例:接触判断
最简单的输入判断就是检查是否接触针。当接上各种输入输出设备时,这就变得非常好玩了。
from microbit import *
while True:
if pin0.is_touched():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
pin0.is_touched():
当 pin0 被接触时就返回真。
练习
接上扩展板
1. 替换不同表情包
案例:滴滴滴滴
from microbit import *
while True:
pin0.write_digital(1)
sleep(20)
pin0.write_digital(0)
sleep(480)
pin0.write_digital(value)
写入信号值 1,0,True,False 。1,True 表示接通,0,False 表示关闭。
布尔值 boolen
True 、False 关键词是 Python 程序的真假值
运行结果
设备在半秒频率发出滴滴声
练习
1. 修改 sleep() 中的参数值,有什么不同呢
2. 试着用 True 、False 替换上面程序
音乐 Music
MicroPython 内置了不少音乐,连上扩展卡听听。
音阶
节拍
案例:演奏
import music
music.play(music.NYAN)
练习
1. 找出三首熟悉的音乐
- music.DADADADUM
- music.ENTERTAINER
- music.PRELUDE
- music.ODE
- music.NYAN
- music.RINGTONE
- music.FUNK
- music.BLUES
- music.BIRTHDAY
- music.WEDDING
- music.FUNERAL
- music.PUNCHLINE
- music.PYTHON
- music.BADDY
- music.CHASE
- music.BA_DING
- music.WAWAWAWAA
- music.JUMP_UP
- music.JUMP_DOWN
- music.POWER_UP
- music.POWER_DOWN
案例:两只老虎
import music
tune = ["C4:4", "D4:4", "E4:4", "C4:4", "C4:4", "D4:4", "E4:4", "C4:4",
"E4:4", "F4:4", "G4:8", "E4:4", "F4:4", "G4:8"]
music.play(tune)
C4:4
音阶 ["C", "D", "E", "F", "G", "A", "B"],可设置 1 到 8 度,:
后面表示几个节拍。
上面的 "C4:4" 可写成 "C"
练习
1. 创建一首乐曲或者改编两只老虎
案例:报警声
import music
while True:
for freq in range(880, 1760, 16):
music.pitch(freq, 6)
for freq in range(1760, 880, -16):
music.pitch(freq, 6)
music.pitch(freq, 6)
pitch 方法就是播放声音频率,440 就是 啦
的音,6 表示 频率持续 6 微秒。
range(880, 1760, 16)
在 Python 中 range 函数通常用于生产数值,这里表示生成大于等于 880 小于 1760 之间的数值,每个数间隔 16。
实际上就是 880, 896, 912, ...
可以使用下面例子观察 range 函数生成的值
from microbit import *
for a in range(1, 10):
display.show(a)
sleep(1000)
for 循环
除了 while ,for 也可以用来循环。
from microbit import *
for a in ["A", "B", "C", "D", "E", "F", "G"]:
display.show(a)
sleep(1000)
```
### 练习
1. 修改不同的频率和幅度,看看效果
2. 使用 range() ,显示 1 - 10 之间的奇数
3. 我们曾经做过案例:转动的时钟,你能不能使用 for 语句来实现。
## 随机 Random
有时候,需要随机显示内容,MicroPython 的 random 模块就能用上排场
### 案例:随机名字
from microbit import *
import random
names = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ]
display.scroll(random.choice(names))
+ names
名字的列表
+ random.choice(names)
随机返回一个名字
### 练习
1. 试一试修改成同学的名字拼音
### 案例:随机整数
from microbit import *
import random
display.show(str(random.randint(1, 6)))
+ random.randint(1, 6)
随机大于等于 1 ,小于等于 6 之间的整数
### 练习
1. 试一试修改随机整数范围
### 案例:随机浮点数
from microbit import *
import random
answer = random.randrange(100) + random.random()
display.scroll(str(answer))
+ 浮点数
带有小数点的数在计算机中称为浮点数 floating
+ random.randrange(100)
随机 0 到 100,不包括 100
+ random.random()
随机一个浮点数,范围在 0.0 到 1.0 之间
### 练习
1. 当按下按钮A,就显示 1-9 之间的浮点数。(提示 if button_a.was_pressed(): )
## 运动 Movement
Micro:bit 包含着加速度传感器,空间坐标通过三轴表示:
+ X 水平表示左右 left right
+ Y 深度表示前后 forward backward
+ Z 垂直表示倾斜 up down
### 案例:水平测试仪器
from microbit import *
while True:
reading = accelerometer.get_x()
if reading > 20:
display.show("R")
elif reading < -20:
display.show("L")
else:
display.show("-")
+ accelerometer.get_x()
左倾为负数,右倾正 ,加速度单位 milli-g ,简称mg ,范围在在 +/- 0 - 1024 之间
### 练习
1. 用 get_y() 和 get_z() 方法,看看显示结果
## 姿态 Gestures
加速度传感器也可以感应设置姿态。
### 案例:脸朝上
from microbit import *
while True:
gesture = accelerometer.current_gesture()
if gesture == "face up":
display.show(Image.HAPPY)
else:
display.show(Image.ANGRY)
+ accelerometer.current_gesture()
获取代替姿态的字符串,有下面几种:
up, down, left, right, face up, face down, freefall, 3g, 6g, 8g, shake.
+ if gesture == "face up":
等于判断使用 == 两个等号
### 练习
1. 替换不同的姿态,看看运行结果
### 案例:摇骰子
from microbit import *
import random
display.show("*")
while True:
if accelerometer.was_gesture("shake"):
display.clear()
display.show(str(random.randint(1, 6)))
### 练习
1. 你能实现要摇骰子作弊吗,比如始终出现最大值6。(提示,使用按钮)
## 存储 Storage
+ 数据存储
有时候,我们需要保存数据,这样即使设备断电也可以长期存储在设备上。
在 micro:bit 的 MicroPython 有一个简单的文件系统,有 30k 的存储空间。
+ 文件系统 file system
文件系统就是存储和组织电子文档的系统。为了更好管理电子文件,我们往往需要扩展名来区别文件的格式。
比如,.txt 表示文本文件,.jpg 是JPEG图片文件,而 .mp3 表示这是音频文件。

+ micro:bit 存储
笔记本电脑和 PC 机允许你创建目录 (directories) 和子目录,但是 MicroPython 的文件系统是扁平的,就一个路径。
USB 驱动的盘符是用来刷入 16 进制 HEX 文件,并不是存储数据。所以在 micro:bit 创建的文件,是无法直接看到的。
### 案例:读写文件
from microbit import *
with open('hello.txt', 'w') as my_file:
my_file.write("Hello, World!")
with open('hello.txt') as my_file:
content = my_file.read()
display.scroll(content)
+ with open('some_file') as some_object:
with 关键词是用于文本代码管理的,上面的意思是把 some_file 作为某个对象 some_object 管理打开。
+ open(dir, 'w')
open 函数读取文件,做第一个表示文件名,第二个表示要做什么操作,'w' 表示写文件,'r' 表示读文件,默认为读,可以不写。
因为 micro:bit 都存储在一个位置,所有直接写文件名就可以了。
+ write()
写入文档内容。MicroPython 当你写入内容是会变原来的内容覆盖。
+ read()
读出文档内容
### 练习
1. 尝试写入不同的内容
### 操作系统 os
MicroPython 直接引用了 Python 的标准库。所有你可以完成下面操作。
#### 案例:操作文件
列出文件
from microbit import display
import os
my_files = os.listdir()
for file in my_files:
display.scroll(file + ';')
查看文件大小
from microbit import display
import os
file_size = os.size('hello.txt')
display.scroll(file_size)
删除文件
from microbit import display
import os
os.remove('hello.txt')
my_files = os.listdir()
for file in my_files:
display.scroll(file + ';')
+ 文件大小
使用字节为单位,每个符号用一个字节表示,所有 Hello, World! 是13个字节,
空白也是一个字节哦
#### 练习
1. 写个自己的文件,然后进行操作
### 传输文件 File Transfer
因为无法直接看到显示内容,我们需要其它工具管理 micro:bit 上面的文件,
这里有个工具叫 microfs ,可以在电脑上通过 `pip install microfs` 安装。
[microfs 参考](https://microfs.readthedocs.io/)
#### 案例:管理 micro:bit 文件
列出文件
```shell
ufs ls
获取文件
ufs get hello.txt
删除文件
ufs rm hello.txt
推送文件
ufs put hello.txt
练习
1. 完成文件传输练习
main.py 文件
当你查看文件系统时,会发现里有个 main.py 文件,这个特殊文件是在每次启动设备时就运行的。
刷入 micro:bit 的代码会自动保存为这个文件。
当我们要写更复杂的程序时,就可以使用这个特性。
案例:导入文件程序
创建一个文件 hello.py
def say_hello(name="Function"):
return "Hello, " + name
def ... :
定义一个函数,return 表示返回值
传入 micro:bit
ufs put hello.py
调用主程序
from microbit import display
from hello import say_hello
display.scroll(say_hello())
练习
1. 完成导入文件程序
网络
后续 Next Steps
你已经初步了解了在 BBC micro:bit 中进行 MicroPython 的编程。
完成20多个案例和练习,你正在成为编程高手。
在这里过程中可能遇到不少困难和挫折,目前看起来不错,你都挺过来了,请分享快乐给你的朋友。
如果你想了解更多 microbit 模块的内容可以查看
BBC micro:bit API 参考
想把学到的知识应用起来,可以参加硬件编程项目,在实践中掌握和熟练编程的知识和技能。
也可以深入学习 Python 编程语言,提升编程的应用能力。