
The board can be purchased for a little more than PLN 100:

First, make sure that you choose a kit with a camera and a screen. It is easy to be fooled by a lower price, where in fact you buy, for example, the module or the case alone. It is necessary to check well what you order.
What does the M1S offer?
Let's give voice to the specifications from the seller:






A housing can also be purchased, although mounting it requires moving the camera to the other side of the module:

The basis of our work with this module will probably be the documentation from sipeed com:
https://wiki.sipeed.com/hardware/en/maix/m1s/m1s_dock.html
I also based my work on this material myself. Below is a description of my steps, along with my comments and experiences.
First boot
Put power to the OTG port and press the RESET button. The board should wake up, the screen and camera will boot up.
The delay from the camera is not noticeable, everything runs very smoothly:
The screen also shows the status of the buttons, as a demonstration, they can change the value of the number in the upper right corner:
Additionally, our computer will recognize the new USB device. This can be used to upload firmware for us.

In the manufacturer's documentation, the USB drive shown here is 3.73MB, in mine the size is slightly larger. Do I have a newer version with more memory?

The second USB C slot offers access to the serial port. You need to select baud 2000000:

And actually - to the serial ports, because there are two:

The first is the already shown log, the second is the command line.
You can send commands there, for example help :

Demo lvgl_demo [/size]
Let's now take a look at some examples from M1s_BL808_example. First, a graphics demo.
LVGL (Light and Versatile Graphics Library) is a free open source library for drawing graphics.
A compiled example is available here:
https://dl.sipeed.com/shareURL/MAIX/M1s/M1s_Dock/7_Firmware/demo_bin/lvgl_demo
To upload the batch, you need first put the board into the upload state .
Really - just because the board is also visible as a flash device/memory while the demo is running, doesn't mean it will succeed in uploading something.
Hold both side buttons and then press RESET, then release RESET and only then release the side buttons .
Then drag the downloaded (or compiled by us) batch onto the mobile device:

After a while, the board should boot itself. Here's the LVGL demo in action:
At the end, a menu will be displayed where you can also test the touchscreen:
Front-facing camera
After purchase, you will receive the module received in such a way, that the camera "looks" in the same direction as the display. This makes testing difficult to some extent.
The camera can be switched to the other side, as its ribbon goes through a slot in the PCB:





Removed camera:

The camera can be plugged in so that it will be on the other side of the module, but we can not reverse the ribbon, pins first (marked 1) of the ribbon must match pin 1 on the connector:

. Image processing demo Another demo, image_processing_demo, demonstrates the ability to process images. The processing itself is quite simple, we use the buttons to select one of the predefined masks and so we can observe the effects:



[size=18] Character recognition demo? Now let's run the tinymaix_mnist_demo demo.
TinyMaix is a small neural network inference library designed specifically for microcontrollers (TinyML), allowing you to run lightweight machine learning models on any single-chip microcomputer. I didn't have much luck with this demo. In theory, it's supposed to recognize numbers, but in my case it often limped to 8 or recognized incorrectly. I can show a screenshot from the manufacturer's documentation here for comparison:


With my painter's handwriting, the program confuses 1 with 7 and with 5 it does not cope at all:
PikaScript language
There is also a demo PikaScript . PikaScript is a cross-platform, powerful Python-based scripting language.
After uploading the PikaScript demo, we can send this script to the board via the UART, line by line. Here's an example:
arc = lv.arc(lv.scr_act())
arc.set_end_angle(200)
arc.set_size(150, 150)
arc.center()
Let's review how this script works step by step. The first line creates the arc/slider, here is the effect after execution:
arc = lv.arc(lv.scr_act())


The line with set_end_angle sets the position of the knob:
arc.set_end_angle(200)

You can change the value of its argument, then the effect will be different:
arc.set_end_angle(380)

The center function, on the other hand, centers the object on the screen:
arc.center()

Let's try to do a little more. Maybe a script like this:
# Create a screen
scr = lv.scr_act()
# Create a label widget
label = lv.label(scr)
label.set_text("Hello, PicaScript!")
label.align(lv.ALIGN.CENTER, 0, 0)
Result:

You can also create a button:
# Create a button widget
btn = lv.btn(scr)
btn.align(lv.ALIGN.CENTER, 0, -20)
label = lv.label(btn)
label.set_text("Click Me!")
Result:

I also tried to write a click event handler for the button in this language, but I haven't gotten it to work yet.
Compiling source examples [/size] Compiling source examples[/b] 6fbd5ec
On the main documentation page of the board there are also instructions for compiling example sources and full links to the SDK. I managed to compile them on a virtual machine with Ubuntu, there were no problems, therefore I do not describe it.

I also made an attempt to compile them on WSL, which is a "Linux environment on Windows", but I have not yet managed to get it working.
Summary
This was just a first look at this board. So far I like it.
It is easy to upload programs, and the display and camera have satisfactory performance for me. I also didn't feel any image lag, and this also bodes well for future projects.
In the next topic I'll try to compile, test and discuss other examples of it from the SDK, maybe I can also modify it a bit, such as making a simple watch on a touchscreen display.
In addition, I plan to run an example of streaming video from a webcam to a PC (it is practically ready in the SDK) and experiment with TinyML.
Meanwhile I will ask - do you have any experience with this board, do you see a potential use for it? Or do you think it is an unnecessary gadget and it is better to just reach for Raspberry? Feel free to discuss.
Cool? Ranking DIY Helpful post? Buy me a coffee.