MakeMaker创新实验室 MakeMaker创新实验室 ← 在线编程
RUN & DEBUG · 运行与查看错误

运行设备程序查看错误

数据线连上设备 → 自动列出设备里的文件 → 点「运行 main.py」→ 串口输出和报错都显示在下面,报错会自动标红并单独拎出来。

01

连接设备

USB 数据线 · 115200
未连接

用数据线把设备和电脑连起来(不是蓝牙)。浏览器要用 Chrome 或 Edge(手机上用 Edge 或 Bluefy)。 点「连接设备」后,弹出的小窗口里选那个串口——名称通常是 USB-SERIAL CH340、CP210x 或 USB 串行设备; 接了好几个设备就先拔掉其它的。连接时输出里如果冒出启动信息,是设备被自动复位了一下,正常。 连上以后,如果设备没在跑程序,下面「设备里的文件」那一栏会自动列出设备上的文件夹和文件名。

02

运行程序

点一次 = 让设备重新跑一遍 main.py
未运行

点「运行 main.py」时网页做四件事:先发 Ctrl-C 把设备里正在跑的程序打断;再发 Ctrl-B 把设备从 raw REPL 模式(上传程序时用的模式)退回正常模式; 然后问一下设备里有没有 main.py(下面那行小字);最后发 Ctrl-D 让设备软复位——效果相当于按一下设备上的复位键:重新开机,自动运行里面的 main.py。 程序跑起来之后打印的内容、报的错都会出现在下面的「串口输出」里。 「停止」只发 Ctrl-C,不重新开机;停完想再跑就再点一次「运行 main.py」。

03

设备里的 main.py

读的是设备上那份,不是电脑上的
还没读取

读出来的是设备里真正在跑的那一份——跟电脑上 Thonny 里打开的那份对不上,就说明设备里是另一个版本。 点「读取」会先发 Ctrl-C 把正在跑的程序停掉(读文件必须占用解释器),读完想继续测量就再点一次「运行 main.py」。 报错信息里如果提到某一行(比如字库缺字说的"第 39 行"),网页会直接跳到那一行并高亮。

04

设备里的文件

文件夹 + 文件名 + 大小
还没列出

列出设备里的文件夹和文件(带大小)。读目录要占用设备解释器,所以点按钮时会先发 Ctrl-C 停掉正在跑的程序(跟「读取设备里的 main.py」一样); 列完想继续测量,再点一次「运行 main.py」。
刚连上设备时,如果它停在 >>> 提示符(没在跑程序),网页会自动列一次,不用点;正在跑程序就不打扰它,只给一行提示。
设备上:main.py 是开机自动运行的程序,MakeMaker/、phyphoxBLE/ 是库文件夹。

05

检测到的错误

最近一条
— 还没检测到错误

                

06

串口输出

报错的行会标红
已收到 0 字节
输出会显示在这里……

「复制全部」复制的是最后 6 万个字符,直接发给老师或群里即可;想连程序一起发(给 AI 看更方便), 就点旁边的「复制程序+输出」。输出刷得太快看不清时点「暂停显示」, 再点一下恢复(暂停期间的输出不会丢,恢复后补上)。

07

常见错误速查

对不上就复制输出发群里
输出里出现什么意思 · 怎么办
OSError: [Errno 19] ENODEV(或程序里打的 ERR: ... ENODEV) 接的传感器/蓝牙没启动起来。先再点一次「运行 main.py」重试;还是一样,就把程序里 p.start(蓝牙名) 那句用 try 包住(照「在线编程」里双光电门测速那份程序的写法),或者先少接几个传感器。这一条最常见。
OSError: [Errno 116] ETIMEDOUT(报在 phyphoxBLE.py 的 start 里) 蓝牙控制器启动超时。同一个开机会话里蓝牙起第二次就容易这样:按一下设备上的复位键(或断开电池重新上电)再运行;也可以照「在线编程 → 力与加速度」那份程序,启动失败后 gc.collect() 再启动一遍。
traceback 里有 File "MakeMaker/font.py", line 77, in chinese(末行是 KeyError) 设备里的中文字库缺字:程序要画的某个汉字,设备的 MakeMaker/fonts.py 里没有,画到那一个字时就崩了。
① 先找出是哪个字:看 traceback 第一帧的行号——上面例子里的 File "main.py", line 39 就是程序第 39 行,那一行 f.chinese("…") 括号里的字就是缺的(点上面「读取设备里的 main.py」,网页会直接跳到这一行)。
② 看字库里有没有:到 汉字字模查询页点「连接设备」,页面会列出设备里已经有的汉字,对照一下缺的那个在不在里面。
③ 没有就加进去:在那页「汉字查询」里输入这个字 → 点「查询」→ 点「一键写入查询的汉字到设备」(已经在里面的字会自动跳过,写完设备自动重启生效)。
⚠️ 这个崩溃如果发生在启动蓝牙之后,还会连累下一次运行报 ETIMEDOUT(见上一条)——字库修好后按一下设备上的复位键。
MemoryError、[Errno 12] ENOMEM 内存不够了:少接一个传感器、少开一个蓝牙实验,或按一下设备复位键等两秒再点「运行 main.py」。
ImportError: no module named 'xxx' 设备里没装这个库(xxx 就是缺的那个)。到 固件烧录页里把库装到设备上。
NameError: name 'xxx' isn't defined、AttributeError 程序里的名字对不上——多半是上传时参数被改坏了,或程序版本和设备固件不配套。到「在线编程」里对应的上传页重新上传一次程序。
SyntaxError、IndentationError 程序本身写错了(多半是缩进)。同样回上传页重新上传一份完整程序。
Guru Meditation Error、Fatal exception、设备反复重启 程序把单片机搞崩了(常见于中断里干了太多事)。把「串口输出」整段「复制全部」发群里。
Brownout detector was triggered 供电不足,设备自己重启了:电池电压太低(充电)、或者用电脑 USB 口/集线器供电带不动(换一个 USB 口、直插机箱后面)。
rst:0x...、ets Jul 29 2019 这类启动日志 正常现象,不用管:这是上电/按复位键时芯片自己打的。只有 Guru Meditation Error 或 Fatal exception 才是程序崩了。
输出里出现 OK...、raw REPL; CTRL-B to exit,或者点了「运行」什么都不发生 设备被留在了 raw REPL 模式(上传程序/Thonny 写文件时用的模式,上次没正常退出来)。这个模式下"运行"不会让设备重启,main.py 根本不会跑。按一下设备上的复位键最省事;网页点「运行」时也会自动把它退出来。
出现 >>> 提示符(网页会显示「没有运行(回到 >>> 提示符)」) 说明 main.py 没在跑——正在跑的程序是不会出现提示符的,哪怕它一个字都不打印。查三处:设备里有没有 main.py(看卡片 02 那行自检结果)、串口有没有选错、固件有没有烧(见 烧录页)。

实在看不明白,就把程序和串口输出的提示一起拷贝下来发给 AI,让它帮你分析:点「串口输出」那一栏的 「复制程序+输出」,它会把设备里的 main.py 和串口输出拼成一段(前面带一句说明),整段贴给 AI 就行—— 再补一句你接的是哪个传感器、想做什么,它更容易看出问题在哪。也可以只点「复制全部」把输出发过去,程序另外用「复制代码」贴。