K230基础-MicroPython
第一章 MicroPython基础
📌 本章目标:
掌握 MicroPython 的基本语法、运行机制、调试方法,为后续 GPIO、PWM、UART 等硬件控制打下坚实的语言和工具基础。
本章不涉及任何硬件引脚操作!
1.1 MicroPython 是什么?
MicroPython 是 Python 3 的一个精简高效实现,专为微控制器和资源受限环境设计。它保留了 Python 的核心语法和易用性,同时提供直接访问底层硬件的能力。
1.1.1 核心特性
特性 | 说明 |
---|---|
✅ 语法兼容 Python 3 | print() , for , def , class , import 等完全兼容 |
✅ 交互式 REPL | 实时输入、执行、调试,开发效率极高 |
✅ 内置常用模块 | machine , utime , uos , gc , sys 等 |
✅ 支持文件系统 | 可读写 main.py , boot.py , 自定义模块 |
✅ 垃圾回收(GC) | 自动管理内存,避免内存泄漏 |
⚠️ 无完整标准库 | 不支持 numpy , pandas , threading 等大型库 |
⚠️ 无操作系统概念 | 无进程、无多线程(部分平台支持 _thread ) |
2. 开发环境搭建与 REPL 使用
2.1 烧录固件(简要回顾)
python3 kflash.py -p /dev/ttyUSB0 -b 1500000 k230_micropython.bin
烧录后设备自动重启,进入 MicroPython REPL。
2.2 REPL 详解(Read-Eval-Print Loop)
连接串口后,你将看到:
MicroPython v1.20 on 2024-06-01; K230 with kendryte-k230
Type "help()" for more information.
>>>
2.2.1 基本操作
>>> print("Hello, K230!")
Hello, K230!>>> 2 + 3 * 4
14>>> x = 10
>>> x ** 2
100
2.2.2 多行输入(自动缩进)
输入 :
后按回车,REPL 会自动进入缩进模式:
>>> for i in range(3):
... print("Count:", i)
...
Count: 0
Count: 1
Count: 2
💡 退出缩进:空行 + 回车
2.2.3 特殊命令
命令 | 功能 |
---|---|
help() | 显示帮助 |
help('modules') | 列出所有可用模块 |
dir() | 查看当前命名空间变量 |
dir(obj) | 查看对象的所有属性/方法 |
Ctrl+C | 中断当前程序/输入 |
Ctrl+D | 软复位(重启解释器) |
3. 基础语法快速过一遍
🎯 本节为复习/速查,假设你有 Python 基础。若无,建议先学习 Python 基础语法。
3.1 变量与数据类型
# 动态类型
a = 10 # int
b = 3.14 # float
c = "Hello" # str
d = True # bool
e = None # NoneType# 查看类型
print(type(a)) # <class 'int'>
3.2 基本运算符
# 算术
+ - * / // % **# 比较
== != > < >= <=# 逻辑
and or not# 赋值
= += -= *= /=
3.3 控制结构
3.3.1 if-elif-else
x = 10
if x > 0:print("Positive")
elif x < 0:print("Negative")
else:print("Zero")
3.3.2 for 循环
for i in range(5): # 0,1,2,3,4print(i)for char in "ABC":print(char)
3.3.3 while 循环
count = 3
while count > 0:print(count)count -= 1
3.4 函数定义
def greet(name):return "Hello, " + nameprint(greet("K230")) # Hello, K230# 默认参数
def power(x, n=2):return x ** nprint(power(3)) # 9
print(power(3, 3)) # 27
3.5 异常处理
try:x = 10 / 0
except ZeroDivisionError as e:print("Error:", e)
except Exception as e:print("Other error:", e)
finally:print("Done.")
4. 常用内置模块介绍(非硬件)
4.1 sys
— 系统信息
import sysprint(sys.version) # MicroPython 版本
print(sys.platform) # 平台名,如 'kendryte-k230'
print(sys.path) # 模块搜索路径
4.2 gc
— 垃圾回收
import gcgc.collect() # 手动触发回收
print(gc.mem_free()) # 剩余堆内存(字节)
print(gc.mem_alloc()) # 已分配内存
💡 嵌入式开发中,内存是稀缺资源,建议定期
gc.collect()
4.3 utime
— 时间相关(非硬件定时器)
import utimeutime.sleep(1) # 休眠1秒
utime.sleep_ms(500) # 休眠500毫秒start = utime.ticks_ms() # 获取毫秒计数器
# ... 做点事 ...
end = utime.ticks_ms()
print("耗时:", utime.ticks_diff(end, start), "ms")
⚠️
utime.sleep()
会阻塞整个系统!硬件定时器请用machine.Timer
5. 模块系统与文件操作
5.1 模块导入
# 导入整个模块
import math
print(math.sqrt(16))# 导入特定函数
from math import sqrt
print(sqrt(25))# 重命名
import machine as m
5.2 自定义模块
创建文件 mylib.py
:
# mylib.py
def add(a, b):return a + bPI = 3.14159
在 REPL 或 main.py
中使用:
import mylib
print(mylib.add(2, 3)) # 5
print(mylib.PI) # 3.14159
5.3 文件读写(需文件系统支持)
# 写文件
with open('data.txt', 'w') as f:f.write("Hello from MicroPython!")# 读文件
with open('data.txt', 'r') as f:content = f.read()print(content)
📌 K230 通常挂载 SPI Flash 作为文件系统,支持读写。
6. 调试与错误处理技巧
6.1 常见错误类型
错误类型 | 原因示例 |
---|---|
NameError | 变量未定义 print(x) |
SyntaxError | 语法错误 if x=1: |
IndentationError | 缩进不一致 |
TypeError | 类型错误 "5" + 3 |
MemoryError | 内存不足 |
OSError | 文件不存在、权限错误等 |
6.2 调试技巧
6.2.1 打印调试(最常用)
print("x =", x, "type:", type(x))
6.2.2 使用 dir()
和 help()
import machine
print(dir(machine.Pin)) # 查看 Pin 类所有方法
help(machine.Pin) # 查看帮助文档
6.2.3 捕获所有异常(生产环境慎用)
try:# 你的主程序main()
except Exception as e:print("CRASH:", e)# 可选:保存日志、重启等
7. 为硬件开发做准备(过渡预告)
虽然本章不讲硬件,但你要知道:
- 所有硬件操作通过
machine
模块进行(下一章重点) - 时间相关操作使用
utime
或machine.Timer
- 中断、回调使用
micropython.schedule()
保证安全 - 性能敏感部分可考虑用 C 扩展或切换为裸机 C 开发
✅ 学完本章,你已具备:
- 熟练使用 REPL 进行交互式开发
- 编写结构清晰的函数和模块
- 管理内存和异常