Unihiker K10 MicroPython
by @rockets-cn
Use when programming Unihiker K10 board with MicroPython, uploading code, flashing firmware, or accessing K10 MicroPython APIs (screen, sensors, RGB, audio, AI)
clawhub install unihiker-k10-micropython📖 About This Skill
name: unihiker-k10-micropython description: Use when programming Unihiker K10 board with MicroPython, uploading code, flashing firmware, or accessing K10 MicroPython APIs (screen, sensors, RGB, audio, AI)
Unihiker K10 - MicroPython
Overview
CLI toolkit for Unihiker K10 board MicroPython programming. Core principle: Follow reference docs exactly—no improvisation.
When to Use
Commands
| Command | Description |
|---------|-------------|
| k10-micropython upload-mp | Upload MicroPython |
| k10-micropython flash-mp | Flash MicroPython firmware |
| k10-micropython ports | List serial ports |
| k10-micropython doctor | Environment diagnostic |
Coding
Basic Template
from unihiker_k10 import screen
screen.init(dir=2)
screen.draw_text(text="Hello", x=10, y=0, font_size=24, color=0xFF0000)
screen.show_draw()
Important:
main.py runs automatically on boot. Other filenames (e.g., test.py) must be imported or run via REPLmain.py for auto-startreferences/micropython-api.mdCommon Issues
| Issue | Solution |
|-------|----------|
| MicroPython code doesn't run | Only main.py runs automatically. Rename your file or use REPL to run it |
| Flash failed | Make sure BOOT button is held when connecting USB to enter download mode |
| mpremote: could not enter raw repl | K10 is running Arduino, flash MicroPython firmware first |
| Port not found | k10-micropython ports or hold BOOT while connecting |
| AI + WiFi conflict | Use only one in V0.9.2 |
| Windows PowerShell执行策略限制 | 运行 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser |
开发经验教训
2025-03-22 实践总结
与Arduino模式的区别:
1. 固件互斥: K10不能同时运行Arduino和MicroPython固件,需要刷写对应固件
2. 入口文件: MicroPython只有main.py会自动运行,其他文件需要手动import
3. 工具链不同: Arduino使用arduino-cli,MicroPython使用mpremote
刷写MicroPython固件步骤: 1. 按住BOOT按钮 2. 按RST按钮重置 3. 释放BOOT按钮 4. 运行刷写命令 5. 等待完成(30-60秒) 6. 按RST重启
注意事项:
Files
unihiker-k10-micropython/
├── SKILL.md # This file
└── references/ # MicroPython API docs
└── micropython-api.md # MicroPython API reference
Manual usage without CLI:
# Upload MicroPython
bash path/to/unihiker-k10-micropython/scripts/upload-micropython.sh main.py /dev/cu.usbmodem2201Flash MicroPython firmware
bash path/to/unihiker-k10-micropython/scripts/flash-micropython.sh /dev/cu.usbmodem2201
MicroPython Code Execution
main.py run automatically after upload and reset # Connect to REPL
mpremote connect /dev/cu.usbmodem2201 repl
# Import and run your module
>>> import test
File naming best practice:
your_project/
├── main.py # Entry point - runs automatically on boot
├── test.py # Test file - must be imported via REPL
└── heart.py # Other files - import with import heart
Flashing MicroPython Firmware
Method 1: Manual (Recommended)
1. Hold BOOT button on K10
2. Press RST button on K10
3. Release BOOT button
4. Run: k10-micropython flash-mp or k10-micropython flash-mp --port /dev/cu.usbmodem2201
5. Wait for flash to complete (30-60 seconds)
6. Press RST button on K10 to restart
7. Upload Python code with k10-micropython upload-mp file.py
Method 2: Interactive
1. Run: k10-micropython flash-mp
2. Follow on-screen prompts
3. Hold BOOT button, connect USB, release BOOT
Quick Development Workflow
# 1. Create MicroPython script
echo "from unihiker_k10 import screen
screen.init(dir=2)
screen.draw_text(text='Hello K10', x=10, y=0, font_size=24, color=0xFFFFFF)
screen.show_draw()" > main.py2. Upload as main.py for auto-run
k10-micropython upload-mp main.py3. Or test as test.py and run via REPL
k10-micropython upload-mp test.py
mpremote connect /dev/cu.usbmodem2201 repl
>>> import test
Key Features
Screen:
Sensors:
RGB LED Control:
Audio:
AI Features (V0.9.2):
Note on AI:
Example: Face Recognition with LED Feedback
import ai
from unihiker_k10 import screen, rgb, button
import timedef callback(data):
if data == 1:
screen.draw_text(text="录入中...", x=10, y=90, font_size=24, color=0xFFFF00)
elif data >= 0:
screen.draw_text(text=f"人脸ID: {data}", x=10, y=90, font_size=24, color=0x00FF00)
screen.show_draw()
screen.init(dir=2)
screen.show_bg(color=0x000000)
screen.draw_text(text="A: 录入", x=10, y=50, font_size=18, color=0xFFFF00)
screen.draw_text(text="B: 删除全部", x=10, y=70, font_size=18, color=0xFF0000)
screen.draw_text(text="LED: 红色=未知", x=10, y=110, font_size=18, color=0xFF0000)
screen.draw_text(text=" 绿色=已识别", x=10, y=130, font_size=18, color=0x00FF00)
screen.show_draw()
rgb.brightness(9)
ai.init_ai()
ai.camera_start()
ai.face_recognize_start()
ai.send_face_cmd(2) # Recognition mode
ai.set_asr_callback(callback)
try:
while True:
image_data = ai.camera_capture()
screen.show_camera_img(image_data)
time.sleep_ms(1)
except KeyboardInterrupt:
print("Exiting...")
ai.deinit_ai()
rgb.brightness(0)
screen.clear()
Features:
ai.send_face_cmd(1) - Green LEDai.send_face_cmd(3) - Clear stored faces