diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/custom-container/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/custom-container/content.md index 72fa4a509e..61672338ec 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/custom-container/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/custom-container/content.md @@ -1,5 +1,6 @@ --- title: Create and Upload a Custom Container to the Portenta X8 +position: 9 difficulty: intermediate tags: [Linux, Python, Containers, ADB] description: This tutorial will show you how to create and upload your custom container to your Portenta X8 diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/datalogging-iot/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/datalogging-iot/content.md index c3bfaa5ecd..5e50a8eeba 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/datalogging-iot/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/datalogging-iot/content.md @@ -1,5 +1,6 @@ --- title: 'Data Logging with MQTT, Node-RED, InfluxDB and Grafana' +position: 12 description: 'This tutorial will show you how to set up a local data logging application using an MQTT broker, Node-RED, InfluxDB, Grafana, and the Arduino® Portenta X8.' difficulty: intermediate tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/display-output-webgl/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/display-output-webgl/content.md index f26c98600f..63e4030ec0 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/display-output-webgl/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/display-output-webgl/content.md @@ -1,5 +1,6 @@ --- title: 'Output WebGL Content on a Screen' +position: 10 description: 'This tutorial shows how to install and modify a container that outputs web browser and webGL content' difficulty: beginner tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/docker-container/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/docker-container/content.md index f505645375..0a8094ae0f 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/docker-container/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/docker-container/content.md @@ -1,5 +1,6 @@ --- title: 'Managing Containers with Docker on Portenta X8' +position: 5 description: 'This tutorial shows how to install and manage your containers using Docker.' difficulty: beginner tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/how-to-use-portenta-board-manager/assets/factory-page.png b/content/hardware/04.pro/boards/portenta-x8/tutorials/how-to-use-portenta-board-manager/assets/factory-page.png new file mode 100644 index 0000000000..356aabbcda Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-x8/tutorials/how-to-use-portenta-board-manager/assets/factory-page.png differ diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/how-to-use-portenta-board-manager/portenta-x8-fundamentals.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/how-to-use-portenta-board-manager/portenta-x8-fundamentals.md new file mode 100644 index 0000000000..2f2b601794 --- /dev/null +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/how-to-use-portenta-board-manager/portenta-x8-fundamentals.md @@ -0,0 +1,82 @@ +--- +title: How to use Portenta X8 board manager +position: 7 +difficulty: beginner +tags: [Linux, containers, factories, foundries] +description: This article contains information about the fundamental concepts of the Portenta X8 +author: Benjamin Dannegård +hardware: + - hardware/04.pro/board/portenta-x8 +software: + - fioctl + +--- + +## Overview + +The Portenta X8 is one of the more advanced boards available from Arduino. And with that comes some new concepts that are not standard for Arduino boards. In this article we will go through some of the foundations of the Portenta X8 and help you understand how the board works and how you can benefit from the advanced features of this board. You will learn about FoundriesFactory® and how containers on the Portenta X8 work. + +## Goals + +- Get in-depth information about how the Portenta X8 works +- Learn how containers work + +### Required Hardware and Software + +- [Portenta X8](https://store.arduino.cc/portenta-x8) +- [fioctl](https://docs.foundries.io/latest/getting-started/install-fioctl/index.html) + +## Instructions + +If you need help with setting up your board then please have a look at the "Getting Started" tutorial. That tutorial will show you how to set up your board with FoundriesFactory and install containers on it. + +## Embedded Linux + +To work in an embedded Linux environment there a few things to consider. When approaching linux-based embedded devices software solutions, you need to provide a base distribution, a mechanism to update it and some applications that can run on the board. The X8 uses a Linux distribution built with the Yocto Project® as the base platform, with applications that are installed and packaged as confined containers. + +A ready-made Linux distribution that packages everything seems most attractive for end users but you need to find a distribution that implements the function that you need. If you need to tweak them you may end up in a mess of patches on the top of someone else's build system. On the other hand, a generic distribution has some problems since installing software over it may pollute the original system and cause issues when updating the base platform. For example you install a new application and the older one no longer works. In addition to that you have to implement a lot of things like cybersecurity functions and system updates. Finally, your solution may rely on a too "generic" distribution, with tons of software you don't need. So you may end up removing a lot of software on the target and also turning features on and off. Until you mess up things or you need to update the system and you restart with a new fresh image and restart everything from the beginning. + +### Benefits of Foundries.io + +Foundries.io™ basically created their generic-but-not-too-generic distribution based on Yocto with minimal software installed, by default implementing top level cybersecurity features like OP-TEE and OSTREE that makes their solution ideal for professional applications. A custom OTA system update mechanism which is based on a client running on target and a robust cloud server. And they married Docker-compose as a way to deploy a software solution to a target. This is like having an app store for a particular device with the difference that we're not installing an app but a container which may contain a whole distribution or a minimal distribution running only our app or our set of apps. + +In addition to that they developed the cloud side as well. In a nutshell you can use what's called FoundriesFactory, a cloud DevSecOps subscription service to build, test, deploy, and maintain secure, updatable IoT and Edge products. It provides a unique id and automatic builds of the base system and containers for this system in one place. Let's now take a look at the Foundries.io Factory page. + +### Foundries.io Factory + +With the help of the Arduino Cloud integration with Foundries.io, you can easily create your Factory right from the Arduino Cloud page. You can set your Factory's platform and name. The platform here will be the Portenta X8. + +![Factory page](assets/factory-page.png) + +Your Factory page allows you to add members, so that you can easily keep track of the members of your team that should have access to the Portenta X8's that are linked to your Factory. You can also set up teams for better management. On the page you can also find a list of all devices linked to the Factory, along with their name and version of container that is currently uploaded to the board. On the containers page you can find all the different versions of containers uploaded to the Factory. + +On the "source" page of your Factory, you can find the four repositories that are used to customize the images. These are: + +- **ci-scripts.git**: Scripts that define the platform and container build jobs to the FoundriesFactory continuous integration system. +- **lmp-manifest.git**: The repo manifest for the platform build. It defines which layer versions are included in the platform image. This includes **meta-partner-arduino**, the layer containing Arduino specific customizations (machine definition, device drivers, etc). +- **meta-subscriber-overrides.git**: OE layer that defines what is included into your Factory image. You can add board specific customizations and overrides, add and remove packages provided in the default Linux microPlatform base. +- **containers.git**: This is where containers and docker-compose apps are defined. It allows you to define what containers to build, and how to orchestrate them on the platform. + +While the "targets" page contains the images built by the Continuous integration system each time something is committed in the repositories. Committing to **lmp-manifest.git** or **meta-subscriber-overrides.git** repositories will create a platform target, while committing to **containers.git** will create a container target. These targets will generate the artifacts for the platforms as specified in the **ci-scripts.git**, including all the required files to program the target in case of platform builds. You can inspect your FoundriesFactory targets in the "targets" page. + +## Containers + +Containers allow for easy deployment of Linux based processes, uploaded through git, which can then be tracked on your Factory page. A Linux container are processes that are isolated from the rest of the system. A container is an image file that contains all the files that are necessary to run it. This makes the Linux containers portable and consistent throughout development, testing and production. Making them much quicker to use than development pipelines that rely on replicating traditional testing environments. + +Foundries.io provides a service that builds images using the Yocto Project and specifically built around the Linux microPlatform (LmP) distribution they maintain. LmP contains an extensive set of software components needed for IoT applications. + +Using [fioctl](https://docs.foundries.io/latest/getting-started/install-fioctl/index.html) allows you to manage your boards through CLI. This will make it possible for you to easily upload containers to a board that is linked to your Factory. When the board is online and connected to the Factory you can easily push new apps to the board. Using fioctl command lines you only need to state the Factory, board and app. + +### Benefits of Containers + +For example if you are developing an application on a laptop and your environment has a specific configuration. Other developers may have slightly different configurations. The application will rely on your configuration and is dependent on specific files, libraries and dependencies. While your business has development and production environments with their own configurations and supporting files. You would want to emulate that environment as much as possible locally. + +With containers you can make your app work across environments, pass quality assurance and get it deployed as fast and easy as possible. + +The contents of a container image can be compared to a an installation of a Linux distribution complete with RPM packages, configuration files, etc. However, a container image distribution is easier to install rather than a new copy of the operating system. + +A Linux container is a good solution for solutions that require portability, configurability and isolation. The idea behind Linux containers is to be able to develop solutions faster to meet business needs as they arise. In certain scenarios, like when real-time data streaming is implemented, containers are the only way to provide the scalability that the application needs. Regardless of the infrastructure on site, in the cloud, or a mix of both. + +## Conclusion + +Now you should have a better understanding of how the Portenta X8 works with factories and containers. This article also gives a better picture of how to utilize the Portenta X8 to its full potential. Be sure to check out our other tutorials with the Portenta X8 to see how to practically use factories and containers. diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/image-building/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/image-building/content.md index 5cfc552ae8..c7140bc407 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/image-building/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/image-building/content.md @@ -1,6 +1,7 @@ --- beta: true title: 'How To Build a Custom Image for Your Portenta X8' +position: 11 description: 'This tutorial teaches you how to compile a custom image for your Portenta X8' difficulty: advanced tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/image-flashing/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/image-flashing/content.md index 042932a884..01cd298e1c 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/image-flashing/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/image-flashing/content.md @@ -1,6 +1,7 @@ --- beta: true title: 'How To Flash Your Portenta X8' +position: 16 description: 'This tutorial teaches you how to flash your Portenta X8 through USB' difficulty: intermediate tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/multi-protocol-gateway/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/multi-protocol-gateway/content.md index 96f6b5d24e..bb02cd2e88 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/multi-protocol-gateway/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/multi-protocol-gateway/content.md @@ -1,5 +1,6 @@ --- title: 'Multi-Protocol Gateway With Portenta X8 & Max Carrier' +position: 14 description: 'This tutorial shows how to setup a multi-protocol gateway environment on Portenta X8 using Max Carrier' tags: - Containers diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/out-of-the-box/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/out-of-the-box/content.md index 327954cd26..406e51661e 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/out-of-the-box/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/out-of-the-box/content.md @@ -1,6 +1,7 @@ --- beta: true title: 'Portenta X8 Getting Started' +position: 2 description: 'Learn how to set up the Portenta X8' difficulty: intermediate tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/python-arduino-data-exchange/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/python-arduino-data-exchange/content.md index 2b6d2c37dd..48e61fc50f 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/python-arduino-data-exchange/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/python-arduino-data-exchange/content.md @@ -1,5 +1,6 @@ --- title: 'Data Exchange Between Python on Linux and an Arduino Sketch' +position: 6 description: 'This tutorial will show you how to run a python application that exchanges data with an Arduino Sketch.' tags: - RPC diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/uploading-sketches-m4/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/uploading-sketches-m4/content.md index 4fddd4c2e8..77720ed68c 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/uploading-sketches-m4/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/uploading-sketches-m4/content.md @@ -1,5 +1,6 @@ --- title: 'Uploading Sketches to the M4 Core on Arduino Portenta X8' +position: 15 description: 'This tutorial explains how to upload Arduino sketches to the M4 core.' difficulty: intermediate tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/waves-fleet-managment/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/waves-fleet-managment/content.md index f1c1cb869d..b9df0275a0 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/waves-fleet-managment/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/waves-fleet-managment/content.md @@ -1,5 +1,6 @@ --- title: 'Using FoundriesFactory Waves Fleet Management' +position: 4 description: 'Learn how to manage multiple Portenta X8 devices using FoundriesFactory fleet management tool, Waves' difficulty: intermediate tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-container-folder.png b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-container-folder.png new file mode 100644 index 0000000000..e35e5d617a Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-container-folder.png differ diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-factory-git.png b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-factory-git.png new file mode 100644 index 0000000000..12b4c44b42 Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-factory-git.png differ diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-factory-page.png b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-factory-page.png new file mode 100644 index 0000000000..990f10576e Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-factory-page.png differ diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-git.png b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-git.png new file mode 100644 index 0000000000..c454965a20 Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/custom-git.png differ diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/factory-user-settings.png b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/factory-user-settings.png new file mode 100644 index 0000000000..607a8f6992 Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/factory-user-settings.png differ diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/token-page.png b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/token-page.png new file mode 100644 index 0000000000..82b5e96413 Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/assets/token-page.png differ diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/content.md new file mode 100644 index 0000000000..124ebf5d68 --- /dev/null +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/what-is-portenta-x8/content.md @@ -0,0 +1,198 @@ +--- +title: What is Portenta X8 +position: 1 +difficulty: intermediate +tags: [Linux, Python, Containers, ADB] +description: Dummy tutorial until we have the right version +author: Benjamin Dannegård +hardware: + - hardware/04.pro/boards/portenta-x8 +software: + - adb +--- + +## Overview + +In this tutorial we will create a simple container that we can then upload to the Arduino Portenta X8. A container consists of an image file and all it's dependencies if there are any. This tutorial will go through the different files needed to create a container and their functions. Building this container locally and then uploading it to a Portenta X8. Using docker with ADB to build, run and attach our container to the Portenta X8. + +## Goals + +- Learn how to create a container for use with the Portenta X8 +- Learn how to upload a container to the Portenta X8 + +### Required Hardware and Software + +- [Portenta X8](https://store.arduino.cc/portenta-x8) +- ADB +- USB-C® cable (either USB-C® to USB-A or USB-C® to USB-C®) +- Arduino Pro Cloud Subscription. [Learn more about the Pro Cloud](https://www.arduino.cc/pro/hardware/product/portenta-x8#pro-cloud). + + +## Instructions + +When running a container, it uses an isolated filesystem. This custom filesystem is provided by a container image. Since the image contains the container’s filesystem, it must contain everything needed to run an application - all dependencies, configuration, scripts, binaries, etc. The image also contains other configuration for the container, such as environment variables, a default command to run, and other metadata. + +## Container File Structure + +To create our container we need to collect our necessary files. Creating a folder called **x8-custom-test**, the following files needs to be in the folder: +- docker-build.conf +- docker-compose.yml +- Dockerfile +- requirements.txt +- src folder +- main.py (This file should be inside the src folder) + +The complete folder will look like this: + +![Folder structure for container](assets/custom-container-folder.png) + +Lets go through what these files contain and do. + +### Docker-build.conf +A file containing the minimal "unit test" command to be executed on the container to prove it's working. Our file will make our containers minimal unit test a test of Python3 help command. + +```python +TEST_CMD="python3 --help" +``` + +### Docker-compose.yml +This file defines the app name through the Factory, permissions and settings for the involved containers. The argument in the image tag will make it so our image file builds locally. + +```python +version: '3.6' + +services: + x8-custom-test: + image: blob-opera:latest + restart: always + tty: true + read_only: true + user: "63" + tmpfs: + - /run + - /var/lock + - /var/log + - /tmp +``` + +### Dockerfile +This is used to build the container. + +```python +FROM python:3-alpine3.15 + +# Set our working directory +WORKDIR /usr/src/app + +# Copy requirements.txt first for better cache on later pushes +COPY requirements.txt requirements.txt + +# pip install python deps from requirements.txt on the resin.io build server +RUN pip install -r requirements.txt + +# This will copy all files in our root to the working directory in the container +COPY ./src/main.py ./ + +# Enable udevd so that plugged dynamic hardware devices show up in our container. +ENV UDEV=1 + +# main.py will run when container starts up on the device +CMD ["python","-u","main.py"] +``` + +### Requirements.txt + +```python +Flask==0.12.3 +``` + +### Source +Here we will keep source code of the app you want to run in the container or a startup script. We will create a file and name it **main.py** in this folder. This script will print "Hello World!" in the CLI window. + +```python +from flask import Flask +app = Flask(__name__) + +@app.route('/') +def hello_world(): + return 'Hello World!' + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=80) +``` + +## Uploading the Container Folder + +First, you have to have set up your board to a Factory, as shown in the [Portenta X8 Out of the Box tutorial](https://docs.arduino.cc/tutorials/portenta-x8/out-of-the-box). + +Once this is done, we will push our folder to a repository within the Factory. Lets place our folder "x8-custom-test" inside the "containers.git" repository. You can find this repository inside your Factory page, if you click on "Source". And then on "container.git", the url of this page will be used in the next command. + +![Source on Foundries.io Factory page](assets/custom-factory-page.png) + +![Where to find container.git](assets/custom-factory-git.png) + +![Container.git page](assets/custom-git.png) + +In order to pull or push repositories you have to generate an API key. This can be done by going to the user settings on the Factory page. First click on the user drop-down menu, then go into the tokens page and follow the steps of creating a new API key. This token will be used as the password for all git operations while the username can be anything, except an empty string. + +![User settings on your Factory page](assets/factory-user-settings.png) + +![Token section in user settings](assets/token-page.png) + +Use the following command in a Linux shell, like ADB which the previously mentioned tutorial showed how to set up. To get the repository on your board, replace "YOUR_FACTORY" with the name of your Factory. The "-b" parameter specifies a branch to checkout after cloning the repository. Running this command will get the container repository, where we will put our folder. + +``` +git clone https://source.foundries.io/factories/YOUR_FACTORY/containers.git -b devel +``` + +Put the "x8-custom-test" folder in the repository. If you push the commit to "containers.git" a new target will automatically build on your FoundriesFactory, you can inspect it in the "Targets" page. + +### Building and Running the Container + +After the build is finished, it can take up to 10 minutes for your device to OTA update to this new version. You can inspect it via the "Devices" tab of your FoundriesFactory. After your device takes the update, navigate into the "x8-custom-test" folder, that should be located on your board now. This allows us to build our container with a simple command. Using ```docker build``` with a ```--tag``` will let us give the container a tag so we can easily keep track of what version of the build this is. + +```python +docker build --tag "x8-custom-test:latest" . +``` + +Now that it is built we can run it with ```docker run```, finding it with the tag that we chose to give to the build we want to run. Here we will have to enter the user information into the --user tag. This information is found inside the "docker-compose.yml" file. + +```python +docker run -it --rm --user "63" x8-custom-test:latest +``` + +### Using Docker-Compose + +A option for testing an app or container is to use "docker-compose". This is helpful when we have a lot of settings in our "docker-compose.yml" file, since we don't have to use those settings in the run argument with this method. First navigate into the container folder. + +```python +cd /home/fio/x8-custom-test +``` + +This docker-compose command will start your application and register it as a systemd service that will persist even when a reboot occurs. So at the next boot your docker-compose app will run automatically. + +```python +docker-compose up --detach +``` + +To stop the docker-compose app from running, use the following command: + +```python +docker-compose stop +``` + +## Conclusion + +This tutorial went through what goes into a container, how the folder should be built and what files it should contain. It then explained what each files purpose is and what they should contain for this example. Then we went through how this relates back to the Factory, and how Foundries.io makes the whole process easier for us. We then showed how to build the container and run it on the Portenta X8. Lastly, we showed a useful testing feature with docker-compose. Which lets us test our container with a faster process. + +### Next Steps + +To get a better understanding of how to manage containers with Docker, take a look at our [Managing Containers with Docker on Portenta X8](https://docs.arduino.cc/tutorials/portenta-x8/docker-container). This tutorial will show some useful commands to use with the docker service and ADB or SSH. + + +## Troubleshooting + +Here are some errors that might occur in the process of this tutorial: + +- Make sure you have followed our other tutorials that shows how to set up the [Portenta X8 out of the box](https://docs.arduino.cc/tutorials/portenta-x8/out-of-the-box) +- If you are having issues with the adb shell, don't forget to try and use `sudo` and `su` diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/wordpress-webserver/content.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/wordpress-webserver/content.md index ae6fa2912f..33d0d17206 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/wordpress-webserver/content.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/wordpress-webserver/content.md @@ -1,5 +1,6 @@ --- title: 'Running Wordpress and Database Containers on the Portenta X8' +position: 13 description: 'Learn how to run a database and Wordpress container on the Portenta X8' difficulty: beginner tags: diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/x8-fundamentals/portenta-x8-fundamentals.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/x8-fundamentals/portenta-x8-fundamentals.md index 21db7347c0..94ef8e4a88 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/x8-fundamentals/portenta-x8-fundamentals.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/x8-fundamentals/portenta-x8-fundamentals.md @@ -1,5 +1,6 @@ --- title: Portenta X8 Fundamentals +position: 3 difficulty: beginner tags: [Linux, containers, factories, foundries] description: This article contains information about the fundamental concepts of the Portenta X8 diff --git a/content/hardware/07.opta/family.md b/content/hardware/07.opta/family.md new file mode 100644 index 0000000000..8a67d14b21 --- /dev/null +++ b/content/hardware/07.opta/family.md @@ -0,0 +1,4 @@ +--- +title: Opta +description: A secure, easy-to-use micro PLC with Industrial IoT capabilities, designed in partnership with Finder. +--- \ No newline at end of file diff --git a/content/hardware/07.opta/image-480.png b/content/hardware/07.opta/image-480.png new file mode 100644 index 0000000000..7315e32a88 Binary files /dev/null and b/content/hardware/07.opta/image-480.png differ diff --git a/content/hardware/07.opta/image.png b/content/hardware/07.opta/image.png new file mode 100644 index 0000000000..685870e948 Binary files /dev/null and b/content/hardware/07.opta/image.png differ diff --git a/content/hardware/07.opta/opta_family/category.md b/content/hardware/07.opta/opta_family/category.md new file mode 100644 index 0000000000..f820de39ac --- /dev/null +++ b/content/hardware/07.opta/opta_family/category.md @@ -0,0 +1,3 @@ +--- +title: Opta Family +--- \ No newline at end of file diff --git a/content/hardware/07.opta/opta_family/opta/compatibility.yml b/content/hardware/07.opta/opta_family/opta/compatibility.yml new file mode 100644 index 0000000000..48c3691091 --- /dev/null +++ b/content/hardware/07.opta/opta_family/opta/compatibility.yml @@ -0,0 +1,5 @@ +software: + - arduino-ide + - arduino-cli + - iot-cloud + - web-editor \ No newline at end of file diff --git a/content/hardware/07.opta/opta_family/opta/features.md b/content/hardware/07.opta/opta_family/opta/features.md new file mode 100644 index 0000000000..b590ce0eed --- /dev/null +++ b/content/hardware/07.opta/opta_family/opta/features.md @@ -0,0 +1,56 @@ + + +Thanks to its computing power, **Arduino Opta** enables a wide range of real-time control, monitoring and predictive maintenance applications. + +It allows professionals to scale up automation projects while taking advantage of the open and widely known Arduino ecosystem. + +Quickly put it to work, leveraging the many available software libraries. The onboard secure element ensures over-the-air firmware updates and remote control via the Arduino Cloud or third-party services. + +Arduino Opta is available in three variants: +* Opta Lite: on-board Ethernet and USB-C® ports +* Opta RS485: on-board Ethernet and USB-C® ports, plus RS485 connectivity +* Opta WiFi: on-board Ethernet and USB-C® ports, plus RS485 and Wi-Fi/Bluetooth® Low Energy + + + + + + + + H7's main processor is the dual core STM32H747 including a Cortex® M7 running at 480 MHz and a Cortex® M4 running at 240 MHz. The two cores communicate via a Remote Procedure Call mechanism that allows calling functions on the other processor seamlessly. + + + + + + + + Multiple choices are available for network connectivity, including USB, Ethernet, and Wi-Fi/BLE in addition to industry specific protocols such as RS485. + + + + + + The Arduino Opta has a highly reliable design operating at industrial temperature ranges (-20 °C to +50 °C) thanks to a dual-core architecture that doesn’t require any external cooling. + + + + + + * Arduino sketch + * IEC-61131-3: + * Ladder (LD) + * Sequential Function Chart(SFC) + * Function Block Diagram (FBD) + * Structured Text (ST) + * Instruction List (IL) + + + + + + Thanks to its form factor, it can be attached to a Din Rail mount system, providing a quick access to all the I/O ‘s. + + + + diff --git a/content/hardware/07.opta/opta_family/opta/image.svg b/content/hardware/07.opta/opta_family/opta/image.svg new file mode 100644 index 0000000000..fb2e9233dc --- /dev/null +++ b/content/hardware/07.opta/opta_family/opta/image.svg @@ -0,0 +1,551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/hardware/07.opta/opta_family/opta/product.md b/content/hardware/07.opta/opta_family/opta/product.md new file mode 100644 index 0000000000..57dfc255d6 --- /dev/null +++ b/content/hardware/07.opta/opta_family/opta/product.md @@ -0,0 +1,8 @@ +--- +title: Opta +url_shop: https://store.arduino.cc/pages/opta +core: arduino:mbed_portenta +certifications: [cULus listed, ENEC, CE] +--- + +The **Arduino Opta** is a secure, easy-to-use **micro PLC** with Industrial IoT capabilities. Designed in partnership with **Finder**, leading industrial and building automation device manufacturer. diff --git a/content/hardware/07.opta/opta_family/opta/tech-specs.md b/content/hardware/07.opta/opta_family/opta/tech-specs.md new file mode 100644 index 0000000000..86277f0c42 --- /dev/null +++ b/content/hardware/07.opta/opta_family/opta/tech-specs.md @@ -0,0 +1 @@ +This is the technical specifications for the Arduino Opta. diff --git a/content/hardware/07.opta/opta_family/opta/tech-specs.yml b/content/hardware/07.opta/opta_family/opta/tech-specs.yml new file mode 100644 index 0000000000..d1bc354c87 --- /dev/null +++ b/content/hardware/07.opta/opta_family/opta/tech-specs.yml @@ -0,0 +1,40 @@ +Board: + SKUs: + Arduino® Opta RS485: AFX00001 + Arduino® Opta WiFi: AFX00002 + Arduino® Opta Lite: AFX00003 +Microcontroller: + ID: STM32H747XI Dual ARM® Cortex® + Cortex-M7 core: up to 480 MHz + Cortex-M4 core: up to 240 MHz +Input: + Configurable digital / analog (0-10V) input: 8 +Actuators: + Relays (250 V AC - 10 A): 4 +Connectivity: + USB Programming Port: Yes + Ethernet: + TCP/IP: Yes + ModBus TCP: Yes + Bluetooth® Low Energy: Opta WiFi + Wi-Fi: Opta WiFi +Communication protocols: + RS485: Opta RS485 & Opta WiFi + Programmable Serial ports: RS485 +Power: + Input voltage: 12-24V DC + Output voltage: 24V +Memory: + SDRAM: 1 MB + Onboard flash memory: 2MB internal + 16MB Flash QSPI +Dimensions: + Weight: 210g + Width: 69 mm + Length: 80 mm + Height: 90 mm +IP Protection: IP20 +RTC: ~10days, NTP sync through ethernet +Secure element: ATECC608B +Programming: + Arduino programming language: Via Arduino IDEs, Arduino CLI, Arduino Web Editor + IEC-61131-3 as option: Ladder Diagram (LD), Function Block Diagram (FBD), Sequential Function Chart (SFC), Structured Text (ST), Instruction List (IL) diff --git a/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-ble.png b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-ble.png new file mode 100644 index 0000000000..72b72116f8 Binary files /dev/null and b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-ble.png differ diff --git a/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-ethernet.png b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-ethernet.png new file mode 100644 index 0000000000..ddfcd9355d Binary files /dev/null and b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-ethernet.png differ diff --git a/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-wifi.png b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-wifi.png new file mode 100644 index 0000000000..1fa52e33ff Binary files /dev/null and b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/assets/opta-wifi.png differ diff --git a/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/content.md b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/content.md new file mode 100644 index 0000000000..31db090968 --- /dev/null +++ b/content/hardware/07.opta/opta_family/opta/unlisted/getting-started-connectivity/content.md @@ -0,0 +1,77 @@ +--- +title: 'Using BLE, WiFi and Ethernet on the Arduino Opta' +description: "Learn how to make use of the Arduino Opta's connectivity features" +difficulty: beginner +tags: + - Wi-Fi® + - Ethernet + - Bluetooth® + - Connectivity +author: 'Benjamin Dannegård' +libraries: + - name: Arduino BLE + url: https://www.arduino.cc/reference/en/libraries/arduinoble/ +software: + - ide-v1 + - ide-v2 + - web-editor +hardware: + - hardware/05.pro-solutions/solutions-and-kits/opta +--- + +## Overview + +The Arduino® Opta is a powerful PLC device that has many features, allowing you to customize its use for your solution. Among these features are the standard connectivity features Wi-Fi®, Ethernet and Bluetooth®. In this tutorial we will go through how to use these features with the Arduino IDE and the Arduino Opta. + +## Goals + +- Learn how to use Bluetooth® Low Energy on the Opta +- Learn how to use Wi-Fi® on the Opta +- Learn how to use Ethernet on the Opta + +### Required Hardware and Software + +- USB-C cable (either USB-C to USB-A or USB-C to USB-C) +- Wi-Fi Access Point with Internet Access +- Arduino Opta +- Ethernet cable + +## Instructions + +Using the Arduino IDE we can easily work with these peripherals. Some features have their own library that we can make use of. First we need to install the appropriate core for the Arduino Opta, go into the **Board manager** and search for **Opta Mbed core**. When the latests version of the core is installed we can move on to trying out the connectivity options. + +### Wi-Fi® + +The files necessary for using the Wi-Fi® on the Opta are included in the core. To try it out we can go to **File > Examples**, under **Examples for Opta** we can find the **WiFi** section, inside there is an example sketch **WiFiWebClient**. Open this example sketch and fill out the WiFi details in the **arduino_secrets.h** tab. The sketch will make the Opta connect to whatever website is entered into the `char server[] = "example.com";` variable. If the connection is successful it will then print the websites HTML content to the serial monitor. If the sketch ran successfully the output should look like the image below. + +![Running WiFi sketch on the Opta in the Arduino IDE](assets/opta-wifi.png) + +If you want to take a deeper look at what features the **WiFi** library has to offer, [take a look at the API reference page](https://www.arduino.cc/reference/en/libraries/wifi/). + +### Ethernet + +The Arduino Opta has a RJ45 ethernet port with a LED that will indicate the status of the connected cable. The files necessary for using Ethernet on the Opta are included in the core. To try it out we can go to **File > Examples**, under **Examples for Opta** we can find the **Ethernet** section, inside there is an example sketch **WebClient**. Connect the Ethernet cable to the Arduino Opta then try and upload the example. This example will function the same way as the one mentioned in the Wi-Fi® section. The device will connect to the website stated in the sketch and print the websites HTML content in the serial monitor. If the sketch ran successfully the output should look like the image below. + +![Running the Ethernet sketch on the Opta in the Arduino IDE](assets/opta-ethernet.png) + +If you want to take a deeper look at what features the **Ethernet** library has to offer, [take a look at the API reference page](https://www.arduino.cc/reference/en/libraries/ethernet/). + +### Modbus TCP Via Ethernet Port + +The Arduino Opta uses the RS485 protocol for Modbus communication, enabling Modbus TCP via the Ethernet port. Modbus TCP is a variant of the Modbus family of simple, vendor-neutral communication protocols intended for supervision and control of automation equipment. Specifically, it covers the use of Modbus messaging in an intranet or internet environment using the TCP/IP protocols. The most common use of the protocols at this time is for Ethernet attachment of PLCs, I/O modules and gateways to other simple field buses or I/O networks. + +### Bluetooth® Low Energy + +To use the Bluetooth® feature, download the **ArduinoBLE** library in the Arduino IDE. Go into the **library manager** and search for **ArduinoBLE**, if you can't find it try to sort by official libraries published by Arduino. Let's now try and run a simple example sketch from the ArduinoBLE library, a sketch that will scan for other Bluetooth® devices within range. The sketch will then print the found devices address, local name and the advertised service UUIDs, if present. You can find the example under **File > Examples > ArduinoBLE > Central**, the sketch is called **Scan**. When the sketch is running on the Opta the output on the serial monitor should look something like the image below. + +![Bluetooth® sketch running on the Opta](assets/opta-ble.png) + +If you want to take a deeper look at what features the **ArduinoBLE** library has to offer, [take a look at the API reference page](https://www.arduino.cc/reference/en/libraries/arduinoble/). + +## Conclusion + +Now you have a better overview of the connectivity features on the Arduino Opta and how to use them. We went through how to use the different connectivity features and what libraries are required for them. By running all the example sketches on our device we have made sure that the modules are all working and everything is up to date. + +### Next Steps + +Now that you know how to use the connectivity features of the device, have a look at our other tutorials and try to combine the different features. The Opta uses the same architecture as the Portanta H7, it could therefore be a good idea to take a look at the Portenta H7 tutorials. Such as the using your [device as a Wi-Fi® access point tutorial](https://docs.arduino.cc/tutorials/portenta-h7/wifi-access-point) or the [Bluetooth® Low Energy connectivity with a phone tutorial](https://docs.arduino.cc/tutorials/portenta-h7/ble-connectivity). diff --git a/content/hardware/07.edu/carriers/braccio-carrier/compatibility.yml b/content/hardware/08.edu/carriers/braccio-carrier/compatibility.yml similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/compatibility.yml rename to content/hardware/08.edu/carriers/braccio-carrier/compatibility.yml diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/Block_Diagram_Braccio_Carrier.svg b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/Block_Diagram_Braccio_Carrier.svg similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/Block_Diagram_Braccio_Carrier.svg rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/Block_Diagram_Braccio_Carrier.svg diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/Power_Tree_Braccio_Carrier.jpg b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/Power_Tree_Braccio_Carrier.jpg similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/Power_Tree_Braccio_Carrier.jpg rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/Power_Tree_Braccio_Carrier.jpg diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/System_Block_Diagram_Braccio_Carrier.jpg b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/System_Block_Diagram_Braccio_Carrier.jpg similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/System_Block_Diagram_Braccio_Carrier.jpg rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/System_Block_Diagram_Braccio_Carrier.jpg diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-connectors.svg b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-connectors.svg similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-connectors.svg rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-connectors.svg diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-mount.svg b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-mount.svg similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-mount.svg rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-mount.svg diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-outline.svg b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-outline.svg similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-outline.svg rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-outline.svg diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-pinout.png b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-pinout.png similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/braccio-pinout.png rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/braccio-pinout.png diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/featured.png b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/featured.png similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/assets/featured.png rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/assets/featured.png diff --git a/content/hardware/07.edu/carriers/braccio-carrier/datasheet/datasheet.md b/content/hardware/08.edu/carriers/braccio-carrier/datasheet/datasheet.md similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/datasheet/datasheet.md rename to content/hardware/08.edu/carriers/braccio-carrier/datasheet/datasheet.md diff --git a/content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-dxf.zip b/content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-dxf.zip similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-dxf.zip rename to content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-dxf.zip diff --git a/content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-fritzing.fzpz b/content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-fritzing.fzpz similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-fritzing.fzpz rename to content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-fritzing.fzpz diff --git a/content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-full-pinout.pdf b/content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-full-pinout.pdf similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-full-pinout.pdf rename to content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-full-pinout.pdf diff --git a/content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-schematics.pdf b/content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-schematics.pdf similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-schematics.pdf rename to content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-schematics.pdf diff --git a/content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-stand-stl.zip b/content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-stand-stl.zip similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-stand-stl.zip rename to content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-stand-stl.zip diff --git a/content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-step.zip b/content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-step.zip similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/downloads/ABX00032-step.zip rename to content/hardware/08.edu/carriers/braccio-carrier/downloads/ABX00032-step.zip diff --git a/content/hardware/07.edu/carriers/braccio-carrier/essentials.md b/content/hardware/08.edu/carriers/braccio-carrier/essentials.md similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/essentials.md rename to content/hardware/08.edu/carriers/braccio-carrier/essentials.md diff --git a/content/hardware/07.edu/carriers/braccio-carrier/features.md b/content/hardware/08.edu/carriers/braccio-carrier/features.md similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/features.md rename to content/hardware/08.edu/carriers/braccio-carrier/features.md diff --git a/content/hardware/07.edu/carriers/braccio-carrier/image.svg b/content/hardware/08.edu/carriers/braccio-carrier/image.svg similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/image.svg rename to content/hardware/08.edu/carriers/braccio-carrier/image.svg diff --git a/content/hardware/07.edu/carriers/braccio-carrier/interactive/ABX00032-pinout.png b/content/hardware/08.edu/carriers/braccio-carrier/interactive/ABX00032-pinout.png similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/interactive/ABX00032-pinout.png rename to content/hardware/08.edu/carriers/braccio-carrier/interactive/ABX00032-pinout.png diff --git a/content/hardware/07.edu/carriers/braccio-carrier/product.md b/content/hardware/08.edu/carriers/braccio-carrier/product.md similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/product.md rename to content/hardware/08.edu/carriers/braccio-carrier/product.md diff --git a/content/hardware/07.edu/carriers/braccio-carrier/tech-specs.md b/content/hardware/08.edu/carriers/braccio-carrier/tech-specs.md similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/tech-specs.md rename to content/hardware/08.edu/carriers/braccio-carrier/tech-specs.md diff --git a/content/hardware/07.edu/carriers/braccio-carrier/tech-specs.yml b/content/hardware/08.edu/carriers/braccio-carrier/tech-specs.yml similarity index 100% rename from content/hardware/07.edu/carriers/braccio-carrier/tech-specs.yml rename to content/hardware/08.edu/carriers/braccio-carrier/tech-specs.yml diff --git a/content/hardware/07.edu/carriers/category.md b/content/hardware/08.edu/carriers/category.md similarity index 100% rename from content/hardware/07.edu/carriers/category.md rename to content/hardware/08.edu/carriers/category.md diff --git a/content/hardware/07.edu/family.md b/content/hardware/08.edu/family.md similarity index 100% rename from content/hardware/07.edu/family.md rename to content/hardware/08.edu/family.md diff --git a/content/hardware/07.edu/image-480.png b/content/hardware/08.edu/image-480.png similarity index 100% rename from content/hardware/07.edu/image-480.png rename to content/hardware/08.edu/image-480.png diff --git a/content/hardware/07.edu/image.png b/content/hardware/08.edu/image.png similarity index 100% rename from content/hardware/07.edu/image.png rename to content/hardware/08.edu/image.png diff --git a/content/hardware/08.kits/family.md b/content/hardware/09.kits/family.md similarity index 100% rename from content/hardware/08.kits/family.md rename to content/hardware/09.kits/family.md diff --git a/content/hardware/08.kits/image-480.png b/content/hardware/09.kits/image-480.png similarity index 100% rename from content/hardware/08.kits/image-480.png rename to content/hardware/09.kits/image-480.png diff --git a/content/hardware/08.kits/image.png b/content/hardware/09.kits/image.png similarity index 100% rename from content/hardware/08.kits/image.png rename to content/hardware/09.kits/image.png diff --git a/content/hardware/08.kits/maker/category.md b/content/hardware/09.kits/maker/category.md similarity index 100% rename from content/hardware/08.kits/maker/category.md rename to content/hardware/09.kits/maker/category.md diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/compatibility.yml b/content/hardware/09.kits/maker/make-your-uno-kit/compatibility.yml similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/compatibility.yml rename to content/hardware/09.kits/maker/make-your-uno-kit/compatibility.yml diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/audioComponentsView.png b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/audioComponentsView.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/audioComponentsView.png rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/audioComponentsView.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/boardOutline.svg b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/boardOutline.svg similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/boardOutline.svg rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/boardOutline.svg diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/featured.png b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/featured.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/featured.png rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/featured.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/fusionOutline.svg b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/fusionOutline.svg similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/fusionOutline.svg rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/fusionOutline.svg diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/lowAudioSynth.png b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/lowAudioSynth.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/lowAudioSynth.png rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/lowAudioSynth.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/pinout.png b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/pinout.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/pinout.png rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/pinout.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/powerTree.svg b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/powerTree.svg similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/powerTree.svg rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/powerTree.svg diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthMounted.png b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthMounted.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthMounted.png rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthMounted.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthOutline.svg b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthOutline.svg similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthOutline.svg rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthOutline.svg diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthPotentiometers.svg b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthPotentiometers.svg similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthPotentiometers.svg rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthPotentiometers.svg diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthTopology.svg b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthTopology.svg similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/synthTopology.svg rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/synthTopology.svg diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/unoComponentsView.png b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/unoComponentsView.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/unoComponentsView.png rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/unoComponentsView.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/unoOverview.png b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/unoOverview.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/assets/unoOverview.png rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/assets/unoOverview.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/datasheet/datasheet.md b/content/hardware/09.kits/maker/make-your-uno-kit/datasheet/datasheet.md similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/datasheet/datasheet.md rename to content/hardware/09.kits/maker/make-your-uno-kit/datasheet/datasheet.md diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/downloads/AKX00037-cad-files.zip b/content/hardware/09.kits/maker/make-your-uno-kit/downloads/AKX00037-cad-files.zip similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/downloads/AKX00037-cad-files.zip rename to content/hardware/09.kits/maker/make-your-uno-kit/downloads/AKX00037-cad-files.zip diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/downloads/AKX00037-schematics.pdf b/content/hardware/09.kits/maker/make-your-uno-kit/downloads/AKX00037-schematics.pdf similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/downloads/AKX00037-schematics.pdf rename to content/hardware/09.kits/maker/make-your-uno-kit/downloads/AKX00037-schematics.pdf diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/downloads/ASX00037-full-pinout.pdf b/content/hardware/09.kits/maker/make-your-uno-kit/downloads/ASX00037-full-pinout.pdf similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/downloads/ASX00037-full-pinout.pdf rename to content/hardware/09.kits/maker/make-your-uno-kit/downloads/ASX00037-full-pinout.pdf diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/features.md b/content/hardware/09.kits/maker/make-your-uno-kit/features.md similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/features.md rename to content/hardware/09.kits/maker/make-your-uno-kit/features.md diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/image.svg b/content/hardware/09.kits/maker/make-your-uno-kit/image.svg similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/image.svg rename to content/hardware/09.kits/maker/make-your-uno-kit/image.svg diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/interactive/ASX00037-pinout.png b/content/hardware/09.kits/maker/make-your-uno-kit/interactive/ASX00037-pinout.png similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/interactive/ASX00037-pinout.png rename to content/hardware/09.kits/maker/make-your-uno-kit/interactive/ASX00037-pinout.png diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/interactive/altium.zip b/content/hardware/09.kits/maker/make-your-uno-kit/interactive/altium.zip similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/interactive/altium.zip rename to content/hardware/09.kits/maker/make-your-uno-kit/interactive/altium.zip diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/product.md b/content/hardware/09.kits/maker/make-your-uno-kit/product.md similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/product.md rename to content/hardware/09.kits/maker/make-your-uno-kit/product.md diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/tech-specs.md b/content/hardware/09.kits/maker/make-your-uno-kit/tech-specs.md similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/tech-specs.md rename to content/hardware/09.kits/maker/make-your-uno-kit/tech-specs.md diff --git a/content/hardware/08.kits/maker/make-your-uno-kit/tech-specs.yml b/content/hardware/09.kits/maker/make-your-uno-kit/tech-specs.yml similarity index 100% rename from content/hardware/08.kits/maker/make-your-uno-kit/tech-specs.yml rename to content/hardware/09.kits/maker/make-your-uno-kit/tech-specs.yml