当前位置: 首页 > news >正文

K230基础-MicroPython

第一章 MicroPython基础

📌 本章目标
掌握 MicroPython 的基本语法、运行机制、调试方法,为后续 GPIO、PWM、UART 等硬件控制打下坚实的语言和工具基础。
本章不涉及任何硬件引脚操作!


1.1 MicroPython 是什么?

MicroPython 是 Python 3 的一个精简高效实现,专为微控制器和资源受限环境设计。它保留了 Python 的核心语法和易用性,同时提供直接访问底层硬件的能力。

1.1.1 核心特性

特性说明
✅ 语法兼容 Python 3print(), 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 模块进行(下一章重点)
  • 时间相关操作使用 utimemachine.Timer
  • 中断、回调使用 micropython.schedule() 保证安全
  • 性能敏感部分可考虑用 C 扩展或切换为裸机 C 开发

✅ 学完本章,你已具备:

  • 熟练使用 REPL 进行交互式开发
  • 编写结构清晰的函数和模块
  • 管理内存和异常

http://www.dtcms.com/a/395769.html

相关文章:

  • 网站访问问题:无法访问此网站、404
  • Redis 与Memcached 的对比
  • PyTorch 神经网络工具箱:核心原理与实践指南
  • 广义矩估计错误指定时的一个推导【续5】
  • 【STM32】ADC数模转换器
  • Tensorboard学习记录
  • Redis中常见数据结构底层实现结构是什么
  • 高频交易技术演进:从毫秒到纳秒的极限延迟优化之路
  • 从零开始搭建并部署一个基于Django和YOLO的智能模型项目
  • MySQL零基础学习Day2——数据库基础操作
  • 数学笔试选择题:题组1
  • Linux常用命令51——tail查看文件尾部内容
  • Django多数据库配置:mysql、mongo、redis、达梦
  • 图像拼接(反向拼接巨难,求指教!)
  • [免费]基于Python的深度学习音乐推荐系统(后端Django)【论文+源码+SQL脚本】
  • 南华 NHL-1 型加载减速工况法轻型柴油车烟度检测系统:技术解析与实战指南
  • 学习Java遇到的一些问题
  • 基于SpringBoot招聘信息管理系统
  • 多线程—线程通信之notifyAll()/wait()方法Demo
  • kotlin 常用函数
  • 2025年CSP-J1入门级初赛题解
  • vue3的基本指令以及对js的导入和导出
  • Linux 基础:关机与重启
  • React Native:分享Windows平台搭建react native并构建apk的操作流程和配置信息
  • EC24026露营灯警示灯芯片方案 报警声语音IC 单片机方案开发
  • 反量化的详细过程
  • C语言:实现3x3矩阵对角线求和
  • [Maven 基础课程]Maven 工程继承和聚合
  • 数据库--存储过程
  • mysql默认事务隔离级别下并发读不到最新数据解决方案