The OpenMV IDE is meant to provide an Arduino like experience for simple machine vision tasks using a camera sensor. In this tutorial, you will learn about some of the basic features of the OpenMV IDE and how to create a simple MicroPython script. The Nicla Vision has OpenMV firmware on the board by default, making it easy to connect to the OpenMV IDE.
Using the OpenMV IDE you can run MicroPython scripts on Nicla Vision. MicroPython provides a lot of classes and modules that make it easy to quickly explore the features of the Nicla Vision. In this tutorial you will first download the OpenMV IDE and set up the development environment. Here you can read more about the OpenMV IDE. OpenMV comes with its own firmware that is built on MicroPython. You will then learn to write a simple script that will blink the on-board RGB LED using some basic MicroPython commands.
Before proceeding with the tutorial, please update the board's bootloader. You can do this by first downloading the latest version of the "Mbed OS Nicla core" in the Arduino IDE. Then go to "File > Examples > STM32H747_System > STM32H747_manageBootloader" and upload this sketch to your board. After the sketch is uploaded, follow the instructions in the Serial Monitor.
Before you can start programming OpenMV scripts for the Nicla Vision, you need to download and install the OpenMV IDE.
Open the OpenMV download page in your browser, download the version that you need for your operating system and follow the instructions of the installer.
Connect the Nicla Vision to your computer via the USB cable if you have not done so yet.
Click on the "connect" symbol at the bottom of the left toolbar.
A pop-up will ask you how you would like to proceed. Select "Reset Firmware to Release Version". This will install the latest OpenMV firmware on the Nicla Vision. You can leave the option of erasing the internal file system unselected and click "OK".
Nicla Vision's green LED will start flashing while the OpenMV firmware is being uploaded to the board. A terminal window will open showing you the flashing progress. Wait until the green LED stops flashing and fading. You will see a message saying "DFU firmware update complete!" when the process is done.
The board will start flashing its blue LED when it is ready to be connected. After confirming the completion dialog, the Nicla Vision should already be connected to the OpenMV IDE, otherwise click the "connect" button (plug symbol) once again.
Create a new script by clicking the "New File" button in the toolbar on the left side. Import the required module
1import pyb # Import module for board related functions
A module in Python® is a confined bundle of functionality. By importing it into the script, it becomes available. For this example you will only need
, which is a module that contains board related functionality such as PIN handling. You can read more about its functions here.
Now you can create the variables that will control our built-in RGB LED. With
you can easily control each color.
1redLED = pyb.LED(1) # built-in red LED2greenLED = pyb.LED(2) # built-in green LED3blueLED = pyb.LED(3) # built-in blue LED
At this point, you can easily distinguish between which color you control in the script.
Putting our code inside a while loop will make the code run continuously. In the loop you can turn on an LED with
, then you can use the
function to create a delay. This function will start executing with the next instruction in the script. The duration of the delay can be controlled by changing the value inside the parentheses. The number defines how many milliseconds the board will wait. After the specified time has passed, you can turn off the LED with the
function. You can repeat that for each color.
1while True:2 # Turns on the red LED3 redLED.on()4 # Makes the script wait for 1 second (1000 milliseconds)5 pyb.delay(1000)6 # Turns off the red LED7 redLED.off()8 pyb.delay(1000)9 greenLED.on()10 pyb.delay(1000)11 greenLED.off()12 pyb.delay(1000)13 blueLED.on()14 pyb.delay(1000)15 blueLED.off()16 pyb.delay(1000)
Here you can see the complete blink script:
1import pyb # Import module for board related functions23redLED = pyb.LED(1) # built-in red LED4greenLED = pyb.LED(2) # built-in green LED5blueLED = pyb.LED(3) # built-in blue LED67while True:89 # Turns on the red LED10 redLED.on()11 # Makes the script wait for 1 second (1000 milliseconds)12 pyb.delay(1000)13 # Turns off the red LED14 redLED.off()15 pyb.delay(1000)16 greenLED.on()17 pyb.delay(1000)18 greenLED.off()19 pyb.delay(1000)20 blueLED.on()21 pyb.delay(1000)22 blueLED.off()23 pyb.delay(1000)
Connect your board to the OpenMV IDE and upload the above script by pressing the play button in the lower left corner.
Now, the built-in LED on your Nicla Vision board should be blinking red, green and then blue repeatedly.
You can easily access the camera on the Nicla Vision through OpenMV IDE. Below is a short script that will set up the camera and take an image. The board will blink its LED to indicate when it will take the picture. The image can be seen in the frame buffer while the script is running.
1import pyb # Import module for board related functions2import sensor # Import the module for sensor related functions3import image # Import module containing machine vision algorithms45redLED = pyb.LED(1) # built-in red LED6blueLED = pyb.LED(3) # built-in blue LED78sensor.reset() # Initialize the camera sensor.9sensor.set_pixformat(sensor.RGB565) # Sets the sensor to RGB10sensor.set_framesize(sensor.QVGA) # Sets the resolution to 320x240 px11sensor.set_vflip(True) # Flips the image vertically12sensor.set_hmirror(True) # Mirrors the image horizontally1314redLED.on()15sensor.skip_frames(time = 2000) # Skip some frames to let the image stabilize1617redLED.off()18blueLED.on()1920print("You're on camera!")21sensor.snapshot().save("example.jpg")2223blueLED.off()24print("Done! Reset the camera to see the saved image.")
The camera that comes with the Nicla Vision supports RGB 565 images. That is why you have to use
, enabling the camera to take an image with color. Then you need to set the resolution of the camera. Here we will use
will help you set the correct orientation of the image. If you hold the board with the USB cable facing down, you should call
. The image will be mirrored, if you want the image to be displayed as you see it from your perspective, you should call
Running this script in OpenMV will show the image that the camera is currently capturing in the top right corner, inside the frame buffer. The onboard red LED will be on for a couple of seconds, then the blue LED will turn on to indicate when the picture is about to be taken. A message will be printed in the serial terminal when the image is taken.
The image will be saved as "example.jpg" in the boards directory. It is also possible to save the image in a ".bmp" format. If you reset the camera by pressing the reset button, the image file will appear in the boards directory.
As mentioned before, the Nicla Vision comes with OpenMV firmware pre-installed. This makes it easier to use the board with OpenMV out of the box. However, it is possible to use the Nicla Vision with the Arduino IDE. First make sure that you have the latest core installed. To install the core navigate to Tools > Board > Boards Manager..., in the Boards Manager window search for Nicla Vision MBED and install it. When this core is installed and you have your board connected to your computer, select the port that the board is connected to and the board core. You should now be able to upload an Arduino sketch to the board.
If you wish to use the board with OpenMV after it has been used with the Arduino IDE, you have to put the board into bootloader mode and install OpenMV firmware. You can do this by double pressing the reset button, located next to the LED. When the board is in bootloader mode and connected to your computer, follow the steps above in the 2. Connecting to the OpenMV IDE section to connect the board to the OpenMV IDE again.
In this tutorial you learned how to use the OpenMV IDE with your Nicla Vision board. You also learned how to control the Nicla Vision's RGB LED with MicroPython functions and to upload the script to your board using the OpenMV IDE.