Unihiker K10 - MicroPython
Overview
CLI toolkit for Unihiker K10 board MicroPython programming. Core principle: Follow reference docs exactly—no improvisation.
When to Use
- Uploading MicroPython code to K10
- Flashing MicroPython firmware
- Looking up K10 MicroPython APIs (screen, sensors, RGB, audio, AI)
- Port detection or connectivity issues
Commands
| Command | Description |
|---|---|
k10-micropython upload-mp <file.py> | 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:
- Auto-execution: Only
main.pyruns automatically on boot. Other filenames (e.g.,test.py) must be imported or run via REPL - Best practice: Name your entry file as
main.pyfor auto-start - Reference:
references/micropython-api.md
Common 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模式的区别:
- 固件互斥: K10不能同时运行Arduino和MicroPython固件,需要刷写对应固件
- 入口文件: MicroPython只有
main.py会自动运行,其他文件需要手动import - 工具链不同: Arduino使用arduino-cli,MicroPython使用mpremote
刷写MicroPython固件步骤:
- 按住BOOT按钮
- 按RST按钮重置
- 释放BOOT按钮
- 运行刷写命令
- 等待完成(30-60秒)
- 按RST重启
注意事项:
- V0.9.2固件中AI功能和WiFi不能同时使用,会导致内存溢出
- 首次刷写后建议先上传简单的main.py测试
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.usbmodem2201
# Flash MicroPython firmware
bash path/to/unihiker-k10-micropython/scripts/flash-micropython.sh /dev/cu.usbmodem2201
MicroPython Code Execution
- Automatic execution: Files named
main.pyrun automatically after upload and reset - Manual execution: Other filenames require REPL interaction:
# 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)
- Hold BOOT button on K10
- Press RST button on K10
- Release BOOT button
- Run:
k10-micropython flash-mpork10-micropython flash-mp --port /dev/cu.usbmodem2201 - Wait for flash to complete (30-60 seconds)
- Press RST button on K10 to restart
- Upload Python code with
k10-micropython upload-mp file.py
Method 2: Interactive
- Run:
k10-micropython flash-mp - Follow on-screen prompts
- 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.py
# 2. Upload as main.py for auto-run
k10-micropython upload-mp main.py
# 3. 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:
- Screen initialization and direction control
- Text drawing with custom font size and color
- Shape drawing: lines, circles, rectangles, points
- Image display from TF card
- QR code generation and display
Sensors:
- Buttons A/B (callback and status check)
- Accelerometer (X, Y, Z axes)
- Temperature & humidity (AHT20)
- Light sensor (ALS)
- Microphone (recording to TF card)
RGB LED Control:
- Individual LED control (0, 1, 2)
- All LEDs control (-1)
- Brightness control (0-9)
Audio:
- Buzzer control (playTone)
- Microphone recording to TF card
AI Features (V0.9.2):
- Face Detection: Detect faces, show length, width, center coordinates
- Face Recognition: Enroll faces, recognize faces, display ID
- Cat Recognition: Detect and classify cats (with TF card images)
- Movement Detection: Motion detection with customizable threshold
- QR Code Scanning: Scan QR codes and display content
- Speech Recognition: Wake-up command and voice commands
Note on AI:
- AI functionality is resource-intensive in V0.9.2 firmware
- AI + WiFi conflict: Use only one at a time to avoid memory overflow
Example: Face Recognition with LED Feedback
import ai
from unihiker_k10 import screen, rgb, button
import time
def 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:
- Face Enroll (A button):
ai.send_face_cmd(1)- Green LED - Face Recognition (automatic): Display ID, Green LED
- Unknown face: Red LED
- Delete all faces (B button):
ai.send_face_cmd(3)- Clear stored faces - Camera display: Show real-time camera feed on screen