I'll keep updating this post as more information becomes available. (updated 8/16/2019)
Setup
- Download kflash_gui (win/linux). Click the arrow by "Assets": https://github.com/Sipeed/kflash_gui/releases
- Upgrade the M5StickV firmware using the XXXXXXXm5stickv.bin file from the latest directory, like maixpy_v0.4.0_39_g083e0cc: http://dl.sipeed.com/MAIX/MaixPy/release/master/
- Install the MaixPy IDE (linux/win). It's the easiest way to get started: http://dl.sipeed.com/MAIX/MaixPy/ide/
Programmer information
- Overview along with Module/Lib information. Presently incomplete. Scroll down to the "MODULES/LIBS" section: https://maixpy.sipeed.com/en/
- Example scripts: https://github.com/sipeed/MaixPy_scripts
- Complete demo script that comes with the M5StickV default firmware: https://github.com/sboger/m5stickv-firmware-files
- Example pulling information from the Power Management Unit (apparently undocumented): https://github.com/mongonta0716/m5stickv-tips/blob/master/batterymonitor.py
- Example of a complex project that uses the SD card as it's main storage. (See Advanced tips below) Brownie: https://github.com/ksasao/brownie
- Datasheet. In-depth information about the hardware like audio file formats, RAM address locations, etc. Maybe useful for expert embedded hardware programmers: https://github.com/kendryte/kendryte-doc-datasheet/blob/master/en/SUMMARY.md
Beginner tips
- Long-press the small button closest to the usb port to turn off. Short press to turn on. This only works when running on battery. When plugged into usb it will perform a reset only.
- Fat32 formatted micro SD cards only work with the latest MaixPy firmware. Upgrade!
- M5StickV is made by M5Stack, but follows the standard hardware as defined by Sipeed/MAix. M5Stack provides you the hardware, but firmware updates, IDE, documentation, examples all come from Sipeed/MAIX.
Advanced tips
- The M5StickV boots and runs the script boot.py located in internal storage. Using the MaixPy IDE you can easily try out simple scripts and save them to the M5StickV internal storage so they start on boot.
- Think of the Micro SD card as a swappable hard-drive for your M5Stick. You can build a multi-file project, save it to the SD card, naming the main python file boot.py and the M5Stick will detect the SD card and run your code on boot. Instead of constantly uploading to the M5Stick directly, you simply put your projects on multiple SD cards and swap them into the M5StickV as needed. No constant USB tethered uploading to the M5Stick is required with this method. An example of a complex project that uses this method is Brownie: https://github.com/ksasao/brownie
- While the "whole app on the sd card" is a nice approach for a completed app, it's very awkward during development. The second approach is to put all your app's (script's) resources on the sd card, including large or custom CNN models and place your boot.py on the internal storage. You can then continue to develop your script while usb tethered, easily editing it and sending it to the board for testing. Once completed, you can move your boot.py to the sd card and have a portable app.
Q&A
- Q: What is the difference between M5Stack's "M5StickV_Firmware_0813.kfpkg" and the Sipeed's "maixpy_v0.4.0_39_g083e0cc_m5stickv.bin"?
- A: Branding, mostly. The .kfpkg just bundles the .bin firmware from Sipeed with an .img file containing the M5Stack boot.py demo, ding.wav, and startup.jpg. It's M5Stack's "production release" that all new M5StickV's come with. (Note: The .kfpkg also includes the facedetect.kmodel file, but as I understand it, the .bin file from Sipeed also includes it.) You should still flash the latest .bin release directly from Sipeed so you have the latest functionality.
- Q: I'm still really confused about how the AI component of this device works. I've done arduino and python programming, but I'm feeling a little lost when it comes to this device.
- A: M5Stack has produced a feat of technical engineering by making a thumb-sized consumer device that includes a Neural Network Processor(KPU). However, this device is still functionally similar to their other STICK products -- it has a camera, a display, speaker, microphone, and buttons. ESP32 based products can use micropython or arduino, and because of their proliferation, are greatly supported. This is a cutting edge device, in that a custom CPU+KPU are being used. M5Stack relies heavily on Sipeed, the makers of this CPU for support. Sipeed has the job of translating their custom CPU/KPU functions to micropython. Because of this we, the coders, are heavily reliant on Sipeed.
Let me explain two important things. First, this isn't a complete machine vision platform. This is still an embedded device that can impressively run simple machine vision code right out of the box. It even has the power to perform learning functions. But anything you want to do that's unique, or specific, you'll need a full-sized machine vision development platform for training models, testing, etc. Then those custom models can be added to the M5StickV along with some python code for a completed project.
Second, machine vision, AI, ML, etc. is still a complex and developing field. It's not friendly like the arduino environment and will take a fair amount of study and learning separately from the micropython environment.
That said, to try and answer the question, M5StickV is an M5Stick. You can do everything with it you do with, for example, an M5StickC. However, it also includes a KPU. A KPU is like a highly specialized grep (search) engine. You supply it with 'patterns', in the format of a "model" file, and it excels at matching those patterns. Getting to that model - training the AI on how and what you want it to recognize is a field (or hobby) in and of itself. In other words, you'll need to learn machine vision first, before you get the full benefit of what the M5StickV has to offer. M5Stack & Sipeed are making that learning curve way easier with micropython, pre-built models, and pretty decent machine vision demos. But it will still take an investment on your part. - Q: Who are you?
- A: I'm a Linux Engineer by trade. I'm also an arduino, embedded device, AI/ML, and visual technology hobbyist. I'm not affiliated with M5Stack or Sipeed in any way. I'm currently learning about AI/ML myself, and will try to pass along any useful tips as I discover them.
A.I. links
- "Train, Convert, Run MobileNet on Sipeed MaixPy": https://bbs.sipeed.com/t/topic/682
- "Build, share, and run AI models": https://maixhub.com/
- Yolo2 information: https://pjreddie.com/darknet/yolov2/