diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index c40f7c85fe..5e178438b6 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -20,7 +20,7 @@ jobs: cancel-in-progress: false env: REPO_ACCESS_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }} - APP_ENV: prod + APP_ENV: staging BRANCH_NAME: ${{ github.ref_name }} steps: diff --git a/content/arduino-cloud/05.iot-remote-app/01.getting-started/iot-remote-app.md b/content/arduino-cloud/05.iot-remote-app/01.getting-started/iot-remote-app.md index 96f3d36c1b..fc165437f0 100644 --- a/content/arduino-cloud/05.iot-remote-app/01.getting-started/iot-remote-app.md +++ b/content/arduino-cloud/05.iot-remote-app/01.getting-started/iot-remote-app.md @@ -23,7 +23,7 @@ The phone's sensor data is automatically stored in Cloud variables, which you ca To use the Arduino IoT Remote app, visit Google Play / App Store and search for **"Arduino IoT Remote"**. Links are available just above. -***NOTE: The IoT Remote app requires iOS 12.4 or later for iOS the version. If you are using Android, version 8.0 or later is required. Make sure the iOS or Android version on your device is up to date before downloading the app.*** +***NOTE: The IoT Remote app requires iOS 15.1 or later for iOS the version. If you are using Android, version 8.0 or later is required. Make sure the iOS or Android version on your device is up to date before downloading the app.*** After installing the app, you will need to log in to your Arduino account. If you do not have one, you can [sign up here](https://login.arduino.cc/login). diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/arduino_cloud_thing_metadata.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/arduino_cloud_thing_metadata.png new file mode 100644 index 0000000000..baa0288ca3 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/arduino_cloud_thing_metadata.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_1.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_1.png new file mode 100644 index 0000000000..a88fbff39c Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_1.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_2.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_2.png new file mode 100644 index 0000000000..0a7fff43e7 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_2.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_3.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_3.png new file mode 100644 index 0000000000..977b1bc1e4 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_3.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_4.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_4.png new file mode 100644 index 0000000000..28c310edac Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_4.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_5.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_5.png new file mode 100644 index 0000000000..b07064ca01 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_5.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_6.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_6.png new file mode 100644 index 0000000000..8274c0b6d9 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_6.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_7.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_7.png new file mode 100644 index 0000000000..38fbf70f91 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_create_7.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_creation_1.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_creation_1.png new file mode 100644 index 0000000000..7fa455c249 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_creation_1.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_creation_2.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_creation_2.png new file mode 100644 index 0000000000..27abac69e2 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_creation_2.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_info.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_info.png new file mode 100644 index 0000000000..cad7b6a14a Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_stack_info.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_tag_1.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_tag_1.png new file mode 100644 index 0000000000..96fb52d6c7 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_tag_1.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_tag_2.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_tag_2.png new file mode 100644 index 0000000000..a095cc5d3a Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloud_tag_2.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloudformation_stack_creation.gif b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloudformation_stack_creation.gif new file mode 100644 index 0000000000..97ad70a403 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloudformation_stack_creation.gif differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloudformation_stack_step4.gif b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloudformation_stack_step4.gif new file mode 100644 index 0000000000..e40777f0c9 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/cloudformation_stack_step4.gif differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/eventbridge_rule_details.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/eventbridge_rule_details.png new file mode 100644 index 0000000000..7047fbef7d Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/eventbridge_rule_details.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/eventbridge_rules.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/eventbridge_rules.png new file mode 100644 index 0000000000..2faa1a1ada Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/eventbridge_rules.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function.png new file mode 100644 index 0000000000..8c337283a0 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_log_detail.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_log_detail.png new file mode 100644 index 0000000000..0eb1777cc3 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_log_detail.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_logs.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_logs.png new file mode 100644 index 0000000000..87583b8433 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_logs.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_metrics.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_metrics.png new file mode 100644 index 0000000000..935819adfb Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_cloudwatch_metrics.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_eventbridge_trigger.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_eventbridge_trigger.png new file mode 100644 index 0000000000..3f5937132f Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_eventbridge_trigger.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_overview.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_overview.png new file mode 100644 index 0000000000..bc055f230e Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/lambda_function_overview.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_complete.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_complete.png new file mode 100644 index 0000000000..719f39f8d5 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_complete.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_create_1.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_create_1.png new file mode 100644 index 0000000000..1978108e50 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_create_1.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_create_2.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_create_2.png new file mode 100644 index 0000000000..52978e6da6 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_create_2.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_1.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_1.png new file mode 100644 index 0000000000..8016533f00 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_1.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_2.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_2.png new file mode 100644 index 0000000000..bef16177eb Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_2.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_3.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_3.png new file mode 100644 index 0000000000..386e244268 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_3.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_4.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_4.png new file mode 100644 index 0000000000..3b094ee2ff Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_csvdests3int_4.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin.png new file mode 100644 index 0000000000..c5b053d82c Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_1.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_1.png new file mode 100644 index 0000000000..d46e7baaed Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_1.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_2.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_2.png new file mode 100644 index 0000000000..2ee65759a0 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_2.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_3.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_3.png new file mode 100644 index 0000000000..66c424534f Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_3.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_4.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_4.png new file mode 100644 index 0000000000..377ab20182 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_bucket_lambdas3bin_setup_4.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_bucket_directory.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_bucket_directory.png new file mode 100644 index 0000000000..b560d023c4 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_bucket_directory.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_bucket_files.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_bucket_files.png new file mode 100644 index 0000000000..c4276e601d Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_bucket_files.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_file_details.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_file_details.png new file mode 100644 index 0000000000..6c466b7054 Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/s3_csv_file_details.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/tag-filter.png b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/tag-filter.png new file mode 100644 index 0000000000..21496a451e Binary files /dev/null and b/content/arduino-cloud/09.business/02.aws-s3-exporter/assets/tag-filter.png differ diff --git a/content/arduino-cloud/09.business/02.aws-s3-exporter/content.md b/content/arduino-cloud/09.business/02.aws-s3-exporter/content.md new file mode 100644 index 0000000000..db0b5aba7c --- /dev/null +++ b/content/arduino-cloud/09.business/02.aws-s3-exporter/content.md @@ -0,0 +1,449 @@ +--- +title: 'Getting Started with Arduino AWS S3 CSV Exporter' +description: 'Learn how to set up the Arduino AWS S3 CSV Exporter to extract and store time series data from the Arduino Cloud into an AWS S3 bucket.' +difficulty: intermediate +tags: + - Arduino Cloud + - AWS + - CSV Export + - Data Aggregation +author: Taddy Ho Chung, Marco Colombo +software: + - iot-cloud + - aws-lambda + - go +--- + +## Overview + +The Arduino AWS S3 CSV Exporter is designed to extract time series data from Arduino Cloud and publish it in CSV format to an AWS S3 bucket. + +A scheduled AWS Lambda function runs the data extraction process at configurable intervals. The extraction frequency, sampling resolution and filters can be customized to refine the data stored in S3. + +![Arduino AWS S3 CSV Exporter Build](assets/cloudformation_stack_creation.gif) + +At the end of this tutorial, the stack will be configured to extract data from Arduino Cloud every hour, aggregate samples at a five-minute resolution, and store structured CSV files in AWS S3. The setup will also allow filtering by tags to include only specific data, providing a scalable and structured approach to managing cloud-connected device data and ensuring easy retrieval and long-term storage. + +## Goals + +* Set up the required AWS S3 bucket and deploy resources using CloudFormation. +* Understand the functionality of the Arduino AWS S3 CSV Exporter. +* Configure and deploy the Lambda function for automated data extraction using the Arduino AWS S3 CSV Exporter’s pre-defined template. +* Apply filters and resolution settings to optimize data aggregation. +* Use CloudFormation templates to simplify deployment and configuration. +* Learn how Lambda, CloudWatch and EventBridge help monitor the deployed CloudFormation stack. + +## Required Software + +* [Arduino Cloud](https://cloud.arduino.cc/). If you do not have an account, you can create one for free in [cloud.arduino.cc](https://cloud.arduino.cc/home/?get-started=true). +* [AWS Account](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html#sign-up-for-aws). If you do not have an AWS account yet, please refer to the [online AWS documentation](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html) to create one. Once your account is set up, you'll need to ensure it has the appropriate IAM permissions to deploy Lambda functions and other resources, as detailed in the [AWS Account & CloudFormation Template](#aws-account--cloudformation-template) section below. +* [Go Programming Language](https://go.dev/) (version 1.22 or higher) (Optional) +* [Official Arduino AWS S3 CSV Exporter Repository](https://github.com/arduino/aws-s3-integration) + +## How It Works + +The **Arduino AWS S3 CSV Exporter** extracts time series data from **Arduino Cloud** and publishes it to an **AWS S3** bucket. Data extraction is handled by an AWS Lambda function written in **GO**, which runs at scheduled intervals using **AWS EventBridge**. + +Each function execution retrieves data from the selected **Arduino Things** and generates a CSV file. The file is then uploaded to **S3** for structured storage and accessibility. + +Data is extracted every hour by default, with samples aggregated at a 5-minute resolution. Both the extraction period and the aggregation rate are configurable. Aggregation is performed by calculating the average over the aggregation period, while non-numeric values, such as strings, are sampled at the specified resolution. + +Time-series data is exported in **UTC** by default. All Arduino Things in the account are included in the export unless filtered using [**tags**](#tag-filtering). + +This setup provides a structured and scalable approach for managing time series data from connected devices, providing configurable parameters such as sampling intervals and data filtering. + +## AWS Account & CloudFormation Template + +An active AWS account is required to deploy the **Arduino AWS S3 CSV Exporter**. If an account is unavailable, refer to the [online AWS documentation](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html) for account setup. The following steps can help you get started: + +- [Sign up for an AWS account](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html#sign-up-for-aws) +- [Create an administrative user](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html#create-an-admin) + +The exporter setup involves deploying resources using a [**CloudFormation template**](https://github.com/arduino/aws-s3-integration/blob/0.3.0/deployment/cloud-formation-template/deployment.yaml). This template provisions and configures the necessary AWS resources automatically. + +AWS CloudFormation requires specific [**IAM permissions**](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) to automatically provision and manage AWS resources during this deployment. **AWS Identity and Access Management (IAM)** is a web service that helps you securely control access to AWS resources by managing permissions and determining which resources users can access. + +* CloudFormation stack creation (policy: `AWSCloudFormationFullAccess`) +* S3 bucket management (policy: `AmazonS3FullAccess`) +* IAM role creation (policy: `IAMFullAccess`) +* Lambda function deployment (policy: `AWSLambda_FullAccess`) +* EventBridge rule configuration (policy: `AmazonEventBridgeFullAccess`) +* Parameter management in SSM (policy: `AmazonSSMFullAccess`) + +These permissions allow CloudFormation to create and manage the required resources automatically. The stack will deploy an AWS Lambda function, configure an EventBridge rule to trigger executions and set up S3 buckets for data storage. + +## S3 Buckets (Pre-Requisite) + +Before continuing with the CloudFormation stack deployment, two **S3** buckets need to be created: + +- **Temporary bucket**: Stores the Lambda binaries and the **CloudFormation template (CFT)** required for deployment. +- **CSV destination bucket**: This is the storage location for all generated CSV files. This bucket must be created in the same AWS region where the CloudFormation stack will be deployed. + +![S3 Buckets](assets/s3_bucket_complete.png) + +### Creating S3 Bucket + +To create the **temporary bucket** and the **CSV destination bucket**, navigate to **Amazon S3** or search for **S3** in the AWS Management Console. Click on **Create bucket** to begin the setup. + +During an S3 bucket creation, several configuration options will be presented: + +- General configuration +- Object ownership +- Block public access for this bucket +- Bucket versioning +- Tags (Optional) +- Default encryption +- Advanced settings + +Each configuration option is briefly explained within the S3 bucket creation process. + +![Bucket creation (1)](assets/s3_bucket_create_1.png) + +![Bucket creation (2)](assets/s3_bucket_create_2.png) + +For this integration, the key configuration is the bucket name, and the bucket type is set to **General purpose** under the **General configuration** section. + +Other settings can remain at their **default values** unless specific customizations are needed. + +After defining the required settings, proceed to **Submit** the bucket creation. Once successfully created, the bucket will be listed under **General purpose buckets**. + +This process creates the **temporary bucket** to store the **Lambda binaries** and the **CloudFormation template (CFT)**. The assigned bucket name is **lambdas3binaries** in this example. + +![Lambda Binary & CFT Bucket](assets/s3_bucket_lambdas3bin.png) + +#### Temporary Bucket + +The **lambdas3binaries** bucket is used to store the required deployment files. The following files must be uploaded to this bucket: + +- [Lambda binaries](https://github.com/arduino/aws-s3-integration/releases) (`.zip` file) +- [CloudFormation template (CFT)](https://github.com/arduino/aws-s3-integration/releases) (`.yaml` file) + +To upload the files, navigate to **Amazon S3** and open the **`lambdas3binaries`** bucket. The available options for managing the bucket will be displayed: + +![lambdas3binaries Bucket Setup (1)](assets/s3_bucket_lambdas3bin_setup_1.png) + +Select the **Upload** option within the **Objects** panel. + +Manually upload the required files by either using the file browser to select the `.zip` and `.yaml` files or dragging and dropping them into the designated upload area. Once the files are recognized, the screen should resemble the following image: + +![lambdas3binaries Bucket Setup (2)](assets/s3_bucket_lambdas3bin_setup_2.png) + +Click the **Upload** button to begin the upload. Once the upload is complete, a confirmation screen will be displayed: + +![lambdas3binaries Bucket Setup (3)](assets/s3_bucket_lambdas3bin_setup_3.png) + +After a successful upload, the files will be listed under the **Objects** tab within the **`lambdas3binaries`** bucket: + +![lambdas3binaries Bucket Setup (4)](assets/s3_bucket_lambdas3bin_setup_4.png) + +#### CSV Destination Bucket + +A second bucket must be created following the same process as the [Temporary bucket](#temporary-bucket). This bucket will be the **CSV destination bucket**, where all generated CSV files will be stored. Ensuring this bucket is created in the same AWS region where the CloudFormation stack will be deployed is important. + +Navigate to the **Amazon S3** service and select **Create bucket**. In the bucket creation window, specify the bucket name and check that the same AWS region is selected. + +For security best practices, you can use the default **Object Ownership** and **Block Public Access** settings, which keep the bucket private and secure. + +![lambdas3binaries Bucket Setup (1)](assets/s3_bucket_csvdests3int_1.png) + +After the bucket has been successfully created, it will be listed among the available S3 buckets. If necessary, you can select the newly created **CSV destination bucket** to proceed with additional configurations. + +![lambdas3binaries Bucket Setup (2)](assets/s3_bucket_csvdests3int_2.png) + +***While you can organize files by creating directories within the CSV destination bucket, this is _optional_ for the exporter to function properly. The exporter will automatically create the necessary structure for storing CSV files.*** + +Inside the **CSV destination bucket**, navigate to the **Objects** tab. If necessary, you can organize files by creating directories. + +Click on the **Create folder** button and specify a name for the directory where the exported CSV files will be stored. + +![lambdas3binaries Bucket Setup (3)](assets/s3_bucket_csvdests3int_3.png) + +During folder creation, options for **server-side encryption** are displayed for data protection. By default, encryption settings derive from the bucket's global configuration. + +A **custom encryption key** can be specified before finishing the folder creation. + +![lambdas3binaries Bucket Setup (4)](assets/s3_bucket_csvdests3int_4.png) + +Once the folder is created, it will be displayed under the **Objects** tab of the **CSV destination bucket**. This ensures that all exported CSV files are well-organized within the dedicated bucket. + +![S3 Buckets](assets/s3_bucket_complete.png) + +## CloudFormation Stack + +### Preparing CloudFormation Stack + +The CloudFormation stack is deployed using a [predefined template](https://github.com/arduino/aws-s3-integration/releases). This process involves specifying the required parameters and selecting the appropriate template source. + +Navigate to the **AWS CloudFormation** service and select **Create stack**. + +![Stack Creation (1)](assets/cloud_stack_create_1.png) + +Select **Choose an existing template** and enter the Amazon S3 URL where the CloudFormation template is stored. + +![Stack Creation (2)](assets/cloud_stack_create_2.png) + +An example of the **Object URL** format for stack creation is as follows: + +```bash +https://arduino-s3-data-exporter-deployment.s3.amazonaws.com/deployment.yaml +``` + +This **Object URL** needs to be provided in the **Amazon S3 URL** field when creating the stack. + +Follow the steps to proceed with the stack creation. The configuration requires specifying parameters, including the Arduino API key and secret, the S3 bucket for code storage, and the CSV destination bucket. + +Configure the following required parameters before proceeding with stack creation: + +* Arduino API key +* Arduino API secret +* S3 bucket for code storage +* CSV destination bucket + +***For more information about Arduino Cloud API, please refer to the [APIs Overview](https://docs.arduino.cc/arduino-cloud/api/api-overview/) or [Arduino Cloud API from Getting started with Arduino Cloud for Business](https://docs.arduino.cc/arduino-cloud/business/arduino-cloud-for-business/#arduino-cloud-api).*** + +You can also configure optional parameters such as **tag filters**, **organization ID (Space ID for Arduino Cloud)**, and **data resolution settings**. + +![Stack Creation (3)](assets/cloud_stack_create_3.png) + +Before proceeding with stack creation, review the configuration to ensure all details are correct. + +![Stack Creation (4)](assets/cloud_stack_create_4.png) + +### Stack Parameters + +In the **Specify stack details** step, provide a stack name and enter the necessary parameters. + +The **`csvdests3int`** bucket is the designated location where the CSV files will be stored. + +The **`LambdaCodeS3Bucket`** refers to the bucket containing the Lambda function ZIP file. + +Specify the corresponding API key and secret in the `IotApiKey` and `IotApiSecret` fields. + +***For more information about Arduino Cloud API, please refer to the [APIs Overview](https://docs.arduino.cc/arduino-cloud/api/api-overview/) or [Arduino Cloud API from Getting started with Arduino Cloud for Business](https://docs.arduino.cc/arduino-cloud/business/arduino-cloud-for-business/#arduino-cloud-api).*** + +![Stack Creation - Parameters (5)](assets/cloud_stack_create_5.png) + +The parameters required for creating the stack are categorized as follows: +  +- **Mandatory:** Arduino API key and secret, the S3 bucket for code and the destination S3 bucket. +- **Optional:** Tag filter, organization ID, and data resolution settings. + +![Stack Creation - Parameters (6)](assets/cloud_stack_create_6.png) + +Additional parameters include scheduling execution frequency, resolution settings and optional filters. These settings define how often data is exported and the aggregation method applied to collected data. + +Once all parameters are filled in, proceed to the review stage. This allows you to verify the stack configuration before finishing the deployment. + +![Stack Creation - Review (7)](assets/cloud_stack_create_7.png) + +The following animation shows the final review stage, which summarizes all stack parameters before starting the deployment process. The review screen confirms the selected CloudFormation template, stack name and all defined configuration parameters. + +![Stack Creation - Complete Review](assets/cloudformation_stack_step4.gif) + +#### Supported Configurable Parameters + +Below are the supported configuration parameters editable in the AWS Parameter Store. These parameters are pre-filled during stack creation but can be modified later: + +| **Parameter** | **Description** | +|----------------------------------------------------------------|-------------------------------------------| +| `/arduino/s3-exporter/{stack-name}/iot/api-key` | IoT API key | +| `/arduino/s3-exporter/{stack-name}/iot/api-secret` | IoT API secret | +| `/arduino/s3-exporter/{stack-name}/iot/org-id` | Organization ID (Optional) | +| `/arduino/s3-exporter/{stack-name}/iot/filter/tags` | Tag filter (e.g., `tag=value`) (Optional) | +| `/arduino/s3-exporter/{stack-name}/iot/samples-resolution` | Aggregation resolution (Optional) | +| `/arduino/s3-exporter/{stack-name}/iot/scheduling` | Execution schedule | +| `/arduino/s3-exporter/{stack-name}/iot/align_with_time_window` | Align data extraction with time windows | +| `/arduino/s3-exporter/{stack-name}/destination-bucket` | S3 destination bucket | +| `/arduino/s3-exporter/{stack-name}/enable_compression` | Enable gzip compression for CSV uploads | + +#### Tag Filtering + +To export specific Arduino Things from the Arduino Cloud, **tag filtering** is applied. + +**Tags** can be added in the Arduino Cloud under each device's **Metadata** section, referred to as **Things**. + +![Things Metadata](assets/cloud_tag_2.png) + +Click on **ADD** to define a tag by specifying a **key** and its **value**. + +![Things Metadata Tag](assets/cloud_tag_1.png) + +During CloudFormation stack creation, tag filters are configured using: + +```bash +/arduino/s3-exporter/{stack-name}/iot/filter/tags +``` + +![Tag Filter from CFT Creation](assets/tag-filter.png) + +#### Time Alignment + +The data extraction is aligned with the function's execution time. + +If required, the extraction can be configured to align with specific time windows by adjusting the following parameter: + +```bash +/arduino/s3-exporter/{stack-name}/iot/align_with_time_window +``` + +### Stack Build + +After confirming the stack creation, AWS CloudFormation will begin deploying the required resources. + +The **Stacks** section displays the newly created stack and its status. At this stage, the status appears as **`CREATE_IN_PROGRESS`**, indicating that AWS is actively provisioning resources. + +![Stack Build (1)](assets/cloud_stack_creation_1.png) + +The **Events - updated** tab logs real-time updates for each resource creation. The status **`CREATE_IN_PROGRESS`** is shown alongside timestamps and event details, allowing visibility of the deployment process. + +![Stack Build (2)](assets/cloud_stack_creation_2.png) + +Once all resources are successfully deployed, the **stack status** updates to **`CREATE_COMPLETE`**, confirming that the deployment is finished without errors. + +![Stack Build Process](assets/cloudformation_stack_creation.gif) + +The **Stack info** tab provides an overview of the stack, including its Stack ID, description, creation time and other metadata. + +![Stack Build Information](assets/cloud_stack_info.png) + +Now, the stack is ready for operation with AWS S3, which is integrated with the Arduino Cloud and automated CSV data export functionality. + +## AWS S3 CSV Exporter Result + +Once the CloudFormation stack is successfully deployed, the AWS S3 CSV Exporter will function based on the configured execution schedule. Based on the configuration, the [**Lambda function**](#lambda) is triggered every hour, retrieving data from relevant Arduino Cloud Things tagged with the appropriate metadata key. + +![Arduino Cloud Thing Metadata Key](assets/arduino_cloud_thing_metadata.png) + +This process allows only the selected Arduino Cloud Things to export data to the generated CSV files, which are then stored in an AWS S3 bucket for further processing, retrieval or integration with other services. + +### CSV File Storage and Organization + +The generated CSV files are stored in the `csvdests3int` S3 bucket. This bucket's files are structured in a date-based hierarchy for organized storage and easy access. Each folder corresponds to a specific date and within those folders, CSV files are named according to their respective timestamps. + +The top-level structure of the `csvdests3int` bucket appears as follows: + +![S3 Bucket main directory](assets/s3_csv_bucket_directory.png) + +CSV files are stored inside date-specific folders within the `csvdests3int` S3 bucket. These folders are named according to the extraction date, and CSV files are organized by timestamp. This structure provides a chronological view of the exported data. + +It also helps with data retrieval, processing, and analysis, mainly when exporting multiple data sets over extended periods: + +![S3 Bucket date defined organization](assets/s3_csv_bucket_files.png) + +To view a specific CSV file, navigate to its **object details page** within the S3 bucket. You can access metadata such as file size, storage class, last modified timestamp and the AWS S3 URI for automated access here: + +![Generated CSV file details](assets/s3_csv_file_details.png) + +The CSV files can be downloaded directly from the object view or by selecting them from the list of objects within the bucket. This provides methods to analyze data locally, integrate it into external workflows or visualize trends. + +### CSV File Format and Data Structure + +The exported CSV files follow a standardized column-based structure, ensuring consistency across all data sets. Each row represents a data sample from a specific Arduino Cloud Thing, including timestamp, thing ID, property values and aggregation type: + +```csv +timestamp,thing_id,thing_name,property_id,property_name,property_type,value,aggregation_statistic +``` + +The following is an example of how the CSV files store the data: + +``` +2025-02-09T21:46:39Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,f75dcacf-dadd-406e-b1d0-239a9c624dce,measuredAirQualityInterpreted,CHARSTRING,Very Good,LAST_VALUE +2025-02-09T23:10:23Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,12dfa2f0-8a36-4973-acda-d5551e170ffc,measuredAirQuality,FLOAT,1.3084187507629395,LAST_VALUE +2025-02-09T23:10:23Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,9e94245d-fe3a-4f6a-9b4c-1afb74a10fab,measuredCO2,FLOAT,430.4429931640625,LAST_VALUE +2025-02-09T23:10:23Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,441cc611-24e5-4de7-ae44-cef7dcc2f1fa,measuredEthanol,FLOAT,0.063101977,LAST_VALUE +2025-02-09T21:46:39Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,74dc97cd-db46-404f-b13e-ae6d42e13598,measuredOdorIntensity,FLOAT,0,LAST_VALUE +2025-02-09T23:10:23Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,79aa255e-8c0d-456c-a5e1-8dee12f9ee10,measuredRelativeAirQuality,FLOAT,94.35742950439453,LAST_VALUE +2025-02-09T23:10:23Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,30454a65-42c3-4083-8141-7f5341eba68c,measuredTVOC,FLOAT,0.11863171309232712,LAST_VALUE +2025-02-09T21:46:39Z,7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6,C33Proto_AWSS3Bench,30bac618-1d9c-4846-9cde-5466efd4c782,measuredSulfurOdor,BOOLEAN,FALSE,LAST_VALUE +``` + +For a more structured representation, the CSV data can be visualized as follows: + +| **Timestamp** | **Thing ID** | **Thing Name** | **Property ID** | **Property Name** | **Property Type** | **Value** | **Aggregation Statistic** | +|----------------------|--------------------------------------|---------------------|--------------------------------------|-------------------------------|-------------------|---------------------|---------------------------| +| 2025-02-09T21:46:39Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | f75dcacf-dadd-406e-b1d0-239a9c624dce | measuredAirQualityInterpreted | CHARSTRING | Very Good | LAST_VALUE | +| 2025-02-09T23:10:23Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | 12dfa2f0-8a36-4973-acda-d5551e170ffc | measuredAirQuality | FLOAT | 1.3084187507629395 | LAST_VALUE | +| 2025-02-09T23:10:23Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | 9e94245d-fe3a-4f6a-9b4c-1afb74a10fab | measuredCO2 | FLOAT | 430.4429931640625 | LAST_VALUE | +| 2025-02-09T23:10:23Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | 441cc611-24e5-4de7-ae44-cef7dcc2f1fa | measuredEthanol | FLOAT | 0.063101977 | LAST_VALUE | +| 2025-02-09T21:46:39Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | 74dc97cd-db46-404f-b13e-ae6d42e13598 | measuredOdorIntensity | FLOAT | 0 | LAST_VALUE | +| 2025-02-09T23:10:23Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | 79aa255e-8c0d-456c-a5e1-8dee12f9ee10 | measuredRelativeAirQuality | FLOAT | 94.35742950439453 | LAST_VALUE | +| 2025-02-09T23:10:23Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | 30454a65-42c3-4083-8141-7f5341eba68c | measuredTVOC | FLOAT | 0.11863171309232712 | LAST_VALUE | +| 2025-02-09T21:46:39Z | 7d715bb9-96ce-4cf1-8f86-c9f3dfbebfb6 | C33Proto_AWSS3Bench | 30bac618-1d9c-4846-9cde-5466efd4c782 | measuredSulfurOdor | BOOLEAN | FALSE | LAST_VALUE | + +AWS S3 and Arduino Cloud are now connected and the stack has been successfully deployed. Data extraction will follow the defined schedule, storing CSV files in the designated S3 bucket. + +## Lambda, CloudWatch & EventBridge + +Once the CloudFormation stack is deployed and the CSV destination bucket receives data every hour, three AWS services can help us provide monitoring and troubleshooting capabilities: **Lambda**, **CloudWatch** and **EventBridge**. These tools can help us give visibility to the execution status, performance metrics and event triggers of the AWS S3 CSV Exporter. + +### Lambda + +The **AWS Lambda function** is the core component responsible for running the data extraction process at scheduled intervals. It retrieves specified data from Arduino Cloud and stores it in the AWS S3 bucket. + +The Lambda function overview displays key details such as the function name, assigned **Amazon Resource Name (ARN)** and the trigger responsible for the execution, **EventBridge (CloudWatch Events)**. Additional function metadata includes the application name and the last modification date. + +![S3 Bucket date defined organization](assets/lambda_function.png) + +The configuration section provides insights into the execution environment. It includes details about the function runtime, execution history and triggers. Other important parameters, such as destinations, environment variables and error-handling configurations, can also be managed here. + +![S3 Bucket date defined organization](assets/lambda_function_overview.png) + +### CloudWatch + +**Amazon CloudWatch** monitors the Lambda function and related resources in real time. It logs each function execution and generates performance metrics to analyze execution behavior, track invocation counts and detect failures. + +The CloudWatch metrics dashboard presents data such as invocation frequency, execution duration and success rate. Metrics related to event processing, error rates and memory consumption provide additional insights into function efficiency and stability. + +![S3 Bucket date defined organization](assets/lambda_function_cloudwatch_metrics.png) + +CloudWatch logs have execution records for every function run, including timestamps, request IDs, memory consumption and billed execution duration. This information is critical for debugging and verifying execution consistency. + +![S3 Bucket date defined organization](assets/lambda_function_cloudwatch_logs.png) + +Detailed logs display function-specific messages and show configuration settings such as applied filters, aggregation parameters and time window alignment. Logs also corroborate successful data exports, including file upload status, highlighting any warnings or errors encountered during execution. This helps us verify whether it could establish communication with configured Arduino keys. + +![S3 Bucket date defined organization](assets/lambda_function_cloudwatch_log_detail.png) + +### EventBridge + +**Amazon EventBridge** manages the scheduling of Lambda function executions. It ensures that the data extraction process runs at predefined intervals without manual intervention. + +The **EventBridge Rules** dashboard shows the rule responsible for triggering the **AWS S3 CSV Exporter Lambda function.** The rule type is **Scheduled Standard**, meaning it executes the function at fixed intervals. Its status appears as Enabled, indicating that it is active and operational. + +![S3 Bucket date defined organization](assets/eventbridge_rules.png) + +The rule details section provides more information about the execution schedule, including the assigned **ARN** of the event rule, the designated target Lambda function and the configured schedule for triggering the function at regular intervals. + +![S3 Bucket date defined organization](assets/eventbridge_rule_details.png) + +The Lambda function's EventBridge trigger confirms the active connection between EventBridge and the Lambda function. The trigger state is Enabled, ensuring scheduled execution. This section also displays additional configurations related to event targeting and optional input parameters. + +![S3 Bucket date defined organization](assets/lambda_function_eventbridge_trigger.png) + +The combination of Lambda, CloudWatch, and EventBridge monitors and maintains the AWS S3 CSV Exporter. Lambda handles function execution and triggers, while CloudWatch logs real-time function activity and performance metrics. At the same time, EventBridge schedules the execution process to maintain continuous data exports. + +Together, these services provide the tools to track performance, detect errors and optimize the automated CSV data extraction from Arduino Cloud to AWS S3. + +## Building the Code (Optional) + +The [**AWS S3 CSV Exporter repository**](https://github.com/arduino/aws-s3-integration/tree/0.3.0) contains the source code required to build and deploy the exporter. While precompiled binaries are available, building the exporter locally allows customization and testing before deployment. Please refer to the [AWS S3 CSV Exporter repository](https://github.com/arduino/aws-s3-integration/tree/0.3.0) documentation for information about building the code locally. + +## Additional Documentation + +To help you get the most out of the exporter, the following documentation resources are recommended for your reference: + +* [**Arduino Cloud Documentation**](https://docs.arduino.cc/cloud/iot-cloud): Here you can find information about setting up and managing **Arduino Cloud** projects, including device management, data collection, and integration with external services. + +* [**Go Programming Language Documentation**](https://go.dev/doc/): The Go programming language is used to build the exporter. Visit the official Go documentation for guides, tutorials, and reference material to help you set up and build Go projects. + +* [**AWS Lambda Documentation**](https://docs.aws.amazon.com/lambda/): You can explore the official AWS Lambda documentation here to learn more about building, deploying, and managing Lambda functions. + +* [**AWS S3 Documentation**](https://docs.aws.amazon.com/s3/): Learn about **Amazon S3**, known as Simple Storage Service, where CSV files are stored. Here you can find information on S3 features, storage management, and security best practices. + +* [**AWS CloudFormation Documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): CloudFormation is used to deploy the exporter, and you can find more information about AWS CloudFormation here. + +## Conclusion + +This tutorial showed how to use the **Arduino AWS S3 CSV Exporter** to extract time series data from **Arduino Cloud** and store it in **AWS S3** for structured management and analysis. The exporter can be adapted to different use cases with configurable settings for aggregation intervals, tag-based filtering and optional data compression. + +By deploying the exporter using a CloudFormation template, you have simplified cloud-based data storage for IoT applications. This setup automates data collection, simplifying trend analysis, device monitoring and long-term storage management. \ No newline at end of file diff --git a/content/hardware/01.mkr/01.boards/mkr-nb-1500/certifications/Arduino_ABX00019-CERT_RCM.pdf b/content/hardware/01.mkr/01.boards/mkr-nb-1500/certifications/Arduino_ABX00019-CERT_RCM.pdf deleted file mode 100644 index cea22bc1da..0000000000 Binary files a/content/hardware/01.mkr/01.boards/mkr-nb-1500/certifications/Arduino_ABX00019-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/01.mkr/01.boards/mkr-nb-1500/product.md b/content/hardware/01.mkr/01.boards/mkr-nb-1500/product.md index b55d4bc683..8f58934f29 100644 --- a/content/hardware/01.mkr/01.boards/mkr-nb-1500/product.md +++ b/content/hardware/01.mkr/01.boards/mkr-nb-1500/product.md @@ -6,7 +6,7 @@ primary_button_url: /software/ide-v2/tutorials/ide-v2-board-manager#samd primary_button_title: Get Started core: arduino:samd forumCategorySlug: '/hardware/mkr-boards/mkrnb1500/156' -certifications: [RCM, CE, UKCA] +certifications: [CE, UKCA] productCode: '022' sku: [ABX00019] --- diff --git a/content/hardware/01.mkr/03.carriers/mkr-iot-carrier/certifications/Arduino_ABX00047-CERT_RCM.pdf b/content/hardware/01.mkr/03.carriers/mkr-iot-carrier/certifications/Arduino_ABX00047-CERT_RCM.pdf deleted file mode 100644 index 8187a488f1..0000000000 Binary files a/content/hardware/01.mkr/03.carriers/mkr-iot-carrier/certifications/Arduino_ABX00047-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/01.mkr/03.carriers/mkr-iot-carrier/product.md b/content/hardware/01.mkr/03.carriers/mkr-iot-carrier/product.md index 1b288afa12..8f80d42d25 100644 --- a/content/hardware/01.mkr/03.carriers/mkr-iot-carrier/product.md +++ b/content/hardware/01.mkr/03.carriers/mkr-iot-carrier/product.md @@ -6,7 +6,7 @@ primary_button_url: https://opla.arduino.cc/ primary_button_title: Get Started url_datasheet: '' forumCategorySlug: '/hardware/mkr-boards/mkr-shields/162' -certifications: [FCC, RoHS, CE, RCM, IC, UKCA, WEEE] +certifications: [FCC, RoHS, CE, IC, UKCA, WEEE] sku: [ABX00047] --- diff --git a/content/hardware/02.hero/boards/uno-mini-limited-edition/certifications/Arduino_ABX00062-CERT_RCM.pdf b/content/hardware/02.hero/boards/uno-mini-limited-edition/certifications/Arduino_ABX00062-CERT_RCM.pdf deleted file mode 100644 index 7fcf1c8ec0..0000000000 Binary files a/content/hardware/02.hero/boards/uno-mini-limited-edition/certifications/Arduino_ABX00062-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/02.hero/boards/uno-mini-limited-edition/product.md b/content/hardware/02.hero/boards/uno-mini-limited-edition/product.md index 32972cb137..f157e79d07 100644 --- a/content/hardware/02.hero/boards/uno-mini-limited-edition/product.md +++ b/content/hardware/02.hero/boards/uno-mini-limited-edition/product.md @@ -7,7 +7,7 @@ primary_button_title: Get Started core: arduino:avr productCode: '117' forumCategorySlug: '/hardware/12' -certifications: [CE, UKCA, FCC, RCM, RoHS] +certifications: [CE, UKCA, FCC, RoHS] sku: [ABX00062] --- diff --git a/content/hardware/02.hero/boards/uno-r4-minima/features.md b/content/hardware/02.hero/boards/uno-r4-minima/features.md index 1b4e69aa27..9625b6e46d 100644 --- a/content/hardware/02.hero/boards/uno-r4-minima/features.md +++ b/content/hardware/02.hero/boards/uno-r4-minima/features.md @@ -19,6 +19,15 @@ A reference to all technical features on this board, with pointers to additional The UNO R4 Minima is the first UNO to feature a USB-C® connector. + + +With Arduino UNO R4 you will get 3 months of cloud maker plan for free + + + + + + Keep track of time & date and set alarms with the built-in RTC. diff --git a/content/hardware/02.hero/boards/uno-r4-minima/product.md b/content/hardware/02.hero/boards/uno-r4-minima/product.md index 560d392456..850d663737 100644 --- a/content/hardware/02.hero/boards/uno-r4-minima/product.md +++ b/content/hardware/02.hero/boards/uno-r4-minima/product.md @@ -6,6 +6,7 @@ primary_button_url: /tutorials/uno-r4-minima/minima-getting-started primary_button_title: Get Started certifications: [CE, UKCA, RoHS, FCC, RCM, IC] forumCategorySlug: '/hardware/uno-r4/uno-r4-minima/188' +productCode: '159' sku: [ABX00080] --- diff --git a/content/hardware/02.hero/boards/uno-r4-minima/tutorials/usb-hid/usb-hid.md b/content/hardware/02.hero/boards/uno-r4-minima/tutorials/usb-hid/usb-hid.md index 2c8b9f5b87..f508a160af 100644 --- a/content/hardware/02.hero/boards/uno-r4-minima/tutorials/usb-hid/usb-hid.md +++ b/content/hardware/02.hero/boards/uno-r4-minima/tutorials/usb-hid/usb-hid.md @@ -37,7 +37,17 @@ To turn your board into an HID, you can use the **keyboard/mouse** API that is b - [Keyboard](https://www.arduino.cc/reference/en/language/functions/usb/keyboard/) - [Mouse](https://www.arduino.cc/reference/en/language/functions/usb/mouse/) -In the section below, you will see a couple of useful examples to get you started! +## Sketch Upload Interference + +As a consequence of the multi-processor design of the UNO R4 WiFi board, uploads may fail with a "`No device found on ...`" error when the board is running a sketch that uses the HID capabilities. + +For this reason, you should use the following procedure to upload under these conditions: + +**1.** Press and release the button marked "**RESET**" on the board quickly twice. The LED marked "**L**" on the board should now be pulsing. + +**2.** Select the port of the board from the menu in Arduino IDE. The port might have changed after the previous step, so make sure to verify that it is selected. + +**3.** Upload your sketch as usual. ## Keyboard diff --git a/content/hardware/02.hero/boards/uno-r4-wifi/datasheet/datasheet.md b/content/hardware/02.hero/boards/uno-r4-wifi/datasheet/datasheet.md index c4dea1cd95..3ab065cde9 100644 --- a/content/hardware/02.hero/boards/uno-r4-wifi/datasheet/datasheet.md +++ b/content/hardware/02.hero/boards/uno-r4-wifi/datasheet/datasheet.md @@ -43,7 +43,7 @@ The **R7FA4M1AB3CFM#AA0**, often referred to as RA4M1 in this datasheet, is the * **Communication** * 1x UART (pin D0, D1) * 1x SPI (pin D10-D13, ICSP header) - * 1x I2C (pin A4, A5, SDA, SCL) + * 2x I2C (pin A4, A5, SDA, SCL), (Qwiic connector) * 1x CAN (pin D4, D5, external transceiver is required) See the full datasheet for the R7FA4M1AB3CFM#AA0 in the link below: @@ -127,7 +127,7 @@ In addition, it features an ESP32-S3 module for Wi-Fi® & Bluetooth® connectivi | JDIGITAL | Digital input/output headers | | JOFF | OFF, VRTC header | | J1 | CX90B-16P USB-C® connector | -| J2 | SM04B-SRSS-TB(LF)(SN) I2C connector | +| J2 | Qwiic Connector for I2C communication protocol | | J3 | ICSP header (SPI) | | J5 | DC Jack | | J6 | ESP header | @@ -232,13 +232,13 @@ The UNO R4 WiFi has a DAC with up to 12-bit resolution attached to the A0 analog The DAC can be used for signal generation for e.g. audio applications, like generating and altering sawtooth waves. -## I2C Connector +## Qwiic I2C Connector -The I2C connector SM04B-SRSS-TB(LF)(SN) is connected to a secondary I2C bus on the board. Note that this connector is powered via 3.3 V. +The I2C Qwiic connector SM04B-SRSS-TB(LF)(SN) is connected to a secondary I2C bus on the board. Note that this connector is powered via 3.3 V. -![I2C connector.](assets/i2c-connector.png) +![I2C Qwiic connector.](assets/i2c-connector.png) -This connector also shares the following pin connections: +The standard I2C is accessible through the following pin connections: **JANALOG header** - A4 @@ -491,6 +491,7 @@ This equipment contains a radio transmitter module with model approval code: CMI | Date | **Revision** | **Changes** | | ---------- | ------------ | ------------------ | +| 09/04/2025 | 7 | Fixed I2C information | | 05/09/2024 | 6 | Cloud Editor updated from Web Editor | | 03/07/2024 | 5 | Update Assets | | 19/09/2023 | 4 | Update FCC section | @@ -538,7 +539,7 @@ RA4M1的工作电压固定为5V,而ESP32-S3模块为3.3V。这两个MCU之间 * **通信** * 1个UART(引脚D0、D1) * 1个SPI(引脚D10-D13,ICSP针座) - * 1个I2C(引脚A4、A5、SDA、SCL) + * 2个I2C(引脚A4、A5、SDA、SCL, (Qwiic connector) * 1个CAN(引脚D4、D5,需要外部收发器) 请通过以下链接查看 R7FA4M1AB3CFM#AA0 的完整数据表: diff --git a/content/hardware/02.hero/boards/uno-r4-wifi/downloads/ABX00087-full-pinout.pdf b/content/hardware/02.hero/boards/uno-r4-wifi/downloads/ABX00087-full-pinout.pdf index 0f6b9112e7..0f33dd3ad8 100644 Binary files a/content/hardware/02.hero/boards/uno-r4-wifi/downloads/ABX00087-full-pinout.pdf and b/content/hardware/02.hero/boards/uno-r4-wifi/downloads/ABX00087-full-pinout.pdf differ diff --git a/content/hardware/02.hero/boards/uno-r4-wifi/features.md b/content/hardware/02.hero/boards/uno-r4-wifi/features.md index e573154417..9461b804f6 100644 --- a/content/hardware/02.hero/boards/uno-r4-wifi/features.md +++ b/content/hardware/02.hero/boards/uno-r4-wifi/features.md @@ -22,6 +22,15 @@ A reference to all technical features on this board, with pointers to additional + + +With Arduino UNO R4 you will get 3 months of cloud maker plan for free + + + + + + The RA4M1 and the GPIOs of this board operates on 5 V. diff --git a/content/hardware/02.hero/boards/uno-r4-wifi/product.md b/content/hardware/02.hero/boards/uno-r4-wifi/product.md index 3bc7a346b8..b0d5db8f0c 100644 --- a/content/hardware/02.hero/boards/uno-r4-wifi/product.md +++ b/content/hardware/02.hero/boards/uno-r4-wifi/product.md @@ -6,6 +6,7 @@ certifications: [CE, UKCA, RCM, MIC, FCC, IC, KC] primary_button_url: /tutorials/uno-r4-wifi/r4-wifi-getting-started primary_button_title: Get Started forumCategorySlug: '/hardware/uno-r4/uno-r4-wifi/189' +productCode: '161' sku: [ABX00087] --- diff --git a/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/led-matrix/led-matrix.md b/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/led-matrix/led-matrix.md index b6ff865f5f..add5b06468 100644 --- a/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/led-matrix/led-matrix.md +++ b/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/led-matrix/led-matrix.md @@ -83,7 +83,7 @@ byte frame[8][12] = { This option is simple to understand, because you can see the image in the pattern of the array, and it is easy to edit in runtime. The ones in the array above form a heart, and that's the image you'd see on the screen. -To target an individual pixel you select its address and change the value, remember that you'll need to start counting at 0. So, the following line will target the third pixel from the left and the second from the top, then turn it on: +To target an individual pixel you select its address and change the value, remember that you'll need to start counting at 0. So, the following line will target the third pixel from the top and the second from the left, then turn it on: ```arduino frame[2][1] = 1; diff --git a/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/r4-wifi-getting-started/assets/animation.gif b/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/r4-wifi-getting-started/assets/animation.gif new file mode 100644 index 0000000000..c107e0a3e8 Binary files /dev/null and b/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/r4-wifi-getting-started/assets/animation.gif differ diff --git a/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/r4-wifi-getting-started/r4-wifi-getting-started.md b/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/r4-wifi-getting-started/r4-wifi-getting-started.md index 06c4e64b2a..0116cfc4ee 100644 --- a/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/r4-wifi-getting-started/r4-wifi-getting-started.md +++ b/content/hardware/02.hero/boards/uno-r4-wifi/tutorials/r4-wifi-getting-started/r4-wifi-getting-started.md @@ -18,6 +18,19 @@ To install it, you will need the Arduino IDE, which you can download from the [A ***You can also use the [Cloud Editor](https://create.arduino.cc/editor) which comes with all Arduino boards pre-installed.*** +## Board Registration (Optional) + +To register your UNO R4 WiFi, navigate to [https://arduino.cc/start](https://arduino.cc/start) and follow the steps below: + +![Board registration process](assets/animation.gif) + +- Select the **UNO R4 WiFi** board. +- Sign up to the Arduino newsletter (Optional). +- Click on *"How can I find my product code?"* to know where to search for yours. +- Enter the product code and click on **Verify and Activate**. + +***The board registration is a non compulsory step.*** + ## Download & Install IDE 1. First, we need to download the Arduino IDE, which can be done from the [Arduino Software page](https://www.arduino.cc/en/software/). diff --git a/content/hardware/02.hero/boards/uno-rev3-smd/product.md b/content/hardware/02.hero/boards/uno-rev3-smd/product.md index 01a33f47f5..cd35d301fd 100644 --- a/content/hardware/02.hero/boards/uno-rev3-smd/product.md +++ b/content/hardware/02.hero/boards/uno-rev3-smd/product.md @@ -7,6 +7,7 @@ primary_button_title: Get Started core: arduino:avr forumCategorySlug: '/hardware/12' certifications: [CE, UKCA] +productCode: '011' sku: [A000073] --- diff --git a/content/hardware/03.nano/boards/nano-33-ble-rev2/product.md b/content/hardware/03.nano/boards/nano-33-ble-rev2/product.md index ef2178c085..cf6116e782 100644 --- a/content/hardware/03.nano/boards/nano-33-ble-rev2/product.md +++ b/content/hardware/03.nano/boards/nano-33-ble-rev2/product.md @@ -6,6 +6,7 @@ primary_button_title: Get Started core: arduino:mbed_nano forumCategorySlug: '/hardware/nano-family/nano-33-ble/159' certifications: [CE, UKCA] +productCode: '170' sku: [ABX00071, ABX00072] --- diff --git a/content/hardware/03.nano/boards/nano-33-ble-sense-rev2/tutorials/cheat-sheet/ble-cheat-sheet.md b/content/hardware/03.nano/boards/nano-33-ble-sense-rev2/tutorials/cheat-sheet/ble-cheat-sheet.md index b9a8450835..367f465911 100644 --- a/content/hardware/03.nano/boards/nano-33-ble-sense-rev2/tutorials/cheat-sheet/ble-cheat-sheet.md +++ b/content/hardware/03.nano/boards/nano-33-ble-sense-rev2/tutorials/cheat-sheet/ble-cheat-sheet.md @@ -65,7 +65,7 @@ The Nano 33 BLE Sense Rev2 can be programmed through the **Arduino IDE 2**. To i The Nano 33 BLE Sense Rev2 can be programmed through the **Cloud Editor**. To get started with your board, you will only need to install a plugin, which is explained in the guide below: -- [Getting started with the Cloud Editor](/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) +- [Getting started with the Cloud Editor](/learn/starting-guide/the-arduino-web-editor/) ## MicroPython diff --git a/content/hardware/03.nano/boards/nano-33-ble-sense/certifications/Arduino_ABX00030_ABX00031_ABX00034_ABX00035-CERT_RCM.pdf b/content/hardware/03.nano/boards/nano-33-ble-sense/certifications/Arduino_ABX00030_ABX00031_ABX00034_ABX00035-CERT_RCM.pdf deleted file mode 100644 index 04fcf784d7..0000000000 Binary files a/content/hardware/03.nano/boards/nano-33-ble-sense/certifications/Arduino_ABX00030_ABX00031_ABX00034_ABX00035-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/03.nano/boards/nano-33-ble-sense/product.md b/content/hardware/03.nano/boards/nano-33-ble-sense/product.md index a0132c4ce7..9408268511 100644 --- a/content/hardware/03.nano/boards/nano-33-ble-sense/product.md +++ b/content/hardware/03.nano/boards/nano-33-ble-sense/product.md @@ -6,7 +6,7 @@ primary_button_url: /software/ide-v2/tutorials/ide-v2-board-manager#mbed-os-nano primary_button_title: Get Started core: arduino:mbed_nano forumCategorySlug: '/hardware/nano-family/nano-33-ble-sense/160' -certifications: [FCC, IC, CE, RoHS, RCM, UKCA, MIC] +certifications: [FCC, IC, CE, RoHS, UKCA, MIC] status: end-of-life productCode: '032' sku: [ABX00031, ABX00035] diff --git a/content/hardware/03.nano/boards/nano-33-ble/certifications/Arduino_ABX00030_ABX00031_ABX00034_ABX00035-CERT_RCM.pdf b/content/hardware/03.nano/boards/nano-33-ble/certifications/Arduino_ABX00030_ABX00031_ABX00034_ABX00035-CERT_RCM.pdf deleted file mode 100644 index 04fcf784d7..0000000000 Binary files a/content/hardware/03.nano/boards/nano-33-ble/certifications/Arduino_ABX00030_ABX00031_ABX00034_ABX00035-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/03.nano/boards/nano-33-ble/product.md b/content/hardware/03.nano/boards/nano-33-ble/product.md index 23913d17b2..3b4cf948dc 100644 --- a/content/hardware/03.nano/boards/nano-33-ble/product.md +++ b/content/hardware/03.nano/boards/nano-33-ble/product.md @@ -6,7 +6,7 @@ primary_button_url: /software/ide-v2/tutorials/ide-v2-board-manager#mbed-os-nano primary_button_title: Get Started core: arduino:mbed_nano forumCategorySlug: '/hardware/nano-family/nano-33-ble/159' -certifications: [FCC, IC, CE, RoHS, RCM, UKCA, MIC] +certifications: [FCC, IC, CE, RoHS, UKCA, MIC] status: end-of-life productCode: '031' sku: [ABX00030, ABX00034] diff --git a/content/hardware/03.nano/boards/nano-esp32/product.md b/content/hardware/03.nano/boards/nano-esp32/product.md index da830250b1..60c5169e49 100644 --- a/content/hardware/03.nano/boards/nano-esp32/product.md +++ b/content/hardware/03.nano/boards/nano-esp32/product.md @@ -7,6 +7,7 @@ primary_button_title: Get Started core: arduino:esp32 certifications: [CE, UKCA, RoHS, FCC, MIC, IC, RCM] forumCategorySlug: '/hardware/nano-family/nano-esp32/190' +productCode: '160' sku: [ABX00083, ABX00092] --- diff --git a/content/hardware/03.nano/boards/nano-every/tech-specs.yml b/content/hardware/03.nano/boards/nano-every/tech-specs.yml index b4d6c4f00d..ea9c8076d5 100644 --- a/content/hardware/03.nano/boards/nano-every/tech-specs.yml +++ b/content/hardware/03.nano/boards/nano-every/tech-specs.yml @@ -15,11 +15,11 @@ Communication: Power: I/O Voltage: 5V Input voltage (nominal): 7-21V - DC Current per I/O Pin: 15 mA + DC Current per I/O Pin: 20 mA Clock speed: Processor: ATMega4809 20 MHz Memory: - ATmega328P: 6KB SRAM, 48KB flash 256 byte EEPROM + ATmega4809: 6KB SRAM, 48KB flash 256 byte EEPROM Dimensions: Weight: 5gr Width: 18 mm diff --git a/content/hardware/03.nano/boards/nano-matter/product.md b/content/hardware/03.nano/boards/nano-matter/product.md index be5b99755a..087a331127 100644 --- a/content/hardware/03.nano/boards/nano-matter/product.md +++ b/content/hardware/03.nano/boards/nano-matter/product.md @@ -6,6 +6,7 @@ primary_button_title: User Manual sku: [ABX00112, ABX00137] core: arduino:mbed_nano certifications: [CE, UKCA, RoHS, FCC, IC] +productCode: '191' --- diff --git a/content/hardware/03.nano/boards/nano-rp2040-connect/certifications/Arduino_ABX00052_ABX00053-CERT_RCM.pdf b/content/hardware/03.nano/boards/nano-rp2040-connect/certifications/Arduino_ABX00052_ABX00053-CERT_RCM.pdf deleted file mode 100644 index b82b2a39bb..0000000000 Binary files a/content/hardware/03.nano/boards/nano-rp2040-connect/certifications/Arduino_ABX00052_ABX00053-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/03.nano/boards/nano-rp2040-connect/product.md b/content/hardware/03.nano/boards/nano-rp2040-connect/product.md index 5d13930391..e577cc2288 100644 --- a/content/hardware/03.nano/boards/nano-rp2040-connect/product.md +++ b/content/hardware/03.nano/boards/nano-rp2040-connect/product.md @@ -6,7 +6,7 @@ primary_button_url: /software/ide-v2/tutorials/ide-v2-board-manager#mbed-os-nano primary_button_title: Get Started core: arduino:mbed_nano forumCategorySlug: '/hardware/nano-family/nano-rp2040-connect/165' -certifications: [RoHS, UKCA, RCM, CE, FCC, RCM] +certifications: [RoHS, UKCA, CE, FCC] productCode: '044' sku: [ABX00053, ABX00052] --- diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/compatibility.yml b/content/hardware/03.nano/carriers/nano-connector-carrier/compatibility.yml new file mode 100644 index 0000000000..54358499f6 --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/compatibility.yml @@ -0,0 +1,16 @@ +software: + - arduino-ide + - arduino-cli + - cloud-editor +hardware: + shields: ~ + carriers: ~ + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter \ No newline at end of file diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/ASX00061-pinout-v2.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/ASX00061-pinout-v2.png new file mode 100644 index 0000000000..d0ea11d6d7 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/ASX00061-pinout-v2.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/Block_Diagram.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/Block_Diagram.png new file mode 100644 index 0000000000..3586893b6d Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/Block_Diagram.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/board-selector.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/board-selector.png new file mode 100644 index 0000000000..477a49e28b Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/board-selector.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/connectors-rect.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/connectors-rect.png new file mode 100644 index 0000000000..e874cb0ede Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/connectors-rect.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/dimensions-rect.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/dimensions-rect.png new file mode 100644 index 0000000000..cbcc884f41 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/dimensions-rect.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/grove.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/grove.png new file mode 100644 index 0000000000..bbfeba009d Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/grove.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/nano-connector-top.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/nano-connector-top.png new file mode 100644 index 0000000000..0f578e8c6a Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/nano-connector-top.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/power-tree.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/power-tree.png new file mode 100644 index 0000000000..217d8f513f Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/power-tree.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/qwiic.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/qwiic.png new file mode 100644 index 0000000000..3f54d935f4 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/qwiic.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/sd.png b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/sd.png new file mode 100644 index 0000000000..6edf269607 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/sd.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/topology.jpg b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/topology.jpg new file mode 100644 index 0000000000..6fd7e832be Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/assets/topology.jpg differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/datasheet.md b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/datasheet.md new file mode 100644 index 0000000000..b2ba972616 --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/datasheet/datasheet.md @@ -0,0 +1,368 @@ +--- +identifier: ASX00061 +title: Nano Connector Carrier +type: maker +variant: 'Datasheet' +author: Christopher Méndez +--- + +![](assets/nano-connector-top.png) + +# Description + +The Nano Connector Carrier is a practical solution for expanding the capabilities of our Nano product family. It is plug-and-play compatible with Qwiic and Grove modules, making rapid prototyping easier than ever. + +Whether diving into MicroPython or Matter, building with Modulinos, or developing AI-powered applications, this carrier provides a simple platform for bringing your ideas to life. + +The onboard microSD card slot unlocks new possibilities for data logging, Edge AI and real-time storage needs. + +# Target Areas: + +Industrial Automation, Rapid Prototyping, Proof of Concept, Edge AI, Research and Development + +# CONTENTS + +## Application Examples + +**Industrial Automation:** +- **Data Logging:** Data Logger as a compact, all-in-one device for efficient data collection and storage, ideal for IoT and sensor-based applications. With Nano boards advanced features and a compact design, it simplifies sensor interfacing, data management, and storage, making it perfect for smart homes, industrial monitoring, and research projects. +- **Predictive Maintenance:** Leverage the powerful features of the Nano Connector Carrier to develop a robust predictive maintenance prototype for industrial machinery. Utilize Modulino to monitor key operational parameters and detect anomalies or early signs of wear, enabling proactive maintenance and reducing downtime. Enhance this system with the Nano 33 BLE Sense, which continuously gathers crucial environmental data, including temperature, humidity, and vibrations to assess the overall health of the machinery. +- **Proof of Concept:** Expand your Nano board's capabilities with Nano Connector Carrier. The Nano Connector Carrier is ready for use with a wide range of external hardware components or modules, covering all your needs, from embedded sensing to actuation. + +**Prototyping:** +- **Compact Device:** Effortlessly integrate the Connector Carrier into your interactive prototype, regardless of whether the Nano board is based on. Its plug-and-play sensors and actuators make development seamless. Whether using modules from our Qwiic or Grove series, its compact design allows you to experiment in small spaces, making it a perfect platform for testing and validating your tech ideas. +- **Smart Home:** Easily prototype any smart device that can monitor and adjust temperature, humidity, or occupancy levels by combining Nano Connector Carrier, Modulinos and Nano Matter. Integrate with Matter-compatible smart home systems like Alexa or Google Home for frictionless voice control and automation. +- **Controller:** Using the Nano Connector Carrier, you can easily prototype a versatile RC - MIDI - RF - BLE - HID - DMX controller for your projects. With plug-and-play support for sensors and actuators, you can create custom interfaces that respond to touch, motion or even pressure. The compact design allows for a fully portable setup using Modulinos or third-party sensors. + +**Education:** +- **Micropython Learning:** Easily dive into MicroPython with the Nano Connector Carrier, Modulinos and Nano ESP32 as your learning platform. Its plug-and-play support for sensors and actuators allows you to experiment with real-world applications right away, whether you're reading sensor data, controlling LEDs, or building interactive projects. +- **Cross-Disciplinary Student Projects:** The Connector Carrier accelerates interdisciplinary collaboration by enabling rapid prototyping in classroom and lab environments. Its compact, modular design allows students across various fields (including engineering, computer science and the arts) to quickly develop, test, and refine ideas using Arduino Nano boards. Students can seamlessly integrate sensors, actuators and communication modules with built-in connectivity and expansion options, fostering hands-on experimentation and innovation. +- **Sustainability and Green Tech:** Energy Management project where students can design and test systems that monitor or reduce energy use in buildings or devices, promoting sustainability and teaching about renewable energy or energy efficiency, within integrated solar or wind power systems. + +## Features +### General Specifications Overview + +The main features of the Nano Connector Carrier are detailed in the table shown below. + +| **Feature** | **Description** | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Interfaces | 2x Grove analog/digital connector

1x Grove I2C connector

1x Grove UART connector

1x Qwiic I2C connector

1x microSD card reader | +| I/O Voltage | Switch between +3.3 V and +5 V | +| Dimensions | 28 mm x 43 mm | +| Operating Temperatures | -40 °C to +85 °C | + + +### Board Selection + +The Nano Connector Carrier lets you select +5 V or +3.3 V Nano boards to ensure compatibility with the whole Nano family. To do this, toggle the carrier onboard switch to its respective position, following the table below. + +![Board Selector Switch](assets/board-selector.png) + +| **3V3** | **5V** | +| ---------------------- | ------------ | +| Nano ESP32 | Arduino Nano | +| Nano 33 IoT | Nano Every | +| Nano 33 BLE | | +| Nano 33 BLE Rev2 | | +| Nano 33 BLE Sense | | +| Nano 33 BLE Sense Rev2 | | +| Nano RP2040 Connect | | +| Nano Matter | | + +Setting the switch to a specific position (3.3 V or 5V) also manages the voltage output on the Grove connector VCC pin. + +
+Note: The logic and power voltage of the Qwiic connector and the microSD card slot are always +3.3 V regardless of the board selector switch position. +
+ +### Qwiic I2C Connector + +The Qwiic connector is connected to the standard I2C bus on the board (via A4 and A5 pins). It is powered via +3.3 V, following the Qwiic standard system, making the Nano Connector Carrier compatible with the Arduino Modulino nodes. + +Its logic level is fixed to +3.3 V, which is translated to the host Nano board voltage defined by the board selector switch. + +![Nano Connector Carrier Qwiic Connector](assets/qwiic.png) + +### Grove Connectors + +The Nano Connector Carrier features 4x Grove connectors that expose the host board's main communication interfaces. + +![Nano Connector Carrier Grove Connectors](assets/grove.png) + +
+Note: The Grove connectors VCC voltage is controlled by the board selector switch. +
+ +
+ +### Micro SD Card + +The onboard microSD card slot unlocks new possibilities for data logging, Edge AI and real-time storage needs. + +![Nano Connector Carrier Grove Connectors](assets/sd.png) + +
+Note: The microSD card SPI Slave Select (SS) pin can be changed using the solder jumpers on the carrier. See pinout section for more details. +
+ +### Communication Interfaces + +The Nano Connector Carrier exposes all the Nano host board connections and communication interfaces through the header pins and connectors. + +| Interfaces | Connector | +| -------------- | ----------------------------------------------------------------------------- | +| UART (x1) | - Nano header connector

- Grove connector | +| SPI (x1) | - Nano header connector

- Micro SD card slot | +| I2C (x1) | - Nano header connector

- Qwiic connector

- Grove connector | +| Analog/Digital | - Nano header connector

- 2x Grove connectors | + +### Related Products + +- Arduino Nano (A000005) +- Nano 33 BLE (ABX00030) +- Nano 33 BLE Rev2 (ABX00071 / ABX00072) +- Nano 33 BLE Sense (ABX00031) +- Nano 33 BLE Sense Rev2 (ABX00069) +- Nano 33 IoT (ABX00027) +- Nano ESP32 (ABX00083 / ABX00092 / ABX00083_CN / ABX00092_CN) +- Nano Every (ABX00028) +- Nano Matter (ABX00112 / ABX00137) +- Nano RP2040 Connect (ABX00053) +- Arduino Modulino nodes + +## Power and Ratings +### Recommended Operating Conditions + +| Symbol | Description | Min | Typ | Max | Unit | +| -------------- | ------------------------------- | --- | --- | --- | ---- | +| 3V3 | Input voltage from 3.3 V boards | - | 3.3 | - | V | +| 5V | Input voltage from 5 V boards | - | 5.0 | - | V | +| TOP | Operating Temperature | -40 | 25 | 85 | °C | + +
+Note: The Nano Connector Carrier is powered by the host board's nominal voltage. +
+ +### Power Tree + +The following diagram illustrates the Nano Connector Carrier's main system power architecture. + +![Nano Connector Carrier Power Tree](assets/power-tree.png) + +## Functional Overview + +The Nano Connector Carrier expands the connectivity of the Nano boards family, featuring a variety of Grove and Qwiic connectors. It also includes a Micro SD card interface for data logging. + +### Pinout + +The Nano Connector Carrier pinout is shown in the following figure. + +![Pinout for Nano Connector Carrier](assets/ASX00061-pinout-v2.png) + +#### Analog (JP1) + +| Pin | Function | Type | Description | +| --- | --------- | --------- | --------------------------------------- | +| 1 | D13 / SCK | Digital | Serial Clock | +| 2 | +3.3 V | Power Out | +3.3 V Power Rail | +| 3 | B0 / AREF | Analog | Analog Reference | +| 4 | A0 | Analog | Analog input 0 | +| 5 | A1 | Analog | Analog input 1 | +| 6 | A2 | Analog | Analog input 2 | +| 7 | A3 | Analog | Analog input 3 | +| 8 | A4 | Analog | Analog input 4 / I²C Serial Data (SDA) | +| 9 | A5 | Analog | Analog input 5 / I²C Serial Clock (SCL) | +| 10 | A6 | Analog | Analog input 6 | +| 11 | A7 | Analog | Analog input 7 | +| 12 | +5V | Power | USB power (5 V) | +| 13 | BOOT1 | Mode | Board Reset 1 | +| 14 | GND | Power | Ground | +| 15 | VIN | Power | Voltage Input | + +#### Digital (JP2) + +| Pin | Function | Type | Description | +| --- | ----------- | -------- | --------------------------------------- | +| 15 | D12 / MISO | Digital | Master In Slave Out | +| 14 | D11 / MOSI | Digital | Master Out Slave In | +| 13 | D10 / SS | Digital | Slave Select | +| 12 | D9 | Digital | Digital pin 9 | +| 11 | D8 | Digital | Digital pin 8 | +| 10 | D7 | Digital | Digital pin 7 | +| 9 | D6 | Digital | Digital pin 6 | +| 8 | D5 | Digital | Digital pin 5 | +| 7 | D4 / SD_SS | Digital | Digital pin 4 / Default SD card SS | +| 6 | D3 / *SD_SS | Digital | Digital pin 3 / Optional SD card SS | +| 5 | D2 / *SD_SS | Digital | Digital pin 2 / Optional SD card SS | +| 4 | GND | Power | Ground | +| 3 | RST | Internal | Reset | +| 2 | D0 / RX | Digital | Digital pin 0 / Serial Receiver (RX) | +| 1 | D1 / TX | Digital | Digital pin 1 / Serial Transmitter (TX) | + +__*SD_SS__ are optional SPI Slave Select (SS) pins for the Micro SD card communication. See [pinout](#pinout) for more details. + +
+ +### Block Diagram + +An overview of the Nano Connector Carrier high-level architecture is illustrated in the figure below. + +![Nano Connector Carrier Block Diagram](assets/Block_Diagram.png) + +
+ +## Board Topology +### Overall View + +![Top View of Nano Connector Carrier](assets/topology.jpg) + +| **Reference** | **Description** | +| -------------- | ---------------------------------------- | +| U1, U2, U3, U5 | Push pull translators (SN74LVC1G125DCKR) | +| U4 | Open drain translator (TCA9406DCUR) | +| J2, J3 | Nano board headers | +| S1 | Board selector switch | +| J5 | Grove analog connector | +| J7 | Grove analog connector | +| J4 | Grove UART connector | +| J8 | Qwiic I2C connector | +| J9 | microSD card connector | + +## Device Operation + +### Getting Started - IDE + +If you want to program your Nano board to use the Nano Connector Carrier while offline you need to install the Arduino® Desktop IDE **[1]**. To connect the Nano board to your computer, you will need a USB cable, which can also provide power to the board. + +### Online Resources + +Now that you have learned the basics of what you can do with the carrier, you can explore its endless possibilities by checking out exciting projects on Arduino Project Hub **[4]**, the Arduino Library Reference **[5]**, and the online store **[6]**. Here, you can complement your board with sensors, actuators and more. + +## Mechanical Information + +The Nano Connector Carrier is a double-sided 28 mm x 43 mm board with female double row Nano headers around the top long edges, 4x Grove horizontal connectors, one on each corner of the bottom side, a Micro SD card slot and a Qwiic connector on the bottom edges. + +### Board Dimensions +The outline and dimensions of the Nano Connector Carrier and mounting holes can be seen in the following figure; all the dimensions are in mm. + +![Mechanical View of Nano Connector Carrier](assets/dimensions-rect.png) + +The Nano Connector Carrier has two 3.2 mm drilled mounting holes for mechanical fixing. + +### Board Connectors + +The Nano Connector Carrier's connectors are placed on the top side of the board, as shown in the figure below; all the dimensions are in mm. + +![Mechanical View of Nano Connector Carrier's Connectors](assets/connectors-rect.png) + +## Certifications + +### Certificactions Summary + +| **Certification** | **Status** | +| :-----------------: | :--------: | +| CE (European Union) | Yes | +| RoHS | Yes | +| REACH | Yes | +| WEEE | Yes | +| FCC (USA) | Yes | +| IC (Canada) | Yes | +| UKCA (UK) | Yes | + +### Declaration of Conformity CE DoC (EU) + +We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA). + +### Declaration of Conformity to EU RoHS & REACH 211 01/19/2021 + +Arduino boards are in compliance with RoHS 2 Directive 2011/65/EU of the European Parliament and RoHS 3 Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment. + +| **Substance** | **Maximum Limit (ppm)** | +| -------------------------------------- | ----------------------- | +| Lead (Pb) | 1000 | +| Cadmium (Cd) | 100 | +| Mercury (Hg) | 1000 | +| Hexavalent Chromium (Cr6+) | 1000 | +| Poly Brominated Biphenyls (PBB) | 1000 | +| Poly Brominated Diphenyl ethers (PBDE) | 1000 | +| Bis(2-Ethylhexyl) phthalate (DEHP) | 1000 | +| Benzyl butyl phthalate (BBP) | 1000 | +| Dibutyl phthalate (DBP) | 1000 | +| Diisobutyl phthalate (DIBP) | 1000 | + +Exemptions : No exemptions are claimed. + +Arduino Boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs ([https://echa.europa.eu/web/guest/candidate-list-table](https://echa.europa.eu/web/guest/candidate-list-table)), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC. + +### Conflict Minerals Declaration + +As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regards to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder, or as a component in metal alloys. As part of our reasonable due diligence Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas. + +### FCC Caution + +Any Changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate the equipment. + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: + +(1) This device may not cause harmful interference + +(2) this device must accept any interference received, including interference that may cause undesired operation. + +**FCC RF Radiation Exposure Statement:** + +1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. + +2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment. + +3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator & your body. + +English: +User manuals for licence-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada licence-exempt RSS standard(s). Operation is subject to the following two conditions: + +(1) this device may not cause interference + +(2) this device must accept any interference, including interference that may cause undesired operation of the device. + +French: +Le présent appareil est conforme aux CNR d’Industrie Canada applicables aux appareils radio exempts de licence. L’exploitation est autorisée aux deux conditions suivantes : + +(1) l’ appareil nedoit pas produire de brouillage + +(2) l’utilisateur de l’appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d’en compromettre le fonctionnement. + +**IC SAR Warning:** + +English +This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body. + +French: +Lors de l’ installation et de l’ exploitation de ce dispositif, la distance entre le radiateur et le corps est d ’au moins 20 cm. + +**Important:** The operating temperature of the EUT can’t exceed 85 ℃ and shouldn’t be lower than -40 ℃. + +Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 201453/EU. This product is allowed to be used in all EU member states. + +## Company Information + +| Company Information | Details | +| --------------- | -------------------------------------------- | +| Company Name | Arduino S.r.l. | +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA (Italy) | + +## Reference Documentation + +| Reference | Link | +| ------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino IDE (Cloud) | [https://app.arduino.cc/sketches](https://app.arduino.cc/sketches) | +| Arduino Cloud - Getting Started | [https://docs.arduino.cc/arduino-cloud/guides/overview/](https://docs.arduino.cc/arduino-cloud/guides/overview/) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Language Reference | [https://docs.arduino.cc/language-reference/](https://docs.arduino.cc/language-reference/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | + +## Change Log + +| Date | **Revision** | **Changes** | +| --------- | ------------ | ------------- | +| 22/05/2025 | 2 | Technical corrections, voltage notation standardization, nomenclature fixes and change log correction | +| 21/05/2025 | 1 | First Release | \ No newline at end of file diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/downloads/ASX00061-schematics.pdf b/content/hardware/03.nano/carriers/nano-connector-carrier/downloads/ASX00061-schematics.pdf new file mode 100644 index 0000000000..24e2a47b2b Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/downloads/ASX00061-schematics.pdf differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/downloads/ASX00061-step.zip b/content/hardware/03.nano/carriers/nano-connector-carrier/downloads/ASX00061-step.zip new file mode 100644 index 0000000000..e1b064172f Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/downloads/ASX00061-step.zip differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/features.md b/content/hardware/03.nano/carriers/nano-connector-carrier/features.md new file mode 100644 index 0000000000..4b79e43d74 --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/features.md @@ -0,0 +1,20 @@ + + +This product expands the capabilities of our Nano board family, with QWIIC and Grove modules, and the onboard microSD card slot unlocks new possibilities for data logging, edge AI, and real-time storage needs. The Nano Connector Carrier is an ultimate tool for fast, flexible, and future-ready development. + + + + + + +The Nano Connector Carrier is ready to be used with a wide range of external hardware components or modules, covering all your needs, from embedded sensing to actuation. + + + + + +Unlocks new possibilities for data logging, edge AI, and real-time storage needs. + + + + diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/image.svg b/content/hardware/03.nano/carriers/nano-connector-carrier/image.svg new file mode 100644 index 0000000000..32ea10fe23 --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/image.svg @@ -0,0 +1,3 @@ + + + diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/interactive/ASX00061-pinout.png b/content/hardware/03.nano/carriers/nano-connector-carrier/interactive/ASX00061-pinout.png new file mode 100644 index 0000000000..d0ea11d6d7 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/interactive/ASX00061-pinout.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/product.md b/content/hardware/03.nano/carriers/nano-connector-carrier/product.md new file mode 100644 index 0000000000..a9355ef95d --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/product.md @@ -0,0 +1,12 @@ +--- +title: Nano Connector Carrier +url_shop: https://store.arduino.cc/products/nano-connector-carrier +url_guide: /tutorials/ +primary_button_url: /tutorials/ +primary_button_title: Get Started +certifications: [] +forumCategorySlug: '/hardware/12' +sku: [ASX00061] +--- + +The Nano Connector Carrier brings plug & play compatibility with QWIIC and Grove modules, making rapid prototyping easier than ever. \ No newline at end of file diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tech-specs.md b/content/hardware/03.nano/carriers/nano-connector-carrier/tech-specs.md new file mode 100644 index 0000000000..6f87303422 --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Arduino® Nano Connector Carrier. \ No newline at end of file diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tech-specs.yml b/content/hardware/03.nano/carriers/nano-connector-carrier/tech-specs.yml new file mode 100644 index 0000000000..956f5aac50 --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/tech-specs.yml @@ -0,0 +1,13 @@ +Carrier: + Name: Arduino® Nano Connector Carrier + SKU: ASX00061 +GROVE Connectors: + analog/digital I/O: 2 + I2C: Yes + UART: Yes +QWIIC Connector: Yes, I2C +External memory: SD card Reader +I/O Voltage: Switch between 3.3v and 5V +Dimensions: + Width: 28 mm + Length: 43 mm diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/ASX00061-pinout-v2.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/ASX00061-pinout-v2.png new file mode 100644 index 0000000000..d0ea11d6d7 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/ASX00061-pinout-v2.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/connector-list.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/connector-list.png new file mode 100644 index 0000000000..3116d60a4f Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/connector-list.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/cover.gif b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/cover.gif new file mode 100644 index 0000000000..0df8eeba55 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/cover.gif differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/enclosure-connection.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/enclosure-connection.png new file mode 100644 index 0000000000..746a943c66 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/enclosure-connection.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/enclosure-monitor.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/enclosure-monitor.png new file mode 100644 index 0000000000..a5a81473d7 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/enclosure-monitor.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/grove-01.gif b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/grove-01.gif new file mode 100644 index 0000000000..5c46c637ec Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/grove-01.gif differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/moduleConnection.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/moduleConnection.png new file mode 100644 index 0000000000..bf43d6278f Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/moduleConnection.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/movement-connector.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/movement-connector.png new file mode 100644 index 0000000000..14bbbff461 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/movement-connector.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/movement_monitor.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/movement_monitor.png new file mode 100644 index 0000000000..b23ee94656 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/movement_monitor.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/nano-formfactor.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/nano-formfactor.png new file mode 100644 index 0000000000..854e0f39f7 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/nano-formfactor.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/power-switch-01.gif b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/power-switch-01.gif new file mode 100644 index 0000000000..2c5306af1a Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/power-switch-01.gif differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/qwiic-01.gif b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/qwiic-01.gif new file mode 100644 index 0000000000..117e0040a3 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/qwiic-01.gif differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/sd-card-01.gif b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/sd-card-01.gif new file mode 100644 index 0000000000..b3c7f70bd6 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/sd-card-01.gif differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/solder-jumper-01.gif b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/solder-jumper-01.gif new file mode 100644 index 0000000000..83e1ea4f63 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/solder-jumper-01.gif differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/teamometer.png b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/teamometer.png new file mode 100644 index 0000000000..8d068565f3 Binary files /dev/null and b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/assets/teamometer.png differ diff --git a/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/content.md b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/content.md new file mode 100644 index 0000000000..d6dc6dc0cb --- /dev/null +++ b/content/hardware/03.nano/carriers/nano-connector-carrier/tutorials/getting-started-nano-connector-carrier/content.md @@ -0,0 +1,652 @@ +--- +title: 'Getting Started with Nano Connector Carrier' +difficulty: beginner +description: 'This short guide takes you through the features of the Nano Connector Carrier, along with some important considerations when using this product.' +tags: [Prototyping] +author: 'Pedro Sousa Lima' +hardware: + - hardware/03.nano/carriers/nano-connector-carrier +--- + +The Nano Connector Carrier is a versatile expansion board designed for the Arduino Nano form factor. It provides an easy way to interface your Arduino Nano with various sensors, modules and storage options through industry-standard connectors. This carrier board eliminates the need for complex wiring and breadboarding, allowing you to focus on your project's functionality rather than connectivity challenges. + +![The Nano Connector Carrier](assets/cover.gif) + +## Compatibility + +The carrier is designed to work with all Arduino Nano form factor boards. Its standardized layout ensures compatibility with current and future Arduino Nano family boards, giving you flexibility in developing your current and future projects. + +![Carrier With a Nano Board](assets/nano-formfactor.png) + +## Features + +The Nano Connector Carrier comes packed with the following key features to enhance your projects based on Nano family boards: + +### Input Selector Switch + +To ensure full compatibility with the Nano family boards, as some boards can be [configured to different input voltage levels](https://docs.arduino.cc/tutorials/nano-esp32/cheat-sheet/#Input:~:text=otherwise%20be%20damaged.-,Input%20Voltage%20(VIN),-If%20you%27re%20using) the carrier includes a switch to select +3.3 VDC or +5 VDC input voltage levels. The selector switch lets you choose the appropriate input voltage for your Nano board. + +![Onboard Voltage Switch](assets/power-switch-01.gif) + +This feature also ensures compatibility with a wide range of sensors and modules that operate at different voltage levels, eliminating the need for additional level shifters in most cases. + +### Connectors + +The Nano Connector Carrier includes both QWIIC and Grove connectors for expanding the Nano board's capability with external sensors, as well as an onboard microSD card slot to expand the board's memory capabilities : +![Available Connectors](assets/connector-list.png) + +#### Qwiic Connector + +The Nano Connector Carrier features a single Qwiic connector, allowing you to easily interface with Arduino Modulinos and other Qwiic-based sensors and modules. + +![QWIIC Connector](assets/qwiic-01.gif) + +The Qwiic connector uses a 4-pin JST SH connector (P/N: SM04B-SRSS-TB(LF)(SN)) with the following standardized pinout: + +| Pin | Connection | +|-----|------------------------------------------| +| GND | Ground | +| VCC | +3.3 VDC/ +5 VDC (selected by the input selector switch) | +| SDA | I²C Data (connected to the A4 pin of the Nano board) | +| SCL | I²C Clock (connected to the A5 pin of the Nano board) | + +A single Qwiic connector is all you need since it's designed to be daisy-chainable, allowing you to connect multiple Modulinos or other Qwiic-compatible devices in series. This connector makes it plug-and-play simple to add sensors, displays and other Qwicc-compatible devices to your project. + +#### Grove Connectors + +The Nano Connector Carrier also includes four Grove connectors, compatible with the extensive ecosystem of Grove modules. + +![Grove Connector](assets/grove-01.gif) + +The Grove connector uses a 4-pin DIP-2.0 mm connector (P/N: 114020164) with four different standardized pinouts: + +**Grove (J5) - Analog** + +| Pin | Connection | +|-----|--------------------------------------| +| GND | Ground | +| VCC | +3.3 VDC/ +5 VDC (selected by the input selector switch) | +| A3 | Analog pin A3 on the Nano board| +| A2 | Analog pin A2 on the Nano board| + +**Grove (J7) - Analog** + +| Pin | Connection | +|-----|--------------------------------------| +| GND | Ground | +| VCC | +3.3 VDC/ +5 VDC (selected by the input selector switch) | +| A1 | Analog pin A1 on the Nano board| +| A0 | Analog pin A0 on the Nano board| + +**Grove (J4) - SPI** + +| Pin | Connection | +|------|--------------------------------------| +| GND | Ground | +| VCC | +3.3 VDC/ +5 VDC (selected by the input selector switch) | +| MOSI | SPI MOSI (D11 pin on the Nano board)| +| MISO | SPI MISO (D12 pin on the Nano board)| + +**Grove (J6) - I²C** + +| Pin | Connection | +|-----|--------------------------------------| +| GND | Ground | +| VCC | +3.3 VDC/ +5 VDC (selected by the input selector switch) | +| SDA | I²C Data (A4 pin on the Nano board, shared with the Qwiic connector) | +| SCL | I²C Clock (A5 pin on the Nano board, shared with the Qwiic connector)| + +With the standardized pinouts mentioned, using Groove connectors eliminates the need for soldering or breadboarding and simplifies connecting various and different sensors, actuators and displays to your Nano family board. + +#### MicroSD Card Slot + +The Nano Connector Carrier includes an onboard microSD card slot for projects requiring data logging or file storage. + +![MicroSD Card Slot](assets/sd-card-01.gif) + +The microSD card slot is connected to the Nano family board through the SPI interface as follows: + +| SPI Signal | Arduino Pin | +|------------|----------------------------------------| +| MISO | D12 pin on the Nano board| +| MOSI | D11 pin on the Nano board| +| SCK | D13 pin on the Nano board| +| CS | D4 pin on the Nano board (configurable also to D2 or D3 pins) | + +***By default, pin D4 is used as the SPI CS (Chip Select) for the microSD card, but you can also configure solder jumpers on the Nano Connector Carrier to use D2 or D3 pins if needed.*** + +![CS Pin Selector Jumpers](assets/solder-jumper-01.gif) + +With this feature, your Nano family board can read and write files on a microSD card, making it perfect for data logging applications, playing audio files or storing configuration data. + +## Pinout + +The Nano Connector Carrier features the intuitive and straightforward Nano family board pinout that easily connects various peripherals to your Nano family board. The carrier is divided into two main sections: + +![Nano Connector Carrier Pinout](assets/ASX00061-pinout-v2.png) + +The pinout includes labeled connections for all the interfaces: +- Nano family pins (digital and analog pins) +- SPI interface pins +- I²C interface pins +- Power lines (+5 VDC, +3.3 VDC and GND) +- Serial interface pins + +The board's connectors are mapped to specific Nano family pins, making it straightforward to program your projects. The voltage level switch affects all VCC pins on the Grove and Qwiic connectors, allowing you to match your peripheral's voltage requirements. + +## What to Do Next? + +### Example Project: Teamometer + +The Teamometer demonstrates how different Modulino sensor modules can work together to solve a real-world problem. This project combines temperature sensing, LED visual feedback, button interaction and audio alerts to create a smart tea temperature monitor. It's a fun way to see how easily the Nano Connector Carrier can connect to different sensors and modules simultaneously, giving you visual cues, sounds and temperature readings in a straightforward project, even with different connectors. + +![Teamometer overview](assets/teamometer.png) + +**Components needed:** +- [Modulino Buttons](https://store.arduino.cc/products/modulino-buttons) - ABX00110 +- [Modulino Pixels](https://store.arduino.cc/products/modulino-pixels) - ABX00109 +- [Modulino Thermo](https://store.arduino.cc/products/modulino-thermo) - ABX00103 +- [Nano family board](https://docs.arduino.cc/hardware/) +- [Nano Connector Carrier](https://store.arduino.cc/products/nano-connector-carrier) - ASX00061 +- Grove Buzzer sensor +- Thick rubber band (for securing the Thermo module to your cup) +- Cup +- Your favorite tea + +**Assembly instructions:** +1. Connect the Modulino Buttons, Pixels and Thermo modules to your Nano family board through the Nano Connector Carrier. +2. Attach the Thermo module to the outside of your cup using the thick rubber band. +3. Connect the Grove Buzzer sensor to your Nano family board through the Nano Connector Carrier. +4. Upload the code provided below. +5. Fill your cup with hot tea. +6. Wait a few seconds to allow the heat to transfer to the sensor. +7. Press button A to begin monitoring. + +![Connection guide](assets/moduleConnection.png) + +**Code Example:** +```arduino +#include + +// Create object instances +ModulinoThermo thermo; +ModulinoButtons buttons; +ModulinoPixels leds; + +// Define temperature thresholds (in Celsius) feel free tpo change these as the heat transfer will depend a lot on your cup. Thermal paste can be added to improve this. +const float HOT_TEMP = 80.0; // Fresh tea temperature +const float LUKEWARM_TEMP = 40.0; // Ideal drinking temperature +const float ROOM_TEMP = 25.0; // Room temperature + +// Define pin for buzzer +const int BUZZER_PIN = A0; + +// Variables to track state +bool measuring = false; // Are we actively measuring temperature? +bool buzzing = false; // Is the buzzer currently active? +int brightness = 25; // LED brightness (0-255) + +void setup() { + Serial.begin(9600); + + // Initialize Modulino I2C communication + Modulino.begin(); + + // Detect and connect to modules + thermo.begin(); + buttons.begin(); + leds.begin(); + + // Set up buzzer pin as output + pinMode(BUZZER_PIN, OUTPUT); + + // Initial message + Serial.println("Tea Temperature Monitor"); + Serial.println("Press Button A to start monitoring"); + + // Show all LEDs off initially + leds.clear(); + leds.show(); +} + +void loop() { + // Check for new button events + if (buttons.update()) { + // Check which button was pressed (0=A, 1=B, 2=C) + if (buttons.isPressed(0)) { + Serial.println("Button A pressed - Start measuring!"); + measuring = true; + } else if (buttons.isPressed(1)) { + Serial.println("Button B pressed - Stop buzzer!"); + // Turn off buzzer if it's on + if (buzzing) { + noTone(BUZZER_PIN); + buzzing = false; + } + } + } + + // If we're in measuring mode, check temperature + if (measuring) { + // Read temperature in Celsius from the sensor + float celsius = thermo.getTemperature(); + + Serial.print("Temperature (C): "); + Serial.println(celsius); + + // Update the LED progress bar based on temperature + updateTemperatureDisplay(celsius); + + // Check if tea has cooled to lukewarm + if (celsius <= LUKEWARM_TEMP && celsius > ROOM_TEMP) { + // Tea is ready to drink! Activate buzzer if not already buzzing + if (!buzzing) { + Serial.println("Tea is ready to drink!"); + tone(BUZZER_PIN, 1000); // 1kHz tone + buzzing = true; + } + } + // If the tea is removed (temperature drops to near room temp) + else if (celsius <= ROOM_TEMP) { + // Turn off buzzer + if (buzzing) { + noTone(BUZZER_PIN); + buzzing = false; + } + // Reset measuring state as tea is likely removed + measuring = false; + Serial.println("Tea removed or cooled to room temperature"); + Serial.println("Press Button A to start new measurement"); + leds.clear(); + leds.show(); + } + + // If tea is still too hot + else if (celsius > LUKEWARM_TEMP) { + // Ensure buzzer is off + if (buzzing) { + noTone(BUZZER_PIN); + buzzing = false; + } + } + } + + // Small delay to prevent reading too frequently + delay(500); +} + +// Function to update LED display based on temperature +void updateTemperatureDisplay(float celsius) { + // Calculate how many LEDs to light based on temperature + // Hotter = more LEDs lit + + // Map temperature range to LED count (0-8) + // If temperature is at or above HOT_TEMP, all LEDs are on + // If temperature is at or below ROOM_TEMP, no LEDs are on + int ledCount = map(celsius * 100, ROOM_TEMP * 100, HOT_TEMP * 100, 0, 8); + + // Constrain to valid range + ledCount = constrain(ledCount, 0, 8); + + // Update LEDs + leds.clear(); // Use the class's built-in clear method + + // Light up LEDs based on temperature with color coding + for (int i = 0; i < ledCount; i++) { + // Choose color based on temperature ranges + if (celsius >= 70) { + // Very hot (70°C+): RED + leds.set(i, RED, brightness); + } else if (celsius >= 55) { + // Hot (55-70°C): VIOLET + leds.set(i, VIOLET, brightness); + } else if (celsius >= LUKEWARM_TEMP) { + // Warm (40-55°C): WHITE + leds.set(i, WHITE, brightness); + } else if (celsius >= 30) { + // Getting cool (30-40°C): GREEN + leds.set(i, GREEN, brightness); + } else { + // Cool (below 30°C): BLUE + leds.set(i, BLUE, brightness); + } + } + + // Update the LEDs + leds.show(); +} +``` + +The temperature information will be displayed on the serial console and the Modulino Pixels. As your tea cools, fewer LEDs will light up, and the colors will change from red (very hot) through violet, white, and green, to blue (cool). When your tea reaches the perfect drinking temperature, the buzzer will tell you it is ready. + +Keep in mind that because the sensor is designed for atmospheric temperature monitoring you might have to tinker the values a bit(depending on your setup) as the measurement will not be as accurate measuring a different medium. + +### Example Project: Motion Logger + +The Motion Tracker demonstrates how the Nano Connector Carrier can integrate with the Movement sensor to record motion data. This project showcases real-time motion sensing, button control and data logging to create a portable motion capture system that can be used for activity tracking, sports analysis or interactive projects. + +![Motion Logger overview](assets/movement_monitor.png) + +**Components needed:** +- [Modulino Movement](https://store.arduino.cc/products/modulino-movement) - ABX00101 +- [Modulino Buttons ](https://store.arduino.cc/products/modulino-buttons) - ABX00110 +- MicroSD card +- [Nano Connector Carrier](https://store.arduino.cc/products/nano-connector-carrier) - ASX00061 + +![Connection guide](assets/movement-connector.png) + +**Assembly instructions:** +1. Connect the Modulino Movement and Buttons modules to your Nano Connector Carrier +2. Insert a microSD card into the Nano Connector Carrier +3. Upload the example sketch provided below +4. Open the Arduino IDE's Serial Monitor to view real-time motion data +5. Press button A to start recording motion data to the microSD card +6. Move the sensor to capture motion data +7. Press button A again to stop recording + +**Example sketch:** +```arduino +/* + * Modulino Movement Logger + * + * Records movement data from a Modulino Movement sensor to an SD card. + * Press Button A to start/stop recording. + */ +#include "Arduino_Modulino.h" +#include + +// Create objects for the modules +ModulinoMovement movement; +ModulinoButtons buttons; + +// SD card configuration +#define SD_CS 4 // SD Card chip select (D4 on Modulino carrier) +File dataFile; + +// Variables to track state +bool recordingActive = false; +unsigned long lastRecordTime = 0; +const unsigned long RECORD_INTERVAL = 100; // Record every 100ms (10Hz) +String fileName = "/movement.csv"; // File name on SD card + +// Movement data +float x, y, z; // Acceleration +float roll, pitch, yaw; // Gyroscope + +void setup() { + // Initialize serial communication + Serial.begin(115200); + delay(1000); // Give serial monitor time to connect + + Serial.println("==================================="); + Serial.println("Modulino Movement Logger"); + Serial.println("==================================="); + + // Initialize Modulino I2C communication + Modulino.begin(); + + // Initialize modules + movement.begin(); + buttons.begin(); + + Serial.println("Press Button A to start/stop recording"); + + // Initialize SD card + Serial.print("Initializing SD card..."); + if (!SD.begin(SD_CS)) { + Serial.println("SD card initialization failed!"); + Serial.println("Check connections and continue anyway."); + } else { + Serial.println("SD card initialized successfully."); + } + + // Create CSV file with headers if it doesn't exist + if (!SD.exists(fileName)) { + dataFile = SD.open(fileName, FILE_WRITE); + if (dataFile) { + dataFile.println("Time,AccelX,AccelY,AccelZ,Roll,Pitch,Yaw"); + dataFile.close(); + Serial.println("Created new CSV file with headers"); + } else { + Serial.println("Error creating file!"); + } + } else { + Serial.println("File exists, will append to it"); + } + + Serial.println("Setup complete!"); + Serial.println("==================================="); +} + +void loop() { + // Read new movement data from the sensor (always do this to keep data current) + movement.update(); + + // Get acceleration and gyroscope values + x = movement.getX(); + y = movement.getY(); + z = movement.getZ(); + roll = movement.getRoll(); + pitch = movement.getPitch(); + yaw = movement.getYaw(); + + // Print current values to serial monitor + Serial.print("A: "); + Serial.print(x, 3); + Serial.print(", "); + Serial.print(y, 3); + Serial.print(", "); + Serial.print(z, 3); + Serial.print(" | G: "); + Serial.print(roll, 1); + Serial.print(", "); + Serial.print(pitch, 1); + Serial.print(", "); + Serial.println(yaw, 1); + + // Check for button presses + if (buttons.update()) { + // Check if button A was pressed (index 0) + if (buttons.isPressed(0)) { + // Toggle recording mode + recordingActive = !recordingActive; + + if (recordingActive) { + Serial.println("------------------------------------"); + Serial.println("RECORDING STARTED - Button A pressed"); + Serial.println("------------------------------------"); + } else { + Serial.println("------------------------------------"); + Serial.println("RECORDING STOPPED - Button A pressed"); + Serial.println("------------------------------------"); + } + + // Small delay after button press to debounce + delay(300); + } + } + + // If recording is active, save data to SD card at the specified interval + if (recordingActive) { + unsigned long currentTime = millis(); + if (currentTime - lastRecordTime >= RECORD_INTERVAL) { + // Open the file for writing + dataFile = SD.open(fileName, FILE_APPEND); + + if (dataFile) { + // Write timestamp and movement data to CSV file + dataFile.print(currentTime); + dataFile.print(","); + dataFile.print(x, 3); + dataFile.print(","); + dataFile.print(y, 3); + dataFile.print(","); + dataFile.print(z, 3); + dataFile.print(","); + dataFile.print(roll, 1); + dataFile.print(","); + dataFile.print(pitch, 1); + dataFile.print(","); + dataFile.println(yaw, 1); + + // Close the file + dataFile.close(); + } else { + Serial.println("Error opening file for writing"); + } + + lastRecordTime = currentTime; + } + } + + // Small delay to keep things responsive but not flood serial monitor + delay(50); +} +``` +The Motion Tracker continuously reads acceleration and orientation data from the Modulino Movement, displaying it in real-time on the Arduino IDE Serial Monitor. When recording is activated, the data is saved to a CSV file on the microSD card, creating a detailed motion profile that can be analyzed later in a spreadsheet or data visualization tools. This project is perfect for capturing movement patterns, analyzing sports techniques or creating interactive motion-controlled devices. + +### Example Project: Enclosure Monitor in MicroPython + +The Enclosure Monitor demonstrates how MicroPython and Modulino modules can work together to create a smart environmental monitoring system. This project uses temperature sensing and LED visual feedback to monitor conditions inside an enclosure, like a terrarium, server cabinet, or food storage area. It logs data over time while providing immediate visual indicators if temperatures fall outside the ideal range. +Note that the temperature settings can be changed to your specific use-case. + +To get started with MicroPython and install the Modulino library on your Arduino board, follow the official guide [here](https://docs.arduino.cc/micropython/modulinos/installation/). This guide will walk you through installing both MicroPython and the necessary Modulino libraries to work with your modules. + +![Enclosure Monitor overview](assets/enclosure-monitor.png) + +**Components needed:** +- [Modulino Thermo](https://store.arduino.cc/products/modulino-thermo) - ABX00103 +- [Modulino Pixels](https://store.arduino.cc/products/modulino-pixels) - ABX00109 +- [Nano family board](https://docs.arduino.cc/hardware/) +- [Nano Connector Carrier](https://store.arduino.cc/products/nano-connector-carrier) - ASX00061 +- Optional enclosure for permanent installation + +**Assembly instructions:** +1. Connect the Modulino Thermo and Pixels modules to your Nano family board through the Nano Connector Carrier. +2. Position the Thermo module where you want to monitor temperature (inside your enclosure). +3. Place the Pixels module where it's visible for status monitoring. +4. Upload the MicroPython code provided below. +5. Open the serial monitor to view real-time readings. +6. The system will automatically begin monitoring and logging data. + +![Connection guide](assets/enclosure-connection.png) + +**Code Example:** +```python +""" +Enclosure Temperature Monitor using Modulino Thermo and Pixels modules. +- BLUE LEDs: Too cold (below MIN_TEMP) +- GREEN LEDs: Ideal temperature (between MIN_TEMP and MAX_TEMP) +- RED LEDs: Too hot (above MAX_TEMP) + +Logs temperature data to both the console and internal file system. +""" +from modulino import ModulinoThermo, ModulinoPixels, ModulinoColor +from time import sleep +import os + +# Create module instances +thermo = ModulinoThermo() +pixels = ModulinoPixels() + +# Configuration +MIN_TEMP = 20.0 # Below this is too cold (BLUE) +MAX_TEMP = 25.0 # Above this is too hot (RED) +BRIGHTNESS = 50 # LED brightness (0-100) +LOG_FILE = "templog.csv" # Log file name in the internal file system +LOG_INTERVAL = 5 # Log every 5 readings + +# Create log file with headers if it doesn't exist +try: + # Check if file exists + files = os.listdir() + if LOG_FILE not in files: + with open(LOG_FILE, 'w') as f: + f.write('Reading,Temperature,Humidity,Status\n') + print(f"Created new log file: {LOG_FILE}") + else: + print(f"Using existing log file: {LOG_FILE}") +except Exception as e: + print(f"File system error: {e}") + +# Initialize LEDs to off +pixels.clear_all().show() + +# Main loop +print("=== Enclosure Temperature Monitor ===") +print(f"Cold: < {MIN_TEMP}°C | Ideal: {MIN_TEMP}-{MAX_TEMP}°C | Hot: > {MAX_TEMP}°C") + +counter = 0 # Simple counter for readings + +while True: + counter += 1 + + # Read temperature and humidity + temp = thermo.temperature + humidity = thermo.relative_humidity + + # Update display if temperature reading is valid + if temp is not None: + # Determine temperature status + if temp < MIN_TEMP: + status = "Cold" + color = ModulinoColor.BLUE + elif temp > MAX_TEMP: + status = "Hot" + color = ModulinoColor.RED + else: + status = "Ideal" + color = ModulinoColor.GREEN + + # Print to console + print(f"Temp: {temp:.1f}°C - {status}", end="") + if humidity is not None: + print(f", Humidity: {humidity:.1f}%") + else: + print("") + + # Update LED display + pixels.clear_all() + # Calculate how many LEDs to light (1-8) + led_count = int(max(1, min(8, (temp - MIN_TEMP + 5) / 15 * 8))) + for i in range(led_count): + pixels.set_color(i, color, BRIGHTNESS) + pixels.show() + + # Log to file at interval + if counter % LOG_INTERVAL == 0: + try: + with open(LOG_FILE, 'a') as f: + humidity_str = f"{humidity:.1f}" if humidity is not None else "N/A" + f.write(f"{counter},{temp:.1f},{humidity_str},{status}\n") + print("Data logged to file ✓") + except Exception as e: + print(f"Failed to write to file: {e}") + else: + print("Waiting for temperature reading...") + # Blink white LED to indicate waiting + pixels.set_all_color(ModulinoColor.WHITE, 20).show() + sleep(0.5) + pixels.clear_all().show() + sleep(0.5) + + # Wait before next reading + sleep(1) +``` + +The Enclosure Monitor provides immediate visual feedback about environmental conditions through the Modulino Pixels. LEDs glow BLUE when it's too cold, GREEN when the temperature is in the ideal range, and RED when it's too hot. The number of illuminated LEDs indicates where the temperature falls within each range - more LEDs light up as temperature increases. + +Temperature and humidity readings are displayed in real time on the serial monitor and logged to a CSV file on the internal storage. This data can be retrieved later for analysis of environmental trends over time. + +Now that you understand the features of the Nano Connector Carrier, here are some exciting project ideas to get you started: + +- **Weather Station**: Collect temperature, humidity and pressure data via sensors connected to the Grove connectors to create a simple weather monitoring system. +- **Plant Monitor**: Use soil moisture and light sensors to monitor your houseplants and alert you when they need attention. +- **Data Logger**: Use the microSD card slot to record sensor readings over time, which is perfect for environmental monitoring or tracking experiments. +- **Smart Home interface**: Create a hub with multiple sensors around your home that log data or send alerts. + +For additional project inspiration, check out the Arduino Project Hub or join the Arduino community forums to share your creations and learn from others. + +## Conclusion + +The Nano Connector Carrier transforms your Nano family board into a versatile platform capable of interfacing with different sensors, displays and storage options. By eliminating complex wiring and providing standardized pinouts, the Nano Connector Carrier allows you to focus on developing your application rather than dealing with connection issues. \ No newline at end of file diff --git a/content/hardware/03.nano/carriers/nano-screw-terminal-adapter/certifications/Arduino_ASX00037-CERT_RCM.pdf b/content/hardware/03.nano/carriers/nano-screw-terminal-adapter/certifications/Arduino_ASX00037-CERT_RCM.pdf deleted file mode 100644 index 3f90ee28cc..0000000000 Binary files a/content/hardware/03.nano/carriers/nano-screw-terminal-adapter/certifications/Arduino_ASX00037-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/03.nano/carriers/nano-screw-terminal-adapter/product.md b/content/hardware/03.nano/carriers/nano-screw-terminal-adapter/product.md index bccf932418..c008d894d4 100644 --- a/content/hardware/03.nano/carriers/nano-screw-terminal-adapter/product.md +++ b/content/hardware/03.nano/carriers/nano-screw-terminal-adapter/product.md @@ -4,7 +4,7 @@ url_shop: https://store.arduino.cc/nano-screw-terminal url_guide: /tutorials/nano-screw-terminal-adapter/getting-started-nano-screw-terminal primary_button_url: /tutorials/nano-screw-terminal-adapter/getting-started-nano-screw-terminal primary_button_title: Get Started -certifications: [CE, FCC, IC, RCM, RoHS, UKCA] +certifications: [CE, FCC, IC, RoHS, UKCA] forumCategorySlug: '/hardware/12' sku: [ASX00037, ASX00037-3P] --- diff --git a/content/hardware/04.pro/boards/portenta-c33/certifications/Arduino_ABX00074-CERT_RCM.pdf b/content/hardware/04.pro/boards/portenta-c33/certifications/Arduino_ABX00074-CERT_RCM.pdf deleted file mode 100644 index fc3a72f584..0000000000 Binary files a/content/hardware/04.pro/boards/portenta-c33/certifications/Arduino_ABX00074-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/04.pro/boards/portenta-c33/essentials.md b/content/hardware/04.pro/boards/portenta-c33/essentials.md index babf1f9668..e1331fce35 100644 --- a/content/hardware/04.pro/boards/portenta-c33/essentials.md +++ b/content/hardware/04.pro/boards/portenta-c33/essentials.md @@ -1,7 +1,7 @@ --- productsLibrariesMap: - - wifi - arduinoble + - arduino_secureelement --- diff --git a/content/hardware/04.pro/boards/portenta-c33/product.md b/content/hardware/04.pro/boards/portenta-c33/product.md index b7eb56ff3d..3f224861bc 100644 --- a/content/hardware/04.pro/boards/portenta-c33/product.md +++ b/content/hardware/04.pro/boards/portenta-c33/product.md @@ -5,9 +5,9 @@ url_guide: /tutorials/portenta-c33/user-manual primary_button_url: /tutorials/portenta-c33/user-manual primary_button_title: User Manual core: arduino:mbed_portenta -certifications: [CE, UKCA, RoHS, MIC, FCC, RCM, IC] +certifications: [CE, UKCA, RoHS, MIC, FCC, IC] #forumCategorySlug: '/hardware/portenta/91' -#productCode: '041' +productCode: '041' sku: [ABX00074] --- diff --git a/content/hardware/04.pro/boards/portenta-h7-lite-connected/certifications/Arduino_ABX00046-CERT_RCM.pdf b/content/hardware/04.pro/boards/portenta-h7-lite-connected/certifications/Arduino_ABX00046-CERT_RCM.pdf deleted file mode 100644 index 56329b7b3e..0000000000 Binary files a/content/hardware/04.pro/boards/portenta-h7-lite-connected/certifications/Arduino_ABX00046-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/04.pro/boards/portenta-h7-lite-connected/essentials.md b/content/hardware/04.pro/boards/portenta-h7-lite-connected/essentials.md index 30f39b14af..8a17ff0dd8 100644 --- a/content/hardware/04.pro/boards/portenta-h7-lite-connected/essentials.md +++ b/content/hardware/04.pro/boards/portenta-h7-lite-connected/essentials.md @@ -1,6 +1,6 @@ --- productsLibrariesMap: - - wifi + - arduino_portenta_ota - arduinoble --- diff --git a/content/hardware/04.pro/boards/portenta-h7-lite-connected/interactive/ABX00042-pinout.png b/content/hardware/04.pro/boards/portenta-h7-lite-connected/interactive/ABX00042-pinout.png deleted file mode 120000 index 0dd1608e45..0000000000 --- a/content/hardware/04.pro/boards/portenta-h7-lite-connected/interactive/ABX00042-pinout.png +++ /dev/null @@ -1,2 +0,0 @@ -�PNG - diff --git a/content/hardware/04.pro/boards/portenta-h7-lite-connected/interactive/ABX00042-pinout.png b/content/hardware/04.pro/boards/portenta-h7-lite-connected/interactive/ABX00042-pinout.png new file mode 100644 index 0000000000..e5c0cd80ca Binary files /dev/null and b/content/hardware/04.pro/boards/portenta-h7-lite-connected/interactive/ABX00042-pinout.png differ diff --git a/content/hardware/04.pro/boards/portenta-h7-lite-connected/product.md b/content/hardware/04.pro/boards/portenta-h7-lite-connected/product.md index 150bcacfc7..d75a8c6459 100644 --- a/content/hardware/04.pro/boards/portenta-h7-lite-connected/product.md +++ b/content/hardware/04.pro/boards/portenta-h7-lite-connected/product.md @@ -9,7 +9,7 @@ secondary_button_title: Bootloader Guide core: arduino:mbed_portenta forumCategorySlug: '/hardware/portenta/91' productCode: '116' -certifications: [CE, UKCA, RCM, FCC, RoHS] +certifications: [CE, UKCA, FCC, RoHS] sku: [ABX00046] --- diff --git a/content/hardware/04.pro/boards/portenta-h7-lite/certifications/Arduino_ABX00045-CERT_RCM.pdf b/content/hardware/04.pro/boards/portenta-h7-lite/certifications/Arduino_ABX00045-CERT_RCM.pdf deleted file mode 100644 index 979f09b864..0000000000 Binary files a/content/hardware/04.pro/boards/portenta-h7-lite/certifications/Arduino_ABX00045-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/04.pro/boards/portenta-h7-lite/product.md b/content/hardware/04.pro/boards/portenta-h7-lite/product.md index 1f4ca41026..51905bfbd7 100644 --- a/content/hardware/04.pro/boards/portenta-h7-lite/product.md +++ b/content/hardware/04.pro/boards/portenta-h7-lite/product.md @@ -9,7 +9,7 @@ secondary_button_title: Bootloader Guide core: arduino:mbed_portenta forumCategorySlug: '/hardware/portenta/91' productCode: '115' -certifications: [CE, FCC, RCM, UKCA, RoHS] +certifications: [CE, FCC, UKCA, RoHS] sku: [ABX00045] --- diff --git a/content/hardware/04.pro/boards/portenta-h7/essentials.md b/content/hardware/04.pro/boards/portenta-h7/essentials.md index 6558fde1fc..a3ab4bb912 100644 --- a/content/hardware/04.pro/boards/portenta-h7/essentials.md +++ b/content/hardware/04.pro/boards/portenta-h7/essentials.md @@ -1,6 +1,7 @@ --- productsLibrariesMap: - - wifi + - lvgl + - arduino_portenta_ota - arduinoble --- diff --git a/content/hardware/04.pro/boards/portenta-x8/tutorials/14.x8-firmware-release-notes/x8-firmware-release-notes.md b/content/hardware/04.pro/boards/portenta-x8/tutorials/14.x8-firmware-release-notes/x8-firmware-release-notes.md index 760151fabf..02f33c5c5a 100644 --- a/content/hardware/04.pro/boards/portenta-x8/tutorials/14.x8-firmware-release-notes/x8-firmware-release-notes.md +++ b/content/hardware/04.pro/boards/portenta-x8/tutorials/14.x8-firmware-release-notes/x8-firmware-release-notes.md @@ -60,7 +60,7 @@ Below is a list of all available firmware versions with their release notes. ### OS Image 846
- 2024.05 (Release arduino-91.1, OS Image 846) + 2024.05.15 (Release arduino-91.1, OS Image 846) #### Image Access - Full image [download](https://downloads.arduino.cc/portentax8image/846.tar.gz) @@ -77,7 +77,7 @@ Below is a list of all available firmware versions with their release notes. ### OS Image 844
- 2024.05 (Release arduino-91, OS Image 844) + 2024.05.10 (Release arduino-91, OS Image 844) #### Image Access - Full image [download](https://downloads.arduino.cc/portentax8image/844.tar.gz) @@ -108,7 +108,7 @@ Below is a list of all available firmware versions with their release notes. ### OS Image 822
- 2024.04 (Release arduino-88.94, OS Image 822) + 2024.04.08 (Release arduino-88.94, OS Image 822) #### Image Access - Full image [download](https://downloads.arduino.cc/portentax8image/822.tar.gz) @@ -138,7 +138,7 @@ Below is a list of all available firmware versions with their release notes. ### OS Image 746
- 2023.10 (Release arduino-88.91, OS Image 746) + 2023.10.25 (Release arduino-88.91, OS Image 746) #### Image Access - Full image [download](https://downloads.arduino.cc/portentax8image/746.tar.gz) @@ -166,7 +166,7 @@ Below is a list of all available firmware versions with their release notes. ### OS Image 719
- 2023.09 (Release arduino-88.7, OS Image 719) + 2023.09.27 (Release arduino-88.7, OS Image 719) #### Image Access - Full image [download](https://downloads.arduino.cc/portentax8image/719.tar.gz) diff --git a/content/hardware/04.pro/carriers/portenta-breakout/product.md b/content/hardware/04.pro/carriers/portenta-breakout/product.md index 8ebeeeac98..d18b28e75b 100644 --- a/content/hardware/04.pro/carriers/portenta-breakout/product.md +++ b/content/hardware/04.pro/carriers/portenta-breakout/product.md @@ -6,6 +6,7 @@ primary_button_url: /tutorials/portenta-breakout/getting-started/ primary_button_title: Get Started certifications: [CE, UKCA] sku: [ASX00031] +productCode: '079' --- Arduino Portenta Breakout board is designed to help hardware engineers and makers to prototype and help test devices connections and capacity within the Portenta family boards (e.g. the Portenta H7). diff --git a/content/hardware/04.pro/carriers/portenta-hat-carrier/certifications/Arduino_ASX00049-CERT_RCM.pdf b/content/hardware/04.pro/carriers/portenta-hat-carrier/certifications/Arduino_ASX00049-CERT_RCM.pdf deleted file mode 100644 index 65417b1a72..0000000000 Binary files a/content/hardware/04.pro/carriers/portenta-hat-carrier/certifications/Arduino_ASX00049-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/04.pro/carriers/portenta-hat-carrier/product.md b/content/hardware/04.pro/carriers/portenta-hat-carrier/product.md index 2a2cf0ed0e..dc6daf34a5 100644 --- a/content/hardware/04.pro/carriers/portenta-hat-carrier/product.md +++ b/content/hardware/04.pro/carriers/portenta-hat-carrier/product.md @@ -4,7 +4,7 @@ url_shop: https://store.arduino.cc/products/portenta-hat-carrier url_guide: /tutorials/portenta-hat-carrier/user-manual primary_button_url: /tutorials/portenta-hat-carrier/user-manual primary_button_title: User Manual -certifications: [CE, UKCA, RoHS, FCC, IC, RCM] +certifications: [CE, UKCA, RoHS, FCC, IC] sku: [ASX00049] --- diff --git a/content/hardware/04.pro/shields/portenta-vision-shield/certifications/Arduino_ASX00021-CERT_RCM_Ethernet.pdf b/content/hardware/04.pro/shields/portenta-vision-shield/certifications/Arduino_ASX00021-CERT_RCM_Ethernet.pdf deleted file mode 100644 index efb33fd56d..0000000000 Binary files a/content/hardware/04.pro/shields/portenta-vision-shield/certifications/Arduino_ASX00021-CERT_RCM_Ethernet.pdf and /dev/null differ diff --git a/content/hardware/04.pro/shields/portenta-vision-shield/tutorials/speech-recognition-engine/content.md b/content/hardware/04.pro/shields/portenta-vision-shield/tutorials/speech-recognition-engine/content.md index d33b4b7886..b275b9d2b1 100644 --- a/content/hardware/04.pro/shields/portenta-vision-shield/tutorials/speech-recognition-engine/content.md +++ b/content/hardware/04.pro/shields/portenta-vision-shield/tutorials/speech-recognition-engine/content.md @@ -76,7 +76,7 @@ The Arduino Speech Recognition Engine is a solution powered by Cyberon that requ * Install the library on your IDE * Test the free demo sketch -In case you would like to extend the engine functionalities, you will have to purchase [a voucher on the Arduino Store](https://store.arduino.cc/products/arduino-speech-recognition-engine) and follow the next steps: +In case you would like to extend the engine functionalities, you will have to purchase [a voucher on the Arduino Store](https://store.arduino.cc/products/speech-recognition-engine) and follow the next steps: * Fill in the required information on Cyberon's website * Get the required files and activate your license @@ -346,7 +346,7 @@ Inside each case add your custom code to be executed with the trigger or command #### Unlock Limitations (License) In case you want to further customize your model or add additional commands or trigger words, we have the right licenses for you: -- **Speech Recognition license.** Vouchers available on the [Arduino Store](https://store.arduino.cc/products/arduino-speech-recognition-engine). +- **Speech Recognition license.** Vouchers available on the [Arduino Store](https://store.arduino.cc/products/speech-recognition-engine). - **Pro License.** Feel free to [contact us](https://www.arduino.cc/pro/contact-us/) to unlock all the limitations. There are different licensing options to fit the needs of your project. Read more in the [Licensing section (Voucher codes)](#licensing). Note that you need to have an already existing project to use a paid license. Check the [previous section](#create-a-new-project) to know more. @@ -367,7 +367,7 @@ Click next, review your project options and press continue. You will get a new e-mail with the new License and Model headers. -***Warning: in case you are using a Speech Recognition License (not Pro), please note that deployed models are not customizable. You can always purchase an additional voucher on [Arduino Store](https://store.arduino.cc/products/arduino-speech-recognition-engine) to generate a new model for the same hardware.*** +***Warning: in case you are using a Speech Recognition License (not Pro), please note that deployed models are not customizable. You can always purchase an additional voucher on [Arduino Store](https://store.arduino.cc/products/speech-recognition-engine) to generate a new model for the same hardware.*** Open the sketch you have duplicated in the [Create New Project](#create-a-new-project) section. diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/edge-control/certifications/Arduino_AKX00034-CERT_RCM.pdf b/content/hardware/05.pro-solutions/solutions-and-kits/edge-control/certifications/Arduino_AKX00034-CERT_RCM.pdf deleted file mode 100644 index 3b524040b1..0000000000 Binary files a/content/hardware/05.pro-solutions/solutions-and-kits/edge-control/certifications/Arduino_AKX00034-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/edge-control/product.md b/content/hardware/05.pro-solutions/solutions-and-kits/edge-control/product.md index 48c43562ed..638cd448d4 100644 --- a/content/hardware/05.pro-solutions/solutions-and-kits/edge-control/product.md +++ b/content/hardware/05.pro-solutions/solutions-and-kits/edge-control/product.md @@ -7,7 +7,7 @@ primary_button_title: User Manual secondary_button_url: /tutorials/edge-control/smart-irrigation-system secondary_button_title: Smart Farms core: arduino:mbed_edge -certifications: [RoHS, FCC, CE, RCM, UKCA] +certifications: [RoHS, FCC, CE, UKCA] sku: [AKX00034] --- diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-me/datasheet/datasheet.md b/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-me/datasheet/datasheet.md index 60a18f9867..95add1dfde 100644 --- a/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-me/datasheet/datasheet.md +++ b/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-me/datasheet/datasheet.md @@ -44,7 +44,7 @@ Predictive maintenance, asset tracking, smart building systems, industrial autom - Portenta Mid Carrier (SKU: ASX00055) (x1) - Portenta Mid Carrier Proto Shield (x1) - Arduino Pro 4G GNSS Module Global (SKU: TPX00200) (x1) -- Modulinos (x6): +- Modulinos (x7): - Knob (encoder with push button) (x1) - Pixels (8x RGB LEDs) (x1) - Distance (Time-of-Flight sensor) (x1) @@ -345,4 +345,4 @@ The figures below show the main dimensions of the kit in a stacked configuration |:----------:|:------------:|:--------------:| | 20/01/2025 | 3 | Format fixes | | 16/01/2025 | 2 | Review changes | -| 10/01/2025 | 1 | First release | \ No newline at end of file +| 10/01/2025 | 1 | First release | diff --git a/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-ve/datasheet/datasheet.md b/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-ve/datasheet/datasheet.md index 6ee905bcf1..4d47055f5c 100644 --- a/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-ve/datasheet/datasheet.md +++ b/content/hardware/05.pro-solutions/solutions-and-kits/portenta-proto-kit-ve/datasheet/datasheet.md @@ -46,7 +46,7 @@ Quality inspection, automated object detection, industrial automation, machine v - Portenta Mid Carrier (SKU: ASX00055) (x1) - Portenta Mid Carrier Proto Shield (SKU: ASX00072) (x1) - Arduino Pro 4G GNSS Module Global (SKU: TPX00200) (x1) -- Modulinos (x6): +- Modulinos (x7): - Knob (encoder with push button) (x1) - Pixels (8x RGB LEDs) (x1) - Distance (Time-of-Flight sensor) (x1) @@ -407,4 +407,4 @@ The figures below show the main dimensions of the kit in a stacked configuration | **Date** | **Revision** | **Changes** | |:----------:|:------------:|:----------------------------------------------------:| | 25/02/2025 | 2 | Portenta Mid Carrier Proto Shield information update | -| 12/02/2025 | 1 | First release | \ No newline at end of file +| 12/02/2025 | 1 | First release | diff --git a/content/hardware/06.nicla/boards/nicla-sense-env/product.md b/content/hardware/06.nicla/boards/nicla-sense-env/product.md index 5bca40e4e6..10b19de3ab 100644 --- a/content/hardware/06.nicla/boards/nicla-sense-env/product.md +++ b/content/hardware/06.nicla/boards/nicla-sense-env/product.md @@ -5,6 +5,7 @@ url_guide: /tutorials/nicla-sense-env/user-manual primary_button_url: /tutorials/nicla-sense-env/user-manual primary_button_title: User Manual certifications: [CE, UKCA, VCCI, FCC, IC] +productCode: '194' sku: [ABX00089] --- diff --git a/content/hardware/06.nicla/boards/nicla-sense-me/certifications/Arduino_ABX00050-CERT_RCM.pdf b/content/hardware/06.nicla/boards/nicla-sense-me/certifications/Arduino_ABX00050-CERT_RCM.pdf deleted file mode 100644 index f8b9684d67..0000000000 Binary files a/content/hardware/06.nicla/boards/nicla-sense-me/certifications/Arduino_ABX00050-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/06.nicla/boards/nicla-sense-me/datasheet/datasheet.md b/content/hardware/06.nicla/boards/nicla-sense-me/datasheet/datasheet.md index 843e6efdb9..9022da70f5 100644 --- a/content/hardware/06.nicla/boards/nicla-sense-me/datasheet/datasheet.md +++ b/content/hardware/06.nicla/boards/nicla-sense-me/datasheet/datasheet.md @@ -479,13 +479,13 @@ Lors de l’ installation et de l’ exploitation de ce dispositif, la distance Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 201453/EU. This product is allowed to be used in all EU member states. -| Frequency bands | Typical Output Power | -|----------------------|----------------------| -| 2.4 GHz, 40 channels | +6dBm | +| Frequency bands | Typical Output Power | +| --------------------------- | -------------------- | +| 2.402-2480 MHz, 40 channels | +6dBm | ## NCC Low Power Warning -警語: +**警語:** 取得審驗證明之低功率射頻器材,非經核准,公司、商號或使用者均不得擅自變更頻率、加大功率或變更原設計之特性及功能。 @@ -495,6 +495,10 @@ Hereby, Arduino S.r.l. declares that this product is in compliance with essentia 低功率射頻器材須忍受合法通信或工業、科學及醫療用電波輻射性電機設備之干擾。 +## SRRC + +This equipment contains a radio transmitter module with model approval code: CMIIT ID: XXXXXXXXX. + ## Company Information | Company name | Arduino SRL | diff --git a/content/hardware/06.nicla/boards/nicla-sense-me/product.md b/content/hardware/06.nicla/boards/nicla-sense-me/product.md index 4bcc2f59e5..fd81c18b33 100644 --- a/content/hardware/06.nicla/boards/nicla-sense-me/product.md +++ b/content/hardware/06.nicla/boards/nicla-sense-me/product.md @@ -7,7 +7,7 @@ primary_button_title: User Manual secondary_button_url: /tutorials/nicla-sense-me/cheat-sheet secondary_button_title: Cheat Sheet core: arduino:mbed_nicla -certifications: [CE, FCC, UKCA, RoHS, IC, MIC, RCM] +certifications: [CE, FCC, UKCA, RoHS, IC, MIC] productCode: '043' sku: [ABX00050] --- diff --git a/content/hardware/06.nicla/boards/nicla-voice/certifications/Arduino_ABX00061-CERT_RCM.pdf b/content/hardware/06.nicla/boards/nicla-voice/certifications/Arduino_ABX00061-CERT_RCM.pdf deleted file mode 100644 index 6b5620d209..0000000000 Binary files a/content/hardware/06.nicla/boards/nicla-voice/certifications/Arduino_ABX00061-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/06.nicla/boards/nicla-voice/product.md b/content/hardware/06.nicla/boards/nicla-voice/product.md index 9dab3f2985..3fbd4e6b91 100644 --- a/content/hardware/06.nicla/boards/nicla-voice/product.md +++ b/content/hardware/06.nicla/boards/nicla-voice/product.md @@ -7,8 +7,8 @@ primary_button_title: User Manual secondary_button_url: /tutorials/nicla-voice/ei-intruder-detector secondary_button_title: Audio ML Guide core: arduino:mbed_voice -productCode: 'ABX00061' -certifications: [CE, UKCA, RoHS, IC, FCC, RCM] +productCode: '120' +certifications: [CE, UKCA, RoHS, IC, FCC] sku: [ABX00061] --- diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-1.png b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-1.png index 54fa42e261..1fc59a0212 100644 Binary files a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-1.png and b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-1.png differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-2.png b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-2.png index f7d0ea6205..aeddf77841 100644 Binary files a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-2.png and b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-2.png differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-3.png b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-3.png index 6028937e6a..42ff3ce0d7 100644 Binary files a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-3.png and b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-3.png differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-4.gif b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-4.gif new file mode 100644 index 0000000000..b0ae768d45 Binary files /dev/null and b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-4.gif differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-4.png b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-4.png deleted file mode 100644 index 7df01553ce..0000000000 Binary files a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/arduino-ide-4.png and /dev/null differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/memory_partitioning.zip b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/memory_partitioning.zip deleted file mode 100644 index 8bec42a82e..0000000000 Binary files a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/memory_partitioning.zip and /dev/null differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/opta_memory_partitioning.zip b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/opta_memory_partitioning.zip new file mode 100644 index 0000000000..79de367d71 Binary files /dev/null and b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/opta_memory_partitioning.zip differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/qspi_format_memPartitioning.gif b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/qspi_format_memPartitioning.gif new file mode 100644 index 0000000000..6d8a97388b Binary files /dev/null and b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/assets/qspi_format_memPartitioning.gif differ diff --git a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/content.md b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/content.md index 4db51475e7..e4ecb28716 100644 --- a/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/content.md +++ b/content/hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning/content.md @@ -43,14 +43,19 @@ In this tutorial, we will use an Opta™ and Portenta Machine Control to learn h ### Software Requirements +Before beginning the memory partitioning process, ensure you have the following software requirements: + - [Arduino IDE 1.8.10+](https://www.arduino.cc/en/software), [Arduino IDE 2](https://www.arduino.cc/en/software), or [Arduino Cloud Editor](https://create.arduino.cc/editor) -- [The memory partitioning sketch and the certificate file](assets/memory_partitioning.zip) +- `Arduino Mbed OS Opta Boards` core +- [`Arduino Mbed OS Portenta Boards`](https://docs.arduino.cc/software/ide-v1/tutorials/getting-started/cores/arduino-mbed_portenta/) core + +***The __QSPIFormat__ sketch required for memory partitioning is available in core __version 4.3.1 or higher__. To install or update your core, open the Arduino IDE, go to __Tools > Board > Boards Manager__, search for `Opta` or `Portenta`, and install or update to the latest version.*** ## Memory Partitioning -Memory partitioning involves dividing a device's available memory into separate regions or partitions, each serving a specific purpose. This process is used to manage memory efficiently and ensure that different programs or functionalities of the device can coexist without interfering with each other. +Memory partitioning involves dividing a device's available memory into separate regions or partitions, each serving a specific purpose. This process is used to manage memory efficiently and ensure that different programs or functionalities of the device can coexist without interfering. -In the context of the Opta™, partitioning the memory allows the device to accommodate different functionalities, such as its Wi-Fi® module firmware, Over-The-Air (OTA) updates functionality, and certificates storage, while still providing memory space for user programs developed in the Arduino IDE and the Arduino programming language. Similarly, it applies to the Portenta Machine Control as well. +In the context of the Opta™, partitioning the memory allows the device to accommodate different functionalities, such as its Wi-Fi® module firmware, Over-The-Air (OTA) updates functionality, and certificate storage, while still providing memory space for user programs developed in the Arduino IDE and the Arduino programming language. Similarly, it applies to the Portenta Machine Control as well. Now, we will guide you through partitioning the memory of an Opta™ and Portenta Machine Control to enable full programming capabilities using the Arduino IDE and the Arduino programming language. @@ -66,177 +71,203 @@ For the *Portenta Machine Control*, in the __Boards Manager__ tab, search for `p We are now ready to compile and upload Arduino sketches to an Opta™ or a Portenta Machine Control using the Arduino IDE. -***Memory partitioning of an Opta™ or a Portenta Machine Control should use the latest core and libraries to ensure the system is up-to-date with the intended default configuration.*** +***Memory partitioning of an Opta™ or a Portenta Machine Control should use the __latest core__ and __libraries__ to ensure the system is up-to-date with the intended default configuration.*** ## Partitioning the Memory of an Opta™ -To partition the memory of an Opta™, you need an Arduino sketch that includes memory partition operations and a certificate file. These files can be downloaded directly from the [Software Requirements section](#software-requirements) or [here](assets/memory_partitioning.zip). Ensure both files are stored in the same directory, as shown in the following layout: +To partition the memory of an Opta™ device, you need an Arduino sketch that includes memory partition operations and a certificate file. The required sketch is called **QSPIFormat** and can be found in the Arduino IDE by navigating to **File > Examples > STM32H747_System**. The necessary files are organized in the following directory structure: ``` -memory_partitioning +QSPIFormat ├── certificates.h -└── memory_partitioning.ino +└── QSPIFormat.ino ``` -***The complete sketch and the certificate files can be downloaded [__here__](assets/memory_partitioning.zip). __Please store both files in the same directory__.*** +***If you cannot find the __QSPIFormat__ sketch in your board's examples, please make sure you have installed the __latest Arduino Mbed OS Opta Boards core (version 4.3.1 or higher)__.*** The sketch below shows the memory partition process to be applied for Opta™. ```arduino -// Include necessary libraries for working -#include -#include -#include -#include +#include "BlockDevice.h" +#include "MBRBlockDevice.h" +#include "LittleFileSystem.h" +#include "FATFileSystem.h" #include "wiced_resource.h" #include "certificates.h" -// Ensure that the M7 core is being used instead of the M4 core #ifndef CORE_CM7 -#error Update the WiFi firmware by uploading the sketch to the M7 core instead of the M4 core. + #error Format QSPI flash by uploading the sketch to the M7 core instead of the M4 core. #endif using namespace mbed; -// Create instances of block devices and filesystems for the QSPI Flash memory -BlockDevice* root; -MBRBlockDevice* wifi_data; -MBRBlockDevice* ota_data; +BlockDevice* root = BlockDevice::get_default_instance(); +MBRBlockDevice wifi_data(root, 1); +MBRBlockDevice ota_data(root, 2); +MBRBlockDevice kvstore_data(root, 3); +MBRBlockDevice user_data(root, 4); FATFileSystem wifi_data_fs("wlan"); FATFileSystem ota_data_fs("fs"); +FileSystem * user_data_fs; + +bool waitResponse() { + bool confirmation = false; + bool proceed = false; + while (confirmation == false) { + if (Serial.available()) { + char choice = Serial.read(); + switch (choice) { + case 'y': + case 'Y': + confirmation = true; + proceed = true; + break; + case 'n': + case 'N': + confirmation = true; + proceed = false; + break; + default: + continue; + } + } + } + return proceed; +} + +void printProgress(uint32_t offset, uint32_t size, uint32_t threshold, bool reset) { + static int percent_done = 0; + if (reset == true) { + percent_done = 0; + Serial.println("Flashed " + String(percent_done) + "%"); + } else { + uint32_t percent_done_new = offset * 100 / size; + if (percent_done_new >= percent_done + threshold) { + percent_done = percent_done_new; + Serial.println("Flashed " + String(percent_done) + "%"); + } + } +} void setup() { - // Set the built-in LED pin as an output and turn it off - pinMode(LED_BUILTIN, OUTPUT); - digitalWrite(LED_BUILTIN, LOW); - // Initialize serial communication and wait up to 2.5 seconds for a connection Serial.begin(115200); - for (auto startNow = millis() + 2500; !Serial && millis() < startNow; delay(500)) - ; - - // Blink the built-in LED 10 times as a visual indicator that the process is starting - for (auto i = 0u; i < 10; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - delay(50); - } + while (!Serial); + + Serial.println("\nWARNING! Running the sketch all the content of the QSPI flash will be erased."); + Serial.println("The following partitions will be created:"); + Serial.println("Partition 1: WiFi firmware and certificates 1MB"); + Serial.println("Partition 2: OTA 5MB"); + Serial.println("Partition 3: Provisioning KVStore 1MB"); + Serial.println("Partition 4: User data / OPTA PLC runtime 7MB"), + Serial.println("Do you want to proceed? Y/[n]"); + + if (true == waitResponse()) { + if (root->init() != BD_ERROR_OK) { + Serial.println(F("Error: QSPI init failure.")); + return; + } - // Initialize and erase the QSPI flash memory. - Serial.println("Erasing the QSPIF"); - root = BlockDevice::get_default_instance(); - auto err = root->init(); - if (err != 0) { - Serial.print("Error Initializing the QSPIF: "); - Serial.println(err); - while (true) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); + Serial.println("Do you want to perform a full erase of the QSPI flash before proceeding? Y/[n]"); + Serial.println("Note: Full flash erase can take up to one minute."); + bool fullErase = waitResponse(); + if (fullErase == true) { + Serial.println("Full erase started, please wait..."); + root->erase(0x0, root->size()); + Serial.println("Full erase completed."); + } else { + // Erase only the first sector containing the MBR + root->erase(0x0, root->get_erase_size()); } - } - // Create partitions for Wi-Fi firmware, OTA updates, and certificate storage - // Get device geometry. - const auto erase_size = root->get_erase_size(); - const auto size = root->size(); - const auto eraseSectors = size / erase_size; - - for (auto i = 0u; i < eraseSectors; i++) { - err = root->erase(i * erase_size, erase_size); - if (i % 64 == 0) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - } - if (err != 0) { - Serial.print("Error erasing sector "); - Serial.println(i); - Serial.print(" ["); - Serial.print(i * erase_size); - Serial.print(" - "); - Serial.print(float{ i } / float{ eraseSectors } * 100); - Serial.print("%] -> "); - Serial.print(err ? "KO" : "OK"); - Serial.println(); - for (auto i = 0u; i < 2; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); - } + MBRBlockDevice::partition(root, 1, 0x0B, 0, 1 * 1024 * 1024); + MBRBlockDevice::partition(root, 2, 0x0B, 1 * 1024 * 1024, 6 * 1024 * 1024); + MBRBlockDevice::partition(root, 3, 0x0B, 6 * 1024 * 1024, 7 * 1024 * 1024); + MBRBlockDevice::partition(root, 4, 0x0B, 7 * 1024 * 1024, 14 * 1024 * 1024); + // use space from 15.5MB to 16 MB for another fw, memory mapped + + bool reformat = true; + if (!wifi_data_fs.mount(&wifi_data)) { + Serial.println("\nPartition 1 already contains a filesystem, do you want to reformat it? Y/[n]"); + wifi_data_fs.unmount(); + + reformat = waitResponse(); } - } - Serial.println("Done"); - for (auto i = 0u; i < 5; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - delay(50); - } + if (reformat && wifi_data_fs.reformat(&wifi_data)) { + Serial.println("Error formatting WiFi partition"); + return; + } - // Format the partitions and create filesystem instances - // WiFi Firmware and TLS TA certificates: 1 MB - // Arduino OTA: 13 MB - MBRBlockDevice::partition(root, 1, 0x0B, 0 * 1024 * 1024, 1 * 1024 * 1024); - MBRBlockDevice::partition(root, 3, 0x0B, 14 * 1024 * 1024, 14 * 1024 * 1024); - MBRBlockDevice::partition(root, 2, 0x0B, 1024 * 1024, 14 * 1024 * 1024); - - // Create the filesystem references - wifi_data = new MBRBlockDevice(root, 1); - ota_data = new MBRBlockDevice(root, 2); - - // Write Wi-Fi firmware and certificate data to the appropriate partitions - Serial.print("Formatting WiFi partition... "); - err = wifi_data_fs.reformat(wifi_data); - if (err != 0) { - Serial.println("Error formatting WiFi partition"); - while (true) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); + bool restore = true; + if (reformat || fullErase) { + Serial.println("\nDo you want to restore the WiFi firmware and certificates? Y/[n]"); + restore = waitResponse(); } - } - Serial.println("done."); - Serial.print("Formatting OTA partition..."); - err = ota_data_fs.reformat(ota_data); - if (err != 0) { - Serial.println("Error formatting OTA partition"); - while (true) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); + if (reformat && restore) { + flashWiFiFirmwareAndCertificates(); + } + + if (fullErase && restore) { + flashWiFiFirmwareMapped(); + } + + reformat = true; + if (!ota_data_fs.mount(&ota_data)) { + Serial.println("\nPartition 2 already contains a filesystem, do you want to reformat it? Y/[n]"); + ota_data_fs.unmount(); + + reformat = waitResponse(); + } + + if (reformat && ota_data_fs.reformat(&ota_data)) { + Serial.println("Error formatting OTA partition"); + return; + } + + Serial.println("\nDo you want to use LittleFS to format user data partition? Y/[n]"); + Serial.println("If No, FatFS will be used to format user partition."); + Serial.println("Note: LittleFS is not supported by the OPTA PLC runtime."); + if (true == waitResponse()) { + Serial.println("Formatting user partition with LittleFS."); + user_data_fs = new mbed::LittleFileSystem("user"); + } else { + Serial.println("Formatting user partition with FatFS."); + user_data_fs = new mbed::FATFileSystem("user"); + } + + reformat = true; + if (!user_data_fs->mount(&user_data)) { + Serial.println("\nPartition 4 already contains a filesystem, do you want to reformat it? Y/[n]"); + user_data_fs->unmount(); + + reformat = waitResponse(); } - } - Serial.println("done."); - for (auto i = 0u; i < 10; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - delay(50); + if (reformat && user_data_fs->reformat(&user_data)) { + Serial.println("Error formatting user partition"); + return; + } + + Serial.println("\nQSPI Flash formatted!"); } - Serial.println("QSPI Flash Storage Ready."); + Serial.println("It's now safe to reboot or disconnect your board."); +} + +const uint32_t file_size = 421098; +extern const unsigned char wifi_firmware_image_data[]; - // Flash the memory-mapped Wi-Fi firmware and certificates - extern const unsigned char wifi_firmware_image_data[]; - extern const resource_hnd_t wifi_firmware_image; +void flashWiFiFirmwareAndCertificates() { FILE* fp = fopen("/wlan/4343WA1.BIN", "wb"); - const int file_size = 421098; - int chunck_size = 1024; - int byte_count = 0; + uint32_t chunck_size = 1024; + uint32_t byte_count = 0; - Serial.println("Flashing /wlan/4343WA1.BIN file"); + Serial.println("Flashing WiFi firmware"); printProgress(byte_count, file_size, 10, true); while (byte_count < file_size) { - if (byte_count + chunck_size > file_size) + if(byte_count + chunck_size > file_size) chunck_size = file_size - byte_count; int ret = fwrite(&wifi_firmware_image_data[byte_count], chunck_size, 1, fp); if (ret != 1) { @@ -248,34 +279,16 @@ void setup() { } fclose(fp); - chunck_size = 1024; - byte_count = 0; - const uint32_t offset = 15 * 1024 * 1024 + 1024 * 512; - - Serial.println("Flashing memory mapped firmware"); - printProgress(byte_count, file_size, 10, true); - while (byte_count < file_size) { - if (byte_count + chunck_size > file_size) - chunck_size = file_size - byte_count; - int ret = root->program(wifi_firmware_image_data, offset + byte_count, chunck_size); - if (ret != 0) { - Serial.println("Error writing firmware data"); - break; - } - byte_count += chunck_size; - printProgress(byte_count, file_size, 10, false); - } - - chunck_size = 128; - byte_count = 0; fp = fopen("/wlan/cacert.pem", "wb"); Serial.println("Flashing certificates"); + chunck_size = 128; + byte_count = 0; printProgress(byte_count, cacert_pem_len, 10, true); while (byte_count < cacert_pem_len) { - if (byte_count + chunck_size > cacert_pem_len) + if(byte_count + chunck_size > cacert_pem_len) chunck_size = cacert_pem_len - byte_count; - int ret = fwrite(&cacert_pem[byte_count], chunck_size, 1, fp); + int ret = fwrite(&cacert_pem[byte_count], chunck_size, 1 ,fp); if (ret != 1) { Serial.println("Error writing certificates"); break; @@ -284,253 +297,273 @@ void setup() { printProgress(byte_count, cacert_pem_len, 10, false); } fclose(fp); +} - fp = fopen("/wlan/cacert.pem", "rb"); - char buffer[128]; - int ret = fread(buffer, 1, 128, fp); - Serial.write(buffer, ret); - while (ret == 128) { - ret = fread(buffer, 1, 128, fp); - Serial.write(buffer, ret); - } - fclose(fp); +void flashWiFiFirmwareMapped() { + uint32_t chunck_size = 1024; + uint32_t byte_count = 0; + const uint32_t offset = 15 * 1024 * 1024 + 1024 * 512; - Serial.println("\nFirmware and certificates updated!"); - Serial.println("It's now safe to reboot or disconnect your board."); + Serial.println("Flashing memory mapped WiFi firmware"); + printProgress(byte_count, file_size, 10, true); + while (byte_count < file_size) { + if (byte_count + chunck_size > file_size) + chunck_size = file_size - byte_count; + int ret = root->program(wifi_firmware_image_data, offset + byte_count, chunck_size); + if (ret != 0) { + Serial.println("Error writing memory mapped firmware"); + break; + } + byte_count += chunck_size; + printProgress(byte_count, file_size, 10, false); + } } void loop() { - // Empty loop function, main task is performed in the setup function -} - -/** - Get the size of a file - - @param bootloader fp (FP) - @return files size -*/ -long getFileSize(FILE* fp) { - fseek(fp, 0, SEEK_END); - int size = ftell(fp); - fseek(fp, 0, SEEK_SET); - - return size; -} -/** - Display the progress of the flashing process - - @params offset (uint32_t), size (uint32_t), threshold (uint32_t) and reset (bool) - @return none -*/ -void printProgress(uint32_t offset, uint32_t size, uint32_t threshold, bool reset) { - static int percent_done = 0; - if (reset == true) { - percent_done = 0; - Serial.println("Flashed " + String(percent_done) + "%"); - } else { - uint32_t percent_done_new = offset * 100 / size; - if (percent_done_new >= percent_done + threshold) { - percent_done = percent_done_new; - Serial.println("Flashed " + String(percent_done) + "%"); - } - } } ``` -***If you encounter an error while in the compilation process, __please remember to have both script and certificate files in the same folder__. The certificate file is crucial for the memory partitioning process. The complete sketch and the certificate files can be downloaded [__here__](assets/memory_partitioning.zip).*** +The sketch shown above performs the following tasks: -The sketch shown above performs four main tasks: 1. **Initialize and erase the QSPI Flash memory**: The sketch initializes the QSPI Flash memory of the Opta™ and erases its content to prepare the memory for new firmware and data. One of the built-in LEDs of the device is used to indicate the progress of the memory-erasing process. -2. **Create partitions and format them in the QSPI Flash memory**: The sketch creates and formats partitions in the QSPI Flash memory for the Wi-Fi firmware, Over-The-Air (OTA) updates functionality and certificates storage. +2. **Create partitions and format them in the QSPI Flash memory**: The sketch creates four partitions in the QSPI Flash memory: +- Partition 1: Wi-Fi firmware and certificates (1MB) +- Partition 2: OTA (Over-The-Air) (5MB) +- Partition 3: Provisioning KVStore (1MB) +- Partition 4: User data / OPTA PLC runtime (7MB) 3. **Write Wi-Fi firmware and certificate data**: The sketch writes the Wi-Fi firmware and certificate data to the appropriate partitions in the QSPI Flash memory and flashes the memory-mapped Wi-Fi firmware and certificates. -4. **Display progress in the Arduino IDE Serial Monitor**: The sketch provides a visual indication of the progress of the flashing process using one of the built-in LEDs of the Opta™ and displays messages through the Arduino IDE Serial Monitor to inform the user about the current status of the flashing process. +4. **Format the user data partition:** The sketch prompts you to choose between **LittleFS** or **FatFS** for formatting the user data partition. When using the Opta™ with the PLC IDE, you should select **`n` (No)** when prompted to choose user data partition format. This will use **FatFS** instead, which is required for proper compatibility with the PLC runtime. + +***As indicated in the sketch output, __LittleFS__ is not supported by the OPTA PLC runtime.*** + +5. **Display progress in the Arduino IDE Serial Monitor**: The sketch provides a visual indication of the progress of the flashing process using one of the built-in LEDs of the Opta™ and through messages in the Arduino IDE Serial Monitor. + To upload the code, click the **Verify** button to compile the sketch and check for errors. Then, click the **Upload** button to program the device with the sketch. If two COM ports are available, which might happen after using the PLC IDE to program the device, select the COM port with the lower number. ![Uploading a sketch to the Opta™ the Arduino IDE](assets/arduino-ide-2.png) -After a while, you should see information on the progress of the flashing process in the Serial Monitor, as shown in the image below. +When you run the **QSPIFormat** sketch on your Opta™ device, follow the prompts displayed in the Arduino IDE's Serial Monitor: + +1. You'll first see a warning that all content of the QSPI flash will be erased, as well as information about the partitions that will be created. +2. The Serial Monitor will ask, `Do you want to proceed? Y/[n]`, type **`Y`** and press *Enter* to continue. +3. Next, it will ask, `Do you want to perform a full erase of the QSPI flash before proceeding? Y/[n]`. Please answer according to your needs. +4. The system will then erase the flash memory and show progress indicators for the Wi-Fi firmware, certificates and memory mapped Wi-Fi firmware. + +At the end of the memory partitioning process, you'll be prompted if you want to use **LittleFS** to format user data partition. ![Memory partitioning results of the Opta™ as shown in the Arduino IDE's Serial Monitor](assets/arduino-ide-3.png) -If everything went as intended, you should see a success message in the Serial Monitor. Now, we are ready to start using the full capabilities of the Opta™ with the Arduino IDE. +When planning to use the Opta™ with the PLC IDE, you must enter **`n`** to format the user data partition with **FatFS**. This is required for proper compatibility with the PLC runtime. If you need to use **LittleFS** to format the user data partition, please enter **`Y`**. + +You should see a brief success message in the Serial Monitor if everything went as intended. Your Opta™ device should now be properly partitioned and formatted, making it ready for use. The process typically takes a few minutes to complete, with progress indicators keeping you informed. The following clip shows the complete memory partitioning process from start to finish: + +![Memory partitioning process of the Opta™](assets/qspi_format_memPartitioning.gif) + +***__Note:__ If you encounter issues with the Opta™ when using the PLC IDE after memory partitioning with the __QSPIFormat__ sketch, please use the dedicated Opta memory partitioning code available for download [__here__](assets/opta_memory_partitioning.zip). __Please store both files in the same directory__.*** ## Partitioning the Memory of a Portenta Machine Control **The memory partitioning process for the Portenta Machine Control follows the same procedure as the Opta™.** You will need the latest `Arduino Mbed OS Portenta Boards` core version. If you do not have the latest version, please refer to the [Setting Up the Arduino IDE](#setting-up-the-arduino-ide) section before proceeding. -You will need an Arduino sketch with memory partition operations and a certificate file. These files can be downloaded from the [Software Requirements section](#software-requirements) or directly [here](assets/memory_partitioning.zip). Ensure both files are stored in the same directory, as shown below: +You will need an Arduino sketch with memory partition operations and a certificate file. The required sketch is called **QSPIFormat** and can be found in the Arduino IDE by navigating to **File > Examples > STM32H747_System**. The necessary files are organized in the following directory structure: ``` -memory_partitioning +QSPIFormat ├── certificates.h -└── memory_partitioning.ino +└── QSPIFormat.ino ``` -***The complete sketch and the certificate files can be downloaded [__here__](assets/memory_partitioning.zip). __Please store both files in the same directory__.*** +***If you cannot find the __QSPIFormat__ sketch in your board's examples, please make sure you have installed the __latest Arduino Mbed OS Portenta Boards core (version 4.3.1 or higher)__.*** Compile and upload the following code to partition the memory of a Portenta Machine Control: ```arduino -// Include necessary libraries for working -#include -#include -#include -#include +#include "BlockDevice.h" +#include "MBRBlockDevice.h" +#include "LittleFileSystem.h" +#include "FATFileSystem.h" #include "wiced_resource.h" #include "certificates.h" -// Ensure that the M7 core is being used instead of the M4 core #ifndef CORE_CM7 -#error Update the WiFi firmware by uploading the sketch to the M7 core instead of the M4 core. + #error Format QSPI flash by uploading the sketch to the M7 core instead of the M4 core. #endif using namespace mbed; -// Create instances of block devices and filesystems for the QSPI Flash memory -BlockDevice* root; -MBRBlockDevice* wifi_data; -MBRBlockDevice* ota_data; +BlockDevice* root = BlockDevice::get_default_instance(); +MBRBlockDevice wifi_data(root, 1); +MBRBlockDevice ota_data(root, 2); +MBRBlockDevice kvstore_data(root, 3); +MBRBlockDevice user_data(root, 4); FATFileSystem wifi_data_fs("wlan"); FATFileSystem ota_data_fs("fs"); +FileSystem * user_data_fs; + +bool waitResponse() { + bool confirmation = false; + bool proceed = false; + while (confirmation == false) { + if (Serial.available()) { + char choice = Serial.read(); + switch (choice) { + case 'y': + case 'Y': + confirmation = true; + proceed = true; + break; + case 'n': + case 'N': + confirmation = true; + proceed = false; + break; + default: + continue; + } + } + } + return proceed; +} + +void printProgress(uint32_t offset, uint32_t size, uint32_t threshold, bool reset) { + static int percent_done = 0; + if (reset == true) { + percent_done = 0; + Serial.println("Flashed " + String(percent_done) + "%"); + } else { + uint32_t percent_done_new = offset * 100 / size; + if (percent_done_new >= percent_done + threshold) { + percent_done = percent_done_new; + Serial.println("Flashed " + String(percent_done) + "%"); + } + } +} void setup() { - // Set the built-in LED pin as an output and turn it off - pinMode(LED_BUILTIN, OUTPUT); - digitalWrite(LED_BUILTIN, LOW); - // Initialize serial communication and wait up to 2.5 seconds for a connection Serial.begin(115200); - for (auto startNow = millis() + 2500; !Serial && millis() < startNow; delay(500)) - ; - - // Blink the built-in LED 10 times as a visual indicator that the process is starting - for (auto i = 0u; i < 10; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - delay(50); - } + while (!Serial); + + Serial.println("\nWARNING! Running the sketch all the content of the QSPI flash will be erased."); + Serial.println("The following partitions will be created:"); + Serial.println("Partition 1: WiFi firmware and certificates 1MB"); + Serial.println("Partition 2: OTA 5MB"); + Serial.println("Partition 3: Provisioning KVStore 1MB"); + Serial.println("Partition 4: User data / OPTA PLC runtime 7MB"), + Serial.println("Do you want to proceed? Y/[n]"); + + if (true == waitResponse()) { + if (root->init() != BD_ERROR_OK) { + Serial.println(F("Error: QSPI init failure.")); + return; + } - // Initialize and erase the QSPI flash memory. - Serial.println("Erasing the QSPIF"); - root = BlockDevice::get_default_instance(); - auto err = root->init(); - if (err != 0) { - Serial.print("Error Initializing the QSPIF: "); - Serial.println(err); - while (true) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); + Serial.println("Do you want to perform a full erase of the QSPI flash before proceeding? Y/[n]"); + Serial.println("Note: Full flash erase can take up to one minute."); + bool fullErase = waitResponse(); + if (fullErase == true) { + Serial.println("Full erase started, please wait..."); + root->erase(0x0, root->size()); + Serial.println("Full erase completed."); + } else { + // Erase only the first sector containing the MBR + root->erase(0x0, root->get_erase_size()); } - } - // Create partitions for Wi-Fi firmware, OTA updates, and certificate storage - // Get device geometry. - const auto erase_size = root->get_erase_size(); - const auto size = root->size(); - const auto eraseSectors = size / erase_size; - - for (auto i = 0u; i < eraseSectors; i++) { - err = root->erase(i * erase_size, erase_size); - if (i % 64 == 0) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - } - if (err != 0) { - Serial.print("Error erasing sector "); - Serial.println(i); - Serial.print(" ["); - Serial.print(i * erase_size); - Serial.print(" - "); - Serial.print(float{ i } / float{ eraseSectors } * 100); - Serial.print("%] -> "); - Serial.print(err ? "KO" : "OK"); - Serial.println(); - for (auto i = 0u; i < 2; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); - } + MBRBlockDevice::partition(root, 1, 0x0B, 0, 1 * 1024 * 1024); + MBRBlockDevice::partition(root, 2, 0x0B, 1 * 1024 * 1024, 6 * 1024 * 1024); + MBRBlockDevice::partition(root, 3, 0x0B, 6 * 1024 * 1024, 7 * 1024 * 1024); + MBRBlockDevice::partition(root, 4, 0x0B, 7 * 1024 * 1024, 14 * 1024 * 1024); + // use space from 15.5MB to 16 MB for another fw, memory mapped + + bool reformat = true; + if (!wifi_data_fs.mount(&wifi_data)) { + Serial.println("\nPartition 1 already contains a filesystem, do you want to reformat it? Y/[n]"); + wifi_data_fs.unmount(); + + reformat = waitResponse(); } - } - Serial.println("Done"); - for (auto i = 0u; i < 5; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - delay(50); - } + if (reformat && wifi_data_fs.reformat(&wifi_data)) { + Serial.println("Error formatting WiFi partition"); + return; + } - // Format the partitions and create filesystem instances - // WiFi Firmware and TLS TA certificates: 1 MB - // Arduino OTA: 13 MB - MBRBlockDevice::partition(root, 1, 0x0B, 0 * 1024 * 1024, 1 * 1024 * 1024); - MBRBlockDevice::partition(root, 3, 0x0B, 14 * 1024 * 1024, 14 * 1024 * 1024); - MBRBlockDevice::partition(root, 2, 0x0B, 1024 * 1024, 14 * 1024 * 1024); - - // Create the filesystem references - wifi_data = new MBRBlockDevice(root, 1); - ota_data = new MBRBlockDevice(root, 2); - - // Write Wi-Fi firmware and certificate data to the appropriate partitions - Serial.print("Formatting WiFi partition... "); - err = wifi_data_fs.reformat(wifi_data); - if (err != 0) { - Serial.println("Error formatting WiFi partition"); - while (true) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); + bool restore = true; + if (reformat || fullErase) { + Serial.println("\nDo you want to restore the WiFi firmware and certificates? Y/[n]"); + restore = waitResponse(); } - } - Serial.println("done."); - Serial.print("Formatting OTA partition..."); - err = ota_data_fs.reformat(ota_data); - if (err != 0) { - Serial.println("Error formatting OTA partition"); - while (true) { - digitalWrite(LED_BUILTIN, HIGH); - delay(50); - digitalWrite(LED_BUILTIN, LOW); - delay(150); + if (reformat && restore) { + flashWiFiFirmwareAndCertificates(); } - } - Serial.println("done."); - for (auto i = 0u; i < 10; i++) { - digitalWrite(LED_BUILTIN, HIGH); - delay(25); - digitalWrite(LED_BUILTIN, LOW); - delay(50); + if (fullErase && restore) { + flashWiFiFirmwareMapped(); + } + + reformat = true; + if (!ota_data_fs.mount(&ota_data)) { + Serial.println("\nPartition 2 already contains a filesystem, do you want to reformat it? Y/[n]"); + ota_data_fs.unmount(); + + reformat = waitResponse(); + } + + if (reformat && ota_data_fs.reformat(&ota_data)) { + Serial.println("Error formatting OTA partition"); + return; + } + + Serial.println("\nDo you want to use LittleFS to format user data partition? Y/[n]"); + Serial.println("If No, FatFS will be used to format user partition."); + Serial.println("Note: LittleFS is not supported by the OPTA PLC runtime."); + if (true == waitResponse()) { + Serial.println("Formatting user partition with LittleFS."); + user_data_fs = new mbed::LittleFileSystem("user"); + } else { + Serial.println("Formatting user partition with FatFS."); + user_data_fs = new mbed::FATFileSystem("user"); + } + + reformat = true; + if (!user_data_fs->mount(&user_data)) { + Serial.println("\nPartition 4 already contains a filesystem, do you want to reformat it? Y/[n]"); + user_data_fs->unmount(); + + reformat = waitResponse(); + } + + if (reformat && user_data_fs->reformat(&user_data)) { + Serial.println("Error formatting user partition"); + return; + } + + Serial.println("\nQSPI Flash formatted!"); } - Serial.println("QSPI Flash Storage Ready."); + Serial.println("It's now safe to reboot or disconnect your board."); +} + +const uint32_t file_size = 421098; +extern const unsigned char wifi_firmware_image_data[]; - // Flash the memory-mapped Wi-Fi firmware and certificates - extern const unsigned char wifi_firmware_image_data[]; - extern const resource_hnd_t wifi_firmware_image; +void flashWiFiFirmwareAndCertificates() { FILE* fp = fopen("/wlan/4343WA1.BIN", "wb"); - const int file_size = 421098; - int chunck_size = 1024; - int byte_count = 0; + uint32_t chunck_size = 1024; + uint32_t byte_count = 0; - Serial.println("Flashing /wlan/4343WA1.BIN file"); + Serial.println("Flashing WiFi firmware"); printProgress(byte_count, file_size, 10, true); while (byte_count < file_size) { - if (byte_count + chunck_size > file_size) + if(byte_count + chunck_size > file_size) chunck_size = file_size - byte_count; int ret = fwrite(&wifi_firmware_image_data[byte_count], chunck_size, 1, fp); if (ret != 1) { @@ -542,34 +575,16 @@ void setup() { } fclose(fp); - chunck_size = 1024; - byte_count = 0; - const uint32_t offset = 15 * 1024 * 1024 + 1024 * 512; - - Serial.println("Flashing memory mapped firmware"); - printProgress(byte_count, file_size, 10, true); - while (byte_count < file_size) { - if (byte_count + chunck_size > file_size) - chunck_size = file_size - byte_count; - int ret = root->program(wifi_firmware_image_data, offset + byte_count, chunck_size); - if (ret != 0) { - Serial.println("Error writing firmware data"); - break; - } - byte_count += chunck_size; - printProgress(byte_count, file_size, 10, false); - } - - chunck_size = 128; - byte_count = 0; fp = fopen("/wlan/cacert.pem", "wb"); Serial.println("Flashing certificates"); + chunck_size = 128; + byte_count = 0; printProgress(byte_count, cacert_pem_len, 10, true); while (byte_count < cacert_pem_len) { - if (byte_count + chunck_size > cacert_pem_len) + if(byte_count + chunck_size > cacert_pem_len) chunck_size = cacert_pem_len - byte_count; - int ret = fwrite(&cacert_pem[byte_count], chunck_size, 1, fp); + int ret = fwrite(&cacert_pem[byte_count], chunck_size, 1 ,fp); if (ret != 1) { Serial.println("Error writing certificates"); break; @@ -578,73 +593,44 @@ void setup() { printProgress(byte_count, cacert_pem_len, 10, false); } fclose(fp); +} - fp = fopen("/wlan/cacert.pem", "rb"); - char buffer[128]; - int ret = fread(buffer, 1, 128, fp); - Serial.write(buffer, ret); - while (ret == 128) { - ret = fread(buffer, 1, 128, fp); - Serial.write(buffer, ret); - } - fclose(fp); +void flashWiFiFirmwareMapped() { + uint32_t chunck_size = 1024; + uint32_t byte_count = 0; + const uint32_t offset = 15 * 1024 * 1024 + 1024 * 512; - Serial.println("\nFirmware and certificates updated!"); - Serial.println("It's now safe to reboot or disconnect your board."); + Serial.println("Flashing memory mapped WiFi firmware"); + printProgress(byte_count, file_size, 10, true); + while (byte_count < file_size) { + if (byte_count + chunck_size > file_size) + chunck_size = file_size - byte_count; + int ret = root->program(wifi_firmware_image_data, offset + byte_count, chunck_size); + if (ret != 0) { + Serial.println("Error writing memory mapped firmware"); + break; + } + byte_count += chunck_size; + printProgress(byte_count, file_size, 10, false); + } } void loop() { - // Empty loop function, main task is performed in the setup function -} -/** - Get the size of a file - - @param bootloader fp (FP) - @return files size -*/ -long getFileSize(FILE* fp) { - fseek(fp, 0, SEEK_END); - int size = ftell(fp); - fseek(fp, 0, SEEK_SET); - - return size; -} - -/** - Display the progress of the flashing process - - @params offset (uint32_t), size (uint32_t), threshold (uint32_t) and reset (bool) - @return none -*/ -void printProgress(uint32_t offset, uint32_t size, uint32_t threshold, bool reset) { - static int percent_done = 0; - if (reset == true) { - percent_done = 0; - Serial.println("Flashed " + String(percent_done) + "%"); - } else { - uint32_t percent_done_new = offset * 100 / size; - if (percent_done_new >= percent_done + threshold) { - percent_done = percent_done_new; - Serial.println("Flashed " + String(percent_done) + "%"); - } - } } ``` -***If you encounter an error during the compilation process, __please ensure both the script and certificate files are in the same folder__. The certificate file is crucial for the memory partitioning process. The complete sketch and the certificate files can be downloaded [here](assets/memory_partitioning.zip).*** - -Once the memory partition code is uploaded, wait for the process to finish. The upload target for the Portenta Machine Control is `Arduino Portenta H7`, which will be automatically detected by the Arduino IDE. +Once the memory partition code is uploaded, follow the instructions and wait for the process to finish. The upload target for the Portenta Machine Control is `Arduino Portenta H7`, which will be automatically detected by the Arduino IDE. -The Arduino IDE's Serial Monitor should display memory partition results similar to those of the Opta™. +The Arduino IDE's Serial Monitor should display memory partition process and results similar to those of the Opta™. -![Memory partitioning results of the Portenta Machine Control as shown in the Arduino IDE's Serial Monitor](assets/arduino-ide-4.png) +![Memory partitioning results of the Portenta Machine Control as shown in the Arduino IDE's Serial Monitor](assets/arduino-ide-4.gif) -After this, you will be ready to use the full functionalities of the Portenta Machine Control with the Arduino IDE. +After this, you will be ready to use the full functionalities of the Portenta Machine Control. ## Conclusion -In this tutorial, we showed how to partition the memory of an Opta™ and a Portenta Machine Control, enabling its full range of functionalities to be programmed using Arduino ecosystem tools such as the Arduino IDE and the Arduino programming language. +In this tutorial, we showed how to partition the memory of an Opta™ and a Portenta Machine Control, enabling its full range of functionalities to be programmed using the Arduino ecosystem tools such as the Arduino IDE and the Arduino programming language. We walked through initializing and erasing the QSPI Flash memory, partitioning and formatting the memory, and writing the Wi-Fi firmware and certificate data onto the device's memory. diff --git a/content/hardware/08.edu/solution-and-kits/alvik/product.md b/content/hardware/08.edu/solution-and-kits/alvik/product.md index c258576f16..974e3abcae 100644 --- a/content/hardware/08.edu/solution-and-kits/alvik/product.md +++ b/content/hardware/08.edu/solution-and-kits/alvik/product.md @@ -6,6 +6,7 @@ primary_button_url: /tutorials/alvik/getting-started primary_button_title: Get Started secondary_button_url: https://courses.arduino.cc/explore-robotics-micropython/ secondary_button_title: Course & Projects +productCode: '181' sku: [AKX00066] --- diff --git a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/getting-started/getting-started.md b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/getting-started/getting-started.md index 06ff669dd0..9bac5d1998 100644 --- a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/getting-started/getting-started.md +++ b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/getting-started/getting-started.md @@ -162,5 +162,5 @@ A few options are available at the bottom. These are: `create a new file`, `crea ### Next Steps * There is a set of already built examples that will help you to better understand how Alvik works, you can download them from [this link](https://github.com/arduino/arduino-alvik-mpy/releases), unzip them in your already created _alvik_ folder and you will be able to see them straight away in the Arduino Labs for MicroPython. -* If you want to learn more about how Alvik is built or which functions you can use to program it, visit the documentation in the [Docs space for Alvik](https://docs.arduino.cc/hardware/alvik/) and follow the respective [Alvik's User Manual](https://docs.arduino.cc/hardware/alvik/user-manual) to know more about how to build incredible projects with your robot! +* If you want to learn more about how Alvik is built or which functions you can use to program it, visit the documentation in the [Docs space for Alvik](https://docs.arduino.cc/hardware/alvik/) and follow the respective [Alvik's User Manual](https://docs.arduino.cc/tutorials/alvik/user-manual/) to know more about how to build incredible projects with your robot! * If you want to follow step-by-step guided projects following an educational approach to learn MicroPython and robotics topics with Alvik, follow the [Explore Robotics in MicroPython](https://courses.arduino.cc/explore-robotics-micropython/) course. diff --git a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/adding_custom_code.gif b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/adding_custom_code.gif index 3202242a3f..329a0f0b20 100644 Binary files a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/adding_custom_code.gif and b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/adding_custom_code.gif differ diff --git a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/connecting_alvik_ide.gif b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/connecting_alvik_ide.gif index 3d0f20df1f..3e6d8c607d 100644 Binary files a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/connecting_alvik_ide.gif and b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/connecting_alvik_ide.gif differ diff --git a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/local2memory.gif b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/local2memory.gif index 82fc1eca4f..02829d703c 100644 Binary files a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/local2memory.gif and b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/assets/local2memory.gif differ diff --git a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/user-manual.md b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/user-manual.md index 503321a97d..ef763f2fda 100644 --- a/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/user-manual.md +++ b/content/hardware/08.edu/solution-and-kits/alvik/tutorials/user-manual/user-manual.md @@ -256,7 +256,7 @@ The Arduino Alvik robot is equipped with an onboard IMU (Inertial Measurement Un ### Motors -The Alvik is equipped with two geared motors, specifically the GM12-N20VA-08255-150-EN. These motors allow for precise and reliable movement, essential for accurate navigation and control as each motor includes a magnetic relative encoder to ensure precise control and feedback of the motor's position. +The Alvik is equipped with two geared motors, specifically the GM12-N20VA-08255-150-EN. These motors allow for precise and reliable movement, essential for accurate navigation and control as each motor includes a magnetic relative encoder to ensure precise control and feedback of the motor's position. - **Gear Ratio:** 1:150 - **Operating Voltage:** 6V @@ -300,7 +300,7 @@ To get started to play with Alvik you will need the following hardware and softw It may happen that you used your Nano ESP32 for other projects than Alvik, or you need to replace it. In order to make your Nano ESP32 work with Alvik, there are few steps needed: -1. Install the MicroPython bootloader on it following [this guide](https://docs.arduino.cc/micropython/basics/board-installation/). +1. Install the MicroPython bootloader on it following [this guide](https://docs.arduino.cc/micropython/first-steps/install-guide/). 2. Download the Alvik Micropython libraries Alvik MicroPython libraries from the [Alvik repository](https://github.com/arduino/arduino-alvik-mpy/tree/main) ucPack libraries from the [ucPack repository](https://github.com/arduino/ucPack-mpy/tree/main) diff --git a/content/hardware/09.kits/maker/plug-and-make-kit/features.md b/content/hardware/09.kits/maker/plug-and-make-kit/features.md index 9cb8e23909..d2789c6af3 100644 --- a/content/hardware/09.kits/maker/plug-and-make-kit/features.md +++ b/content/hardware/09.kits/maker/plug-and-make-kit/features.md @@ -14,10 +14,20 @@ This kit includes instructions for 7 projects that use the Modulino® nodes, giv -The kit includes a mounting plate for you to build your projects on, enabling you to quickly build physical interfaces. +The kit includes a mounting plate for you to build your projects on, enabling you to quickly build physical interfaces. + + +With Plug and Make kit you will get 3 months of cloud maker plan for free + + + + + + + The Modulino® connects to your UNO R4 WiFi with Qwiic cables, letting you focus on learning programming without building complex circuits. diff --git a/content/hardware/10.mega/boards/giga-r1-wifi/compatibility.yml b/content/hardware/10.mega/boards/giga-r1-wifi/compatibility.yml index 990347568e..d24ba8380e 100644 --- a/content/hardware/10.mega/boards/giga-r1-wifi/compatibility.yml +++ b/content/hardware/10.mega/boards/giga-r1-wifi/compatibility.yml @@ -11,3 +11,4 @@ hardware: - motor-shield-rev3 - ethernet-shield-rev2 - 9-axis-motion-shield + - giga-display-shield diff --git a/content/hardware/10.mega/boards/giga-r1-wifi/downloads/ABX00063-cad-files.zip b/content/hardware/10.mega/boards/giga-r1-wifi/downloads/ABX00063-cad-files.zip new file mode 100644 index 0000000000..f6ee7f665c Binary files /dev/null and b/content/hardware/10.mega/boards/giga-r1-wifi/downloads/ABX00063-cad-files.zip differ diff --git a/content/hardware/10.mega/boards/giga-r1-wifi/product.md b/content/hardware/10.mega/boards/giga-r1-wifi/product.md index b05be8b56b..4e9c2c59ad 100644 --- a/content/hardware/10.mega/boards/giga-r1-wifi/product.md +++ b/content/hardware/10.mega/boards/giga-r1-wifi/product.md @@ -11,5 +11,3 @@ sku: [ABX00063] --- The **GIGA R1 WiFi** is a powerful, feature-packed board with a large amount of GPIOs and dedicated connectors. Based on the [STM32H747XI](/resources/datasheets/stm32h747xi.pdf) micro based on the [Mbed OS](https://os.mbed.com/), the GIGA R1 WiFi features 76 GPIOs, a [dual core processor](/tutorials/giga-r1-wifi/giga-dual-core), [advanced ADC/DAC](/tutorials/giga-r1-wifi/giga-audio) features as well as camera & display connectors. It also has a rich [USB interface](/tutorials/giga-r1-wifi/giga-usb) with support for HID via USB-C® and USBHost (keyboard, mass storage) via a dedicated USB-A connector. - -To download the source file for this board, click [this link](https://content.arduino.cc/assets/ABX00063-cad-files.zip). diff --git a/content/hardware/11.accessories/family.md b/content/hardware/11.accessories/family.md new file mode 100644 index 0000000000..dd92dd966a --- /dev/null +++ b/content/hardware/11.accessories/family.md @@ -0,0 +1,6 @@ +--- +title: Accessories +description: To make your projects even greater. +businessUnit: maker +anchor: accessories-family +--- \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/category.md b/content/hardware/11.accessories/modulino-nodes/category.md new file mode 100644 index 0000000000..ddf2dc9e3d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/category.md @@ -0,0 +1,3 @@ +--- +title: Modulino Nodes +--- \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/compatibility.yml b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/compatibility.yml new file mode 100644 index 0000000000..7e64033e1d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/compatibility.yml @@ -0,0 +1,18 @@ +software: + - arduino-ide + - arduino-cli + - web-editor +hardware: + shields: ~ + carriers: + - nano-connector-carrier + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter + - uno-r4-wifi \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/BlockDiagramButtons.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/BlockDiagramButtons.png new file mode 100644 index 0000000000..3d9d5199d6 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/BlockDiagramButtons.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/BtnMec.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/BtnMec.png new file mode 100644 index 0000000000..6db108c9c4 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/BtnMec.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/ButtonsPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/ButtonsPinouts.png new file mode 100644 index 0000000000..ece702fa0b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/ButtonsPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/I2CTag.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/I2CTag.png new file mode 100644 index 0000000000..9d9b7b0f72 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/I2CTag.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/Modulino_Buttons_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/Modulino_Buttons_Power_Tree.png new file mode 100644 index 0000000000..3281df8b8e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/Modulino_Buttons_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/ResistorsPullupBtn.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/ResistorsPullupBtn.png new file mode 100644 index 0000000000..89fcf0c3cd Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/ResistorsPullupBtn.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/featured.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/featured.png new file mode 100644 index 0000000000..6100aca3d5 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/assets/featured.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/datasheet.md b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/datasheet.md new file mode 100644 index 0000000000..268361a655 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/datasheet/datasheet.md @@ -0,0 +1,266 @@ +--- +identifier: ABX00110 +title: Arduino® Modulino® Buttons +type: maker +author: Pedro Sousa Lima +--- + +![](assets/featured.png) + +# Description + +The Modulino® Buttons, powered by an on-board STM32C011F4 microcontroller, features three SPST push buttons and three indicator LEDs. This setup enables both simple digital input reading via I2C and more advanced interfacing or reprogramming options. Ideal for projects that require user interaction, menu navigation, or quick control inputs. + +# Target Areas + +Maker, beginner, education + +# Contents +## Application Examples + +- **Interactive Interfaces** + Integrate multiple buttons into a project to navigate menus or adjust settings in real time. + +- **Educational Projects** + Teach fundamentals of state detection (pressed/released) and microcontroller-based I2C communication. + +- **Control Panels** + Combine button inputs with other Modulino® nodes (e.g., display, buzzer) for a complete user interface. + +
+ +## Features +- Three **SPST push buttons** and three on-board indicator LEDs. +- Integrated **STM32C011F4** microcontroller providing I2C interface by default. +- **Optional SWD** interface for custom firmware and advanced features. +- Designed for **3.3 V** operation via the Qwiic connector (I2C). +- Ideal for **user interaction** and input within modular IoT or maker projects. + +### Contents +| **SKU** | **Name** | **Purpose** | **Quantity** | +| ---------- | --------------------- | -------------------------------------- | ------------ | +| ABX00110 | Modulino® Buttons | 3× push buttons and indicator LEDs | 1 | +| | I2C Qwiic cable | Compatible with the Qwiic standard | 1 | + + +## Related Products +- *SKU: ASX00027* – [Arduino® Sensor Kit](https://store.arduino.cc/products/arduino-sensor-kit) +- *SKU: K000007* – [Arduino® Starter Kit](https://store.arduino.cc/products/arduino-starter-kit-multi-language) +- *SKU: AKX00026* – [Arduino® Oplà IoT Kit](https://store.arduino.cc/products/opla-iot-kit) + +## Rating + +### Recommended Operating Conditions +- **Microcontroller supply range:** 2.0 V – 3.6 V (STM32C011F4) +- **Powered at 3.3 V** through the Qwiic interface (in accordance with the Qwiic standard) +- **Operating temperature:** –40 °C to +85 °C + +**Typical current consumption:** +- Push buttons + LEDs: ~2.5 mA × 3 + ~3.4 mA +- Microcontroller idle: ~3.4 mA + +## Power Tree +The power tree for the modulino can be consulted below: + +![Modulino® Buttons Power Tree](assets/Modulino_Buttons_Power_Tree.png) + +## Block Diagram +This module includes an STM32C011F4 microcontroller handling button inputs and LED outputs. It communicates via I2C by default, but can be reprogrammed via SWD for custom functionality. + +![Modulino® Buttons block diagram](assets/BlockDiagramButtons.png) + +## Functional Overview +The Modulino® Buttons node has a dedicated microcontroller (STM32C011F4) which scans the three SPST push buttons and drives the three LEDs. By default, it exposes a standard I2C interface over the Qwiic connector. The on-board firmware reports button states and allows simple LED control via I2C registers. Advanced users can re-flash the microcontroller via the SWD interface for additional custom logic. + +### Technical Specifications (Module-Specific) +| **Specification** | **Details** | +| ----------------------- | ----------------------------------------------- | +| **Microcontroller** | STM32C011F4 | +| **Accuracy** | ADC: ±2 LSB typical INL | +| **Resolution** | 12-bit ADC | +| **Supply Voltage** | Min: 2.0 V, Max: 3.6 V | +| **Power Consumption** | ~2.5 mA × 3 + 3.4 mA (LEDs + MCU) | +| **User Inputs** | 3× SPST push buttons | +| **LEDs** | 3× indicator LEDs (controlled by MCU) | +| **Communication** | I2C (Qwiic), SWD (reprogramming), UART (option) | + +### Pinout + +**Qwiic / I2C (1×4 Header)** +| **Pin** | **Function** | +|---------|---------------------------| +| GND | Ground | +| 3.3 V | Power Supply (3.3 V) | +| SDA | I2C Data | +| SCL | I2C Clock | + +These pads and the Qwiic connectors share the same I2C bus at 3.3 V. + +**Additional 1×10 Header** + +| **Pin** | **Function** | +|---------|--------------| +| A | Button A | +| GND | Ground | +| 3V3 | 3.3 V Power | +| PF2 | RESET | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| B | Button B | +| C | Button C | + + **Note:** + - The board can be reprogrammed via SWD to implement custom functionality. + - Pull-up resistor pads exist for optional I2C lines, but are not populated by default. + +![Pinout Overview](assets/ButtonsPinouts.png) + +### Power Specifications +- **Nominal operating voltage:** 3.3 V via Qwiic +- **Microcontroller voltage range:** 2.0 V–3.6 V + +### Mechanical Information +![Modulino® Buttons Mechanical Information](assets/BtnMec.png) + +- Board dimensions: 41 mm × 25.36 mm +- Thickness: 1.6 mm (±0.2 mm) +- Four mounting holes (Ø 3.2 mm) + - Hole spacing: 16 mm vertically, 32 mm horizontally + +### I2C Address Reference +| **Board Silk Name** | **Sensor/Actuator** | **Modulino I2C Address (HEX)** | **Editable Addresses (HEX)** | **Hardware I2C Address (HEX)** | +|---------------------|-------------------------|--------------------------------|---------------------------------------------|--------------------------------| +| MODULINO BUTTONS | 3× SPST Push Buttons | 0x7C | Any custom address (via software config.) | 0x3E | + + **Note:** + - Default I2C address is **0x7C**. + - “Hardware I2C Address” might be seen by advanced scanners, but you should use 0x7C in your code unless changed. + - A white rectangle on the bottom silk allows users to write a new address after reconfiguration. + ![Blank silk for identification](assets/I2CTag.png) + +#### Pull-up Resistors + +This module has pads for optional I2C pull-up mounting in both data lines. No resistors are mounted by default but in case the resistors are need 4.7 K resistors in an SMD 0402 format are recommended. + +These are positioned between the button B and C. +![Generic pull-up resistor position](assets/ResistorsPullupBtn.png) + +## Device Operation +By default, the board is an I2C target device. It manages button inputs and LED outputs through integrated firmware. Simply connect it to a 3.3 V Qwiic interface. If needed, you can reprogram the STM32C011F4 via SWD to modify or extend functionality. A LED positioned near each button can be controlled through the microcontroller's GPIOs PA3, PA4 and PA5. + +# Certifications + +## Certifications Summary + +| **Certification** | **Status** | +|:-----------------:|:----------:| +| CE/RED (Europe) | Yes | +| UKCA (UK) | Yes | +| FCC (USA) | Yes | +| IC (Canada) | Yes | +| RoHS | Yes | +| REACH | Yes | +| WEEE | Yes | + +## Declaration of Conformity CE DoC (EU) + +

We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).

+ +## Declaration of Conformity to EU RoHS & REACH 211 01/19/2021 + +

Arduino boards are in compliance with RoHS 2 Directive 2011/65/EU of the European Parliament and RoHS 3 Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.

+ +| Substance | **Maximum limit (ppm)** | +|----------------------------------------|-------------------------| +| Lead (Pb) | 1000 | +| Cadmium (Cd) | 100 | +| Mercury (Hg) | 1000 | +| Hexavalent Chromium (Cr6+) | 1000 | +| Poly Brominated Biphenyls (PBB) | 1000 | +| Poly Brominated Diphenyl ethers (PBDE) | 1000 | +| Bis(2-Ethylhexyl) phthalate (DEHP) | 1000 | +| Benzyl butyl phthalate (BBP) | 1000 | +| Dibutyl phthalate (DBP) | 1000 | +| Diisobutyl phthalate (DIBP) | 1000 | + +Exemptions: No exemptions are claimed. + +

Arduino Boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.

+ +## Conflict Minerals Declaration + +

As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regard to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder or as a component in metal alloys. As part of our reasonable due diligence, Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.

+ +## FCC Caution + +Any Changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate the equipment. + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: + +1. This device may not cause harmful interference. +2. This device must accept any interference received, including interference that may cause undesired operation. + +**FCC RF Radiation Exposure Statement:** + +1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. +2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment. +3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator & your body. + +**Note:** This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures: + +- Reorient or relocate the receiving antenna. +- Increase the separation between the equipment and receiver. +- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. +- Consult the dealer or an experienced radio/TV technician for help. + +English: +User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions: + +1. this device may not cause interference. +2. this device must accept any interference, including interference that may cause undesired operation of the device. + +French: +Le présent appareil est conforme aux CNR d’Industrie Canada applicables aux appareils radio exempts de licence. L’exploitation est autorisée aux deux conditions suivantes: + +1. l’appareil nedoit pas produire de brouillage. +2. l’utilisateur de l’appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d’en compromettre le fonctionnement. + +**IC SAR Warning:** + +English: +This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body. + +French: +Lors de l’installation et de l’exploitation de ce dispositif, la distance entre le radiateur et le corps est d’au moins 20 cm. + +**Important:** The operating temperature of the EUT can’t exceed 85 ℃ and shouldn’t be lower than -40 ℃. + +Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states. + +# Company Information + +| Company name | Arduino SRL | +|-----------------|-----------------------------------------------| +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA(Italy) | + +# Reference Documentation + +| Ref | Link | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino Courses | [https://www.arduino.cc/education/courses](https://www.arduino.cc/education/courses) | +| Arduino Documentation | [https://docs.arduino.cc/](https://docs.arduino.cc/) | +| Arduino IDE (Cloud) | [https://create.arduino.cc/editor](https://create.arduino.cc/editor) | +| Cloud IDE Getting Started | [https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor](https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Library Reference | [https://github.com/arduino-libraries/](https://github.com/arduino-libraries/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | + +# Revision History +| **Date** | **Revision** | **Changes** | +|------------|--------------|--------------------| +| 23/05/2025 | 3 | Fixed pinout table and power info | +| 21/05/2025 | 2 | Fixed info on LEDs | +| 14/05/2025 | 1 | First release | diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/downloads/ABX00110-cad-files.zip b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/downloads/ABX00110-cad-files.zip new file mode 100644 index 0000000000..9293daa355 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/downloads/ABX00110-cad-files.zip differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/downloads/ABX00110-schematics.pdf b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/downloads/ABX00110-schematics.pdf new file mode 100644 index 0000000000..a6c3c79105 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/downloads/ABX00110-schematics.pdf differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/essentials.md b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/essentials.md new file mode 100644 index 0000000000..762e36d575 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/essentials.md @@ -0,0 +1,8 @@ + + + + +This library allows you to communicate with the Arduino Modulino® nodes. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/features.md b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/features.md new file mode 100644 index 0000000000..f6444e41bd --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/features.md @@ -0,0 +1,14 @@ + +The Modulino® Buttons module includes 3 buttons with LEDs to indicate button presses. It is designed to be used with any compatible board with QWIIC , allowing you to build interactive projects without making complicated connections. The module also includes example projects for you to learn important programming concepts and get inspired. + + + + + +This module includes instructions for projects that use the Modulino® nodes, giving you a starting point to get inspired for your next project. The module also includes 3 buttons with LEDs to indicate button presses. + + +The Modulino® Buttons module connects to your UNO R4 WiFi with Qwiic cables, letting you focus on learning programming without building complex circuits. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/image.svg b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/image.svg new file mode 100644 index 0000000000..7b8cb18ce7 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/image.svg @@ -0,0 +1,1340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/interactive/ABX00110-pinout.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/interactive/ABX00110-pinout.png new file mode 100644 index 0000000000..ece702fa0b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/interactive/ABX00110-pinout.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/product.md b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/product.md new file mode 100644 index 0000000000..0ab58f52f3 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/product.md @@ -0,0 +1,13 @@ +--- +title: Modulino Buttons +url_shop: https://store.arduino.cc/products/modulino-buttons +url_guide: https://courses.arduino.cc/plugandmake +primary_button_url: https://docs.arduino.cc/tutorials/modulino-buttons/how-buttons-ardu/ +primary_button_title: With Arduino +secondary_button_url: https://docs.arduino.cc/tutorials/modulino-buttons/how-buttons-mp/ +secondary_button_title: With MicroPython +certifications: [] +sku: [ABX00110] +--- + +Easily add user interaction to your projects with three SPST push buttons and integrated yellow LEDs. Compatible with the Arduino UNO R4 WiFi or any board with a Qwiic interface, and includes solderable pins for direct wiring if you aren’t using Qwiic. Focus on creating interactive experiences without the need for complex circuits. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tech-specs.md b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tech-specs.md new file mode 100644 index 0000000000..05fd4da2d3 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Modulino® Buttons. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tech-specs.yml b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tech-specs.yml new file mode 100644 index 0000000000..18d10187fd --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tech-specs.yml @@ -0,0 +1,11 @@ +Node: + Name: Modulino Buttons + SKU: ABX00110 + Board recommended: Arduino® UNO R4 WiFi (ABX00087) + Communications: I2C (over Qwiic connector or solderable pin) + Operational voltage: 3.3V + Sensor: + 3 push buttons + 3 yellow LEDs (STM32C011F4): 0x7C (address can change via software) + +Other accessories: + Qwiic cables: 1x diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/AdressChangeIDE.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/AdressChangeIDE.png new file mode 100644 index 0000000000..d5cd3fd195 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/AdressChangeIDE.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/ButtonsPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/ButtonsPinouts.png new file mode 100644 index 0000000000..cd1e959c27 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/ButtonsPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/IDE-Left-Tab.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/IDE-Left-Tab.png new file mode 100644 index 0000000000..c7bb86575e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/IDE-Left-Tab.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/Modulino_Buttons_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/Modulino_Buttons_Power_Tree.png new file mode 100644 index 0000000000..3281df8b8e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/Modulino_Buttons_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/adressChanger.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/adressChanger.png new file mode 100644 index 0000000000..c6eae670c8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/adressChanger.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-jumper.png new file mode 100644 index 0000000000..a2aa5b68df Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-qwiic-chain.png new file mode 100644 index 0000000000..ae538f5949 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-qwiik.png new file mode 100644 index 0000000000..4df7f0508a Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons.gif b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons.gif new file mode 100644 index 0000000000..73e0d48f1c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons.png new file mode 100644 index 0000000000..473282f2a9 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/connection-guide-buttons.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/library-install.gif b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/library-install.gif new file mode 100644 index 0000000000..16f396c353 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/library-install.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/schematic.png new file mode 100644 index 0000000000..df5f2cfb25 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/how-to-buttons-ardu.md b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/how-to-buttons-ardu.md new file mode 100644 index 0000000000..bb984214db --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-ardu/how-to-buttons-ardu.md @@ -0,0 +1,315 @@ +--- +title: "How To Use The Modulino Buttons" +description: "Learn how to get the most out of your Modulino Buttons." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-buttons +software: + - ide-v2 + - web-editor +--- +The Modulino Buttons is a modular sensor that provides tactile input and visual feedback, making it perfect to add interactive controls to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +![Module demonstration](assets/connection-guide-buttons.gif) + +Pressing a button pulls the signal LOW, and each button has an onboard pull-up resistor. The LEDs can be controlled independently through the onboard microcontroller. + + +# General Characteristics + +The **Modulino Buttons** module uses three tactile buttons and LEDs, which do not have native I²C capabilities. Instead, the buttons and LEDs are controlled by the Modulino's onboard microcontroller (STM32C011F4U6TR). This microcontroller provides I²C communication, allowing for flexible reading of button states and control of the LEDs. One unique feature of this setup is the ability to change the I²C address via software. This means the address can be modified based on your application needs, making it adaptable to different system configurations. + +| Specification | Details | +|-------------------|-----------------------------| +| Buttons | 3 × Tactile pushbuttons | +| LEDs | 3 × Indicator LEDs (orange) | +| Power Supply | 3.3 V | +| Interface | UART, SWD, I2C | +| Pull-up Resistors | Integrated on button inputs | + + +The default I²C address for the **Modulino Buttons** module is: + +| Modulino I²C Address | Hardware I²C Address | Editable Addresses (HEX) | +|----------------------|----------------------|-------------------------------------------------| +| 0x7C | 0x3E | Any custom address (via software configuration) | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + +## Pinout + +The tactile buttons and LEDs are the core components of this module. These input and output devices are controlled by an onboard STM32 microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +![Arduino Buttons Pinout](assets/ButtonsPinouts.png) + +### 1x10 Header + +| Pin | Function | +|-------|----------------| +| A | Button A | +| GND | Ground | +| 3V3 | 3.3 V Power | +| PF2 | RESET | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| B | Button B | +| C | Button C | + +- **A: Button A** – This pin connects directly to button A. +- **GND: Ground** – Ground connection for power and signal reference. +- **3V3: Power** – 3.3 V power supply input. +- **PF2: RESET** – The reset pin for the microcontroller, which can be used to reset the system. +- **SWCLK: SWD Clock** – Used for providing the clock signal in the SWD interface. +- **SWDIO: SWD Data** – Used for debugging, as part of the Serial Wire Debug (SWD) interface. +- **TX1: USART Transmit** – Used for transmitting data over UART communication. +- **RX1: USART Receive** – Used for receiving data over UART communication. +- **B: Button B** – This pin connects directly to button B. +- **C: Button C** – This pin connects directly to button C. + +### 1x4 Header (I2C) + +The pinout for the Modulino Buttons is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|------------------|-------------------|---------|-------------|---------|------| +| Supply Voltage | - | - | 3.3 (QWIIC) | - | V | +| LED Current Draw | Single LED Active (A,B or C) | - | 2.5 | - | mA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: + +![Power Tree Modulino Buttons](assets/Modulino_Buttons_Power_Tree.png) + +## Schematic + +The Modulino Buttons uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Buttons](assets/schematic.png) + +The main components are the **three tactile buttons**, **three user-programmable LEDs** and the **STM32C011F4U6TR** microcontroller (U1), which handles button state reading, LED control, as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. +There's also a small power LED indicator that lights up when the board is on. +You can grab the full schematic and PCB files from the [Modulino Buttons](https://docs.arduino.cc/hardware/modulinos/modulino-buttons) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. +Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-buttons.png) + +## QWIIC Connector +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-buttons-qwiik.png) +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-buttons-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-buttons-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are properly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +# How To Use Your Modulino +## Installing The Modulino Library +You need the official Modulino library available [here](https://docs.arduino.cc/libraries/modulino/) to use the Modulino Buttons. + +With the Arduino IDE you get some tools that make adding a library easier. To learn how to install the IDE please visit our [page](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing/). +After opening the IDE, a tab should be visible on the left. Press the book icon for "library" as highlighted in the image. +![IDE Library Tab](assets/IDE-Left-Tab.png) +The process should look like this: +![Library Install](assets/library-install.gif) +A message will appear after the installation is successful. + +# Getting Button Press Data + +Interacting with the Modulino Buttons module is simple using the `Modulino` library. +For the **Buttons** module, there are two key functions: +- `update()`**:** Requests new data from the button module. +- `isPressed(index)`**:** Checks if a specific button (`A`, `B`, or `C`) is pressed. +- `setLeds(A, B, C)`**:** Sets the state of the LED (`A`, `B`, or `C`). +- ```Modulino.begin();```: By default the Modulino library uses ```Wire1``` if your connection is in a different Wire you will have to edit it, check [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) (by default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/)) for the library's hardware compatibility. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example sketch demonstrating how to use these functions to detect button presses: + +```arduino +#include + +// Create object instance +ModulinoButtons buttons; + +void setup() { + Serial.begin(9600); + Modulino.begin(); + buttons.begin(); + + // Function to control the LEDs on top of each button + buttons.setLeds(true, true, true); +} + +void loop() { + // Request new data from the Modulino Buttons + if (buttons.update()) { + // Check if any button has been pressed + if (buttons.isPressed(0)) { + Serial.println("Button A pressed!"); + } else if (buttons.isPressed(1)) { + Serial.println("Button B pressed!"); + } else if (buttons.isPressed(2)) { + Serial.println("Button C pressed!"); + } + } +} +``` +The code example provided shows how to initialize the button module, read button states, and control the LEDs. The program begins by turning on all three LEDs, then continuously checks for button presses and reports them through the serial monitor. Each button is identified by its index (0 for A, 1 for B, 2 for C), making it easy to expand the functionality for more complex interactions. This simple interface can be adapted to trigger various actions in your projects, from controlling other components to navigating menus or implementing game controls. + +# Detecting Button Events + +The Modulino Buttons module can be enhanced with the [Button2 library](https://docs.arduino.cc/libraries/button2/) to detect various button events beyond simple presses. This approach allows you to respond to single clicks, double clicks, triple clicks, and long presses. + +For the **Button Events** functionality, there are several key functions: +- `setButtonStateFunction(function)`**:** Sets a custom function that provides the button state. +- `setClickHandler(function)`**:** Sets a handler for single-click events. +- `setDoubleClickHandler(function)`**:** Sets a handler for double-click events. +- `setTripleClickHandler(function)`**:** Sets a handler for triple-click events. +- `setLongClickHandler(function)`**:** Sets a handler for long-press events. +- `loop()`**:** Must be called repeatedly to check for button state changes. + +Here is an example sketch demonstrating how to implement button event detection: + +```arduino +#include "Arduino_Modulino.h" +#include "Button2.h" + +Button2 button; +ModulinoButtons modulino_buttons; + +uint8_t button0StateHandler() { + modulino_buttons.update(); + return modulino_buttons.isPressed(0) ? LOW : HIGH; // fake a normal button -> LOW = pressed +} + +void handler(Button2& btn) { + switch (btn.getType()) { + case single_click: + break; + case double_click: + Serial.print("double "); + break; + case triple_click: + Serial.print("triple "); + break; + case long_click: + Serial.print("long"); + break; + } + Serial.print("click"); + Serial.print(" ("); + Serial.print(btn.getNumberOfClicks()); + Serial.println(")"); +} + +void setup() { + + Serial.begin(115200); + + Modulino.begin(); + modulino_buttons.begin(); + + button.setDebounceTime(35); + button.setButtonStateFunction(button0StateHandler); + button.setClickHandler(handler); + button.setDoubleClickHandler(handler); + button.setTripleClickHandler(handler); + button.setLongClickHandler(handler); + button.begin(BTN_VIRTUAL_PIN); +} + +void loop() { + button.loop(); +} +``` + +The code example provided shows how to integrate the Button2 library with the Modulino Buttons module to detect advanced button interactions. It creates a virtual button connected to Button A (index 0) and sets up handlers for different types of clicks. The `button0StateHandler()` function serves as a bridge between the Modulino hardware and the Button2 library by converting the button state to the expected format. When running, the program will detect and report single clicks, double clicks, triple clicks, and long presses through the serial monitor. This approach enables more sophisticated user interfaces in your projects, from navigating multi-level menus to implementing different functions based on how a user interacts with a single button. + +## How To Change I2C Address + +An example sketch, AddressChanger, is also included with the library inside the `Utilities` folder and available [here](https://github.com/arduino-libraries/Modulino/blob/main/examples/Utilities/AddressChanger/AddressChanger.ino). This sketch changes the I²C address at a software level on the Module's microcontroller. +![Example location on the IDE](assets/AdressChangeIDE.png) + +- Connect the module to your board, remove any other modules that might be in the chain. Connection must be via I²C. +- Upload the sketch. +- Open the Serial Monitor. +- Text should now appear. Make sure the correct bauld-rate is selected if the displayed characters seem corrupted. + ![Expected console output](assets/adressChanger.png) +- Select the address and confirm. Valid I²C addresses range from 0x08 to 0x77 (7-bit values in hexadecimal format, e.g., 0x42). +- Your address should now have changed. Make sure to take note of the selected address. + +To keep track of the address in use the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your sketch, you'll need to specify this address when creating the module object. For example: +```arduino +ModulinoButtons buttons(0x3E); // Replace 0x3E with your specific address +``` + + +# Troubleshooting + +## Buttons Not Responding +If your Modulino's power LED isn't on or the buttons aren't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +## Library Not Installed Properly +If you encounter an issue with the `#include "modulino.h"` command, verify that the Modulino library is correctly installed: +- Check your IDE to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +## LEDs Not Working +If the LEDs aren't lighting up as expected, make sure: +- The correct LED states are being set in your code (true for on, false for off). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with the operation. + +# Conclusion + +The **Modulino Buttons** is a digital input and output device that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes detecting button presses and controlling LEDs straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both user interfaces and interactive control systems. + +# What Is Next? + +Now that you've learned how to use your Modulino Buttons, you're all set to integrate it into your projects! +- Create a simple menu system where each button performs a different function. +- Build a game controller for a simple arcade-style game. +- Use the buttons to control other Modulino devices in your project. +- Design an interactive installation where button presses trigger different visual and audio effects. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/ButtonsPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/ButtonsPinouts.png new file mode 100644 index 0000000000..cd1e959c27 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/ButtonsPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/Modulino_Buttons_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/Modulino_Buttons_Power_Tree.png new file mode 100644 index 0000000000..3281df8b8e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/Modulino_Buttons_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-jumper.png new file mode 100644 index 0000000000..a2aa5b68df Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-qwiic-chain.png new file mode 100644 index 0000000000..ae538f5949 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-qwiik.png new file mode 100644 index 0000000000..4df7f0508a Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons.gif b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons.gif new file mode 100644 index 0000000000..73e0d48f1c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons.png new file mode 100644 index 0000000000..473282f2a9 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/connection-guide-buttons.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/mp-usb-connection.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/mp-usb-connection.png new file mode 100644 index 0000000000..fb059f9e8b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/mp-usb-connection.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/package-installer-overview.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/package-installer-overview.png new file mode 100644 index 0000000000..67678dc808 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/package-installer-overview.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/schematic.png new file mode 100644 index 0000000000..df5f2cfb25 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/how-to-buttons-mp.md b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/how-to-buttons-mp.md new file mode 100644 index 0000000000..d693d1dda4 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/how-to-buttons-mp.md @@ -0,0 +1,269 @@ +--- +title: "How To Use The Modulino Buttons And MicroPython" +description: "Learn how to get the most out of your Modulino Buttons in a MicroPython environment." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-buttons +software: + - ide-v2 + - web-editor +--- +The Modulino Buttons is a modular sensor that provides tactile input and visual feedback, making it perfect to add interactive controls to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +![Module demonstration](assets/connection-guide-buttons.gif) + +Pressing a button pulls the signal LOW, and each button has an onboard pull-up resistor. The LEDs can be controlled independently through the onboard microcontroller. + + +# General Characteristics + +The **Modulino Buttons** module uses three tactile buttons and LEDs, which do not have native I²C capabilities. Instead, the buttons and LEDs are controlled by the Modulino's onboard microcontroller (STM32C011F4U6TR). This microcontroller provides I²C communication, allowing for flexible reading of button states and control of the LEDs. One unique feature of this setup is the ability to change the I²C address via software. This means the address can be modified based on your application needs, making it adaptable to different system configurations. + +| Specification | Details | +|-------------------|-----------------------------| +| Buttons | 3 × Tactile pushbuttons | +| LEDs | 3 × Indicator LEDs (orange) | +| Power Supply | 3.3 V | +| Interface | UART, SWD, I2C | +| Pull-up Resistors | Integrated on button inputs | + + +The default I²C address for the **Modulino Buttons** module is: + +| Modulino I²C Address | Hardware I²C Address | Editable Addresses (HEX) | +|----------------------|----------------------|-------------------------------------------------| +| 0x7C | 0x3E | Any custom address (via software configuration) | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + +## Pinout + +The tactile buttons and LEDs are the core components of this module. These input and output devices are controlled by an onboard STM32 microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +![Arduino Buttons Pinout](assets/ButtonsPinouts.png) + +### 1x10 Header + +| Pin | Function | +|-------|----------------| +| A | Button A | +| GND | Ground | +| 3V3 | 3.3 V Power | +| PF2 | RESET | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| B | Button B | +| C | Button C | + +- **A: Button A** – This pin connects directly to button A. +- **GND: Ground** – Ground connection for power and signal reference. +- **3V3: Power** – 3.3 V power supply input. +- **PF2: RESET** – The reset pin for the microcontroller, which can be used to reset the system. +- **SWCLK: SWD Clock** – Used for providing the clock signal in the SWD interface. +- **SWDIO: SWD Data** – Used for debugging, as part of the Serial Wire Debug (SWD) interface. +- **TX1: USART Transmit** – Used for transmitting data over UART communication. +- **RX1: USART Receive** – Used for receiving data over UART communication. +- **B: Button B** – This pin connects directly to button B. +- **C: Button C** – This pin connects directly to button C. + +### 1x4 Header (I2C) + +The pinout for the Modulino Buttons is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|------------------|-------------------|---------|-------------|---------|------| +| Supply Voltage | - | - | 3.3 (QWIIC) | - | V | +| LED Current Draw | Single LED Active (A,B or C) | - | 2.5 | - | mA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: + +![Power Tree Modulino Buttons](assets/Modulino_Buttons_Power_Tree.png) + +## Schematic + +The Modulino Buttons uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Buttons](assets/schematic.png) + +The main components are the **three tactile buttons**, **three user-programmable LEDs** and the **STM32C011F4U6TR** microcontroller (U1), which handles button state reading, LED control, as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. +There's also a small power LED indicator that lights up when the board is on. +You can grab the full schematic and PCB files from the [Modulino Buttons](https://docs.arduino.cc/hardware/modulinos/modulino-buttons) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. +Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-buttons.png) + +## QWIIC Connector +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-buttons-qwiik.png) +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-buttons-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-buttons-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are properly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address it independently. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + + +# How To Program Your Modulino + +## Installing The Modulino Library +To program your Modulino it is recommended you use the official ```Modulino``` micropython library available [here](https://github.com/arduino/arduino-modulino-mpy). The library is fully compatible with the no **Arduino Lab for MicroPython**. +For information on installing the **Arduino Lab for MicroPython** please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). + +The ```Modulino``` library is not available by default on MicroPython devices hence installation is needed. +To simplify the process the [MicroPython Package Installer](https://github.com/arduino/lab-micropython-package-installer/releases) is recommended as it will provide a graphical interface to guide installation. +After installation, you should now be able to: + +1. Open the tool. +2. Plug in your board to the computer. +![USB Connection](assets/mp-usb-connection.png) + +If the board does not appear in the Detected Boards section, click Reload. If the board is still undetected, ensure no other programs (e.g., a code editor) are using the board's COM port. + +4. Search for the ```Modulino``` package by filling in the text box on the search feature. +5. Click Install and wait for the installation confirmation. +6. Disconnect the board from the tool before returning to your code editor to avoid conflicts due to a busy COM port. + +![Package Installer Overview](assets/package-installer-overview.png) + +The module should now be includable in your program using: +```from modulino import ModulinoThermo``` + +# Getting Button Input and Controlling LEDs + +Interacting with buttons using the `Modulino` library is straightforward. For the **Modulino Buttons** module, there are key functions to detect button presses and control the LEDs associated with each button. + +## Detecting Button Presses + +Each button supports different interactions: +- **`.on_button_a_press`**, **`.on_button_b_press`**, **`.on_button_c_press`** + Triggers when a button is pressed. +- **`.on_button_a_long_press`**, **`.on_button_b_long_press`**, **`.on_button_c_long_press`** + Triggers when a button is held down for a longer duration. +- **`.on_button_a_release`**, **`.on_button_b_release`**, **`.on_button_c_release`** + Triggers when a button is released. +By default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it as instructed [here](https://github.com/arduino/arduino-modulino-mpy/tree/main/docs#%E2%84%B9%EF%B8%8F-using-3rd-party-boards). More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +## Reading Button Inputs And Controlling LEDs + +```python +from modulino import ModulinoButtons +from time import sleep + +buttons = ModulinoButtons() + +# Define button press actions +buttons.on_button_a_press = lambda : print("Button A pressed") +buttons.on_button_a_long_press = lambda : print("Button A long press") +buttons.on_button_a_release = lambda : print("Button A released") + +buttons.on_button_b_press = lambda : print("Button B pressed") +buttons.on_button_b_long_press = lambda : print("Button B long press") +buttons.on_button_b_release = lambda : print("Button B released") + +buttons.on_button_c_press = lambda : print("Button C pressed") +buttons.on_button_c_long_press = lambda : print("Button C long press") +buttons.on_button_c_release = lambda : print("Button C released") + +# LED Sequence: Turn each LED on with a delay, then turn them off +buttons.led_a.on() +sleep(0.5) +buttons.led_b.on() +sleep(0.5) +buttons.led_c.on() +sleep(0.5) +buttons.set_led_status(False, False, False) # Turn off all LEDs + +while True: + buttons_state_changed = buttons.update() + + if buttons_state_changed: + led_a_status = buttons.is_pressed(0) # Turn LED A on if button A is pressed + led_b_status = buttons.is_pressed(1) # Turn LED B on if button B is pressed + led_c_status = buttons.is_pressed(2) # Turn LED C on if button C is pressed + buttons.set_led_status(led_a_status, led_b_status, led_c_status) +``` + +### How To Change Address + +A sketch is also available included with the library named `AddressChanger` and also available [here](https://github.com/arduino/arduino-modulino-mpy/blob/main/examples/change_address.py). This sketch changes the I2C address at a software level on the Module's microcontroller. + +- Connect the module to your board via I2C, ensuring no other modules are in the chain. +- Run the script in a MicroPython environment. +- Follow the on-screen instructions (REPL) to select the device and enter a new address. Valid I²C addresses range from 0x08 to 0x77 (7-bit values in hexadecimal format, e.g., 0x42). +- The script will attempt to change the address and confirm success. + +To keep track of the address in use, the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your MicroPython sketch, you'll need to specify this address when creating the module object. For example: +```python +buttons_module = ModulinoButtons(address=0x45) # Replace 0x45 with your specific address +``` + +# Troubleshooting + +## Buttons Not Responding +If your Modulino's power LED isn't on or the buttons aren't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +## Library Not Installed Properly +If you encounter an issue with the `import ModulinoButtons` command, verify that the Modulino library is correctly installed: +- Check your library installer to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +## LEDs Not Working +If the LEDs aren't lighting up as expected, make sure: +- The correct LED states are being set in your code (true for on, false for off). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with the operation. + +# Conclusion + +The **Modulino Buttons** is a digital input and output device that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes detecting button presses and controlling LEDs straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both user interfaces and interactive control systems. + +# What Is Next? + +Now that you've learned how to use your Modulino Buttons, you're all set to integrate it into your projects! +- Create a simple menu system where each button performs a different function. +- Build a game controller for a simple arcade-style game. +- Use the buttons to control other Modulino devices in your project. +- Design an interactive installation where button presses trigger different visual and audio effects. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buttons/tutorials/how-buttons-mp/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/compatibility.yml b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/compatibility.yml new file mode 100644 index 0000000000..7e64033e1d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/compatibility.yml @@ -0,0 +1,18 @@ +software: + - arduino-ide + - arduino-cli + - web-editor +hardware: + shields: ~ + carriers: + - nano-connector-carrier + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter + - uno-r4-wifi \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BlockDiagramBuzzer.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BlockDiagramBuzzer.png new file mode 100644 index 0000000000..f5f1da4872 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BlockDiagramBuzzer.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BuzzMec.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BuzzMec.png new file mode 100644 index 0000000000..ec05c32da9 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BuzzMec.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BuzzerPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BuzzerPinouts.png new file mode 100644 index 0000000000..41c5fb908f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/BuzzerPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/I2CTag.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/I2CTag.png new file mode 100644 index 0000000000..9d9b7b0f72 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/I2CTag.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/Modulino_Buzzer_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/Modulino_Buzzer_Power_Tree.png new file mode 100644 index 0000000000..7ca852c52b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/Modulino_Buzzer_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/ResistorsPullupGen.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/ResistorsPullupGen.png new file mode 100644 index 0000000000..7095581413 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/ResistorsPullupGen.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/featured.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/featured.png new file mode 100644 index 0000000000..27fb2d2b4f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/assets/featured.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/datasheet.md b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/datasheet.md new file mode 100644 index 0000000000..0e078ac334 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/datasheet/datasheet.md @@ -0,0 +1,253 @@ +--- +identifier: ABX00108 +title: Arduino® Modulino® Buzzer +type: maker +author: Pedro Sousa Lima +--- + +![](assets/featured.png) + +# Description +The Modulino® Buzzer, powered by an on-board **STM32C011F4** microcontroller, provides a compact and versatile way to generate sound alerts and tones through I2C control. Perfect for audible notifications, alarm systems, or simple musical applications in IoT and maker projects. + +# Target Areas +Maker, beginner, education + +# Contents +## Application Examples + +- **Audible Alerts** + Integrate a buzzer notification when a sensor reading crosses a threshold (e.g., temperature limit, motion detected). + +- **Alarm & Security Systems** + Produce warning tones in response to environment triggers or user-defined events. + +- **Interactive Learning Tools** + Combine with other Modulino® nodes (e.g., buttons, sensors) to create hands-on educational projects showcasing real-time sound feedback. + +
+ +## Features +- **PKLCS1212E4001** buzzer controlled by an **STM32C011F4** microcontroller over I2C (Qwiic). +- Operates at **3.3 V** (in line with Qwiic standards, 2.0–3.6 V MCU range). +- **SWD** header for optional reprogramming or custom sound logic. +- Ideal for **alarm tones**, **status beeps**, or **simple audio feedback**. + +### Contents +| **SKU** | **Name** | **Purpose** | **Quantity** | +| ---------- | ----------------- | ----------------------------------------- | ------------ | +| ABX00108 | Modulino® Buzzer | Produce sounds or alerts via I2C control | 1 | +| | I2C Qwiic cable | Compatible with the Qwiic standard | 1 | + + +## Related Products +- *SKU: ASX00027* – [Arduino® Sensor Kit](https://store.arduino.cc/products/arduino-sensor-kit) +- *SKU: K000007* – [Arduino® Starter Kit](https://store.arduino.cc/products/arduino-starter-kit-multi-language) +- *SKU: AKX00026* – [Arduino® Oplà IoT Kit](https://store.arduino.cc/products/opla-iot-kit) + +## Rating + +### Recommended Operating Conditions +- **Microcontroller supply range:** 2.0 V – 3.6 V (STM32C011F4) +- **Powered at 3.3 V** through the Qwiic interface (in accordance with the Qwiic standard) +- **Operating temperature:** –40 °C to +85 °C + +**Typical current consumption:** +- ~6.4 mA when buzzer is active + + +## Power Tree +The power tree for the modulino can be consulted below: + +![Modulino® Buzzer Power Tree](assets/Modulino_Buzzer_Power_Tree.png) + + +## Block Diagram + +This module features an STM32C011F4 microcontroller that drives a PKLCS1212E4001 buzzer. It communicates with the host over I2C (Qwiic). Advanced users can reprogram the MCU for custom audio patterns or logic. + +![Modulino® Buzzer block diagram](assets/BlockDiagramBuzzer.png) + +## Functional Overview +The Modulino® Buzzer node receives sound commands or frequency/tone data via I2C. The STM32C011F4 microcontroller then drives the buzzer, producing audible tones or beeps. For more advanced usage, users can re-flash the firmware via SWD to generate custom waveforms or integrate additional logic. + +### Technical Specifications (Module-Specific) +| **Specification** | **Details** | +| --------------------- | ----------------------------------------------- | +| **Microcontroller** | STM32C011F4 | +| **Actuator** | PKLCS1212E4001 buzzer | +| **Supply Voltage** | Min: 2.0 V, Max: 3.6 V | +| **Power Consumption** | ~6.4 mA (buzzer active) | +| **Communication** | I2C (Qwiic), SWD, optional UART if reprogrammed | + +### Pinout + +**Qwiic / I2C (1×4 Header)** +| **Pin** | **Function** | +|---------|---------------------------| +| GND | Ground | +| 3.3 V | Power Supply (3.3 V) | +| SDA | I2C Data | +| SCL | I2C Clock | + +These pads and the Qwiic connectors share the same I2C bus at 3.3 V. + +**Additional 1×8 Header (Buzzer & MCU Signals)** +| **Pin** | **Function** | +|---------|----------------| +| GND | Ground | +| 3V3 | 3.3 V Power | +| RESET | Reset | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| PA0 | Buzzer | + +**Note:** You can drive the buzzer with custom signals (PWM supplied to the PA0 pin) or reprogram the STM32C011F4 via SWD for alternate modes or advanced functionality. + +![Pinout Overview](assets/BuzzerPinouts.png) + +### Power Specifications +- **Nominal operating voltage:** 3.3 V via Qwiic +- **MCU voltage range:** 2.0 V–3.6 V + +### Mechanical Information +![Modulino® Buzzer Mechanical Information](assets/BuzzMec.png) + +- Board dimensions: 41 mm × 25.36 mm +- Thickness: 1.6 mm (±0.2 mm) +- Four mounting holes (Ø 3.2 mm) + - Hole spacing: 16 mm vertically, 32 mm horizontally + +### I2C Address Reference +| **Board Silk Name** | **Sensor/Actuator** | **Modulino I2C Address (HEX)** | **Editable Addresses (HEX)** | **Hardware I2C Address (HEX)** | +|---------------------|---------------------|--------------------------------|---------------------------------------|--------------------------------| +| MODULINO BUZZER | 1× Buzzer | 0x3C | Any custom address (via FW config) | 0x1E | + +**Note:** Default address is **0x3C**, but custom firmware can reassign it. Check your library or code for details. + +![Blank silk for identification](assets/I2CTag.png) + +#### Pull-up Resistors + +The module has pads for optional I2C pull-up mounting in both data lines. No resistors are mounted by default but in case the resistors are need 4.7 K resistors in an SMD 0402 format are recommended. + +These are positioned near the Qwiic connector on the power LED side. +![Generic pull-up resistor position](assets/ResistorsPullupGen.png) + +## Device Operation +By default, the Modulino® Buzzer node responds to I2C commands to produce tones or beep patterns. You can integrate it with the Arduino IDE or any 3.3 V microcontroller environment. Advanced users may flash custom code via the SWD header to implement unique waveforms or logic. + +# Certifications +## Certifications Summary + +| **Certification** | **Status** | +|:-----------------:|:----------:| +| CE/RED (Europe) | Yes | +| UKCA (UK) | Yes | +| FCC (USA) | Yes | +| IC (Canada) | Yes | +| RoHS | Yes | +| REACH | Yes | +| WEEE | Yes | + +## Declaration of Conformity CE DoC (EU) + +

We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).

+ +## Declaration of Conformity to EU RoHS & REACH 211 01/19/2021 + +

Arduino boards are in compliance with RoHS 2 Directive 2011/65/EU of the European Parliament and RoHS 3 Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.

+ +| Substance | **Maximum limit (ppm)** | +|----------------------------------------|-------------------------| +| Lead (Pb) | 1000 | +| Cadmium (Cd) | 100 | +| Mercury (Hg) | 1000 | +| Hexavalent Chromium (Cr6+) | 1000 | +| Poly Brominated Biphenyls (PBB) | 1000 | +| Poly Brominated Diphenyl ethers (PBDE) | 1000 | +| Bis(2-Ethylhexyl) phthalate (DEHP) | 1000 | +| Benzyl butyl phthalate (BBP) | 1000 | +| Dibutyl phthalate (DBP) | 1000 | +| Diisobutyl phthalate (DIBP) | 1000 | + +Exemptions: No exemptions are claimed. + +

Arduino Boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.

+ +## Conflict Minerals Declaration + +

As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regard to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder or as a component in metal alloys. As part of our reasonable due diligence, Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.

+ +## FCC Caution + +Any Changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate the equipment. + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: + +1. This device may not cause harmful interference. +2. This device must accept any interference received, including interference that may cause undesired operation. + +**FCC RF Radiation Exposure Statement:** + +1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. +2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment. +3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator & your body. + +**Note:** This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures: + +- Reorient or relocate the receiving antenna. +- Increase the separation between the equipment and receiver. +- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. +- Consult the dealer or an experienced radio/TV technician for help. + +English: +User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions: + +1. this device may not cause interference. +2. this device must accept any interference, including interference that may cause undesired operation of the device. + +French: +Le présent appareil est conforme aux CNR d’Industrie Canada applicables aux appareils radio exempts de licence. L’exploitation est autorisée aux deux conditions suivantes: + +1. l’appareil nedoit pas produire de brouillage. +2. l’utilisateur de l’appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d’en compromettre le fonctionnement. + +**IC SAR Warning:** + +English: +This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body. + +French: +Lors de l’installation et de l’exploitation de ce dispositif, la distance entre le radiateur et le corps est d’au moins 20 cm. + +**Important:** The operating temperature of the EUT can’t exceed 85 ℃ and shouldn’t be lower than -40 ℃. + +Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states. + +# Company Information + +| Company name | Arduino SRL | +|-----------------|-----------------------------------------------| +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA(Italy) | + +# Reference Documentation + +| Ref | Link | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino Courses | [https://www.arduino.cc/education/courses](https://www.arduino.cc/education/courses) | +| Arduino Documentation | [https://docs.arduino.cc/](https://docs.arduino.cc/) | +| Arduino IDE (Cloud) | [https://create.arduino.cc/editor](https://create.arduino.cc/editor) | +| Cloud IDE Getting Started | [https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor](https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Library Reference | [https://github.com/arduino-libraries/](https://github.com/arduino-libraries/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | + +# Revision History +| **Date** | **Revision** | **Changes** | +| ---------- | ------------ | ------------------------------------------------------------- | +| 23/05/2025 | 2 | Fixed pinout table, power info, and unrelated characteristics | +| 14/05/2025 | 1 | First release | diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/downloads/ABX00108-cad-files.zip b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/downloads/ABX00108-cad-files.zip new file mode 100644 index 0000000000..0fad983c87 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/downloads/ABX00108-cad-files.zip differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/downloads/ABX00108-schematics.pdf b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/downloads/ABX00108-schematics.pdf new file mode 100644 index 0000000000..a92d6e7d6b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/downloads/ABX00108-schematics.pdf differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/essentials.md b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/essentials.md new file mode 100644 index 0000000000..762e36d575 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/essentials.md @@ -0,0 +1,8 @@ + + + + +This library allows you to communicate with the Arduino Modulino® nodes. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/features.md b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/features.md new file mode 100644 index 0000000000..b0915aec81 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/features.md @@ -0,0 +1,12 @@ + +The Modulino® Buzzer module adds audio feedback to your projects with an integrated buzzer. It is compatible with the Arduino UNO R4 WiFi or any board with a Qwiic interface, allowing you to generate tones, alerts, or melodies without messy wiring. + + + + + Follow example projects to learn how to produce beeps and tunes for notifications or interactive feedback, even if you’re just starting with electronics. + + + The Modulino® Buzzer links via Qwiic cables to your UNO R4 WiFi or other boards with a Qwiic interface. Solderable pins allow for direct wiring when Qwiic isn’t available. + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/image.svg b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/image.svg new file mode 100644 index 0000000000..6563927b88 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/image.svg @@ -0,0 +1,960 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/interactive/ABX00108-pinout.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/interactive/ABX00108-pinout.png new file mode 100644 index 0000000000..41c5fb908f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/interactive/ABX00108-pinout.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/product.md b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/product.md new file mode 100644 index 0000000000..cf5b3d14cf --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/product.md @@ -0,0 +1,13 @@ +--- +title: Modulino Buzzer +url_shop: https://store.arduino.cc/products/modulino-buzzer +url_guide: https://courses.arduino.cc/plugandmake +primary_button_url: https://docs.arduino.cc/tutorials/modulino-buzzer/how-buzzer-ardu/ +primary_button_title: With Arduino +secondary_button_url: https://docs.arduino.cc/tutorials/modulino-buzzer/how-buzzer-mp/ +secondary_button_title: With MicroPython +certifications: [] +sku: [ABX00108] +--- + +Easily add audible alerts and notifications to any project with the built-in buzzer. From simple beeps to quick tunes, it keeps you informed. It connects to Arduino UNO R4 WiFi or other Qwiic-capable boards, and solderable pins allow for direct wiring whenever needed. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tech-specs.md b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tech-specs.md new file mode 100644 index 0000000000..e44c926c08 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Modulino® Buzzer. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tech-specs.yml b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tech-specs.yml new file mode 100644 index 0000000000..9a9ea0f579 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tech-specs.yml @@ -0,0 +1,11 @@ +Node: + Name: Modulino Buzzer + SKU: ABX00108 + Board recommended: Arduino® UNO R4 WiFi (ABX00087) + Communications: I2C (over Qwiic connector or solderable pin) + Operational voltage: 3.3V + Sensor: + PKLCS1212E4001-R1 (STM32C011F4): 0x3C (address can change via software) + +Other accessories: + Qwiic cables: 1x diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/BuzzerPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/BuzzerPinouts.png new file mode 100644 index 0000000000..4c1c420282 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/BuzzerPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/IDE-Left-Tab.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/IDE-Left-Tab.png new file mode 100644 index 0000000000..c7bb86575e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/IDE-Left-Tab.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/Modulino_Buzzer_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/Modulino_Buzzer_Power_Tree.png new file mode 100644 index 0000000000..7ca852c52b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/Modulino_Buzzer_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/addressChangeIDE.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/addressChangeIDE.png new file mode 100644 index 0000000000..d5cd3fd195 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/addressChangeIDE.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/adressChanger.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/adressChanger.png new file mode 100644 index 0000000000..c6eae670c8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/adressChanger.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/buzzerPA0.gif b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/buzzerPA0.gif new file mode 100644 index 0000000000..7f133eb687 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/buzzerPA0.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-jumper.png new file mode 100644 index 0000000000..1a45271300 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-qwiic-chain.png new file mode 100644 index 0000000000..a90c8fdf46 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-qwiik.png new file mode 100644 index 0000000000..6ee9d1c03a Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer.png new file mode 100644 index 0000000000..4f6bd1cd6c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/connection-guide-buzzer.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/library-install.gif b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/library-install.gif new file mode 100644 index 0000000000..16f396c353 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/library-install.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/schematic.png new file mode 100644 index 0000000000..4d0d4a9098 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/content.md new file mode 100644 index 0000000000..ec039cf6f4 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-ardu/content.md @@ -0,0 +1,244 @@ +--- +title: "How To Use The Modulino Buzzer" +description: "Learn how to get the most out of your Modulino Buzzer." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-buzzer +software: + - ide-v2 + - web-editor +--- +The Modulino Buzzer is a modular sensor that generates audio output, making it perfect to add sound feedback to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + + +## Hardware Specifications + +The Modulino Buzzer based on the buzzer (PKLCS1212E4001-R1) is capable of generating different tones and sound patterns. Take a look at the following table to know more about its characteristics: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|----------------------|-----------|---------|---------|---------|------| +| Frequency | - | - | 4,000 | - | Hz | +| Sound Pressure Level | - | 75 | 85 | - | dB | + +## Sensor Details + +The **Modulino Buzzer** module uses the **PKLCS1212E4001-R1** buzzer, which does not have native I²C capabilities. Instead, the buzzer is controlled by the Modulino's onboard microcontroller (STM32C011F4U6T). This microcontroller provides I²C communication, allowing for flexible control of the buzzer. + +One unique feature of this setup is the ability to change the I²C address via software. This means the address can be modified based on your application needs, making it adaptable to different system configurations. + +The default I²C address for the **Modulino Buzzer** module is: + +| Modulino I²C Address | Hardware I²C Address |Editable Addresses (HEX)| +|----------------------|----------------------|----------------------| +| 0x3C | 0x1E |Any custom address (via software configuration) + + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + + +## Pinout + +The PKLCS1212E4001-R1 buzzer is the core component of this module. This audio output device is controlled by an onboard STM32 microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +![Arduino Buzzer Pinout](assets/BuzzerPinouts.png) + +### 1x8 Header + +| Pin | Function | +|--------|-----------------| +| GND | Ground | +| 3V3 | 3.3V Power | +| RESET | Reset | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| PA0 | Buzzer | + +- **GND:** Provides ground reference for the circuit. +- **3V3:** Supplies 3.3 V power to connected components and modules. +- **Reset:** The reset pin for the microcontroller, which can be used to reset the system. +- **SWCLK:** Used for providing the clock signal in the SWD interface. +- **SWDIO:** Used for debugging, as part of the Serial Wire Debug (SWD) interface. +- **TX1:** Used for transmitting data over UART communication. +- **RX1:** Used for receiving data over UART communication. +- **PA0:** This pin is used to control the buzzer's output signal. In fact, this pin can be used to bypass the I²C interface and control the buzzer directly using a square wave. +![Direct control via signal](assets/buzzerPA0.gif) + + +### 1x4 Header (I2C) +The pinout for the Modulino Buzzer is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Typical | Unit | +|---------------------|-----------|---------|------| +| Operating Voltage | - | 3.3 | V | +| Current Consumption | - | ~6.4 | mA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. +J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Buzzer](assets/Modulino_Buzzer_Power_Tree.png) + +## Schematic + +The Modulino Buzzer uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Buzzer](assets/schematic.png) + +The main components are the **PKLCS1212E4001-R1 buzzer** and the **STM32C011F6U6TR** microcontroller (U1), which handles tone generation as well as I²C communication. + +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +There's also a small power LED indicator that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Buzzer](https://docs.arduino.cc/hardware/modulinos/modulino-buzzer) product page. + +# How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +If your board doesn’t have a QWIIC connector, you can still access the same I²C bus and power the module using the solderable header pads just make sure you wire it to 3.3V and match the I²C pinout. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-buzzer.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-buzzer-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-buzzer-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. + +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus as long as you select the correct I²C pins depending on your board. + +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-buzzer-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are properly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +# How To Use Your Modulino +## Installing The Modulino Library +You need the official Modulino library available [here](https://docs.arduino.cc/libraries/modulino/) to use the Modulino Buzzer. + +With the Arduino IDE you get some tools that make adding a library easier. To learn how to install the IDE please visit our [page](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing/). +After opening the IDE, a tab should be visible on the left. Press the book icon for "library" as highlighted in the image. +![IDE Library Tab](assets/IDE-Left-Tab.png) +The process should look like this: +![Library Install](assets/library-install.gif) +A message will appear after the installation is successful. + +## Play A Simple Tune + +Getting sound feedback from the buzzer is fairly simple using the ```Modulino``` library. For the **Modulino Buzzer** there is one important function: +- ```tone(frequency, duration)```: Generates a tone with the specified frequency (in Hz) and duration (in milliseconds). +- ```Modulino.begin();```: By default the Modulino library uses ```Wire1``` if your connection is in a different Wire you will have to edit it, check [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) (by default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/)) for the library's hardware compatibility. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example sketch of how to implement this function to control the buzzer: + +```arduino +#include + +ModulinoBuzzer buzzer; + +int frequency = 440; // Frequency of the tone in Hz +int duration = 1000; // Duration of the tone in milliseconds + +void setup(){ + Modulino.begin(); + buzzer.begin(); +} + +void loop(){ + buzzer.tone(frequency, duration); // Generate the tone + delay(1000); // Wait for 1 second + buzzer.tone(0, duration); // Stop the tone + delay(1000); // Wait for 1 second +} +``` + +The code example provided shows how to initialize the buzzer and generate tones. The buzzer alternates between playing a 440 Hz tone for one second and staying silent for one second. +It can be easily adapted to play different melodies or to provide sound feedback for your projects based on specific conditions or events. + +## How To Change I2C Address + +An example sketch, AddressChanger, is also included with the library inside the `Utilities` folder and available [here](https://github.com/arduino-libraries/Modulino/blob/main/examples/Utilities/AddressChanger/AddressChanger.ino). This sketch changes the I²C address at a software level on the Module's microcontroller. +![Example location on the IDE](assets/addressChangeIDE.png) + +- Connect the module to your board, remove any other modules that might be in the chain. Connection must be via I²C. +- Upload the sketch. +- Open the Serial Monitor. +- Text should now appear. Make sure the correct bauld-rate is selected if the displayed characters seem corrupted. + ![Expected console output](assets/adressChanger.png) +- Select the address and confirm. Valid I²C addresses range from 0x08 to 0x77 (7-bit values in hexadecimal format, e.g., 0x42). +- Your address should now have changed. Make sure to take note of the selected address. + +To keep track of the address in use the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your sketch, you'll need to specify this address when creating the module object. For example: +```arduino +ModulinoBuzzer buzzer(0x3E); // Replace 0x3E with your specific address +``` + + +# Troubleshooting + +## Buzzer Not Sounding +If your Modulino's power LED isn't on or the buzzer isn't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +## Library Not Installed Properly +If you encounter an issue with the `#include "modulino.h"` command, verify that the Modulino library is correctly installed: +- Check your IDE to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +## Distorted Sound +If the buzzer sound is distorted or not playing as expected, make sure: +- The correct frequency values are being used (typically between 20 Hz and 20 kHz for audible sounds). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with the sound output. + +# Conclusion + +The **Modulino Buzzer** is a digital sound output device that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes generating sound feedback straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both interactive feedback and audio alert systems. + +# What Is Next? + +Now that you've learned how to use your Modulino Buzzer, you're all set to integrate it into your projects! +- Experiment with different frequencies to create various tones and melodies. +- Try creating a simple alarm system that triggers the buzzer when certain conditions are met. +- Use the buzzer to provide feedback in your interactive projects when a button is pressed or a threshold is reached. +- Create a music box that plays different tunes when specific inputs are detected! + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/BuzzerPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/BuzzerPinouts.png new file mode 100644 index 0000000000..4c1c420282 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/BuzzerPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/Modulino_Buzzer_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/Modulino_Buzzer_Power_Tree.png new file mode 100644 index 0000000000..7ca852c52b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/Modulino_Buzzer_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/buzzerPA0.gif b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/buzzerPA0.gif new file mode 100644 index 0000000000..7f133eb687 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/buzzerPA0.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-jumper.png new file mode 100644 index 0000000000..1b61af02f8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-qwiic-chain.png new file mode 100644 index 0000000000..a90c8fdf46 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-qwiik.png new file mode 100644 index 0000000000..0dbdad86af Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer.png new file mode 100644 index 0000000000..4f6bd1cd6c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/connection-guide-buzzer.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/mp-usb-connection.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/mp-usb-connection.png new file mode 100644 index 0000000000..fb059f9e8b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/mp-usb-connection.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/package-installer-overview.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/package-installer-overview.png new file mode 100644 index 0000000000..67678dc808 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/package-installer-overview.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/schematic.png new file mode 100644 index 0000000000..4d0d4a9098 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/content.md new file mode 100644 index 0000000000..656167ddb3 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-buzzer/tutorials/how-buzzer-mp/content.md @@ -0,0 +1,245 @@ +--- +title: "How To Use The Modulino Buzzer And MicroPython" +description: "Learn how to get the most out of your Modulino Buzzer in a MicroPython environment." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-buzzer +software: + - ide-v2 + - web-editor +--- +The Modulino Buzzer is a modular sensor that generates audio output, making it perfect to add sound feedback to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + + +## Hardware Specifications + +The Modulino Buzzer based on the buzzer (PKLCS1212E4001-R1) is capable of generating different tones and sound patterns. Take a look at the following table to know more about its characteristics: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|----------------------|-----------|---------|---------|---------|------| +| Frequency | - | - | 4,000 | - | Hz | +| Sound Pressure Level | - | 75 | 85 | - | dB | + +## Sensor Details + +The **Modulino Buzzer** module uses the **PKLCS1212E4001-R1** buzzer, which does not have native I²C capabilities. Instead, the buzzer is controlled by the Modulino's onboard microcontroller (STM32C011F4U6T). This microcontroller provides I²C communication, allowing for flexible control of the buzzer. + +One unique feature of this setup is the ability to change the I²C address via software. This means the address can be modified based on your application needs, making it adaptable to different system configurations. + +The default I²C address for the **Modulino Buzzer** module is: + +| Modulino I²C Address | Hardware I²C Address |Editable Addresses (HEX)| +|----------------------|----------------------|----------------------| +| 0x3C | 0x1E |Any custom address (via software configuration) + + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + + +## Pinout + +The PKLCS1212E4001-R1 buzzer is the core component of this module. This audio output device is controlled by an onboard STM32 microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +![Arduino Buzzer Pinout](assets/BuzzerPinouts.png) + +| Pin | Function | +|--------|-----------------| +| GND | Ground | +| 3V3 | 3.3V Power | +| RESET | Reset | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| PA0 | Buzzer | + +- **GND:** Provides ground reference for the circuit. +- **3V3:** Supplies 3.3 V power to connected components and modules. +- **Reset:** The reset pin for the microcontroller, which can be used to reset the system. +- **SWCLK:** Used for providing the clock signal in the SWD interface. +- **SWDIO:** Used for debugging, as part of the Serial Wire Debug (SWD) interface. +- **TX1:** Used for transmitting data over UART communication. +- **RX1:** Used for receiving data over UART communication. +- **PA0:** This pin is used to control the buzzer's output signal. In fact, this pin can be used to bypass the I²C interface and control the buzzer directly using a square wave. +![Direct control via signal](assets/buzzerPA0.gif) + + +### 1x4 Header (I2C) +The pinout for the Modulino Buzzer is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Typical | Unit | +|---------------------|-----------|---------|------| +| Operating Voltage | - | 3.3 | V | +| Current Consumption | - | ~6.4 | mA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. +J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Buzzer](assets/Modulino_Buzzer_Power_Tree.png) + +## Schematic + +The Modulino Buzzer uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Buzzer](assets/schematic.png) + +The main components are the **PKLCS1212E4001-R1 buzzer** and the **STM32C011F6U6TR** microcontroller (U1), which handles tone generation as well as I²C communication. + +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +There's also a small power LED indicator that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Buzzer](https://docs.arduino.cc/hardware/modulinos/modulino-buzzer) product page. + +# How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +If your board doesn’t have a QWIIC connector, you can still access the same I²C bus and power the module using the solderable header pads just make sure you wire it to 3.3V and match the I²C pinout. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-buzzer.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-buzzer-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-buzzer-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. + +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus as long as you select the correct I²C pins depending on your board. + +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-buzzer-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are properly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +# How To Use Your Modulino +To program your Modulino it is recommended you use the official ```Modulino``` micropython library available [here](https://github.com/arduino/arduino-modulino-mpy). The library is fully compatible with the no **Arduino Lab for MicroPython**. +For information on installing the **Arduino Lab for MicroPython** please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). + +## Installing The Modulino Library +The ```Modulino``` library is not available by default on MicroPython devices hence installation is needed. +To simplify the process the [MicroPython Package Installer](https://github.com/arduino/lab-micropython-package-installer/releases) is recommended as it will provide a graphical interface to guide installation. +After installation, you should now be able to: + +1. Open the tool. +2. Plug in your board to the computer. +![USB Connection](assets/mp-usb-connection.png) + +If the board does not appear in the Detected Boards section, click Reload. If the board is still undetected, ensure no other programs (e.g., a code editor) are using the board's COM port. + +4. Search for the ```Modulino``` package by filling in the text box on the search feature. +5. Click Install and wait for the installation confirmation. +6. Disconnect the board from the tool before returning to your code editor to avoid conflicts due to a busy COM port. + +![Package Installer Overview](assets/package-installer-overview.png) + +The module should now be includable in your program using: +```from modulino import ModulinoBuzzer``` + +## Play a Simple Tune with MicroPython + +Playing a sound from the **Modulino Buzzer** module is easy using the `Modulino` library. The crucial function to generate a tone is: +- `tone(frequency, duration, blocking)` - Generates a tone with the specified frequency (in Hz) and duration (in milliseconds). +- By default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it as instructed [here](https://github.com/arduino/arduino-modulino-mpy/tree/main/docs#%E2%84%B9%EF%B8%8F-using-3rd-party-boards). More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here’s a basic example to control the buzzer: + +```python +from modulino import ModulinoBuzzer +from time import sleep + +buzzer = ModulinoBuzzer() + +frequency = 440 # Frequency of the tone in Hz +duration = 1000 # Duration of the tone in milliseconds + +# Play the tone +buzzer.tone(frequency, duration, blocking=True) +sleep(1) # Wait for 1 second + +# Stop the tone +buzzer.tone(0, duration, blocking=True) +sleep(1) # Wait for 1 second +``` + +## How To Change Address + +A sketch is also available included with the library named `AddressChanger` and also available [here](https://github.com/arduino/arduino-modulino-mpy/blob/main/examples/change_address.py). This sketch changes the I2C address at a software level on the Module's microcontroller. + +- Connect the module to your board via I2C, ensuring no other modules are in the chain. +- Run the script in a MicroPython environment. +- Follow the on-screen instructions (REPL) to select the device and enter a new address. Valid I²C addresses range from 0x08 to 0x77 (7-bit values in hexadecimal format, e.g., 0x42). +- The script will attempt to change the address and confirm success. + +To keep track of the address in use, the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your MicroPython sketch, you'll need to specify this address when creating the module object. For example: +```python +buzzer_module = ModulinoBuzzer(address=0x45) # Replace 0x45 with your specific address +``` + + +# Troubleshooting + +## Buzzer Not Sounding +If your Modulino's power LED isn't on or the buzzer isn't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +## Library Not Installed Properly +If you encounter an issue with the `from modulino import ModulinoBuzzer"` command, verify that the Modulino library is correctly installed: +- Check if the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +## Distorted Sound +If the buzzer sound is distorted or not playing as expected, make sure: +- The correct frequency values are being used (typically between 20 Hz and 20 kHz for audible sounds). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with the sound output. + +# Conclusion + +The **Modulino Buzzer** is a digital sound output device that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes generating sound feedback straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both interactive feedback and audio alert systems. + +# What Is Next? + +Now that you've learned how to use your Modulino Buzzer, you're all set to integrate it into your projects! +- Experiment with different frequencies to create various tones and melodies. +- Try creating a simple alarm system that triggers the buzzer when certain conditions are met. +- Use the buzzer to provide feedback in your interactive projects when a button is pressed or a threshold is reached. +- Create a music box that plays different tunes when specific inputs are detected! + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/compatibility.yml b/content/hardware/11.accessories/modulino-nodes/modulino-distance/compatibility.yml new file mode 100644 index 0000000000..7e64033e1d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/compatibility.yml @@ -0,0 +1,18 @@ +software: + - arduino-ide + - arduino-cli + - web-editor +hardware: + shields: ~ + carriers: + - nano-connector-carrier + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter + - uno-r4-wifi \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/BlockDiagramDistance.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/BlockDiagramDistance.png new file mode 100644 index 0000000000..440ea9e874 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/BlockDiagramDistance.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/DistanceMec.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/DistanceMec.png new file mode 100644 index 0000000000..c07224a9ba Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/DistanceMec.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/DistancePinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/DistancePinouts.png new file mode 100644 index 0000000000..9c82b4b68f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/DistancePinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/Modulino_Distance_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/Modulino_Distance_Power_Tree.png new file mode 100644 index 0000000000..64b9ae3a3c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/Modulino_Distance_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/featuredDist.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/featuredDist.png new file mode 100644 index 0000000000..cccb00c431 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/assets/featuredDist.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/datasheet.md b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/datasheet.md new file mode 100644 index 0000000000..4725c1980d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/datasheet/datasheet.md @@ -0,0 +1,245 @@ +--- +identifier: ABX00102 +title: Arduino® Modulino® Distance +type: maker +author: Pedro Sousa Lima +--- + +![](assets/featuredDist.png) + +# Description +The Modulino® Distance, featuring the **VL53L4CDV0DH/1** time-of-flight sensor, provides accurate distance measurements in a compact, easy-to-use form factor. Ideal for proximity detection, obstacle avoidance, and various smart sensing applications. + +# Target Areas +Maker, beginner, education + +# Contents + +## Application Examples +- **Robotics Navigation** + Detect objects or obstacles up to about 1200 mm away, enabling mobile robots to sense and avoid collisions. + +- **Proximity Sensing** + Trigger actions when an object is within a user-defined range, such as auto-locking doors or touchless controls. + +- **Smart Home Devices** + Monitor open/close states of containers or doors, measure fluid levels, or create interactive installations. + +
+ +## Features +- Uses the **VL53L4CDV0DH/1** sensor for precise **time-of-flight** distance measurements (0–1200 mm). +- **I2C (Qwiic)** interface for solder-free integration; operates at **3.3 V**. +- **Additional GPIO1** pin for interrupt signaling, **XSHUT** pin for power saving or reset. +- Ideal for **proximity detection**, **collision avoidance**, and general distance measuring tasks. + +### Contents +| **SKU** | **Name** | **Purpose** | **Quantity** | +| ---------- | ------------------- | --------------------------------------------- | ------------ | +| ABX00102 | Modulino® Distance | Time-of-flight distance sensing | 1 | +| | I2C Qwiic cable | Compatible with the Qwiic standard | 1 | + + +## Related Products +- *SKU: ASX00027* – [Arduino® Sensor Kit](https://store.arduino.cc/products/arduino-sensor-kit) +- *SKU: K000007* – [Arduino® Starter Kit](https://store.arduino.cc/products/arduino-starter-kit-multi-language) +- *SKU: AKX00026* – [Arduino® Oplà IoT Kit](https://store.arduino.cc/products/opla-iot-kit) + +## Rating + +### Recommended Operating Conditions +- **Sensor supply range:** 2.6 V – 3.5 V +- **Powered at 3.3 V** through the Qwiic interface (in accordance with the Qwiic standard) +- **Operating temperature:** –40 °C to +85 °C + +**Typical current consumption:** +- ~40 mA peak (active ranging) +- ~24 mA during active measurement, ~4 mA I2C idle + +## Power Tree +The power tree for the modulino can be consulted below: + +![Modulino® Distance Power Tree](assets/Modulino_Distance_Power_Tree.png) + +## Block Diagram +This module is designed to be placed on an I2C bus, allowing the on-board VL53L4CDV0DH/1 sensor to communicate with a host microcontroller via I2C. + +![Modulino® Distance block diagram](assets/BlockDiagramDistance.png) + +## Functional Overview +The Modulino® Distance node uses a **time-of-flight** measuring principle to detect objects from 0 to ~1200 mm. It communicates via I2C (through the Qwiic connector at 3.3 V). **GPIO1** can signal an interrupt when a threshold is reached or measurement is ready, while **XSHUT** can place the sensor in shutdown mode to save power. + +### Technical Specifications +| **Specification** | **Details** | +| ----------------------- | ------------------------------------------------ | +| **Sensor** | VL53L4CDV0DH/1 | +| **Supply Voltage** | Min: 2.6 V, Max: 3.5 V | +| **Power Consumption** | ~24 mA active, 4 mA idle, 40 mA peak | +| **Range** | 0–1200 mm | +| **Accuracy** | ±7 mm to ±3% | +| **Resolution** | 1 mm | +| **Communication** | I2C | + +### Pinout + +**Qwiic / I2C (1×4 Header)** +| **Pin** | **Function** | +| ------- | ----------------------- | +| GND | Ground | +| 3.3 V | Power Supply (3.3 V) | +| SDA | I2C Data | +| SCL | I2C Clock | + +These pads and the Qwiic connectors share the same I2C bus. You can optionally solder header pins here. + +**Additional 1×4 Header (Distance Sensor Signals)** +| **Pin** | **Function** | +| ------- | ------------------------------------ | +| GND | Ground | +| 3V3 | 3.3 V Power | +| GPIO1 | Digital Output | +| XSHUT | Xshutdown | + +**Note:** On-board 10 kΩ pull-ups to 3.3 V exist for GPIO1 and XSHUT. + +![Pinout Overview](assets/DistancePinouts.png) + +### Power Specifications +- **Nominal operating voltage:** 3.3 V via Qwiic +- **Sensor voltage range:** 2.6 V–3.5 V + +### Mechanical Information +![Modulino® Distance Mechanical Information](assets/DistanceMec.png) + +- Board dimensions: 41 mm × 25.36 mm +- Thickness: 1.6 mm (±0.2 mm) +- Four mounting holes (Ø 3.2 mm) + - Hole spacing: 16 mm vertically, 32 mm horizontally + +### I2C Address Reference +| **Board Silk Name** | **Sensor** | **Modulino I2C Address (HEX)** | **Editable Addresses (HEX)** | **Hardware I2C Address (HEX)** | +|---------------------|------------------|--------------------------------|-------------------------------------------|--------------------------------| +| MODULINO DISTANCE | VL53L4CDV0DH/1 | 0x29 | Any custom address (via software config.) | 0x29 | + +**Note:** The default address is **0x29**. Multiple units of the same sensor may require address reconfiguration in software to avoid collisions. + +## Device Operation +The Modulino® Distance node operates as an I2C target device on the Qwiic bus. A host microcontroller can read distance values, set thresholds, or configure measurement timing. If using multiple distance sensors, you may need to set unique addresses or toggle XSHUT lines. + +### Getting Started +Use any standard Arduino or microcontroller environment at 3.3 V. Library support for the VL53 series sensors can simplify reading distance measurements. Ensure the sensor’s field of view is unobstructed for accurate results. + +# Certifications + +## Certifications Summary + +| **Certification** | **Status** | +|:-----------------:|:----------:| +| CE/RED (Europe) | Yes | +| UKCA (UK) | Yes | +| FCC (USA) | Yes | +| IC (Canada) | Yes | +| RoHS | Yes | +| REACH | Yes | +| WEEE | Yes | + +## Declaration of Conformity CE DoC (EU) + +

We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).

+ +## Declaration of Conformity to EU RoHS & REACH 211 01/19/2021 + +

Arduino boards are in compliance with RoHS 2 Directive 2011/65/EU of the European Parliament and RoHS 3 Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.

+ +| Substance | **Maximum limit (ppm)** | +|----------------------------------------|-------------------------| +| Lead (Pb) | 1000 | +| Cadmium (Cd) | 100 | +| Mercury (Hg) | 1000 | +| Hexavalent Chromium (Cr6+) | 1000 | +| Poly Brominated Biphenyls (PBB) | 1000 | +| Poly Brominated Diphenyl ethers (PBDE) | 1000 | +| Bis(2-Ethylhexyl) phthalate (DEHP) | 1000 | +| Benzyl butyl phthalate (BBP) | 1000 | +| Dibutyl phthalate (DBP) | 1000 | +| Diisobutyl phthalate (DIBP) | 1000 | + +Exemptions: No exemptions are claimed. + +

Arduino Boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.

+ +## Conflict Minerals Declaration + +

As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regard to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder or as a component in metal alloys. As part of our reasonable due diligence, Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.

+ +## FCC Caution + +Any Changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate the equipment. + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: + +1. This device may not cause harmful interference. +2. This device must accept any interference received, including interference that may cause undesired operation. + +**FCC RF Radiation Exposure Statement:** + +1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. +2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment. +3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator & your body. + +**Note:** This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures: + +- Reorient or relocate the receiving antenna. +- Increase the separation between the equipment and receiver. +- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. +- Consult the dealer or an experienced radio/TV technician for help. + +English: +User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions: + +1. this device may not cause interference. +2. this device must accept any interference, including interference that may cause undesired operation of the device. + +French: +Le présent appareil est conforme aux CNR d’Industrie Canada applicables aux appareils radio exempts de licence. L’exploitation est autorisée aux deux conditions suivantes: + +1. l’appareil nedoit pas produire de brouillage. +2. l’utilisateur de l’appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d’en compromettre le fonctionnement. + +**IC SAR Warning:** + +English: +This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body. + +French: +Lors de l’installation et de l’exploitation de ce dispositif, la distance entre le radiateur et le corps est d’au moins 20 cm. + +**Important:** The operating temperature of the EUT can’t exceed 85 ℃ and shouldn’t be lower than -40 ℃. + +Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states. + +# Company Information + +| Company name | Arduino SRL | +|-----------------|-----------------------------------------------| +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA(Italy) | + +# Reference Documentation + +| Ref | Link | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino Courses | [https://www.arduino.cc/education/courses](https://www.arduino.cc/education/courses) | +| Arduino Documentation | [https://docs.arduino.cc/](https://docs.arduino.cc/) | +| Arduino IDE (Cloud) | [https://create.arduino.cc/editor](https://create.arduino.cc/editor) | +| Cloud IDE Getting Started | [https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor](https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Library Reference | [https://github.com/arduino-libraries/](https://github.com/arduino-libraries/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | + +# Revision History +| **Date** | **Revision** | **Changes** | +| ---------- | ------------ | --------------------------------- | +| 23/05/2025 | 2 | Fixed pinout table and power info | +| 14/05/2025 | 1 | First release | + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/downloads/ABX00102-cad-files.zip b/content/hardware/11.accessories/modulino-nodes/modulino-distance/downloads/ABX00102-cad-files.zip new file mode 100644 index 0000000000..d6ef4f484d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/downloads/ABX00102-cad-files.zip differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/downloads/ABX00102-schematics.pdf b/content/hardware/11.accessories/modulino-nodes/modulino-distance/downloads/ABX00102-schematics.pdf new file mode 100644 index 0000000000..f5bd4ffd1c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/downloads/ABX00102-schematics.pdf differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/essentials.md b/content/hardware/11.accessories/modulino-nodes/modulino-distance/essentials.md new file mode 100644 index 0000000000..762e36d575 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/essentials.md @@ -0,0 +1,8 @@ + + + + +This library allows you to communicate with the Arduino Modulino® nodes. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/features.md b/content/hardware/11.accessories/modulino-nodes/modulino-distance/features.md new file mode 100644 index 0000000000..3ee4062c4f --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/features.md @@ -0,0 +1,12 @@ + +The Modulino® Distance module provides accurate distance measurements using time-of-flight technology. It is compatible with the Arduino UNO R4 WiFi or any board with a Qwiic interface, allowing you to create proximity and ranging applications without complex wiring. + + + + + This module includes step-by-step guides for projects that use the Modulino® nodes, helping newcomers build applications that involve measuring and reacting to distances. + + + The Modulino® Distance module connects using Qwiic cables to your UNO R4 WiFi or other compatible boards. Additionally, solderable pins are provided for direct wiring if a Qwiic connector isn’t available. + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/image.svg b/content/hardware/11.accessories/modulino-nodes/modulino-distance/image.svg new file mode 100644 index 0000000000..f2243615fe --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/image.svg @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/interactive/ABX00102-pinout.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/interactive/ABX00102-pinout.png new file mode 100644 index 0000000000..9c82b4b68f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/interactive/ABX00102-pinout.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/product.md b/content/hardware/11.accessories/modulino-nodes/modulino-distance/product.md new file mode 100644 index 0000000000..5f03551647 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/product.md @@ -0,0 +1,13 @@ +--- +title: Modulino Distance +url_shop: https://store.arduino.cc/products/modulino-distance +url_guide: https://courses.arduino.cc/plugandmake +primary_button_url: https://docs.arduino.cc/tutorials/modulino-distance/how-distance-ardu/ +primary_button_title: With Arduino +secondary_button_url: https://docs.arduino.cc/tutorials/modulino-distance/how-distance-mp/ +secondary_button_title: With MicroPython +certifications: [] +sku: [ABX00102] +--- + +Precise time-of-flight distance sensing in a compact form factor (VL53L4CDV0DH/1). Ideal for proximity detection, robotics, or smart-home triggers. Easily connect to the Arduino UNO R4 WiFi or any board with a Qwiic interface, or use the solderable pins for a custom wiring solution. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tech-specs.md b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tech-specs.md new file mode 100644 index 0000000000..6c1b4b6240 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Modulino® Distance. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tech-specs.yml b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tech-specs.yml new file mode 100644 index 0000000000..d260ab217f --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tech-specs.yml @@ -0,0 +1,11 @@ +Node: + Name: Modulino Distance + SKU: ABX00102 + Board recommended: Arduino® UNO R4 WiFi (ABX00087) + Communications: I2C (over Qwiic connector or solderable pin) + Operational voltage: 3.3V + Sensor: + VL53L4CDV0DH/1: 0x29 + +Other accessories: + Qwiic cables: 1x diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/DistancePinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/DistancePinouts.png new file mode 100644 index 0000000000..f657054092 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/DistancePinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/IDE-Left-Tab.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/IDE-Left-Tab.png new file mode 100644 index 0000000000..c7bb86575e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/IDE-Left-Tab.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/Modulino_Distance_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/Modulino_Distance_Power_Tree.png new file mode 100644 index 0000000000..64b9ae3a3c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/Modulino_Distance_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-jumper.png new file mode 100644 index 0000000000..df073cc73b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-qwiic-chain.png new file mode 100644 index 0000000000..9399b6deb1 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-qwiik.png new file mode 100644 index 0000000000..37768f52e8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance.png new file mode 100644 index 0000000000..e011bec29e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/connection-guide-distance.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/library-install.gif b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/library-install.gif new file mode 100644 index 0000000000..16f396c353 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/library-install.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/schematic.png new file mode 100644 index 0000000000..20dd38803b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/content.md new file mode 100644 index 0000000000..adab7eba6b --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/content.md @@ -0,0 +1,215 @@ +--- +title: "How To Use The Modulino Distance" +description: "Learn how to get the most out of your Modulino Distance." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-distance +software: + - ide-v2 + - web-editor +--- +The Modulino Distance is a modular sensor that measures distance using Time-of-Flight (ToF) technology, making it perfect to add precise distance sensing and depth mapping to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +# General Characteristics + +The Modulino Distance is capable of measuring distances using Time-of-Flight technology. Take a look at the following table to know more about its measuring ranges: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------------------|----------------------|---------|---------|---------|------| +| Range | Distance Measurement | 1 | - | 1300 | mm | +| Resolution | - | - | 1 | - | mm | +| Operating Temperature | - | -30 | - | 85 | °C | + + +## Sensor Details + +The VL53L4CDV0DH/1 sensor from STMicroelectronics is the core component of this module. This ToF sensor natively supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|---------------|---------------|---------|---------|---------|------| +| Field of View | - | - | 18 | - | ° | +| Wavelength | Laser Emitter | - | 940 | - | nm | + +The default address for the Module is: + +| Modulino I²C Address | Hardware I²C Address | +|----------------------|----------------------| +| 0x52 | 0x52 | + +***Note: Since the address cannot be changed on this Modulino specifically, using two or more identical modules on the same I²C bus will result in address conflicts and cause communication issues.*** + +## Pinout + +The pinout for the Modulino Distance is shown below. Please note that the exposed solderable pins are directly connected to the QWIIC connectors using the same I²C interface. + +![Arduino Distance Pinout](assets/DistancePinouts.png) + +### 1x4 Header (Sensor GPIO) + +| Pin | Function | +|-------|----------------| +| GND | Ground | +| 3V3 | 3.3 V Power | +| GPIO1 | Digital Output | +| XSHUT | Xshutdown | + +- **GND: Ground** – Ground connection for power and signal reference. +- **3V3: Power** – 3.3 V power supply input. +- **GPIO1: Digital Output** – General purpose digital output pin. +- **XSHUT: Xshutdown** – Shutdown control pin for the sensor. + +### 1x4 Header (I2C) +The pinout for the Modulino Buzzer is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3V3 | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +Depending on the board connected to the modulino, the I²C pin names to program it may differ. Please check the [board tutorials](https://docs.arduino.cc/hardware/) on your modulino's compatible board or the [Modulino library](https://github.com/arduino-libraries/Modulino/tree/main/docs) to learn more. + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +| --------------------- | ----------------------- | ------- | ----------- | ------- | ---- | +| Supply Voltage | - | - | 3.3 (QWIIC) | - | V | +| Current Consumption | Active measurement mode | - | 24 | 40 | mA | +| Operating Temperature | - | -30 | - | 85 | °C | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: + +![Power Tree Modulino Distance](assets/Modulino_Distance_Power_Tree.png) + +## Schematic + +The Modulino Distance uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Distance](assets/schematic.png) + +The main component is the **VL53L4CDV0DH/1** sensor (U1), which handles distance measurements using Time-of-Flight technology, as well as I²C communication. + +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3 V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +There's also a small power indicator LED that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Distance](https://docs.arduino.cc/hardware/modulinos/modulino-distance) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. +Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-distance.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3 V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-distance-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header + +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-distance-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-distance-qwiic-chain.png) + +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup's performance. Ensure your cables are correctly connected and capable of handling the required data transfer. + +Each module should have a unique address on a chain if you plan to address them individually. Multiple modules with the same address will cause conflicts on the I²C bus.*** + +# How To Use Your Modulino + +## Installing The Modulino Library +You need the official Modulino library available [here](https://docs.arduino.cc/libraries/modulino/) to use the Modulino Thermo. + +With the Arduino IDE you get some tools that make adding a library easier. To learn how to install the IDE please visit our [page](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing/). +After opening the IDE, a tab should be visible on the left. Press the book icon for "library" as highlighted in the image. +![IDE Library Tab](assets/IDE-Left-Tab.png) +The process should look like this: +![Library Install](assets/library-install.gif) +A message will appear after the installation is successful. + +## Getting Distance Data + +Getting data from the sensor is fairly simple using the ```Modulino``` library. For the **Modulino Distance** there are two important functions: +- ```available()```: Checks if new distance data is available. +- ```get()```: Retrieves the measured distance from the sensor (default in cm). +- ```Modulino.begin();```: By default the Modulino library uses ```Wire1``` if your connection is in a different Wire you will have to edit it, check [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) (by default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/)) for the library's hardware compatibility. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example sketch of how to implement these functions to acquire data and show it using the serial monitor: + +```arduino +#include "Arduino_Modulino.h" + +// Create object instance +ModulinoDistance distance; + +void setup() { + Serial.begin(9600); + + // Initialize the Modulino system and distance sensor + Modulino.begin(); + distance.begin(); +} + +void loop() { + if (distance.available()) { + int measure = distance.get(); + Serial.println(measure); + } + delay(10); +} +``` + +## Troubleshooting + +### Sensor Not Reachable +If your Modulino's power LED isn't on or the sensor isn't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +### Library Not Installed Properly +If you encounter an issue with the `#include "modulino.h"` command, verify that the Modulino library is correctly installed: +- Check your IDE to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +### Inaccurate Values +If the sensor values are not accurate, make sure: +- The sensor lens is clean and free from dust or obstructions. +- All exposed electronics are not touching any conductive surfaces, as this could interfere with readings. +- The object being measured is within the sensor's detection range. + +# What Is Next? + +Now that you've learned how to use your Modulino Distance, you're all set to integrate it into your projects! +- Create a parking assistance system that provides audio feedback as objects get closer, similar to car parking sensors. +- Build a theremin-like musical instrument that changes pitch or volume based on hand movements in front of the sensor. +- Design an automatic dispenser that activates when hands are detected beneath it (for soap, sanitizer, etc.). + +# Conclusion + +The **Modulino Distance** is a digital Time-of-Flight distance sensor that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes accessing distance data straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both quick tests and longer-term setups. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-ardu/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/DistancePinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/DistancePinouts.png new file mode 100644 index 0000000000..f657054092 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/DistancePinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/Modulino_Distance_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/Modulino_Distance_Power_Tree.png new file mode 100644 index 0000000000..64b9ae3a3c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/Modulino_Distance_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-jumper.png new file mode 100644 index 0000000000..df073cc73b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-qwiic-chain.png new file mode 100644 index 0000000000..9399b6deb1 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-qwiik.png new file mode 100644 index 0000000000..21e4b96ff0 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance.png new file mode 100644 index 0000000000..e011bec29e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/connection-guide-distance.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/mp-usb-connection.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/mp-usb-connection.png new file mode 100644 index 0000000000..fb059f9e8b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/mp-usb-connection.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/package-installer-overview.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/package-installer-overview.png new file mode 100644 index 0000000000..67678dc808 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/package-installer-overview.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/schematic.png new file mode 100644 index 0000000000..20dd38803b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/content.md new file mode 100644 index 0000000000..bb3340b029 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/content.md @@ -0,0 +1,216 @@ +--- +title: "How To Use The Modulino Distance And MicroPython" +description: "Learn how to get the most out of your Modulino Distance in a MicroPython environment." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-distance +software: + - ide-v2 + - web-editor +--- +The Modulino Distance is a modular sensor that measures distance using Time-of-Flight (ToF) technology, making it perfect to add precise distance sensing and depth mapping to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +# General Characteristics + +The Modulino Distance is capable of measuring distances using Time-of-Flight technology. Take a look at the following table to know more about its measuring ranges: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------------------|----------------------|---------|---------|---------|------| +| Range | Distance Measurement | 1 | - | 1300 | mm | +| Resolution | - | - | 1 | - | mm | +| Operating Temperature | - | -30 | - | 85 | °C | + + +## Sensor Details + +The VL53L4CDV0DH/1 sensor from STMicroelectronics is the core component of this module. This ToF sensor natively supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|---------------|---------------|---------|---------|---------|------| +| Field of View | - | - | 18 | - | ° | +| Wavelength | Laser Emitter | - | 940 | - | nm | + +The default address for the Module is: + +| Modulino I²C Address | Hardware I²C Address | +|----------------------|----------------------| +| 0x52 | 0x52 | + +***Note: Since the address cannot be changed on this Modulino specifically, using two or more identical modules on the same I²C bus will result in address conflicts and cause communication issues.*** + +## Pinout + +The pinout for the Modulino Distance is shown below. Please note that the exposed solderable pins are directly connected to the QWIIC connectors using the same I²C interface. + +![Arduino Distance Pinout](assets/DistancePinouts.png) + +### 1x4 Header (Sensor GPIO) + +| Pin | Function | +|-------|----------------| +| GND | Ground | +| 3V3 | 3.3V Power | +| GPIO1 | Digital Output | +| XSHUT | Xshutdown | + +- **GND: Ground** – Ground connection for power and signal reference. +- **3V3: Power** – 3.3V power supply input. +- **GPIO1: Digital Output** – General purpose digital output pin. +- **XSHUT: Xshutdown** – Shutdown control pin for the sensor. + + +### 1x4 Header (I2C) +The pinout for the Modulino Buzzer is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +Depending on the board connected to the modulino, the I²C pin names to program it may differ. Please check the [board tutorials](https://docs.arduino.cc/hardware/) on your modulino's compatible board or the [Modulino library](https://github.com/arduino-libraries/Modulino/tree/main/docs) to learn more. + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +| --------------------- | ----------------------- | ------- | ----------- | ------- | ---- | +| Supply Voltage | - | - | 3.3 (QWIIC) | - | V | +| Current Consumption | Active measurement mode | - | 24 | 40 | mA | +| Operating Temperature | - | -30 | - | 85 | °C | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: + +![Power Tree Modulino Distance](assets/Modulino_Distance_Power_Tree.png) + +## Schematic + +The Modulino Distance uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Distance](assets/schematic.png) + +The main component is the **VL53L5CX** sensor (U1), which handles distance measurements using Time-of-Flight technology, as well as I²C communication. + +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +There's also a small power indicator LED that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Distance](https://docs.arduino.cc/hardware/modulinos/modulino-distance) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. +Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-distance.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-distance-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header + +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-distance-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-distance-qwiic-chain.png) + +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup's performance. Ensure your cables are correctly connected and capable of handling the required data transfer. + +Each module should have a unique address on a chain if you plan to address them individually. Multiple modules with the same address will cause conflicts on the I²C bus.*** +# How To Program Your Modulino + +## Installing The Modulino Library +To program your Modulino it is recommended you use the official ```Modulino``` micropython library available [here](https://github.com/arduino/arduino-modulino-mpy). The library is fully compatible with the no **Arduino Lab for MicroPython**. +For information on installing the **Arduino Lab for MicroPython** please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). + +The ```Modulino``` library is not available by default on MicroPython devices hence installation is needed. +To simplify the process the [MicroPython Package Installer](https://github.com/arduino/lab-micropython-package-installer/releases) is recommended as it will provide a graphical interface to guide installation. +After installation, you should now be able to: + +1. Open the tool. +2. Plug in your board to the computer. +![USB Connection](assets/mp-usb-connection.png) + +If the board does not appear in the Detected Boards section, click Reload. If the board is still undetected, ensure no other programs (e.g., a code editor) are using the board's COM port. + +4. Search for the ```Modulino``` package by filling in the text box on the search feature. +5. Click Install and wait for the installation confirmation. +6. Disconnect the board from the tool before returning to your code editor to avoid conflicts due to a busy COM port. + +![Package Installer Overview](assets/package-installer-overview.png) + +The module should now be includable in your program using: +```from modulino import ModulinoDistance``` + +# Getting Distance Data + +Getting data from the sensor is straightforward using the ```Modulino``` library. +For the **Modulino Distance**, there is one crucial function: +- ```.distance``` - Provides the distance measurement from the sensor. (Default in cm) +- By default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it as instructed [here](https://github.com/arduino/arduino-modulino-mpy/tree/main/docs#%E2%84%B9%EF%B8%8F-using-3rd-party-boards). More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). +Here is an example of how to implement this function to acquire data: + +```python +from modulino import ModulinoDistance +from time import sleep_ms + +distance = ModulinoDistance() + +while True: + print(f"📏 Distance: {distance.distance} cm") + sleep_ms(50) +``` + +This simple code creates an instance of the ModulinoDistance class and continuously reads the distance values, displaying them in centimeters with a 50ms delay between readings. + +## Troubleshooting + +### Sensor Not Reachable +If your Modulino's power LED isn't on or the sensor isn't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +### Library Not Installed Properly +If you encounter an issue with the `import ModulinoDistance` command, verify that the Modulino library is correctly installed: +- Check the package installer to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +### Inaccurate Values +If the sensor values are not accurate, make sure: +- The sensor lens is clean and free from dust or obstructions. +- All exposed electronics are not touching any conductive surfaces, as this could interfere with readings. +- The object being measured is within the sensor's detection range. + +# What Is Next? + +Now that you've learned how to use your Modulino Distance, you're all set to integrate it into your projects! +- Create a parking assistance system that provides audio feedback as objects get closer, similar to car parking sensors. +- Build a theremin-like musical instrument that changes pitch or volume based on hand movements in front of the sensor. +- Design an automatic dispenser that activates when hands are detected beneath it (for soap, sanitizer, etc.). + +# Conclusion + +The **Modulino Distance** is a digital Time-of-Flight distance sensor that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes accessing distance data straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both quick tests and longer-term setups. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-distance/tutorials/how-distance-mp/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/compatibility.yml b/content/hardware/11.accessories/modulino-nodes/modulino-knob/compatibility.yml new file mode 100644 index 0000000000..7e64033e1d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/compatibility.yml @@ -0,0 +1,18 @@ +software: + - arduino-ide + - arduino-cli + - web-editor +hardware: + shields: ~ + carriers: + - nano-connector-carrier + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter + - uno-r4-wifi \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/BlockDiagramKnob.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/BlockDiagramKnob.png new file mode 100644 index 0000000000..c60a4f3f81 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/BlockDiagramKnob.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/I2CTag.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/I2CTag.png new file mode 100644 index 0000000000..9d9b7b0f72 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/I2CTag.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/KnobMec.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/KnobMec.png new file mode 100644 index 0000000000..61ad2aee3f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/KnobMec.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/KnobPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/KnobPinouts.png new file mode 100644 index 0000000000..ea4147de61 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/KnobPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/Modulino_Knob_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/Modulino_Knob_Power_Tree.png new file mode 100644 index 0000000000..f50d5ba207 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/Modulino_Knob_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/ResistorsPullupGen.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/ResistorsPullupGen.png new file mode 100644 index 0000000000..7095581413 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/ResistorsPullupGen.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/featuredKnob.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/featuredKnob.png new file mode 100644 index 0000000000..116003f7e0 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/assets/featuredKnob.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/datasheet.md b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/datasheet.md new file mode 100644 index 0000000000..ba1753d4fa --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/datasheet/datasheet.md @@ -0,0 +1,266 @@ +--- +identifier: ABX00107 +title: Arduino® Modulino® Knob +type: maker +author: Pedro Sousa Lima +--- + +![](assets/featuredKnob.png) + +# Description +The Modulino® Knob features a **quadrature rotary encoder** (PEC11J-9215F-S0015) paired with an on-board **STM32C011F4 microcontroller**, enabling both precise rotational input and push-button interaction. The node communicates via I2C (Qwiic interface) by default, but can also be reprogrammed or accessed via other communication interfaces for advanced projects. + +# Target Areas +Maker, beginner, education + +# Contents + +## Application Examples + +- **User Interface Control** + Implement smooth menu navigation, scrolling through options, or fine adjustment of parameters (e.g., volume, brightness) in your project. + +- **Industrial/Mechanical Projects** + Use rotary input for setting machine parameters, calibrating sensors, or controlling motor speed. + +- **Educational Tools** + Teach the concepts of rotary encoding, I2C interfacing, and microcontroller-based data handling using a simple, hands-on input device. + +
+ +## Features +- **Quadrature rotary encoder** with push-switch capability for rich user input. +- **STM32C011F4** microcontroller handling I2C communications and optional reprogramming. +- Operates at **3.3 V** via the Qwiic interface; supports 2.0 V–3.6 V supply range internally. +- **SWD** interface on-board for firmware customization, plus optional UART lines. +- Ideal for **menu navigation**, fine-tuning controls, and interactive IoT or maker projects. + +### Contents +| **SKU** | **Name** | **Purpose** | **Quantity** | +| --------- | -------------------- | ------------------------------------------- | ------------ | +| ABX00107 | Modulino® Knob | Quadrature rotary encoder with push switch | 1 | +| | I2C Qwiic cable | Compatible with the Qwiic standard | 1 | + + +## Related Products +- *SKU: ASX00027* – [Arduino® Sensor Kit](https://store.arduino.cc/products/arduino-sensor-kit) +- *SKU: K000007* – [Arduino® Starter Kit](https://store.arduino.cc/products/arduino-starter-kit-multi-language) +- *SKU: AKX00026* – [Arduino® Oplà IoT Kit](https://store.arduino.cc/products/opla-iot-kit) + +## Rating + +### Recommended Operating Conditions +- **Microcontroller supply range:** 2.0 V – 3.6 V (STM32C011F4) +- **Powered at 3.3 V** through the Qwiic interface (in accordance with the Qwiic standard) +- **Operating temperature:** –40 °C to +85 °C + +**Typical current consumption:** +- ~3.4 mA (microcontroller + rotary encoder interface) + +## Power Tree +The power tree for the modulino can be consulted below: + +![Modulino® Knob Power Tree](assets/Modulino_Knob_Power_Tree.png) + +## Block Diagram +This module includes an STM32C011F4 microcontroller, reading the quadrature signals from the rotary encoder and a push switch. It communicates via I2C by default but can be customized via SWD for additional functionalities. + +![Modulino® Knob block diagram](assets/BlockDiagramKnob.png) + +## Functional Overview +The Modulino® Knob node reads a **quadrature rotary encoder** (including push-switch action), translating positional and switch states into data accessible via I2C. The on-board MCU (STM32C011F4) can also support other protocols (UART, SPI, I2S) if reprogrammed. By default, I2C data allows host microcontrollers (e.g., Arduino® UNO R4 WiFi) to read knob rotation and button states easily. + +### Technical Specifications + +| **Specification** | **Details** | +| ----------------------- | ----------------------------------------------- | +| **Microcontroller** | STM32C011F4 (handles I2C, rotary encoder logic)| +| **Encoder** | PEC11J-9215F-S0015 (quadrature + push switch) | +| **Encoder Range** | 360° (continuous rotation) | +| **Supply Voltage** | 3.3 V | +| **Power Consumption** | ~3.4 mA | +| **Communication** | I2C (Qwiic), SWD (debug/reprogram), optional UART | + +### Pinout + +**Qwiic / I2C (1×4 Header)** +| **Pin** | **Function** | +|---------|---------------------------| +| GND | Ground | +| 3.3 V | Power Supply (3.3 V) | +| SDA | I2C Data | +| SCL | I2C Clock | + +These pads and the Qwiic connectors share the same I2C bus at 3.3 V. + +**Additional 1×10 Header (Knob & MCU Signals)** +| **Pin** | **Function** | +|---------|-------------------| +| PA2 | Button | +| GND | Ground | +| 3V3 | 3.3 V Power | +| PF2 | RESET | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| PA0 | Encoder A | +| PA1 | Encoder B | + +**Note:** By default, the STM32C011F4 firmware manages the rotary encoder via I2C registers. Advanced users may modify this behavior by flashing custom code through SWD. + +![Pinout Overview](assets/KnobPinouts.png) + + +### Power Specifications +- **Nominal operating voltage:** 3.3 V via Qwiic +- **MCU voltage range:** 2.0 V–3.6 V + +### Mechanical Information +![Modulino® Knob Mechanical Information](assets/KnobMec.png) + +- Board dimensions: 41 mm × 25.36 mm +- Thickness: 1.6 mm (±0.2 mm) +- Four mounting holes (Ø 3.2 mm) + - Hole spacing: 16 mm vertically, 32 mm horizontally + +### I2C Address Reference +| **Board Silk Name** | **Sensor** | **Modulino I2C Address (HEX)** | **Editable Addresses (HEX)** | **Hardware I2C Address (HEX)** | +|---------------------|--------------------------|--------------------------------|---------------------------------------|--------------------------------| +| MODULINO KNOB | Quadrature Encoder + MCU | 0x76 | Any custom address (via FW config) | 0x3A | + +**Note:** Default I2C address is **0x76**. You can change it through the Modulino® library or by flashing custom firmware. A white rectangle on the board silk can be used to label the new address. +![Blank silk for identification](assets/I2CTag.png) + +#### Pull-up Resistors + +The module has pads for optional I2C pull-up mounting in both data lines. No resistors are mounted by default but in case the resistors are need 4.7 K resistors in an SMD 0402 format are recommended. + +These are positioned near the Qwiic connector on the power LED side. +![Generic pull-up resistor position](assets/ResistorsPullupGen.png) + +## Device Operation +The Modulino® Knob node acts as an I2C target device on the Qwiic bus. It detects rotation steps (increment/decrement), push-switch events, and reports them to the host controller. If the included firmware doesn’t meet your needs, you can reprogram the STM32C011F4 via SWD. + +### Getting Started +Use any Arduino or other 3.3 V microcontroller environment. An official Modulino® library may be available to streamline reading rotary values and push-switch states. Ensure your master device shares the same 3.3 V reference and I2C bus. + + +### Board Recovery + +All Arduino® boards have a built-in bootloader which allows flashing the board via USB. In case a sketch locks up the processor and the board is not reachable anymore via USB, it is possible to enter bootloader mode by double-tapping the reset button right after the power-up. + +# Certifications + +## Certifications Summary + +| **Certification** | **Status** | +|:-----------------:|:----------:| +| CE/RED (Europe) | Yes | +| UKCA (UK) | Yes | +| FCC (USA) | Yes | +| IC (Canada) | Yes | +| RoHS | Yes | +| REACH | Yes | +| WEEE | Yes | + +## Declaration of Conformity CE DoC (EU) + +

We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).

+ +## Declaration of Conformity to EU RoHS & REACH 211 01/19/2021 + +

Arduino boards are in compliance with RoHS 2 Directive 2011/65/EU of the European Parliament and RoHS 3 Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.

+ +| Substance | **Maximum limit (ppm)** | +|----------------------------------------|-------------------------| +| Lead (Pb) | 1000 | +| Cadmium (Cd) | 100 | +| Mercury (Hg) | 1000 | +| Hexavalent Chromium (Cr6+) | 1000 | +| Poly Brominated Biphenyls (PBB) | 1000 | +| Poly Brominated Diphenyl ethers (PBDE) | 1000 | +| Bis(2-Ethylhexyl) phthalate (DEHP) | 1000 | +| Benzyl butyl phthalate (BBP) | 1000 | +| Dibutyl phthalate (DBP) | 1000 | +| Diisobutyl phthalate (DIBP) | 1000 | + +Exemptions: No exemptions are claimed. + +

Arduino Boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.

+ +## Conflict Minerals Declaration + +

As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regard to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder or as a component in metal alloys. As part of our reasonable due diligence, Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.

+ +## FCC Caution + +Any Changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate the equipment. + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: + +1. This device may not cause harmful interference. +2. This device must accept any interference received, including interference that may cause undesired operation. + +**FCC RF Radiation Exposure Statement:** + +1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. +2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment. +3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator & your body. + +**Note:** This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures: + +- Reorient or relocate the receiving antenna. +- Increase the separation between the equipment and receiver. +- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. +- Consult the dealer or an experienced radio/TV technician for help. + +English: +User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions: + +1. this device may not cause interference. +2. this device must accept any interference, including interference that may cause undesired operation of the device. + +French: +Le présent appareil est conforme aux CNR d’Industrie Canada applicables aux appareils radio exempts de licence. L’exploitation est autorisée aux deux conditions suivantes: + +1. l’appareil nedoit pas produire de brouillage. +2. l’utilisateur de l’appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d’en compromettre le fonctionnement. + +**IC SAR Warning:** + +English: +This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body. + +French: +Lors de l’installation et de l’exploitation de ce dispositif, la distance entre le radiateur et le corps est d’au moins 20 cm. + +**Important:** The operating temperature of the EUT can’t exceed 85 ℃ and shouldn’t be lower than -40 ℃. + +Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states. + +# Company Information + +| Company name | Arduino SRL | +|-----------------|-----------------------------------------------| +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA(Italy) | + +# Reference Documentation + +| Ref | Link | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino Courses | [https://www.arduino.cc/education/courses](https://www.arduino.cc/education/courses) | +| Arduino Documentation | [https://docs.arduino.cc/](https://docs.arduino.cc/) | +| Arduino IDE (Cloud) | [https://create.arduino.cc/editor](https://create.arduino.cc/editor) | +| Cloud IDE Getting Started | [https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor](https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Library Reference | [https://github.com/arduino-libraries/](https://github.com/arduino-libraries/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | + +# Revision History +| **Date** | **Revision** | **Changes** | +| ---------- | ------------ | ----------------------------------------------------------------- | +| 23/05/2025 | 2 | Fixed pinout table, power info, removed unrelated characteristics | +| 14/05/2025 | 1 | First release | + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/downloads/ABX00107-cad-files.zip b/content/hardware/11.accessories/modulino-nodes/modulino-knob/downloads/ABX00107-cad-files.zip new file mode 100644 index 0000000000..a5b494f550 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/downloads/ABX00107-cad-files.zip differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/downloads/ABX00107-schematics.pdf b/content/hardware/11.accessories/modulino-nodes/modulino-knob/downloads/ABX00107-schematics.pdf new file mode 100644 index 0000000000..61b5ca3899 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/downloads/ABX00107-schematics.pdf differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/essentials.md b/content/hardware/11.accessories/modulino-nodes/modulino-knob/essentials.md new file mode 100644 index 0000000000..762e36d575 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/essentials.md @@ -0,0 +1,8 @@ + + + + +This library allows you to communicate with the Arduino Modulino® nodes. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/features.md b/content/hardware/11.accessories/modulino-nodes/modulino-knob/features.md new file mode 100644 index 0000000000..5b2e9975f4 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/features.md @@ -0,0 +1,12 @@ + +The Modulino® Knob module combines a rotary encoder with an integrated switch, providing a tactile way to navigate menus or adjust values. It is compatible with the Arduino UNO R4 WiFi or any board featuring a Qwiic interface, making it simple to prototype user interfaces with physical dials. + + + + + Example projects demonstrate how to read the knob’s position and switch state, making it easy to learn how rotary encoders work in interactive applications. + + + The Modulino® Knob connects via Qwiic cables to your UNO R4 WiFi or other compatible boards. Solderable pins are also available for direct wiring when a Qwiic interface is not available. + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/image.svg b/content/hardware/11.accessories/modulino-nodes/modulino-knob/image.svg new file mode 100644 index 0000000000..f3d16cb150 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/image.svg @@ -0,0 +1,1212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/interactive/ABX00107-pinout.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/interactive/ABX00107-pinout.png new file mode 100644 index 0000000000..ea4147de61 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/interactive/ABX00107-pinout.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/product.md b/content/hardware/11.accessories/modulino-nodes/modulino-knob/product.md new file mode 100644 index 0000000000..190a27024a --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/product.md @@ -0,0 +1,13 @@ +--- +title: Modulino Knob +url_shop: https://store.arduino.cc/products/modulino-knob +url_guide: https://courses.arduino.cc/plugandmake +primary_button_url: https://docs.arduino.cc/tutorials/modulino-knob/how-knob-ardu/ +primary_button_title: With Arduino +secondary_button_url: https://docs.arduino.cc/tutorials/modulino-knob/how-knob-mp/ +secondary_button_title: With MicroPython +certifications: [] +sku: [ABX00107] +--- + +A rotary encoder with a built-in SPST switch—ideal for menu navigation, parameter tuning, or interactive input. Effortlessly integrate with Arduino UNO R4 WiFi or other Qwiic-enabled boards, or use the solderable pins if Qwiic is not available. No complex wiring needed to start turning your ideas into reality. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tech-specs.md b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tech-specs.md new file mode 100644 index 0000000000..58755cb974 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Modulino® Knob. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tech-specs.yml b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tech-specs.yml new file mode 100644 index 0000000000..b7ac1a332e --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tech-specs.yml @@ -0,0 +1,11 @@ +Node: + Name: Modulino Knob + SKU: ABX00107 + Board recommended: Arduino® UNO R4 WiFi (ABX00087) + Communications: I2C (over Qwiic connector or solderable pin) + Operational voltage: 3.3V + Sensor: + PEC11J (STM32C011F4): 0x76 (address can change via software) + +Other accessories: + Qwiic cables: 1x diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/AdressChangeIDE.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/AdressChangeIDE.png new file mode 100644 index 0000000000..d5cd3fd195 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/AdressChangeIDE.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/KnobPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/KnobPinouts.png new file mode 100644 index 0000000000..ea4147de61 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/KnobPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/Modulino_Knob_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/Modulino_Knob_Power_Tree.png new file mode 100644 index 0000000000..f50d5ba207 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/Modulino_Knob_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/adressChanger.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/adressChanger.png new file mode 100644 index 0000000000..c6eae670c8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/adressChanger.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-jumper.png new file mode 100644 index 0000000000..f53484a929 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-qwiic-chain.png new file mode 100644 index 0000000000..bdb182ec7e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-qwiic.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-qwiic.png new file mode 100644 index 0000000000..82dccffca5 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob-qwiic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob.png new file mode 100644 index 0000000000..8e5bc0b051 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/connection-guide-knob.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-dependencies.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-dependencies.png new file mode 100644 index 0000000000..d25bd9720b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-dependencies.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-install.gif b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-install.gif new file mode 100644 index 0000000000..16f396c353 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-install.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-menu.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-menu.png new file mode 100644 index 0000000000..2339cf8450 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/library-menu.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/schematic.png new file mode 100644 index 0000000000..4b20ab5c12 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/content.md new file mode 100644 index 0000000000..f0fa1915d7 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-ardu/content.md @@ -0,0 +1,235 @@ +--- +title: "How To Use The Modulino Knob" +description: "Learn how to get the most out of your Modulino Knob." +tags: + - Modulino + - QWIIC + - I2C +author: 'Christoher Méndez' +hardware: + - hardware/11.modulinos/modulinos/modulino-knob +software: + - ide-v2 + - web-editor +--- +The Modulino Knob is a modular sensor based on a quadrature rotary encoder that translates angular motion (rotation) into a digital signal. The sensor value will increase or decrease according to the rotation direction. Also, it includes an SPST switch that is activated when the knob is pressed. +It uses the Modulino form factor, streamlining integration through the I2C protocol. It provides QWIIC connectors and exposed solderable pins (for boards without a QWIIC interface). + +## General Characteristics + +The Modulino Knob has the following measurement specifications: + + +| **Parameter** | **Condition** | **Minimum** | **Typical** | **Maximum** | **Unit** | +| -------------- | ------------- | ----------- | ---------------- | ----------- | -------- | +| Sensor | Angle | - | 360 (continuous) | - | ° | +| Steps | - | - | 30 | - | - | +| Resolution | - | - | 12 | - | bit | + +## Sensor Details + +The PEC11J-9215F-S0015 rotary encoder is the core component of this module. This sensor output is processed by an STM32C011F4 microcontroller for digital communication (I2C), meaning that the encoder is communicated through the I2C pins using the mentioned microcontroller as an intermediary. +The default address for the Module is: + +| **Modulino I2C Address** | **Hardware I2C Address** | +| ------------------------ | ------------------------ | +| 0x76 | 0x3A | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + + +## Pinout + +The rotary encoder is the core component of this module. This input device is controlled by an onboard STM32 microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +![Arduino Knob Pinout](assets/KnobPinouts.png) + +The board also includes direct connections to the rotary encoder bypassing the built-in microcontroller. + +### 1x10 Header + +| Pin | Function | +|-------|----------------| +| PA2 | Button | +| GND | Ground | +| 3V3 | 3.3 V Power | +| PF2 | RESET | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| PA0 | Encoder A | +| PA1 | Encoder B | + +- **PA2: Button:**This pin connects directly to the built-in button of the rotary encoder. +- **GND: Ground:**Ground connection for power and signal reference. +- **3V3: Power:**3.3 V power supply input. +- **PF2: RESET:**The reset pin for the microcontroller, which can be used to reset the system. +- **SWCLK: SWD Clock:**Used for providing the clock signal in the SWD interface. +- **SWDIO: SWD Data:**Used for debugging, as part of the Serial Wire Debug (SWD) interface. +- **TX1: USART Transmit:**Used for transmitting data over UART communication. +- **RX1: USART Receive:**Used for receiving data over UART communication. +- **PA0: Encoder A:**These pins connect directly to the rotary encoder's quadrature outputs. +- **PA1: Encoder B:**These pins connect directly to the rotary encoder's quadrature outputs. + +### 1x4 Header (I2C) + +The pinout for the Modulino Knob is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +## Power Specifications + +The board must be powered **only** by +3.3 VDC when using the solderable pins or the QWIIC interface as per the standard. + +| Parameter | Typical | Unit | +| --------------- | ------- | ---- | +| Supply Voltage | 3.3 | V | +| Average Current | 3.4 | mA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Knob](assets/Modulino_Knob_Power_Tree.png) + +## Schematic + +The Modulino Knob uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Knob](assets/schematic.png) + +The main components are the **rotary encoder with integrated pushbutton** (PECHL-9215E-S0015) and the **STM32C011F4U6TR** microcontroller (U1), which handles encoder position reading, button state detection, as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J3). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J3. +There's also a small power LED indicator (green) that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Knob](https://docs.arduino.cc/hardware/modulinos/modulino-knob) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It's plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-knob.png) + +### QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-knob-qwiic.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +### Solderable Header + +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-knob-jumper.png) + +### Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-knob-qwiic-chain.png) + +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup's performance. Ensure your cables are properly connected and capable of handling the required data transfer. + +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +## How To Program Your Modulino + +### Installing The Modulino Library + +You need the official Modulino library available [here](https://github.com/arduino-libraries/Modulino) to use the Modulino Knob. +With the Arduino IDE, you get some tools that make adding a library easier. To learn how to install the IDE, please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). +After opening the IDE, a tab should be visible on the left. Press the book icon for "library" as highlighted in the image. +![IDE Library Tab](assets/library-menu.png) + +You can now search for the library `Modulino` by filling in the `Filter your search` text box. A prompt might appear saying that additional dependencies are required. This is not a problem, as they will be automatically added when you confirm the prompt. +![Add Dependencies Prompt](assets/library-dependencies.png) + +The libraries should now start to install. A message will appear after the installation is successful. +The process should be like this: +![Library Install](assets/library-install.gif) + +### Getting Knob Data + +Data can be obtained from the sensor using the `Modulino` library. + +For the **Knob** there are two important functions: + +- `get()`: Returns a numerical value relative to the knob rotation. +- `isPressed()`: Returns the state of the knob built-in button. +- `knob.get();` retrieves a unitless value relative to the knob rotation. +- `knob.isPressed();` retrieves the knob button state. +- `knob.set();` changes the initial position of the encoder. +- `Modulino.begin();`: By default the Modulino library uses ```Wire1``` if your connection is in a different Wire you will have to edit it, check [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) (by default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/)) for the library's hardware compatibility. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example sketch of how to implement these functions to acquire data: + +```arduino +#include + +ModulinoKnob knob; + +void setup() { + Serial.begin(9600); + Modulino.begin(); + knob.begin(); +} + +void loop(){ + int position = knob.get(); + bool click = knob.isPressed(); + + Serial.print("Current position is: "); + Serial.println(position); + + if(click){ + Serial.println("Clicked!"); + } + +} +``` + +### How To Change I2C Address + +An example sketch, AddressChanger, is also included with the library inside the `Utilities` folder and available [here](https://github.com/arduino-libraries/Modulino/blob/main/examples/Utilities/AddressChanger/AddressChanger.ino). This sketch changes the I²C address at a software level on the Module's microcontroller. +![Example location on the IDE](assets/AdressChangeIDE.png) + +- Connect the module to your board, remove any other modules that might be in the chain. Connection must be via I²C. +- Upload the sketch. +- Open the Serial Monitor. +- Text should now appear. Make sure the correct bauld-rate is selected if the displayed characters seem corrupted. + ![Expected console output](assets/adressChanger.png) +- Select the address and confirm. Valid I²C addresses range from 0x08 to 0x77 (7-bit values in hexadecimal format, e.g., 0x42). +- Your address should now have changed. Make sure to take note of the selected address. + +To keep track of the address in use the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your sketch, you'll need to specify this address when creating the module object. For example: +```arduino +ModulinoKnob knob(0x3E); // Replace 0x3E with your specific address +``` + + +## Conclusion + +The **Modulino Knob** provides a simple solution for UI interface, volume control or rotational measurement in any project. With its **I2C interface**, compact **Modulino form factor**, and **robustness**, it seamlessly integrates into both beginner and advanced applications. + +By leveraging the **Modulino library**, users can quickly access sensor data and implement functionalities such as **user interface control and angle measurement tool**. With just a few lines of code, you can start **controlling your projects**, making it easier than ever to bring intelligent sensing to your applications. + +## What Next? + +After mastering the basics of the Modulino Knob, try these project ideas: +- Calculate what is the encoder rotation angle per step to convert the arbitrary output into a rotation angle output. +- Control the Arduino onboard LED with the press of the knob button. +- Use the Modulino Knob to control the navigation on a UI display on an LCD or OLED screen. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/KnobPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/KnobPinouts.png new file mode 100644 index 0000000000..ea4147de61 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/KnobPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/Modulino_Knob_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/Modulino_Knob_Power_Tree.png new file mode 100644 index 0000000000..f50d5ba207 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/Modulino_Knob_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-jumper.png new file mode 100644 index 0000000000..61ae95f8bc Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-qwiic-chain.png new file mode 100644 index 0000000000..bdb182ec7e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-qwiic.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-qwiic.png new file mode 100644 index 0000000000..82dccffca5 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob-qwiic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob.png new file mode 100644 index 0000000000..8e5bc0b051 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/connection-guide-knob.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/mp-usb-connection.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/mp-usb-connection.png new file mode 100644 index 0000000000..fb059f9e8b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/mp-usb-connection.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/package-installer-overview.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/package-installer-overview.png new file mode 100644 index 0000000000..67678dc808 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/package-installer-overview.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/schematic.png new file mode 100644 index 0000000000..4b20ab5c12 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/content.md new file mode 100644 index 0000000000..1097e91d48 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-knob/tutorials/how-knob-mp/content.md @@ -0,0 +1,252 @@ +--- +title: "How To Use The Modulino Knob with MicroPython" +description: "Learn how to get the most out of your Modulino Knob in a MicroPython environment." +tags: + - Modulino + - QWIIC + - I2C +author: 'Christoher Méndez' +hardware: + - hardware/11.modulinos/modulinos/modulino-knob +software: + - ide-v2 + - web-editor +--- +The Modulino Knob is a modular sensor based on a quadrature rotary encoder that translates angular motion (rotation) into a digital signal. The sensor value will increase or decrease according to the rotation direction. Also, it includes an SPST switch that is activated when the knob is pressed. +It uses the Modulino form factor, streamlining integration through the I2C protocol. It provides QWIIC connectors and exposed solderable pins (for boards without a QWIIC interface). + +## General Characteristics + +The Modulino Knob has the following measurement specifications: + + +| **Parameter** | **Condition** | **Minimum** | **Typical** | **Maximum** | **Unit** | +| -------------- | ------------- | ----------- | ---------------- | ----------- | -------- | +| Sensor | Angle | - | 360 (continuous) | - | ° | +| Steps | - | - | 30 | - | - | +| Resolution | - | - | 12 | - | bit | + +## Sensor Details + +The PEC11J-9215F-S0015 rotary encoder is the core component of this module. This sensor output is processed by an STM32C011F4 microcontroller for digital communication (I2C), meaning that the encoder is communicated through the I2C pins using the mentioned microcontroller as an intermediary. +The default address for the Module is: + +| **Modulino I2C Address** | **Hardware I2C Address** | +| ------------------------ | ------------------------ | +| 0x76 | 0x3A | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + + +## Pinout + +The rotary encoder is the core component of this module. This input device is controlled by an onboard STM32 microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +![Arduino Knob Pinout](assets/KnobPinouts.png) + +The board also includes direct connections to the rotary encoder bypassing the built-in microcontroller. + +### 1x10 Header + +| Pin | Function | +|-------|----------------| +| PA2 | Button | +| GND | Ground | +| 3V3 | 3.3 V Power | +| PF2 | RESET | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| PA0 | Encoder A | +| PA1 | Encoder B | + +- **PA2: Button:**This pin connects directly to the built-in button of the rotary encoder. +- **GND: Ground:**Ground connection for power and signal reference. +- **3V3: Power:**3.3 V power supply input. +- **PF2: RESET:**The reset pin for the microcontroller, which can be used to reset the system. +- **SWCLK: SWD Clock:**Used for providing the clock signal in the SWD interface. +- **SWDIO: SWD Data:**Used for debugging, as part of the Serial Wire Debug (SWD) interface. +- **TX1: USART Transmit:**Used for transmitting data over UART communication. +- **RX1: USART Receive:**Used for receiving data over UART communication. +- **PA0: Encoder A:**These pins connect directly to the rotary encoder's quadrature outputs. +- **PA1: Encoder B:**These pins connect directly to the rotary encoder's quadrature outputs. + +### 1x4 Header (I2C) + +The pinout for the Modulino Knob is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +## Power Specifications + +The board must be powered **only** by +3.3 VDC when using the solderable pins or the QWIIC interface as per the standard. + +| Parameter | Typical | Unit | +| --------------- | ------- | ---- | +| Supply Voltage | 3.3 | V | +| Average Current | 3.4 | mA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Knob](assets/Modulino_Knob_Power_Tree.png) + +## Schematic + +The Modulino Knob uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Knob](assets/schematic.png) + +The main components are the **rotary encoder with integrated pushbutton** (PECHL-9215E-S0015) and the **STM32C011F4U6TR** microcontroller (U1), which handles encoder position reading, button state detection, as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J3). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J3. +There's also a small power LED indicator (green) that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Knob](https://docs.arduino.cc/hardware/modulinos/modulino-knob) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It's plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-knob.png) + +### QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-knob-qwiic.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +### Solderable Header + +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-knob-jumper.png) + +### Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-knob-qwiic-chain.png) + +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup's performance. Ensure your cables are properly connected and capable of handling the required data transfer. + +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +## How To Use Your Modulino + +### Installing The Modulino Library + +To program your Modulino it is recommended you use the official `Modulino` micropython library available [here](https://github.com/arduino/arduino-modulino-mpy). The library is fully compatible with the **Arduino Lab for MicroPython**. + +For information on installing the **Arduino Lab for MicroPython** please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). + +The `Modulino` library is not available by default on MicroPython devices hence installation is needed. + +To simplify the process the [MicroPython Package Installer](https://github.com/arduino/lab-micropython-package-installer/releases) is recommended as it will provide a graphical interface to guide the installation. + +After installation, you should now be able to: + +1. Open the tool. +2. Plug in your board to the computer. +![USB Connection](assets/mp-usb-connection.png) + +If the board does not appear in the Detected Boards section, click Reload. If the board is still undetected, ensure no other programs (e.g., a code editor) are using the board's COM port. + +1. Search for the `Modulino` package by filling in the text box on the search feature. +2. Click Install and wait for the installation confirmation. +3. Disconnect the board from the tool before returning to your code editor to avoid conflicts due to a busy COM port. + +![Package Installer Overview](assets/package-installer-overview.png) + +The module should now be includable in your program using: +```python +from modulino import ModulinoThermo +``` + +### Getting Knob Data + +Data can be obtained from the sensor using the `Modulino` package. + +For the **Knob** there is a crucial function: + +- `ModulinoKnob` is imported from the `modulino` package to interact with the **Modulino Knob** sensor. +- `sleep` is imported from the `time` module to introduce delays between readings. +- `.update` - Check for new available data from the sensor and execute callback functions to react to the button press or rotation. +- `knob.value` lets you set the sensor initial value from which the encoder rotation will start increasing or decreasing. +- `knob.range` lets you set the minimum and maximum possible value of the encoder output. +- `knob.on_press` this function establish what will happen when the knob button is pressed. +- `knob.on_release` calls the `on_release()` function when the knob button is released. +- `knob.on_rotate_clockwise` prints the rotation value when the knob is turned clockwise. +- `knob.on_rotate_counter_clockwise` prints the rotation value when the knob is turned counter-clockwise. +- `knob.update()` function is called continuously checking for knob new values. If the rotation or button state is changed, it will print a message on the Terminal. +By default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it as instructed [here](https://github.com/arduino/arduino-modulino-mpy/tree/main/docs#%E2%84%B9%EF%B8%8F-using-3rd-party-boards). More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + + +Here is an example of how to implement this function to acquire data: + +```python +from modulino import ModulinoKnob +from time import sleep + +knob = ModulinoKnob() +knob.value = 0 # (Optional) Set an initial value +knob.range = (-10, 10) # (Optional) Set a value range + +def on_release(): + knob.reset() + print("🔘 Released! Knob's value was reset.") + +knob.on_press = lambda: print("🔘 Pressed!") +knob.on_release = on_release +knob.on_rotate_clockwise = lambda steps, value: print(f"🎛️ Rotated {steps} steps clockwise! Value: {value}") +knob.on_rotate_counter_clockwise = lambda steps, value: print(f"🎛️ Rotated {steps} steps counter clockwise! Value: {value}") + +while True: + if(knob.update()): + print("👀 Knob value or state changed!") + + sleep(0.1) +``` + +The code can be easily adapted to trigger actions at certain rotation thresholds or to log data for analysis. + +### How To Change Address + +A sketch is also available included with the library named `AddressChanger` and also available [here](https://github.com/arduino/arduino-modulino-mpy/blob/main/examples/change_address.py). This sketch changes the I2C address at a software level on the Module's microcontroller. + +- Connect the module to your board via I2C, ensuring no other modules are in the chain. +- Run the script in a MicroPython environment. +- Follow the on-screen instructions (REPL) to select the device and enter a new address. Valid I²C addresses range from 0x08 to 0x77 (7-bit values in hexadecimal format, e.g., 0x42). +- The script will attempt to change the address and confirm success. + +To keep track of the address in use, the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your MicroPython sketch, you'll need to specify this address when creating the module object. For example: +```python +knob_module = ModulinoKnob(address=0x45) # Replace 0x45 with your specific address +``` + +## Conclusion + +The **Modulino Knob** provides a simple solution for UI interface, volume control or rotational measurement in any project. With its **I2C interface**, compact **Modulino form factor**, and **robustness**, it seamlessly integrates into both beginner and advanced applications. + +By leveraging the **Modulino package**, users can quickly access sensor data and implement functionalities such as **user interface control and angle measurement tool**. With just a few lines of code, you can start **controlling your projects**, making it easier than ever to bring intelligent sensing to your applications. + +## What Next? + +After mastering the basics of the Modulino Knob, try these project ideas: +- Calculate what is the encoder rotation angle per step to convert the arbitrary output into a rotation angle output. +- Control the Arduino onboard LED with the press of the knob button. +- Use the Modulino Knob to control the navigation on a UI display on an LCD or OLED screen. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/compatibility.yml b/content/hardware/11.accessories/modulino-nodes/modulino-movement/compatibility.yml new file mode 100644 index 0000000000..7e64033e1d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/compatibility.yml @@ -0,0 +1,18 @@ +software: + - arduino-ide + - arduino-cli + - web-editor +hardware: + shields: ~ + carriers: + - nano-connector-carrier + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter + - uno-r4-wifi \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/BlockDiagramMovement.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/BlockDiagramMovement.png new file mode 100644 index 0000000000..95f6ba7ba9 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/BlockDiagramMovement.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/I2CTag.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/I2CTag.png new file mode 100644 index 0000000000..9d9b7b0f72 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/I2CTag.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/IMUMec.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/IMUMec.png new file mode 100644 index 0000000000..b1d4a7db35 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/IMUMec.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/Modulino_Movement_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/Modulino_Movement_Power_Tree.png new file mode 100644 index 0000000000..fe775335ff Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/Modulino_Movement_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/MovementPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/MovementPinouts.png new file mode 100644 index 0000000000..d6e5f561df Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/MovementPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/VDDIO.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/VDDIO.png new file mode 100644 index 0000000000..026eee0497 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/VDDIO.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/featuredMov.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/featuredMov.png new file mode 100644 index 0000000000..636d111be4 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/assets/featuredMov.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/datasheet.md b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/datasheet.md new file mode 100644 index 0000000000..4967a3f8de --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/datasheet/datasheet.md @@ -0,0 +1,272 @@ +--- +identifier: ABX00101 +title: Arduino® Modulino® Movement +type: maker +author: Pedro Sousa Lima +--- + +![](assets/featuredMov.png) + +# Description + +The Modulino® Movement, featuring the LSM6DSOXTR sensor, measures acceleration and rotation providing comprehensive data for motion detection applications. It’s ideal for projects involving gesture recognition, pedometers, and vibration monitoring. + +# Target Areas + +Maker, beginner, education + +# Contents +## Application Examples + +Below are some project ideas focused on the Modulino® Movement module and its built-in LSM6DSOXTR sensor: + +- **Gesture Recognition:** Harness the 6-axis motion data (accelerometer + gyroscope) to detect custom gestures. You can create interactive controls for games, user interfaces, or home automation—triggering actions when certain patterns (e.g., wrist flicks or device shakes) are recognized. + +- **Step Counter or Pedometer:** Use the accelerometer data to count steps accurately in wearable or fitness-related projects. Log daily movements or design health-oriented applications that notify users of their activity progress. + +- **Vibration Monitoring:** Monitor vibrations in appliances, machinery, or vehicles using the sensor’s high-sensitivity accelerometer. Detect anomalies, implement predictive maintenance strategies, or create alert systems for sudden impact or shock events. + +- **Orientation and Tilt Control:** Measure real-time orientation in space. Ideal for creating tilt-based controls in interactive art installations, DIY game controllers, or robotics projects that respond to angular displacement. + +- **IMU-based Stabilization:** Leverage both gyroscope and accelerometer data for advanced applications like robotics or drones, where real-time inertial measurements are used to maintain stability and smooth motion control. + +
+ +## Features + +- Incorporates the LSM6DSOXTR sensor to measure acceleration and rotation. +- Communicates via I2C (Qwiic connector) or SPI (optional). +- Powered by 3.3 V from the Qwiic/I2C bus; supports 1.71 V–3.6 V sensor supply range. +- Designed with an additional 1×10 header for advanced signals and a cuttable jumper to isolate VDDIO if needed. +- Ideal for motion-detection and wearable applications (gesture recognition, pedometers, vibration monitoring). + +### Contents + +| **SKU** | **Name** | **Purpose** | **Quantity** | +| -------- | -------------------- | -------------------------------------- | ------------ | +| ABX00101 | Modulino® Movement | Measure acceleration and rotation | 1 | +| | I2C Qwiic cable | Compatible with the Qwiic standard | 1 | + + + + +## Related Products + +- *SKU: ASX00027* - [Arduino® Sensor Kit](https://store.arduino.cc/products/arduino-sensor-kit) + +- *SKU: K000007* - [Arduino® Starter Kit](https://store.arduino.cc/products/arduino-starter-kit-multi-language) + +- *SKU: AKX00026* - [Arduino® Oplà IoT Kit](https://store.arduino.cc/products/opla-iot-kit) + +## Rating + +### Recommended Operating Conditions + +-Sensor supply range: 1.71 V – 3.6 V +-Powered at 3.3 V through the Qwiic interface (in accordance with the Qwiic standard) +-Operating temperature: –40 °C to +85 °C + +**Typical current consumption:** +Accelerometer: ~170 µA +Gyroscope: ~0.55 mA + +## Power Tree +The power tree for the modulino can be consulted below: + +![Modulino® Movement Power Tree](assets/Modulino_Movement_Power_Tree.png) + +## Block Diagram +This module is designed to be placed on an I2C bus, allowing the on-board LSM6DSOXTR sensor to communicate with a host microcontroller via I2C or, optionally, SPI. + +![Modulino® Movement block diagram](assets/BlockDiagramMovement.png) + +## Functional Overview +The Modulino® Movement node uses the LSM6DSOXTR sensor for 3‑axis acceleration and 3‑axis gyroscopic measurements. It can detect motion, orientation. Data is accessed through I2C (via the Qwiic connector at 3.3 V) or SPI (through the additional header). + +### Technical Specifications +| **Specification** | **Details** | +| ----------------------- | ------------------------------------------------------------------------ | +| **Sensor** | LSM6DSOXTR | +| **Supply Voltage** | Min: 1.71 V, Max: 3.6 V | +| **Power Consumption** | Accel: 170 µA, Gyro: 0.55 mA | +| **Range (Gyro)** | ±125 dps to ±2000 dps | +| **Accuracy** | Accel: ±20 mg, Gyro: ±1 dps | +| **Resolution** | Accel: 0.061 mg/LSB to 0.488 mg/LSB; Gyro: 4.375 mdps/LSB to 70 mdps/LSB | +| **Communication** | SPI, I2C, MIPI I3CSM | + +### Pinout + +![Pinout Overview](assets/MovementPinouts.png) + +**Qwiic / I2C (1×4 Header)** +| **Pin** | **Function** | +|---------|-------------------| +| GND | Ground | +| 3.3 V | Power Supply (3.3 V) | +| SDA | I2C Data | +| SCL | I2C Clock | + +These pads and the Qwiic connectors share the same I2C bus. You can optionally solder header pins here. + +**Additional 1×10 Header (LSM6DSOXTR Signals)** +| **Pin** | **Function** | +|---------|------------------------------| +| VDDIO | Power | +| GND | Ground | +| INT1 | Interrupt 1 | +| INT2 | Interrupt 2 | +| SDO/SA0 | SPI Data Out | +| SCx | SPI Clock | +| SDx | SPI Data | +| CS | SPI Chip Select | +| SDOAUX | Auxiliary Output | +| OCSAUX | Auxiliary Output | + +**Note:** By cutting its solder jumper, you can isolate **VDDIO** from 3.3 V if needed. + +![Optional jumper](assets/VDDIO.png) + + +### Power Specifications +- **Nominal operating voltage:** 3.3 V via Qwiic +- **Sensor voltage range:** 1.71 V–3.6 V + +### Mechanical Information +![Modulino® Movement Mechanical Information](assets/IMUMec.png) +- Board dimensions: 41 mm × 25.36 mm +- Thickness: 1.6 mm (±0.2 mm) +- Four mounting holes (Ø 3.2 mm) + - Hole spacing: 16 mm vertically, 32 mm horizontally + +### I2C Address Reference +| **Board Silk Name** | **Sensor** | **Modulino I2C Address (HEX)** | **Editable Addresses (HEX)** | **Hardware I2C Address (HEX)** | +|---------------------|--------------|--------------------------------|------------------------------------|--------------------------------| +| MODULINO MOVEMENT | LSM6DSOXTR | 0x6A | 0x6A, 0x6B (via solder jumper) | 0x6A & 0x7E | + + **Note:** + - By default, you use **0x6A** in your code. + - The “Hardware I2C Address” might appear when scanning the bus. + - You can flip the address to **0x6B** by bridging or cutting the relevant solder jumper. + - A white rectangle on the bottom silk allows you to note a custom address. +![Blank silk for identification](assets/I2CTag.png) + +## Device Operation +The Modulino® Movement node acts as an I2C target device on the Qwiic bus. Simply connect it via a Qwiic cable to the 3.3 V I2C interface of your microcontroller. If desired, SPI signals can be used instead via the additional header. + +### Getting Started +Use any standard Arduino workflow—desktop IDE or Arduino Cloud Editor. Libraries are available to simplify reading the LSM6DSOXTR sensor outputs (acceleration, gyroscope). Ensure your controller and this node share the same 3.3 V reference when using the Qwiic connection. + +# Certifications + +## Certifications Summary + +| **Certification** | **Status** | +|:-----------------:|:----------:| +| CE/RED (Europe) | Yes | +| UKCA (UK) | Yes | +| FCC (USA) | Yes | +| IC (Canada) | Yes | +| RoHS | Yes | +| REACH | Yes | +| WEEE | Yes | + +## Declaration of Conformity CE DoC (EU) + +

We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).

+ +## Declaration of Conformity to EU RoHS & REACH 211 01/19/2021 + +

Arduino boards are in compliance with RoHS 2 Directive 2011/65/EU of the European Parliament and RoHS 3 Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.

+ +| Substance | **Maximum limit (ppm)** | +|----------------------------------------|-------------------------| +| Lead (Pb) | 1000 | +| Cadmium (Cd) | 100 | +| Mercury (Hg) | 1000 | +| Hexavalent Chromium (Cr6+) | 1000 | +| Poly Brominated Biphenyls (PBB) | 1000 | +| Poly Brominated Diphenyl ethers (PBDE) | 1000 | +| Bis(2-Ethylhexyl) phthalate (DEHP) | 1000 | +| Benzyl butyl phthalate (BBP) | 1000 | +| Dibutyl phthalate (DBP) | 1000 | +| Diisobutyl phthalate (DIBP) | 1000 | + +Exemptions: No exemptions are claimed. + +

Arduino Boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.

+ +## Conflict Minerals Declaration + +

As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regard to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder or as a component in metal alloys. As part of our reasonable due diligence, Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.

+ +## FCC Caution + +Any Changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate the equipment. + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: + +1. This device may not cause harmful interference. +2. This device must accept any interference received, including interference that may cause undesired operation. + +**FCC RF Radiation Exposure Statement:** + +1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. +2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment. +3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator & your body. + +**Note:** This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures: + +- Reorient or relocate the receiving antenna. +- Increase the separation between the equipment and receiver. +- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. +- Consult the dealer or an experienced radio/TV technician for help. + +English: +User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions: + +1. this device may not cause interference. +2. this device must accept any interference, including interference that may cause undesired operation of the device. + +French: +Le présent appareil est conforme aux CNR d’Industrie Canada applicables aux appareils radio exempts de licence. L’exploitation est autorisée aux deux conditions suivantes: + +1. l’appareil nedoit pas produire de brouillage. +2. l’utilisateur de l’appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d’en compromettre le fonctionnement. + +**IC SAR Warning:** + +English: +This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body. + +French: +Lors de l’installation et de l’exploitation de ce dispositif, la distance entre le radiateur et le corps est d’au moins 20 cm. + +**Important:** The operating temperature of the EUT can’t exceed 85 ℃ and shouldn’t be lower than -40 ℃. + +Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states. + +# Company Information + +| Company name | Arduino SRL | +|-----------------|-----------------------------------------------| +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA(Italy) | + +# Reference Documentation + +| Ref | Link | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino Courses | [https://www.arduino.cc/education/courses](https://www.arduino.cc/education/courses) | +| Arduino Documentation | [https://docs.arduino.cc/](https://docs.arduino.cc/) | +| Arduino IDE (Cloud) | [https://create.arduino.cc/editor](https://create.arduino.cc/editor) | +| Cloud IDE Getting Started | [https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor](https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Library Reference | [https://github.com/arduino-libraries/](https://github.com/arduino-libraries/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | + +# Revision History +| **Date** | **Revision** | **Changes** | +| ---------- | ------------ | --------------------------------- | +| 23/05/2025 | 2 | Fixed pinout table and power info | +| 14/05/2025 | 1 | First release | + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/downloads/ABX00101-cad-files.zip b/content/hardware/11.accessories/modulino-nodes/modulino-movement/downloads/ABX00101-cad-files.zip new file mode 100644 index 0000000000..76e1391062 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/downloads/ABX00101-cad-files.zip differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/downloads/ABX00101-schematics.pdf b/content/hardware/11.accessories/modulino-nodes/modulino-movement/downloads/ABX00101-schematics.pdf new file mode 100644 index 0000000000..261e9edc69 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/downloads/ABX00101-schematics.pdf differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/essentials.md b/content/hardware/11.accessories/modulino-nodes/modulino-movement/essentials.md new file mode 100644 index 0000000000..762e36d575 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/essentials.md @@ -0,0 +1,8 @@ + + + + +This library allows you to communicate with the Arduino Modulino® nodes. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/features.md b/content/hardware/11.accessories/modulino-nodes/modulino-movement/features.md new file mode 100644 index 0000000000..3c5c9c2428 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/features.md @@ -0,0 +1,12 @@ + +The Modulino® Movement module incorporates a 6-axis sensor for measuring both acceleration and rotation. It is compatible with the Arduino UNO R4 WiFi or any board with a Qwiic interface, enabling you to build motion-sensing projects without complicated wiring. + + + + + This module includes instructions for projects that use the Modulino® nodes, giving you a quick start for motion-based applications. The built-in sensor measures acceleration and gyro data, perfect for experimenting with orientation and movement detection. + + + The Modulino® Movement module connects via Qwiic cables to your UNO R4 WiFi or other compatible boards. For projects where Qwiic isn’t available, solderable pins allow direct wiring, so you never miss a connection. + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/image.svg b/content/hardware/11.accessories/modulino-nodes/modulino-movement/image.svg new file mode 100644 index 0000000000..a6fe77668c --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/image.svg @@ -0,0 +1,736 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/interactive/ABX00101-pinout.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/interactive/ABX00101-pinout.png new file mode 100644 index 0000000000..d6e5f561df Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/interactive/ABX00101-pinout.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/product.md b/content/hardware/11.accessories/modulino-nodes/modulino-movement/product.md new file mode 100644 index 0000000000..14d9dbde18 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/product.md @@ -0,0 +1,13 @@ +--- +title: Modulino Movement +url_shop: https://store.arduino.cc/products/modulino-movement +url_guide: https://courses.arduino.cc/plugandmake +primary_button_url: https://docs.arduino.cc/tutorials/modulino-movement/how-movement-ardu/ +primary_button_title: With Arduino +secondary_button_url: https://docs.arduino.cc/tutorials/modulino-movement/how-movement-mp/ +secondary_button_title: With MicroPython +certifications: [] +sku: [ABX00101] +--- + +Measure acceleration and rotation with ease thanks to the integrated 6-axis sensor (LSM6DSOXTR). Perfect for robotics, wearables, or motion-driven applications. Compatible with the Arduino UNO R4 WiFi or any Qwiic-enabled board, and features optional solderable pins if you prefer direct wiring. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tech-specs.md b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tech-specs.md new file mode 100644 index 0000000000..1db25a29df --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Modulino® Movement. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tech-specs.yml b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tech-specs.yml new file mode 100644 index 0000000000..a6be444cc8 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tech-specs.yml @@ -0,0 +1,11 @@ +Node: + Name: Modulino Movement + SKU: ABX00101 + Board recommended: Arduino® UNO R4 WiFi (ABX00087) + Communications: I2C (over Qwiic connector or solderable pin) + Operational voltage: 3.3V + Sensor: + LSM6DSOXTR: 0x6A (address can change via software) + +Other accessories: + Qwiic cables: 1x diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/I2C-change-movement.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/I2C-change-movement.png new file mode 100644 index 0000000000..a3c9a51894 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/I2C-change-movement.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/IDE-Left-Tab.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/IDE-Left-Tab.png new file mode 100644 index 0000000000..c7bb86575e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/IDE-Left-Tab.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/Modulino_Movement_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/Modulino_Movement_Power_Tree.png new file mode 100644 index 0000000000..fe775335ff Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/Modulino_Movement_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/MovementPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/MovementPinouts.png new file mode 100644 index 0000000000..9dd2cf39e3 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/MovementPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-jumper.png new file mode 100644 index 0000000000..5381b10c45 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-qwiic-chain.png new file mode 100644 index 0000000000..c6c89cc127 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-qwiik.png new file mode 100644 index 0000000000..331a2f823c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement.png new file mode 100644 index 0000000000..c21dcc1db7 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/connection-guide-movement.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/library-dependencies.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/library-dependencies.png new file mode 100644 index 0000000000..d25bd9720b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/library-dependencies.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/library-install.gif b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/library-install.gif new file mode 100644 index 0000000000..16f396c353 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/library-install.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/schematic.png new file mode 100644 index 0000000000..a804960788 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/content.md new file mode 100644 index 0000000000..65b735ce5f --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/content.md @@ -0,0 +1,310 @@ +--- +title: "How To Use The Modulino Movement" +description: "Learn how to get the most out of your Modulino Movement." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-movement +software: + - ide-v2 + - web-editor +--- + +The Modulino Movement is a modular sensor that measures acceleration and angular velocity, making it perfect to add motion sensing to your projects! The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +## General Characteristics + +The Modulino Movement is capable of measuring acceleration and angular velocity. Take a look at the following table to know more about its measuring ranges: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|---------------------------------|-------------------------|---------|---------|---------|----------| +| **Accelerometer Range** | Configurable Full Scale | ±2 | ±8 | ±16 | g | +| **Gyroscope Range** | Configurable Full Scale | ±125 | ±1000 | ±2000 | dps | +| **Accelerometer Sensitivity** | @ ±2g | 0.061 | - | - | mg/LSB | +| **Gyroscope Sensitivity** | @ ±125dps | 4.375 | - | - | mdps/LSB | +| **Accelerometer Noise Density** | High-performance mode | - | 70 | - | µg/√Hz | +| **Gyroscope Noise Density** | High-performance mode | - | 3.8 | - | mdps/√Hz | +| **Temperature Sensor Range** | - | -40 | - | +85 | °C | +| **FIFO Buffer** | - | - | 9 | - | KB | +| **Sampling Rate** | Output Data Rate | 1.6 | - | 6664 | Hz | + +## Sensor Details + +The LSM6DSOXTR sensor from STMicroelectronics is the core component of this module. This 6-axis IMU (accelerometer and gyroscope) natively supports digital communication (I²C and SPI), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. +The default address for the Module is: + +| Modulino I²C Address | Hardware I²C Address | +|----------------------|----------------------| +| 0x6A or 0x7E | 0x6A or 0x7E | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + +## Pinout + +The pinout for the Modulino Movement is shown below. Please note that the exposed solderable pins are directly connected to the QWIIC connectors using the same I²C interface. + +![Arduino Movement Pinout](assets/MovementPinouts.png) + +Depending on the board connected to the modulino, the I²C pin names to program it may differ. Please check the [board tutorials](https://docs.arduino.cc/hardware/) on your modulino's compatible board or the [Modulino library](https://github.com/arduino-libraries/Modulino/tree/main/docs) to learn more. + +### 1x10 Header + +| Pin | Function | +|---------|------------------| +| VDDIO | Power | +| GND | Ground | +| INT1 | Interrupt 1 | +| INT2 | Interrupt 2 | +| SDO/SA0 | SPI Data Out | +| SCx | SPI Clock | +| SDx | SPI Data | +| CS | SPI Chip Select | +| SDOAUX | Auxiliary Output | +| OCSAUX | Auxiliary Output | + +- **VDDIO: Power** – I/O voltage supply pin for the sensor. +- **GND: Ground** – Ground connection for power and signal reference. +- **INT1: Interrupt 1** – Programmable interrupt output pin. +- **INT2: Interrupt 2** – Programmable interrupt output pin. +- **SDO/SA0: SPI Data Out** – SPI data output pin, also used as I2C address selection. +- **SCx: SPI Clock** – Clock signal for SPI communication. +- **SDx: SPI Data** – SPI data input pin. +- **CS: SPI Chip Select** – Chip select pin for SPI communication. +- **SDOAUX: Auxiliary Output** – Auxiliary data output pin. +- **OCSAUX: Auxiliary Output** – Auxiliary output control signal pin. + +### 1x4 Header (I2C) +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I2C Data | +| SCL | I2C Clock | + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------------------------------------------|---------------------|---------|-------------|---------|------| +| Supply Voltage | - | 1.71 | 3.3 (QWIIC) | 3.6 | V | +| I/O Voltage | - | 1.62 | - | 3.6 | V | +| Gyro + Accel Current (High Performance Mode) | Both sensors active | - | 0.55 | - | mA | +| Accelerometer Current (High Performance Mode) | - | - | 170 | - | µA | +| Accelerometer Current (Low Power Mode) | ODR = 50 Hz | - | 26 | - | µA | +| Accelerometer Current (Ultra-Low Power Mode) | ODR = 50 Hz | - | 9.5 | - | µA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: + +![Power Tree Modulino Movement](assets/Modulino_Movement_Power_Tree.png) + +## Schematic + +The Modulino Movement uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Movement](assets/schematic.png) + +The main component is the **LSM6DSOXTR** sensor (U1), which handles both acceleration and gyroscope measurements, as well as I²C communication. + +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +There's also a small power indicator LED that lights up when the board is on. + +Some options for customizing the module's features via onboard solder jumpers are available: + +### **VDDIO Independence:** +- By default, **VDDIO is connected to +3V3**. +- To make **VDDIO independent**, cut the corresponding solder jumper. + +### SPI Mode Selection: +- The LSM6DSOXTR supports both **3-wire and 4-wire SPI**. +- You can configure SPI communication and connect additional sensors by cutting or soldering the appropriate jumpers. Please take a look at the IMU's datasheet for more information. + +You can grab the full schematic and PCB files from the [Modulino Movement](https://docs.arduino.cc/hardware/modulinos/modulino-movement) product page. + +# How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It's plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +If your board doesn't have a QWIIC connector, you can still access the same I²C bus and power the module using the solderable header pads just make sure you wire it to 3.3V and match the I²C pinout. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-movement.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-movement-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +When connecting multiple I²C devices, address conflicts may occur if two or more devices share the same default I²C address. The Modulino addresses this potential issue by allowing you to select a different address through a simple hardware modification. We cover this process in detail in the [**Changing I²C Address**](#changing-i2c-address) section, enabling you to integrate multiple identical modules or different devices that share the same default address in your project. + +## Solderable Header + +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-movement-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus as long as you select the correct I²C pins depending on your board. This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-movement-qwiic-chain.png) + +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup's performance. Ensure your cables are correctly connected and capable of handling the required data transfer. + +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +## Changing I2C Address + +The Modulino Movement can be configured to use an alternative I2C address (0x6B) instead of the default address (0x6A). To change the address, follow these steps carefully: + +1. Disconnect all power from the module +2. Locate the address selection solder jumpers on the back of the board +3. Cut the trace on the jumper marked **Default** (0x6A) +4. Solder closed the jumper marked **0x6B** + +After completing these modifications, your module will use the new address (0x6B) when powered on again. + +**IMPORTANT**: Ensure the module remains unpowered during this entire process. Never have both jumpers closed simultaneously when power is applied, as this will create a short circuit between power and ground that could damage your module. + +![I2C Address Change](assets/I2C-change-movement.png) + +When using a custom address in your sketch, you'll need to specify this address when creating the module object. For example: +```arduino +ModulinoMovement movement(0x7E); +``` + + + +# How To Use Your Modulino + +## Installing The Modulino Library + +You need the official Modulino library available [here](https://docs.arduino.cc/libraries/modulino/) to use the Modulino Movement. With the Arduino IDE you get some tools that make adding a library easier. To learn how to install the IDE please visit our [page](https://www.support.arduino.cc/hc/en-us/articles/360019833020-Download-and-install-Arduino-IDE). + +After opening the IDE, a tab should be visible on the left. Press the book icon for "library" as highlighted in the image. + +![IDE Library Tab](assets/IDE-Left-Tab.png) + +You can now look for the library ```Modulino``` by filling in the ```Filter your search``` textbox. +A prompt might appear saying that additional dependencies are required. This is not a problem, as they will be automatically added when you confirm the prompt. + +![Add Dependencies Prompt](assets/library-dependencies.png) + +The process should look like this: + +![Library Install](assets/library-install.gif) + +A message will appear after the installation is successful. + +## Getting Acceleration Data + +Getting data from the sensor is fairly simple using the ```Modulino``` library. For the **Modulino Movement** there are four important functions: +- ```update()```: Updates the sensor readings. +- ```getX()```: Retrieves the acceleration value on the **X-axis** in **g**. +- ```getY()```: Retrieves the acceleration value on the **Y-axis** in **g**. +- ```getZ()```: Retrieves the acceleration value on the **Z-axis** in **g**. +- ```getRoll()```: Retrieves the angular rotation around the X-axis in **dps**. +- ```getPitch()```: Retrieves the angular rotation around the Y-axis in **dps**. +- ```getYaw()```: Retrieves the angular rotation around the Z-axis in **dps**. +- ```Modulino.begin();```: By default the Modulino library uses ```Wire1``` if your connection is in a different Wire you will have to edit it, check [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) (by default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/)) for the library's hardware compatibility. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example sketch of how to implement these functions to acquire data and show it using the serial monitor: + +```arduino +#include "Arduino_Modulino.h" + +// Create a ModulinoMovement +ModulinoMovement movement; + + +float x, y, z; +float roll, pitch, yaw; + + +void setup() { + Serial.begin(9600); + // Initialize Modulino I2C communication + Modulino.begin(); + // Detect and connect to movement sensor module + movement.begin(); +} + +void loop() { + // Read new movement data from the sensor + movement.update(); + + // Get acceleration and gyroscope values + x = movement.getX(); + y = movement.getY(); + z = movement.getZ(); + roll = movement.getRoll(); + pitch = movement.getPitch(); + yaw = movement.getYaw(); + + // Print acceleration values + Serial.print("A: "); + Serial.print(x, 3); + Serial.print(", "); + Serial.print(y, 3); + Serial.print(", "); + Serial.print(z, 3); + + // Print divider between acceleration and gyroscope + Serial.print(" | G: "); + + // Print gyroscope values + Serial.print(roll, 1); + Serial.print(", "); + Serial.print(pitch, 1); + Serial.print(", "); + Serial.println(yaw, 1); + + delay(200); +} +``` + +The code example provided shows how to initialize the sensor, read the acceleration data, and display it on the serial monitor. The data is continuously updated, showing the current acceleration values in real time. +It can be easily adapted to trigger actions at certain movement thresholds or to detect specific motion patterns in your projects. + +### Troubleshooting + +#### Sensor Not Reachable +If your Modulino's power LED isn't on or the sensor isn't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +#### Library Not Installed Properly +If you encounter an issue with the `#include "modulino.h"` command, verify that the Modulino library is correctly installed: +- Check your IDE to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +#### Inaccurate Values +If the sensor values are not accurate, make sure: +- The sensor is not placed on an unstable surface that might cause unwanted vibrations. +- All exposed electronics are not touching any conductive surfaces, as this could interfere with readings. +- The board is mounted securely when measuring precise movements. + +# What Is Next? + +Now that you've learned how to use your Modulino Movement, you're all set to integrate it into your projects! +- Use the movement data to detect different patterns and use these as inputs for your projects. +- Create a motion-activated alarm that triggers when unexpected movement is detected. +- Build a balance game that challenges players to keep the sensor level within certain parameters. +- Make a pedometer that counts steps based on the characteristic motion patterns of walking. + +# Conclusion + +The **Modulino Movement** is a digital 6-axis IMU sensor that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes accessing motion data straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both quick tests and longer-term setups. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-ardu/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/I2C-change-movement.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/I2C-change-movement.png new file mode 100644 index 0000000000..a3c9a51894 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/I2C-change-movement.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/Modulino_Movement_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/Modulino_Movement_Power_Tree.png new file mode 100644 index 0000000000..fe775335ff Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/Modulino_Movement_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/MovementPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/MovementPinouts.png new file mode 100644 index 0000000000..9dd2cf39e3 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/MovementPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-jumper.png new file mode 100644 index 0000000000..b72819526f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-qwiic-chain.png new file mode 100644 index 0000000000..c6c89cc127 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-qwiik.png new file mode 100644 index 0000000000..331a2f823c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement.png new file mode 100644 index 0000000000..c21dcc1db7 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/connection-guide-movement.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/mp-usb-connection.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/mp-usb-connection.png new file mode 100644 index 0000000000..fb059f9e8b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/mp-usb-connection.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/package-installer-overview.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/package-installer-overview.png new file mode 100644 index 0000000000..67678dc808 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/package-installer-overview.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/schematic.png new file mode 100644 index 0000000000..a804960788 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/content.md new file mode 100644 index 0000000000..0cf4339ef6 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/content.md @@ -0,0 +1,271 @@ +--- +title: "How To Use The Modulino Movement And MicroPython" +description: "Learn how to get the most out of your Modulino Movement in a MicroPython environment." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-movement +software: + - ide-v2 + - web-editor +--- +The Modulino Movement is a modular sensor that measures acceleration and angular velocity, making it perfect to add motion sensing to your projects! The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +## General Characteristics + +The Modulino Movement is capable of measuring acceleration and angular velocity. Take a look at the following table to know more about its measuring ranges: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|---------------------------------|-------------------------|---------|---------|---------|----------| +| **Accelerometer Range** | Configurable Full Scale | ±2 | ±8 | ±16 | g | +| **Gyroscope Range** | Configurable Full Scale | ±125 | ±1000 | ±2000 | dps | +| **Accelerometer Sensitivity** | @ ±2g | 0.061 | - | - | mg/LSB | +| **Gyroscope Sensitivity** | @ ±125dps | 4.375 | - | - | mdps/LSB | +| **Accelerometer Noise Density** | High-performance mode | - | 70 | - | µg/√Hz | +| **Gyroscope Noise Density** | High-performance mode | - | 3.8 | - | mdps/√Hz | +| **Temperature Sensor Range** | - | -40 | - | +85 | °C | +| **FIFO Buffer** | - | - | 9 | - | KB | +| **Sampling Rate** | Output Data Rate | 1.6 | - | 6664 | Hz | + +## Sensor Details + +The LSM6DSOXTR sensor from STMicroelectronics is the core component of this module. This 6-axis IMU (accelerometer and gyroscope) natively supports digital communication (I²C and SPI), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. +The default address for the Module is: + +| Modulino I²C Address | Hardware I²C Address | +|----------------------|----------------------| +| 0x6A or 0x7E | 0x6A or 0x7E | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + +## Pinout + +The pinout for the Modulino Movement is shown below. Please note that the exposed solderable pins are directly connected to the QWIIC connectors using the same I²C interface. + +![Arduino Movement Pinout](assets/MovementPinouts.png) + +Depending on the board connected to the modulino, the I²C pin names to program it may differ. Please check the [board tutorials](https://docs.arduino.cc/hardware/) on your modulino's compatible board or the [Modulino library](https://github.com/arduino-libraries/Modulino/tree/main/docs) to learn more. + +### 1x10 Header + +| Pin | Function | +|---------|------------------| +| VDDIO | Power | +| GND | Ground | +| INT1 | Interrupt 1 | +| INT2 | Interrupt 2 | +| SDO/SA0 | SPI Data Out | +| SCx | SPI Clock | +| SDx | SPI Data | +| CS | SPI Chip Select | +| SDOAUX | Auxiliary Output | +| OCSAUX | Auxiliary Output | + +- **VDDIO: Power** – I/O voltage supply pin for the sensor. +- **GND: Ground** – Ground connection for power and signal reference. +- **INT1: Interrupt 1** – Programmable interrupt output pin. +- **INT2: Interrupt 2** – Programmable interrupt output pin. +- **SDO/SA0: SPI Data Out** – SPI data output pin, also used as I2C address selection. +- **SCx: SPI Clock** – Clock signal for SPI communication. +- **SDx: SPI Data** – SPI data input pin. +- **CS: SPI Chip Select** – Chip select pin for SPI communication. +- **SDOAUX: Auxiliary Output** – Auxiliary data output pin. +- **OCSAUX: Auxiliary Output** – Auxiliary output control signal pin. + +### 1x4 Header (I2C) +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I2C Data | +| SCL | I2C Clock | + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------------------------------------------|---------------------|---------|-------------|---------|------| +| Supply Voltage | - | 1.71 | 3.3 (QWIIC) | 3.6 | V | +| I/O Voltage | - | 1.62 | - | 3.6 | V | +| Gyro + Accel Current (High Performance Mode) | Both sensors active | - | 0.55 | - | mA | +| Accelerometer Current (High Performance Mode) | - | - | 170 | - | µA | +| Accelerometer Current (Low Power Mode) | ODR = 50 Hz | - | 26 | - | µA | +| Accelerometer Current (Ultra-Low Power Mode) | ODR = 50 Hz | - | 9.5 | - | µA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: + +![Power Tree Modulino Movement](assets/Modulino_Movement_Power_Tree.png) + +## Schematic + +The Modulino Movement uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Movement](assets/schematic.png) + +The main component is the **LSM6DSOXTR** sensor (U1), which handles both acceleration and gyroscope measurements, as well as I²C communication. + +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +There's also a small power indicator LED that lights up when the board is on. + +Some options for customizing the module's features via onboard solder jumpers are available: + +### **VDDIO Independence:** +- By default, **VDDIO is connected to +3V3**. +- To make **VDDIO independent**, cut the corresponding solder jumper. + +### SPI Mode Selection: +- The LSM6DSOXTR supports both **3-wire and 4-wire SPI**. +- You can configure SPI communication and connect additional sensors by cutting or soldering the appropriate jumpers. Please take a look at the IMU's datasheet for more information. + +You can grab the full schematic and PCB files from the [Modulino Movement](https://docs.arduino.cc/hardware/modulinos/modulino-movement) product page. + +# How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It's plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +If your board doesn't have a QWIIC connector, you can still access the same I²C bus and power the module using the solderable header pads just make sure you wire it to 3.3V and match the I²C pinout. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-movement.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-movement-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +When connecting multiple I²C devices, address conflicts may occur if two or more devices share the same default I²C address. The Modulino addresses this potential issue by allowing you to select a different address through a simple hardware modification. We cover this process in detail in the [**Changing I²C Address**](#changing-i2c-address) section, enabling you to integrate multiple identical modules or different devices that share the same default address in your project. + +## Solderable Header + +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-movement-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus as long as you select the correct I²C pins depending on your board. This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-movement-qwiic-chain.png) + +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup's performance. Ensure your cables are correctly connected and capable of handling the required data transfer. + +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +## Changing I2C Address + +The Modulino Movement can be configured to use an alternative I2C address (0x6B) instead of the default address (0x6A). To change the address, follow these steps carefully: + +1. Disconnect all power from the module +2. Locate the address selection solder jumpers on the back of the board +3. Cut the trace on the jumper marked **Default** (0x6A) +4. Solder closed the jumper marked **0x6B** + +After completing these modifications, your module will use the new address (0x6B) when powered on again. + +**IMPORTANT**: Ensure the module remains unpowered during this entire process. Never have both jumpers closed simultaneously when power is applied, as this will create a short circuit between power and ground that could damage your module. + +![I2C Address Change](assets/I2C-change-movement.png) + +When using a custom address in your MicroPython sketch, you'll need to specify this address when creating the module object. For example: +```python +movement_module = ModulinoMovement(address=0x7E) +``` + + +### How To Program Your Modulino +To program your Modulino it is recommended you use the official ```Modulino``` micropython library available [here](https://github.com/arduino/arduino-modulino-mpy). The library is fully compatible with the no **Arduino Lab for MicroPython**. +For information on installing the **Arduino Lab for MicroPython** please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). + +### Installing The Modulino Library +The ```Modulino``` library is not available by default on MicroPython devices hence installation is needed. +To simplify the process the [MicroPython Package Installer](https://github.com/arduino/lab-micropython-package-installer/releases) is recommended as it will provide a graphical interface to guide installation. +After installation, you should now be able to: + +1. Open the tool. +2. Plug in your board to the computer. +![USB Connection](assets/mp-usb-connection.png) + +If the board does not appear in the Detected Boards section, click Reload. If the board is still undetected, ensure no other programs (e.g., a code editor) are using the board's COM port. + +4. Search for the ```Modulino``` package by filling in the text box on the search feature. +5. Click Install and wait for the installation confirmation. +6. Disconnect the board from the tool before returning to your code editor to avoid conflicts due to a busy COM port. + +![Package Installer Overview](assets/package-installer-overview.png) + +The module should now be includable in your program using: +```from modulino import ModulinoThermo``` + +## Get Acceleration and Gyroscope Data + +Getting motion data from the **Modulino Movement** module is simple using the `Modulino` library. The module provides two crucial functions for motion sensing: + +- `.accelerometer` - Retrieves the acceleration values (x, y, z). +- `.gyro` - Retrieves the angular velocity (x, y, z) in **dps**. +- By default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it as instructed [here](https://github.com/arduino/arduino-modulino-mpy/tree/main/docs#%E2%84%B9%EF%B8%8F-using-3rd-party-boards). More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + + +Here’s an example demonstrating how to acquire motion data: + +```python +from modulino import ModulinoMovement +from time import sleep_ms + +movement = ModulinoMovement() + +while True: + acc = movement.accelerometer + gyro = movement.gyro + + print(f"🏃 Accelerometer: x:{acc.x:>8.3f} y:{acc.y:>8.3f} z:{acc.z:>8.3f} g") + print(f"🌐 Gyroscope: x:{gyro.x:>8.3f} y:{gyro.y:>8.3f} z:{gyro.z:>8.3f} dps") + print("") + sleep_ms(100) +``` +The code example provided shows how to initialize the sensor, read the acceleration data, and display it on the console. +The data is continuously updated, showing the current acceleration values in real time. +It can be easily adapted to trigger actions at certain movement thresholds or to detect specific motion patterns in your projects. + +### Troubleshooting + +#### Sensor Not Reachable +If your Modulino's power LED isn't on or the sensor isn't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +#### Library Not Installed Properly +If you encounter an issue with the `import ModulinoMovement` command, verify that the Modulino library is correctly installed: +- Check your Library installer to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +#### Inaccurate Values +If the sensor values are not accurate, make sure: +- The sensor is not placed on an unstable surface that might cause unwanted vibrations. +- All exposed electronics are not touching any conductive surfaces, as this could interfere with readings. +- The board is mounted securely when measuring precise movements. + +# What Is Next? + +Now that you've learned how to use your Modulino Movement, you're all set to integrate it into your projects! +- Use the movement data to detect different patterns and use these as inputs for your projects. +- Create a motion-activated alarm that triggers when unexpected movement is detected. +- Build a balance game that challenges players to keep the sensor level within certain parameters. +- Make a pedometer that counts steps based on the characteristic motion patterns of walking. + +# Conclusion + +The **Modulino Movement** is a digital 6-axis IMU sensor that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes accessing motion data straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both quick tests and longer-term setups. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-movement/tutorials/how-movement-mp/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/compatibility.yml b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/compatibility.yml new file mode 100644 index 0000000000..7e64033e1d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/compatibility.yml @@ -0,0 +1,18 @@ +software: + - arduino-ide + - arduino-cli + - web-editor +hardware: + shields: ~ + carriers: + - nano-connector-carrier + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter + - uno-r4-wifi \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/BlockDiagramPixels.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/BlockDiagramPixels.png new file mode 100644 index 0000000000..2d925e500b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/BlockDiagramPixels.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/I2CTag.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/I2CTag.png new file mode 100644 index 0000000000..9d9b7b0f72 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/I2CTag.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/LEDExtention.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/LEDExtention.png new file mode 100644 index 0000000000..16b5a72b8f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/LEDExtention.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/Modulino_Pixels_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/Modulino_Pixels_Power_Tree.png new file mode 100644 index 0000000000..1360acf9f8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/Modulino_Pixels_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/PixelMec.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/PixelMec.png new file mode 100644 index 0000000000..72fe524062 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/PixelMec.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/PixelsPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/PixelsPinouts.png new file mode 100644 index 0000000000..1cd8e9f5d4 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/PixelsPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/featuredPix.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/featuredPix.png new file mode 100644 index 0000000000..1cae9ae6e6 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/assets/featuredPix.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/datasheet.md b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/datasheet.md new file mode 100644 index 0000000000..5fdc335fc3 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/datasheet/datasheet.md @@ -0,0 +1,256 @@ +--- +identifier: ABX00109 +title: Arduino® Modulino® Pixels +type: maker +author: Pedro Sousa Lima +--- + +![](assets/featuredPix.png) + +# Description +The Modulino® Pixels features **eight LC8822-2020 RGB LEDs** driven by an on-board **STM32C011F4** microcontroller. This setup enables simple I2C connectivity for controlling colorful visual effects, animations, or status indications in a wide variety of projects. + +# Target Areas +Maker, beginner, education + +# Contents +## Application Examples +- **Colorful Displays** + Create dynamic LED patterns, color indicators, or simple pixel-art displays. + +- **Notifications & Alerts** + Represent sensor data or status updates (e.g., temperature ranges, motion detection) via color-coded lights. + +- **Interactive Installations** + Combine with other Modulino® nodes (e.g., Knob or Buttons) to build interactive lighting dashboards or IoT displays. + +
+ +## Features +- **Eight LC8822-2020 RGB LEDs** providing individually addressable full-color output. +- **STM32C011F4** microcontroller that manages LED control over I2C. +- **3.3 V** operation via the Qwiic interface; supports 2.0 V–3.6 V supply range on the MCU. +- **SWD** header for reprogramming and advanced control. +- Ideal for **lighting effects**, **progress bars**, or any **multi-color** output in maker projects. + +### Contents +| **SKU** | **Name** | **Purpose** | **Quantity** | +| --------- | ------------------- | ----------------------------------------------- | ------------ | +| ABX00109 | Modulino® Pixels | 8× individually addressable RGB LEDs | 1 | +| | I2C Qwiic cable | Compatible with the Qwiic standard | 1 | + + +## Related Products +- *SKU: ASX00027* – [Arduino® Sensor Kit](https://store.arduino.cc/products/arduino-sensor-kit) +- *SKU: K000007* – [Arduino® Starter Kit](https://store.arduino.cc/products/arduino-starter-kit-multi-language) +- *SKU: AKX00026* – [Arduino® Oplà IoT Kit](https://store.arduino.cc/products/opla-iot-kit) + +## Rating + +### Recommended Operating Conditions +- **Microcontroller supply range:** 2.0 V – 3.6 V (STM32C011F4) +- **Powered at 3.3 V** through the Qwiic interface (in accordance with the Qwiic standard) +- **Operating temperature:** –40 °C to +85 °C + +**Typical current consumption:** +- Up to **33 mA per RGB LED** at full brightness * 8 LEDs (264 mA total), plus ~3.4 mA for the microcontroller. Actual usage depends on brightness and color settings. + +## Power Tree +The power tree for the modulino can be consulted below: + +![Modulino® Pixels Power Tree](assets/Modulino_Pixels_Power_Tree.png) + +## Block Diagram +This module includes an STM32C011F4 microcontroller managing eight LC8822-2020 RGB LEDs. It communicates with the host via I2C by default but can be reprogrammed via SWD for custom functionality. + +![Modulino® Pixels block diagram](assets/BlockDiagramPixels.png) + +## Functional Overview +The Modulino® Pixels node uses the on-board **STM32C011F4** to handle LED data and provide an I2C interface. Each of the eight **LC8822-2020 RGB LEDs** can be addressed and controlled individually for color and brightness. Advanced users may reprogram the MCU (via SWD) to alter LED control logic or to interface via other protocols. + +### Technical Specifications + +| **Specification** | **Details** | +| ----------------------- | ---------------------------------------------------------------------------- | +| **Microcontroller** | STM32C011F4 (handles I2C, LED driving logic) | +| **LEDs** | 8× LC8822-2020 RGB LEDs | +| **Supply Voltage** | 3.3 V | +| **Power Consumption** | ~80 mA | +| **Communication** | I2C (Qwiic), SWD (debug/reprogram), optional UART/SPI if reprogrammed | + +### Pinout + +**Qwiic / I2C (1×4 Header)** +| **Pin** | **Function** | +|---------|----------------------------| +| GND | Ground | +| 3.3 V | Power Supply (3.3 V) | +| SDA | I2C Data | +| SCL | I2C Clock | + +These pads and the Qwiic connectors share the same I2C bus at 3.3 V. + +**Additional 1×10 Header (LED & MCU Signals)** +| **Pin** | **Function** | +|---------|-------------------| +| GND | Ground | +| GND | Ground | +| 3V3 | 3.3 V Power | +| RESET | Reset | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| D0 | Pixels Data Out | +| C0 | Pixels Clock Out| + +![Pinout Overview](assets/PixelsPinouts.png) + +The header can be used to add more LC8822-2020 RGB's LED in a daisy chain configuration. +Built-in LEDs open for extension + +It also has other I2C interface controller IC pins usable for other purposes or for reprogramming it using its SWD interface. These provide a place to mount header pins if desired. + +![LED extension](assets/LEDExtention.png) + +### Power Specifications +- **Nominal operating voltage:** 3.3 V via Qwiic +- **MCU voltage range:** 2.0 V–3.6 V + +### Mechanical Information +![Modulino® Pixels Mechanical Information](assets/PixelMec.png) + +- Board dimensions: 41 mm × 25.36 mm +- Thickness: 1.6 mm (±0.2 mm) +- Four mounting holes (Ø 3.2 mm) + - Hole spacing: 16 mm vertically, 32 mm horizontally + +### I2C Address Reference + +| **Board Silk Name** | **Sensor/Actuator** | **Modulino I2C Address (HEX)** | **Editable Addresses (HEX)** | **Hardware I2C Address (HEX)** | +|---------------------|--------------------------|--------------------------------|------------------------------------------|--------------------------------| +| MODULINO PIXELS | 8× LC8822-2020 RGB LEDs | 0x6C | Any custom address (via FW config) | 0x36 | + +**Note:** Default address is **0x6C**. You can change it via the Modulino® library or custom firmware. A white rectangle on the board silk can be used to record a new address. +![Blank silk for identification](assets/I2CTag.png) + +## Device Operation +By default, this node operates as an I2C target device on the Qwiic bus. The integrated microcontroller receives LED control commands and drives each of the eight LC8822-2020 RGB LEDs. For advanced usage, you may reprogram the microcontroller to add different communication protocols or custom LED driving modes. + +Use any 3.3 V microcontroller or Arduino board. The official Modulino® libraries facilitate controlling the RGB LEDs with easy I2C commands to set colors, brightness, or special effects. Make sure your power supply can handle the current draw if driving all LEDs at full brightness. + +# Certifications +## Certifications Summary + +| **Certification** | **Status** | +|:-----------------:|:----------:| +| CE/RED (Europe) | Yes | +| UKCA (UK) | Yes | +| FCC (USA) | Yes | +| IC (Canada) | Yes | +| RoHS | Yes | +| REACH | Yes | +| WEEE | Yes | + +## Declaration of Conformity CE DoC (EU) + +

We declare under our sole responsibility that the products above are in conformity with the essential requirements of the following EU Directives and therefore qualify for free movement within markets comprising the European Union (EU) and European Economic Area (EEA).

+ +## Declaration of Conformity to EU RoHS & REACH 211 01/19/2021 + +

Arduino boards are in compliance with RoHS 2 Directive 2011/65/EU of the European Parliament and RoHS 3 Directive 2015/863/EU of the Council of 4 June 2015 on the restriction of the use of certain hazardous substances in electrical and electronic equipment.

+ +| Substance | **Maximum limit (ppm)** | +|----------------------------------------|-------------------------| +| Lead (Pb) | 1000 | +| Cadmium (Cd) | 100 | +| Mercury (Hg) | 1000 | +| Hexavalent Chromium (Cr6+) | 1000 | +| Poly Brominated Biphenyls (PBB) | 1000 | +| Poly Brominated Diphenyl ethers (PBDE) | 1000 | +| Bis(2-Ethylhexyl) phthalate (DEHP) | 1000 | +| Benzyl butyl phthalate (BBP) | 1000 | +| Dibutyl phthalate (DBP) | 1000 | +| Diisobutyl phthalate (DIBP) | 1000 | + +Exemptions: No exemptions are claimed. + +

Arduino Boards are fully compliant with the related requirements of European Union Regulation (EC) 1907 /2006 concerning the Registration, Evaluation, Authorization and Restriction of Chemicals (REACH). We declare none of the SVHCs (https://echa.europa.eu/web/guest/candidate-list-table), the Candidate List of Substances of Very High Concern for authorization currently released by ECHA, is present in all products (and also package) in quantities totaling in a concentration equal or above 0.1%. To the best of our knowledge, we also declare that our products do not contain any of the substances listed on the "Authorization List" (Annex XIV of the REACH regulations) and Substances of Very High Concern (SVHC) in any significant amounts as specified by the Annex XVII of Candidate list published by ECHA (European Chemical Agency) 1907 /2006/EC.

+ +## Conflict Minerals Declaration + +

As a global supplier of electronic and electrical components, Arduino is aware of our obligations with regard to laws and regulations regarding Conflict Minerals, specifically the Dodd-Frank Wall Street Reform and Consumer Protection Act, Section 1502. Arduino does not directly source or process conflict minerals such as Tin, Tantalum, Tungsten, or Gold. Conflict minerals are contained in our products in the form of solder or as a component in metal alloys. As part of our reasonable due diligence, Arduino has contacted component suppliers within our supply chain to verify their continued compliance with the regulations. Based on the information received thus far we declare that our products contain Conflict Minerals sourced from conflict-free areas.

+ +## FCC Caution + +Any Changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate the equipment. + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: + +1. This device may not cause harmful interference. +2. This device must accept any interference received, including interference that may cause undesired operation. + +**FCC RF Radiation Exposure Statement:** + +1. This Transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. +2. This equipment complies with RF radiation exposure limits set forth for an uncontrolled environment. +3. This equipment should be installed and operated with a minimum distance of 20 cm between the radiator & your body. + +**Note:** This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures: + +- Reorient or relocate the receiving antenna. +- Increase the separation between the equipment and receiver. +- Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. +- Consult the dealer or an experienced radio/TV technician for help. + +English: +User manuals for license-exempt radio apparatus shall contain the following or equivalent notice in a conspicuous location in the user manual or alternatively on the device or both. This device complies with Industry Canada license-exempt RSS standard(s). Operation is subject to the following two conditions: + +1. this device may not cause interference. +2. this device must accept any interference, including interference that may cause undesired operation of the device. + +French: +Le présent appareil est conforme aux CNR d’Industrie Canada applicables aux appareils radio exempts de licence. L’exploitation est autorisée aux deux conditions suivantes: + +1. l’appareil nedoit pas produire de brouillage. +2. l’utilisateur de l’appareil doit accepter tout brouillage radioélectrique subi, même si le brouillage est susceptible d’en compromettre le fonctionnement. + +**IC SAR Warning:** + +English: +This equipment should be installed and operated with a minimum distance of 20 cm between the radiator and your body. + +French: +Lors de l’installation et de l’exploitation de ce dispositif, la distance entre le radiateur et le corps est d’au moins 20 cm. + +**Important:** The operating temperature of the EUT can’t exceed 85 ℃ and shouldn’t be lower than -40 ℃. + +Hereby, Arduino S.r.l. declares that this product is in compliance with essential requirements and other relevant provisions of Directive 2014/53/EU. This product is allowed to be used in all EU member states. + +# Company Information + +| Company name | Arduino SRL | +|-----------------|-----------------------------------------------| +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA(Italy) | + +# Reference Documentation + +| Ref | Link | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino Courses | [https://www.arduino.cc/education/courses](https://www.arduino.cc/education/courses) | +| Arduino Documentation | [https://docs.arduino.cc/](https://docs.arduino.cc/) | +| Arduino IDE (Cloud) | [https://create.arduino.cc/editor](https://create.arduino.cc/editor) | +| Cloud IDE Getting Started | [https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor](https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Library Reference | [https://github.com/arduino-libraries/](https://github.com/arduino-libraries/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | + +# Revision History +| **Date** | **Revision** | **Changes** | +| ---------- | ------------ | -------------------------------------------------------------------- | +| 23/05/2025 | 2 | Fixed pinout table and power info, removed unrelated characteristics | +| 14/05/2025 | 1 | First release | + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/downloads/ABX00109-cad-files.zip b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/downloads/ABX00109-cad-files.zip new file mode 100644 index 0000000000..3249826960 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/downloads/ABX00109-cad-files.zip differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/downloads/ABX00109-schematics.pdf b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/downloads/ABX00109-schematics.pdf new file mode 100644 index 0000000000..075a471dc8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/downloads/ABX00109-schematics.pdf differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/essentials.md b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/essentials.md new file mode 100644 index 0000000000..762e36d575 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/essentials.md @@ -0,0 +1,8 @@ + + + + +This library allows you to communicate with the Arduino Modulino® nodes. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/features.md b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/features.md new file mode 100644 index 0000000000..b188367611 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/features.md @@ -0,0 +1,12 @@ + +The Modulino® Pixels module features eight RGB LEDs for creating colorful displays and visual alerts. It is compatible with the Arduino UNO R4 WiFi or any board with a Qwiic interface, letting you craft vibrant light effects with minimal fuss. + + + + + Beginner-friendly guides show you how to program each RGB LED, so you can learn about color mixing and easily add dynamic lighting to your projects. + + + The Modulino® Pixels module connects via Qwiic cables to your UNO R4 WiFi or other compatible boards. Alternatively, solderable pins are available for direct wiring when a Qwiic connector is not accessible. + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/image.svg b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/image.svg new file mode 100644 index 0000000000..ef05cb3331 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/image.svg @@ -0,0 +1,1768 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/interactive/ABX00109-pinout.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/interactive/ABX00109-pinout.png new file mode 100644 index 0000000000..1cd8e9f5d4 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/interactive/ABX00109-pinout.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/product.md b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/product.md new file mode 100644 index 0000000000..6ce7fab853 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/product.md @@ -0,0 +1,13 @@ +--- +title: Modulino Pixels +url_shop: https://store.arduino.cc/products/modulino-pixels +url_guide: https://courses.arduino.cc/plugandmake +primary_button_url: https://docs.arduino.cc/tutorials/modulino-pixels/how-pixels-ardu/ +primary_button_title: With Arduino +secondary_button_url: https://docs.arduino.cc/tutorials/modulino-pixels/how-pixels-mp/ +secondary_button_title: With MicroPython +certifications: [] +sku: [ABX00109] +--- + +Illuminate your projects with eight customizable RGB LEDs (LC8822-2020). Create dazzling color displays, visual indicators, or light-based animations—all with minimal effort. Compatible with the Arduino UNO R4 WiFi or any board featuring a Qwiic interface, and includes solderable pins if you prefer a direct wiring approach. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tech-specs.md b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tech-specs.md new file mode 100644 index 0000000000..0a4a67fc65 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Modulino® Pixels. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tech-specs.yml b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tech-specs.yml new file mode 100644 index 0000000000..924c54fea9 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tech-specs.yml @@ -0,0 +1,11 @@ +Node: + Name: Modulino Pixels + SKU: ABX00109 + Board recommended: Arduino® UNO R4 WiFi (ABX00087) + Communications: I2C (over Qwiic connector or solderable pin) + Operational voltage: 3.3V + Actuator: + LC8822-2020 LEDs (STM32C011F4): 0x6C (address can change via software) + +Other accessories: + Qwiic cables: 1x diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/IDE-Left-Tab.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/IDE-Left-Tab.png new file mode 100644 index 0000000000..c7bb86575e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/IDE-Left-Tab.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/Modulino_Pixels_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/Modulino_Pixels_Power_Tree.png new file mode 100644 index 0000000000..1360acf9f8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/Modulino_Pixels_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/PixelsPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/PixelsPinouts.png new file mode 100644 index 0000000000..753e749422 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/PixelsPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/addressChangeIDE.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/addressChangeIDE.png new file mode 100644 index 0000000000..d5cd3fd195 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/addressChangeIDE.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/adressChanger.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/adressChanger.png new file mode 100644 index 0000000000..c6eae670c8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/adressChanger.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-jumper.png new file mode 100644 index 0000000000..cdce255db8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-qwiic-chain.png new file mode 100644 index 0000000000..5899d68721 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-qwiik.png new file mode 100644 index 0000000000..3b09f3b752 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels.png new file mode 100644 index 0000000000..229410a0c3 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/connection-guide-pixels.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/expansion-guide-pixels.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/expansion-guide-pixels.png new file mode 100644 index 0000000000..427dc10d40 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/expansion-guide-pixels.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/library-install.gif b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/library-install.gif new file mode 100644 index 0000000000..16f396c353 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/library-install.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/pixel-expantion-mc.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/pixel-expantion-mc.png new file mode 100644 index 0000000000..ef177015f8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/pixel-expantion-mc.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/schematic.png new file mode 100644 index 0000000000..8f5504efee Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/content.md new file mode 100644 index 0000000000..b1af9f2f31 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/content.md @@ -0,0 +1,244 @@ +--- +title: "How To Use The Modulino Pixels" +description: "Learn how to get the most out of your Modulino Pixels." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-pixels +software: + - ide-v2 + - web-editor +--- +The Modulino Pixels is a modular sensor that generates RGB light effects, making it perfect to add colorful visual feedback to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +## Hardware Specifications + +The Modulino Pixels based on 8 LC8822-2020 addressable LEDs is capable of generating colorful light patterns and effects. Take a look at the following table to know more about its characteristics: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|------------------|-------------------|---------|---------|---------|------| +| Supply Voltage | - | 2.0 | 3.3 | 3.6 | V | +| Resolution (ADC) | Default | - | 12-bit | - | mcd | +| Communication | I²C,USART,SPI | - | I²C | - | - | + +## Pinout + +The LC8822-2020 addressable LEDs are the core components of this module. These RGB light output devices are controlled by an onboard STM32C011F4U6TR microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. +![Modulino Pixels Pinout](assets/PixelsPinouts.png) + +### 1x10 Header (LC8822-2020 and Microcontroller Signals) + +| Pin | Function | +|--------|-----------------| +| GND | Ground | +| GND | Ground | +| 3V3 | 3.3V Power | +| RESET | Reset | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| D0 | Pixels Data Out | +| C0 | Pixels Clock Out| + +- **GND: Ground**: Provides ground reference for the circuit. Multiple ground pins ensure stable power distribution. +- **3V3: 3.3V Power**: Supplies 3.3V power to connected components and modules. +- **RESET: Reset**: Used to reset the microcontroller or connected system. +- **SWCLK and SWDIO: SWD Interface**: Used for debugging, programming, and reprogramming the microcontroller via Serial Wire Debug protocol. +- **TX1 and RX1: USART Communication**: Enable serial communication for data transmission and reception with other devices or modules. +- **D0: Pixels Data Out**: Sends pixel data to addressable LED strips in a daisy chain configuration for lighting control. +- **C0: Pixels Clock Out**: Provides clock signal synchronization for addressable LED strips, ensuring proper timing for pixel data. + +### 1x4 Header (I2C) +The pinout for the Modulino Pixels is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +## I2C Address + +The **Modulino Pixels** module uses **LC8822-2020** addressable LEDs, which do not have native I²C capabilities. Instead, the LED array is controlled by the Modulino's onboard microcontroller (STM32C011F4U6TR). This microcontroller provides I²C communication, allowing for flexible control of the LEDs. +One unique feature of this setup is the ability to change the I²C address via software. This means the address can be modified based on your application needs, making it adaptable to different system configurations. The default I²C address for the **Modulino Pixels** module is: + +| Modulino I²C Address | Hardware I²C Address | Editable Addresses (HEX) | +|----------------------|----------------------|-----------------------------------| +| 0x6C | 0x36 | Any custom address (via software) | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Typical | Maximum | Unit | +|------------------------|----------------|---------|---------|------| +| Operating Voltage | - | 3.3 | - | V | +| Power Dissipation | - | - | 350 | mW | +| Standby Current | No data signal | - | 1 | mA | +| Max LED Output Current | Per Channel | 18 | - | mA | + + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. +J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Pixels](assets/Modulino_Pixels_Power_Tree.png) + +## Schematic + +The Modulino Pixels uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Pixels](assets/schematic.png) + +The main components are the **8 LC8822-2020 addressable LEDs** and the **STM32C011F4U6TR** microcontroller (U1), which handles LED control as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +The **LC8822-2020** LEDs are connected in a daisy chain, with the first LED receiving clock and data signals from the microcontroller. The **CO (Clock Out)** and **DO (Data Out)** of the last LED in the chain are accessible via the **1x10 header**, allowing for expansion. ![LED Expantion](assets/expansion-guide-pixels.png) + +These can also be found in small pads near the STM32 microcontroller alongside a few user defines pads that can be used by editing the firmware: +![Exposed user-defined and LED expansion pads](assets/pixel-expantion-mc.png) + +There's also a small power LED indicator that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Pixels](https://docs.arduino.cc/hardware/modulinos/modulino-pixels) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. +Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-pixels.png) + +## QWIIC Connector +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-pixels-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-pixels-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. + +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. + +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-pixels-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are properly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** + +## How To Program Your Modulino +To program the Modulino the official library available [here](https://docs.arduino.cc/libraries/modulino/) is recommended, it is fully compatible with the Arduino IDE. +For information on how to install the IDE please visit our [page](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing/). + +### Installing The Modulino Library +You need the official Modulino library available [here](https://github.com/arduino-libraries/Modulino) to use the Modulino Thermo. + +With the Arduino IDE you get some tools that make adding a library easier. To learn how to install the IDE please visit our [page](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing/). +After opening the IDE, a tab should be visible on the left. Press the book icon for "library" as highlighted in the image. +![IDE Library Tab](assets/IDE-Left-Tab.png) +The process should look like this: +![Library Install](assets/library-install.gif) +A message will appear after the installation is successful. + +### Set LED Colors + +Controlling RGB LEDs using the **Modulino Pixels** module is straightforward with the `Modulino` library. +For the **Pixels**, there are two important functions: +- `set(index, color, brightness)`: Sets a specific LED to a chosen color and brightness level. (`RED`,`BLUE`,`GREEN`,`VIOLET`,`WHITE`) +- `show()`: Applies the changes to the LEDs. +- ```Modulino.begin();```: By default the Modulino library uses ```Wire1``` if your connection is in a different Wire you will have to edit it, check [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) (by default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/)) for the library's hardware compatibility. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example of how to implement these functions to control the LEDs: + +```arduino +#include + +ModulinoPixels leds; + +int brightness = 25; + +void setup(){ + Modulino.begin(); + leds.begin(); +} + +void loop(){ + // Set all LEDs to blue + for (int i = 0; i < 8; i++) { + leds.set(i, BLUE, brightness); + leds.show(); + } +} +``` +The code example provided demonstrates how to initialize the LED module and set all 8 LEDs to blue with a brightness level of 25%. The for-loop cycles through each LED (indexed 0-7), sets its color and brightness, and then uses the show() function to apply the change. This creates a simple blue light display that can be easily modified to create more complex lighting patterns or visual indicators for your projects. + +### How To Change I²C Address + +An example sketch, AddressChanger, is also included with the library inside the `Utilities` folder and available [here](https://github.com/arduino-libraries/Modulino/blob/main/examples/Utilities/AddressChanger/AddressChanger.ino). This sketch changes the I²C address at a software level on the Module's microcontroller. +![Example location on the IDE](assets/addressChangeIDE.png) + +- Connect the module to your board, remove any other modules that might be in the chain. Connection must be via I²C. +- Upload the sketch. +- Open the Serial Monitor. +- Text should now appear. Make sure the correct bauld-rate is selected if the displayed characters seem corrupted. + ![Expected console output](assets/adressChanger.png) +- Select the address and confirm. +- Your address should now have changed. Make sure to take note of the selected address. + +To keep track of the address in use the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your sketch, you'll need to specify this address when creating the module object. For example: +```arduino +ModulinoPixels pixels(0x3E); // Replace 0x3E with your specific address +``` + +## Troubleshooting + +### LEDs Not Lighting +If your Modulino's power LED isn't on or the RGB LEDs aren't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +### Library Not Installed Properly +If you encounter an issue with the `#include "modulino.h"` command, verify that the Modulino library is correctly installed: +- Check your IDE to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +### Incorrect Colors or Flickering +If the LED colors are incorrect or the LEDs are flickering unexpectedly, make sure: +- The brightness values are within the appropriate range (typically 0-255). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with the LED output. +- The power supply is stable and providing sufficient current for all LEDs at the desired brightness. + +# Conclusion + +The **Modulino Pixels** is a digital RGB LED control module that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes generating colorful light effects straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both visual feedback and creative lighting projects. + +# What Is Next? + +Now that you've learned how to use your Modulino Pixels, you're all set to integrate it into your projects! +- Create an animated progress bar that visually displays status, or battery charge level using a gradient of colors. +- Build a live sound level indicator that responds to ambient noise. +- Design a pomodoro timer with color coded work and rest periods to boost your productivity. +- Program an interactive game where players must match patterns of colors in the correct sequence, with difficulty increasing as they progress. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-ardu/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/Modulino_Pixels_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/Modulino_Pixels_Power_Tree.png new file mode 100644 index 0000000000..1360acf9f8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/Modulino_Pixels_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/PixelsPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/PixelsPinouts.png new file mode 100644 index 0000000000..753e749422 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/PixelsPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-jumper.png new file mode 100644 index 0000000000..6796fa2911 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-qwiic-chain.png new file mode 100644 index 0000000000..5899d68721 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-qwiik.png new file mode 100644 index 0000000000..621425659d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels.png new file mode 100644 index 0000000000..229410a0c3 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/connection-guide-pixels.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/expansion-guide-pixels.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/expansion-guide-pixels.png new file mode 100644 index 0000000000..427dc10d40 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/expansion-guide-pixels.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/mp-usb-connection.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/mp-usb-connection.png new file mode 100644 index 0000000000..fb059f9e8b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/mp-usb-connection.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/package-installer-overview.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/package-installer-overview.png new file mode 100644 index 0000000000..67678dc808 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/package-installer-overview.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/pixel-expantion-mc.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/pixel-expantion-mc.png new file mode 100644 index 0000000000..ef177015f8 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/pixel-expantion-mc.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/schematic.png new file mode 100644 index 0000000000..8f5504efee Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/content.md new file mode 100644 index 0000000000..f0c8119f5a --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/content.md @@ -0,0 +1,296 @@ +--- +title: "How To Use The Modulino Pixels And MicroPython" +description: "Learn how to get the most out of your Modulino Pixels in a MicroPython environment." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-pixels +software: + - ide-v2 + - web-editor +--- +The Modulino Pixels is a modular sensor that generates RGB light effects, making it perfect to add colorful visual feedback to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +## Hardware Specifications + +The Modulino Pixels based on 8 LC8822-2020 addressable LEDs is capable of generating colorful light patterns and effects. Take a look at the following table to know more about its characteristics: + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|------------------|-------------------|---------|---------|---------|------| +| Supply Voltage | - | 2.0 | 3.3 | 3.6 | V | +| Resolution (ADC) | Default | - | 12-bit | - | mcd | +| Communication | I²C,USART,SPI | - | I²C | - | - | + +## Pinout + +The LC8822-2020 addressable LEDs are the core components of this module. These RGB light output devices are controlled by an onboard STM32C011F4U6TR microcontroller, which supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. +![Modulino Pixels Pinout](assets/PixelsPinouts.png) + +### 1x10 Header (LC8822-2020 and Microcontroller Signals) + +| Pin | Function | +|--------|-----------------| +| GND | Ground | +| GND | Ground | +| 3V3 | 3.3V Power | +| RESET | Reset | +| SWCLK | SWD Clock | +| SWDIO | SWD Data | +| TX1 | USART Transmit | +| RX1 | USART Receive | +| D0 | Pixels Data Out | +| C0 | Pixels Clock Out| + +- **GND: Ground**: Provides ground reference for the circuit. Multiple ground pins ensure stable power distribution. +- **3V3: 3.3V Power**: Supplies 3.3V power to connected components and modules. +- **RESET: Reset**: Used to reset the microcontroller or connected system. +- **SWCLK and SWDIO: SWD Interface**: Used for debugging, programming, and reprogramming the microcontroller via Serial Wire Debug protocol. +- **TX1 and RX1: USART Communication**: Enable serial communication for data transmission and reception with other devices or modules. +- **D0: Pixels Data Out**: Sends pixel data to addressable LED strips in a daisy chain configuration for lighting control. +- **C0: Pixels Clock Out**: Provides clock signal synchronization for addressable LED strips, ensuring proper timing for pixel data. + +### 1x4 Header (I2C) +The pinout for the Modulino Pixels is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +## I2C Address + +The **Modulino Pixels** module uses **LC8822-2020** addressable LEDs, which do not have native I²C capabilities. Instead, the LED array is controlled by the Modulino's onboard microcontroller (STM32C011F4U6TR). This microcontroller provides I²C communication, allowing for flexible control of the LEDs. +One unique feature of this setup is the ability to change the I²C address via software. This means the address can be modified based on your application needs, making it adaptable to different system configurations. The default I²C address for the **Modulino Pixels** module is: + +| Modulino I²C Address | Hardware I²C Address | Editable Addresses (HEX) | +|----------------------|----------------------|-----------------------------------| +| 0x6C | 0x36 | Any custom address (via software) | + +When scanning for I²C address on the bus, you might find the modulino using the **Hardware I²C Address**. However, you should always use the **Modulino I²C Address** when using the official Modulino library. +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Typical | Maximum | Unit | +|------------------------|----------------|---------|---------|------| +| Operating Voltage | - | 3.3 | - | V | +| Power Dissipation | - | - | 350 | mW | +| Standby Current | No data signal | - | 1 | mA | +| Max LED Output Current | Per Channel | 18 | - | mA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. +J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Pixels](assets/Modulino_Pixels_Power_Tree.png) + +## Schematic + +The Modulino Pixels uses a simple circuit, as shown in the schematic below: + +![Full Schematic Modulino Pixels](assets/schematic.png) + +The main components are the **8 LC8822-2020 addressable LEDs** and the **STM32C011F4U6TR** microcontroller (U1), which handles LED control as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. + +The **LC8822-2020** LEDs are connected in a daisy chain, with the first LED receiving clock and data signals from the microcontroller. The **CO (Clock Out)** and **DO (Data Out)** of the last LED in the chain are accessible via the **1x10 header**, allowing for expansion. +![LED Expantion](assets/expansion-guide-pixels.png) + +These can also be found in small pads near the STM32 microcontroller alongside a few user defines pads that can be used by editing the firmware: +![Exposed user-defined and LED expansion pads](assets/pixel-expantion-mc.png) + +There's also a small power LED indicator that lights up when the board is on. + +You can grab the full schematic and PCB files from the [Modulino Pixels](https://docs.arduino.cc/hardware/modulinos/modulino-pixels) product page. + +## How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. +Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-pixels.png) + +## QWIIC Connector +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-pixels-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-pixels-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. + +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus. + +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-pixels-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are properly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address them individually. Later in this article we teach how to [change the address](#how-to-change-i2c-address). Multiple modules with the same address will cause conflicts on the I²C bus and will not allow you to address them individually.*** +Later in this article we teach how to [change the address](#how-to-change-i2c-address). + +### How To Program Your Modulino +To program your Modulino it is recommended you use the official ```Modulino``` micropython library available [here](https://github.com/arduino/arduino-modulino-mpy). The library is fully compatible with the no **Arduino Lab for MicroPython**. +For information on installing the **Arduino Lab for MicroPython** please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). + +### Installing The Modulino Library +The ```Modulino``` library is not available by default on MicroPython devices hence installation is needed. +To simplify the process the [MicroPython Package Installer](https://github.com/arduino/lab-micropython-package-installer/releases) is recommended as it will provide a graphical interface to guide installation. +After installation, you should now be able to: + +1. Open the tool. +2. Plug in your board to the computer. +![USB Connection](assets/mp-usb-connection.png) + +If the board does not appear in the Detected Boards section, click Reload. If the board is still undetected, ensure no other programs (e.g., a code editor) are using the board's COM port. + +4. Search for the ```Modulino``` package by filling in the text box on the search feature. +5. Click Install and wait for the installation confirmation. +6. Disconnect the board from the tool before returning to your code editor to avoid conflicts due to a busy COM port. + +![Package Installer Overview](assets/package-installer-overview.png) + +The module should now be includable in your program using: +```from modulino import ModulinoBuzzer``` + +### Control RGB LEDs with MicroPython + +Getting LED data from the **Modulino Pixels** module is simple using the `Modulino` library. The crucial functions to control the LEDs are: +- `set_rgb(index, r, g, b, brightness)`: Sets a specific LED to an RGB color with the specified brightness. +- `set_all_rgb(r, g, b, brightness)`: Sets all LEDs to an RGB color with the specified brightness. +- `set_all_color(color, brightness)`: Sets all LEDs to a predefined color. (`RED`,`BLUE`,`GREEN`,`VIOLET`,`WHITE`) +- `clear_all()`: Turns off all LEDs. +- `show()`: Sends the updated data to the LEDs. +- By default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it as instructed [here](https://github.com/arduino/arduino-modulino-mpy/tree/main/docs#%E2%84%B9%EF%B8%8F-using-3rd-party-boards). More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here’s an example demonstrating how to set colors and create a **Knight Rider animation**: + +```python +from modulino import ModulinoPixels, ModulinoColor +from time import sleep + +pixels = ModulinoPixels() + +# Set each LED to a different color from a color wheel +for index in range(0, 8): + color_wheel_colors = [ + (255, 0, 0), + (255, 85, 0), + (255, 255, 0), + (0, 255, 0), + (0, 255, 255), + (0, 0, 255), + (255, 0, 255), + (255, 0, 0) + ] + pixels.set_rgb(index, *color_wheel_colors[index], 100) +pixels.show() +sleep(1) + +# Set all LEDs to solid colors +pixels.set_all_rgb(255, 0, 0, 100) # Red +pixels.show() +sleep(1) + +pixels.set_all_color(ModulinoColor.GREEN, 100) +pixels.show() +sleep(1) + +pixels.set_all_color(ModulinoColor.BLUE, 100) +pixels.show() +sleep(1) + +# Knight Rider animation +def set_glowing_led(index, r, g, b, brightness): + """ + Set the color of the LED at the given index with its + neighboring LEDs slightly dimmed to create a glowing effect. + """ + pixels.clear_all() + pixels.set_rgb(index, r, g, b, brightness) + + if index > 0: + pixels.set_rgb(index - 1, r, g, b, brightness // 8) # Left LED + if index < 7: + pixels.set_rgb(index + 1, r, g, b, brightness // 8) # Right LED + + pixels.show() + +for j in range(3): + for i in range(8): + set_glowing_led(i, 255, 0, 0, 100) + sleep(0.05) + + for i in range(7, -1, -1): + set_glowing_led(i, 255, 0, 0, 100) + sleep(0.05) + +# Turn off all LEDs +pixels.clear_all().show() +``` +This example shows different ways to control the Pixels. It starts by creating a rainbow pattern using different colors for each LED. Next, it demonstrates setting all LEDs to the same color, using both RGB values and predefined color constants. The final section implements a Knight Rider animation by lighting one main LED at full brightness while slightly illuminating adjacent LEDs at reduced brightness. The `set_glowing_led()` function handles this effect by managing the primary LED and its neighbors, creating a back-and-forth scanning pattern that repeats three times before turning off all LEDs. + +### How To Change Address + +A sketch is also available included with the library named `AddressChanger` and also available [here](https://github.com/arduino/arduino-modulino-mpy/blob/main/examples/change_address.py). This sketch changes the I2C address at a software level on the Module's microcontroller. + +- Connect the module to your board via I2C, ensuring no other modules are in the chain. +- Run the script in a MicroPython environment. +- Follow the on-screen instructions (REPL) to select the device and enter a new address. Valid I²C addresses range from 0x08 to 0x77 (7-bit values in hexadecimal format, e.g., 0x42). +- The script will attempt to change the address and confirm success. + +To keep track of the address in use, the module has a white rectangle on the back. Feel free to use this to write the address that was chosen. + +When using a custom address in your MicroPython sketch, you'll need to specify this address when creating the module object. For example: +```python +pixels_module = ModulinoPixels(address=0x45) # Replace 0x45 with your specific address +``` + +## Troubleshooting + +### LEDs Not Lighting +If your Modulino's power LED isn't on or the RGB LEDs aren't responsive, first check that the board is properly connected: +- Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. +- If the issue persists, make sure the Qwiic cable is properly clicked into place. + +### Library Not Installed Properly +If you encounter an issue with the `import ModulinoPixels"` command, verify that the Modulino library is correctly installed: +- Check your IDE to ensure the library is installed and up-to-date. +- Re-install the library through the Library Manager. + +### Incorrect Colors or Flickering +If the LED colors are incorrect or the LEDs are flickering unexpectedly, make sure: +- The brightness values are within the appropriate range (typically 0-255). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with the LED output. +- The power supply is stable and providing sufficient current for all LEDs at the desired brightness. + +# Conclusion + +The **Modulino Pixels** is a digital RGB LED control module that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes generating colorful light effects straightforward, allowing you to focus on experimenting or building your system logic. It's a small, reliable module suited for both visual feedback and creative lighting projects. + +# What Is Next? + +Now that you've learned how to use your Modulino Pixels, you're all set to integrate it into your projects! +- Create an animated progress bar that visually displays status, or battery charge level using a gradient of colors. +- Build a live sound level indicator that responds to ambient noise. +- Design a pomodoro timer with color coded work and rest periods to boost your productivity. +- Program an interactive game where players must match patterns of colors in the correct sequence, with difficulty increasing as they progress. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-pixels/tutorials/how-pixels-mp/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/compatibility.yml b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/compatibility.yml new file mode 100644 index 0000000000..7e64033e1d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/compatibility.yml @@ -0,0 +1,18 @@ +software: + - arduino-ide + - arduino-cli + - web-editor +hardware: + shields: ~ + carriers: + - nano-connector-carrier + boards: + - nano + - nano-33-iot + - nano-33-ble + - nano-33-ble-sense + - nano-every + - nano-rp2040-connect + - nano-esp32 + - nano-matter + - uno-r4-wifi \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/BlockDiagramThermo.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/BlockDiagramThermo.png new file mode 100644 index 0000000000..ed1a2136e7 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/BlockDiagramThermo.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/Modulino_Thermo_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/Modulino_Thermo_Power_Tree.png new file mode 100644 index 0000000000..75ecb8a8e7 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/Modulino_Thermo_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/TempMec.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/TempMec.png new file mode 100644 index 0000000000..00e1126bdb Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/TempMec.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/ThermoPinouts.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/ThermoPinouts.png new file mode 100644 index 0000000000..26f4ce527c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/ThermoPinouts.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/featuredTherm.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/featuredTherm.png new file mode 100644 index 0000000000..e186b26a5f Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/assets/featuredTherm.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/datasheet.md b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/datasheet.md new file mode 100644 index 0000000000..e5cbe59f99 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/datasheet/datasheet.md @@ -0,0 +1,148 @@ +--- +identifier: ABX00103 +title: Arduino® Modulino® Thermo +type: maker +author: Pedro Sousa Lima +--- + +![](assets/featuredTherm.png) + +# Description +The Modulino® Thermo, featuring the HS3003 sensor, measures both temperature and humidity, making it ideal for environmental monitoring, indoor climate control, and various IoT applications. It provides accurate readings in a compact form factor and integrates seamlessly into the Qwiic ecosystem. + +# Target Areas +Maker, beginner, education + +# Contents + +## Application Examples +The Modulino® Thermo node can be used in numerous scenarios within IoT and electronics projects: + +- **Indoor Climate Control** + Monitor real-time temperature and humidity levels to automatically adjust HVAC systems or trigger alerts. + +- **Greenhouse Monitoring** + Maintain precise growing conditions by tracking changes in humidity and temperature, ensuring plant health and growth. + +- **Smart Home Automation** + Combine the Modulino® Thermo with other nodes, such as movement or distance sensors, to create fully automated home systems that respond to environmental changes. + +
+ +## Features +- Utilizes the **HS3003** sensor to measure temperature and humidity. +- Communicates via **I2C** (Qwiic connector) at 3.3 V (standard). +- Designed with an **additional header** for optional connections. +- Ideal for **environmental monitoring** in IoT and home automation applications. + +### Contents +| **SKU** | **Name** | **Purpose** | **Quantity** | +| -------- | ------------------ | --------------------------------------- | ------------ | +| ABX00103 | Modulino® Thermo | Measure temperature and humidity | 1 | +| | I2C Qwiic cable | Compatible with the Qwiic standard | 1 | + + +## Related Products +- *SKU: ASX00027* – [Arduino® Sensor Kit](https://store.arduino.cc/products/arduino-sensor-kit) +- *SKU: K000007* – [Arduino® Starter Kit](https://store.arduino.cc/products/arduino-starter-kit-multi-language) +- *SKU: AKX00026* – [Arduino® Oplà IoT Kit](https://store.arduino.cc/products/opla-iot-kit) + +## Rating + +### Recommended Operating Conditions +- **Sensor supply range:** 2.3 V – 5.5 V +- **Powered at 3.3 V** through the Qwiic interface (in accordance with the Qwiic standard) +- **Operating temperature:** –40 °C to +125 °C + +**Typical current consumption:** +- ~24.4 µA (at 14-bit resolution, 3.3 V) + +## Power Tree +The power tree for the modulino can be consulted below: + +![Modulino® Thermo Power Tree](assets/Modulino_Thermo_Power_Tree.png) + +## Block Diagram +This module is designed to be placed on an I2C bus, allowing the on-board HS3003 sensor to communicate with a host microcontroller via I2C. + +![Modulino® Thermo block diagram](assets/BlockDiagramThermo.png) + +## Functional Overview +The Modulino® Thermo node uses the HS3003 sensor to measure both temperature and humidity. Data is accessed through I2C (via the Qwiic connector at 3.3 V). It is well-suited for climate control, environmental logging, and wearable IoT. + +### Technical Specifications +| **Specification** | **Details** | +| ----------------------- | ------------------------------------------- | +| **Sensor** | HS3003 | +| **Supply Voltage** | 3.3 V | +| **Power Consumption** | 24.4 µA (14-bit resolution, 3.3 V supply) | +| **Range** | 0–100% RH, –40 °C to +125 °C | +| **Accuracy** | Humidity: ±2.8% RH, Temperature: ±0.25 °C | +| **Resolution** | 14-bit humidity, 14-bit temperature | +| **Communication** | I2C | + +### Pinout +**Qwiic / I2C (1×4 Header)** +| **Pin** | **Function** | +|---------|-------------------------| +| GND | Ground | +| 3.3 V | Power Supply (3.3 V) | +| SDA | I2C Data | +| SCL | I2C Clock | + +These pads and the Qwiic connectors share the same I2C bus. You can optionally solder header pins here. + +**Note:** The board may also include pads for mounting pull-up resistors, not installed by default. + +![Pinout Overview](assets/ThermoPinouts.png) + + +### Power Specifications +- **Nominal operating voltage:** 3.3 V via Qwiic + +### Mechanical Information +![Modulino® Thermo Mechanical Information](assets/TempMec.png) + +- Board dimensions: 41 mm × 25.36 mm +- Thickness: 1.6 mm (±0.2 mm) +- Four mounting holes (Ø 3.2 mm) + - Hole spacing: 16 mm vertically, 32 mm horizontally + +### I2C Address Reference +| **Board Silk Name** | **Sensor** | **Modulino I2C Address (HEX)** | **Editable Addresses (HEX)** | **Hardware I2C Address (HEX)** | +|---------------------|-----------|--------------------------------|------------------------------------------|--------------------------------| +| MODULINO THERMO | HS3003 | 0x44 | Any custom address (via software config) | 0x44 | + +**Note:** Default address is **0x44**. Adjustments may be made via software if multiple identical sensors are on the same bus. + +## Device Operation +The Modulino® Thermo node acts as an I2C target device on the Qwiic bus. Simply connect it via a Qwiic cable to the 3.3 V I2C interface of your microcontroller. Read humidity and temperature values via standard I2C transactions. + +### Getting Started +Use the Arduino IDE or Arduino Cloud Editor to program your microcontroller. Libraries for HS3003 or generic humidity/temperature sensors can help streamline data acquisition. Ensure your microcontroller and this node operate on the same 3.3 V reference for the Qwiic bus. + +# Company Information + +| Company name | Arduino SRL | +|-----------------|-----------------------------------------------| +| Company Address | Via Andrea Appiani, 25 - 20900 MONZA(Italy) | + +# Reference Documentation + +| Ref | Link | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Arduino IDE (Desktop) | [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software) | +| Arduino Courses | [https://www.arduino.cc/education/courses](https://www.arduino.cc/education/courses) | +| Arduino Documentation | [https://docs.arduino.cc/](https://docs.arduino.cc/) | +| Arduino IDE (Cloud) | [https://create.arduino.cc/editor](https://create.arduino.cc/editor) | +| Cloud IDE Getting Started | [https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor](https://docs.arduino.cc/cloud/web-editor/tutorials/getting-started/getting-started-web-editor) | +| Project Hub | [https://projecthub.arduino.cc/](https://projecthub.arduino.cc/) | +| Library Reference | [https://github.com/arduino-libraries/](https://github.com/arduino-libraries/) | +| Online Store | [https://store.arduino.cc/](https://store.arduino.cc/) | +| | | + +# Revision History +| **Date** | **Revision** | **Changes** | +| ---------- | ------------ | ------------- | +| 23/05/2025 | 2 | Power info | +| 14/05/2025 | 1 | First release | diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/downloads/ABX00103-cad-files.zip b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/downloads/ABX00103-cad-files.zip new file mode 100644 index 0000000000..c79a978851 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/downloads/ABX00103-cad-files.zip differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/downloads/ABX00103-schematics.pdf b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/downloads/ABX00103-schematics.pdf new file mode 100644 index 0000000000..6047975296 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/downloads/ABX00103-schematics.pdf differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/essentials.md b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/essentials.md new file mode 100644 index 0000000000..762e36d575 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/essentials.md @@ -0,0 +1,8 @@ + + + + +This library allows you to communicate with the Arduino Modulino® nodes. + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/features.md b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/features.md new file mode 100644 index 0000000000..6859a7741a --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/features.md @@ -0,0 +1,12 @@ + +The Modulino® Thermo module measures temperature and humidity, making it perfect for climate control, environment monitoring, or weather station projects. It is compatible with the Arduino UNO R4 WiFi or any board with a Qwiic interface, ensuring an easy setup. + + + + + Guided examples show you how to read and log environmental data, making it ideal for classroom experiments or home projects involving temperature and humidity. + + + The Modulino® Thermo module connects via Qwiic cables to your UNO R4 WiFi or other boards with a Qwiic interface. If needed, solderable pins let you wire it directly. + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/image.svg b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/image.svg new file mode 100644 index 0000000000..2dbb2acbef --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/image.svg @@ -0,0 +1,560 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/interactive/ABX00103-pinout.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/interactive/ABX00103-pinout.png new file mode 100644 index 0000000000..26f4ce527c Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/interactive/ABX00103-pinout.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/product.md b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/product.md new file mode 100644 index 0000000000..446c115e19 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/product.md @@ -0,0 +1,13 @@ +--- +title: Modulino Thermo +url_shop: https://store.arduino.cc/products/modulino-thermo +url_guide: https://courses.arduino.cc/plugandmake +primary_button_url: https://docs.arduino.cc/tutorials/modulino-thermo/how-thermo-ardu/ +primary_button_title: With Arduino +secondary_button_url: https://docs.arduino.cc/tutorials/modulino-thermo/how-thermo-mp/ +secondary_button_title: With MicroPython +certifications: [] +sku: [ABX00103] +--- + +Monitor temperature and humidity seamlessly with the HS3003 sensor. Whether building a weather station or a climate control project, this module makes data capture straightforward. Designed for Arduino UNO R4 WiFi or any Qwiic-capable board; solderable pins provide an alternative wiring option. diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tech-specs.md b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tech-specs.md new file mode 100644 index 0000000000..57ca951777 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tech-specs.md @@ -0,0 +1 @@ +Here you will find the technical specifications for the Modulino® Thermo. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tech-specs.yml b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tech-specs.yml new file mode 100644 index 0000000000..045e3f4f44 --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tech-specs.yml @@ -0,0 +1,11 @@ +Node: + Name: Modulino Thermo + SKU: ABX00103 + Board recommended: Arduino® UNO R4 WiFi (ABX00087) + Communications: I2C (over Qwiic connector or solderable pin) + Operational voltage: 3.3V + Sensor: + HS3003: 0x44 + +Other accessories: + Qwiic cables: 1x diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/IDE-Left-Tab.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/IDE-Left-Tab.png new file mode 100644 index 0000000000..c7bb86575e Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/IDE-Left-Tab.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/Modulino_Thermo_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/Modulino_Thermo_Power_Tree.png new file mode 100644 index 0000000000..75ecb8a8e7 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/Modulino_Thermo_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/ThermoPinouts.jpg b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/ThermoPinouts.jpg new file mode 100644 index 0000000000..22c8b59c70 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/ThermoPinouts.jpg differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-jumper.png new file mode 100644 index 0000000000..0742e36a31 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-qwiic-chain.png new file mode 100644 index 0000000000..28d62417a5 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-qwiik.png new file mode 100644 index 0000000000..e10a27ebdb Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo.png new file mode 100644 index 0000000000..35591967a9 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/connection-guide-thermo.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/library-install.gif b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/library-install.gif new file mode 100644 index 0000000000..16f396c353 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/library-install.gif differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/schematic.png new file mode 100644 index 0000000000..b094fac53d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/content.md new file mode 100644 index 0000000000..54057dc31f --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/content.md @@ -0,0 +1,210 @@ +--- +title: "How To Use The Modulino Thermo" +description: "Learn how to get the most out of your Modulino Thermo." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-thermo +software: + - ide-v2 + - web-editor +--- +The Modulino Thermo is a modular sensor that measures temperature and humidity, making it perfect to add environmental monitoring to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +# General Characteristics + +The Modulino Thermo is capable of measuring temperature and relative humidity. Take a look at the following table to know more about its measuring ranges: + + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------|-------------|---------|---------|---------|------| +| Range | Temperature | \-40 | \- | +125 | °C | +| \- | Humidity | 0 | \- | 100% | φ RH | +| Accuracy | Temperature | \- | ±0,25 | \- | °C | +| \- | Humidity | \- | ±2.8% | \- | φ | + +## Sensor Details + +The HS3003 sensor from Renesas is the core component of this module. This temperature and humidity sensor natively supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +The default address for the Module is: + +| Modulino I²C Address | Hardware I²C Address | +|----------------------|----------------------| +| 0x44 | 0x44 | + +***Note: Since the address cannot be changed on this Modulino specifically, using two or more identical modules on the same I²C bus will result in address conflicts and cause communication issues.*** + +## Pinout + +The pinout for the Modulino Thermo is shown below. Please note that the exposed solderable pins are directly connected to the QWIIC connectors using the same I²C interface. + +![Arduino Thermo Pinout](assets/ThermoPinouts.jpg) + +Depending on the board connected to the modulino, the I²C pin names to program it may differ. Please check the [board tutorials](https://docs.arduino.cc/hardware/) on your modulino's compatible board or the [Modulino library](https://github.com/arduino-libraries/Modulino/tree/main/docs) to learn more. + +### 1x4 Header (I2C) +The pinout for the Modulino Buzzer is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3.3 V | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------------|-------------------------------------------------------------------|---------|-------------|---------|------| +| Supply Voltage | \- | 2.3 | 3.3 (QWIIC) | 5.5 | V | +| Average Current | 1 humidity + temperature measurement/s 3.3 VDD - Max 5,5@ 3.3 VDD | \- | 1024.4 | 24.4 | µA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. +J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Thermo](assets/Modulino_Thermo_Power_Tree.png) + +## Schematic + +The Modulino Thermo uses a simple circuit, as shown in the schematic below: +![Full Schematic Modulino Thermo](assets/schematic.png) +The main component is the **HS3003** sensor (U1), which handles both temperature and humidity measurements, as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. +There's also a small power indicator LED that lights up when the board is on. +You can grab the full schematic and PCB files from the [Modulino Thermo](https://docs.arduino.cc/hardware/modulinos/modulino-thermo) product page. + +# How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +If your board doesn’t have a QWIIC connector, you can still access the same I²C bus and power the module using the solderable header pads just make sure you wire it to 3.3V and match the I²C pinout. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-thermo.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-thermo-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-thermo-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. + +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus as long as you select the correct I²C pins depending on your board. + +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-thermo-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are correctly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address them individually. Multiple modules with the same address will cause conflicts on the I²C bus.*** + +# How To Use Your Modulino + +## Installing The Modulino Library +You need the official Modulino library available [here](https://docs.arduino.cc/libraries/modulino/) to use the Modulino Thermo. + +With the Arduino IDE you get some tools that make adding a library easier. To learn how to install the IDE please visit our [page](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing/). +After opening the IDE, a tab should be visible on the left. Press the book icon for "library" as highlighted in the image. +![IDE Library Tab](assets/IDE-Left-Tab.png) +The process should look like this: +![Library Install](assets/library-install.gif) +A message will appear after the installation is successful. + + +## Getting Temperature And Humidity Data + +Getting data from the sensor is fairly simple using the ```Modulino``` library. For the **Modulino Thermo** there are two important functions: +- ```getTemperature()```: Provides the temperature measurement from the sensor. (default in Celsius C) +- ```getHumidity()```: Provides the relative humidity measurement from the sensor. (default in Relative Percentage %) +- ```Modulino.begin();```: By default the Modulino library uses ```Wire1``` if your connection is in a different Wire you will have to edit it, check [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/) (by default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/)) for the library's hardware compatibility. More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example sketch of how to implement these functions to acquire data and show it using the serial monitor: + +```arduino +#include + +// Create object instance +ModulinoThermo thermo; + +// Global Variables +float celsius = 0; +float humidity = 0; + +void setup(){ + // Initialization of the serial port, modulino object and thermo one + + Serial.begin(115200); + Modulino.begin(); + thermo.begin(); +} + +void loop(){ + celsius = thermo.getTemperature(); + humidity = thermo.getHumidity(); + + Serial.print("Temperature (C) is: "); + Serial.println(celsius); + + Serial.print("Humidity (rH) is: "); + Serial.println(humidity); + + delay(1000); +} +``` + +The code example provided shows how to initialize the sensor, read the data, and display it on the serial monitor. The data is updated every second, showing the current temperature and humidity values in real time. +It can be easily adapted to trigger actions at certain temperature/humidity thresholds or to log data for analysis. + +## Troubleshooting + + ### Sensor Not Reachable + + If your Modulino's power LED isn't on or the sensor isn't responsive, first check that the board is properly connected: + + - Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. + - If the issue persists, make sure the Qwiic cable is properly clicked into place. + + ### Library Not Installed Properly + + If you encounter an issue with the `#include "modulino.h"` command, verify that the Modulino library is correctly installed: + - Check your IDE to ensure the library is installed and up-to-date. + - Re-install the library through the Library Manager. + + ### Inaccurate Values + +If the sensor values are not accurate, make sure: +- The sensor is not placed near any components that might generate heat (like motors or power supplies). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with readings. + +# What Is Next? + +Now that you've learned how to use your Modulino Thermo, you're all set to integrate it into your projects! + +- Experiment with temperature and humidity. What happens if you place your Modulino in the refrigerator? +- Try breathing near the sensor. Does the humidity change? +- Place your Modulino on the outside of your mug and fill it with a hot beverage. Can you create an automatic system to know when your tea has cooled down? +- How does the temperature change throughout the day at home? Let your Modulino run for an entire day and check out the data! + +# Conclusion + +The **Modulino Thermo** is a digital temperature and humidity sensor that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes accessing sensor data straightforward, allowing you to focus on experimenting or building your system logic. It’s a small, reliable module suited for both quick tests and longer-term setups. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-ardu/image.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/Modulino_Thermo_Power_Tree.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/Modulino_Thermo_Power_Tree.png new file mode 100644 index 0000000000..75ecb8a8e7 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/Modulino_Thermo_Power_Tree.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/ThermoPinouts.jpg b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/ThermoPinouts.jpg new file mode 100644 index 0000000000..22c8b59c70 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/ThermoPinouts.jpg differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-jumper.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-jumper.png new file mode 100644 index 0000000000..650231c828 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-jumper.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-qwiic-chain.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-qwiic-chain.png new file mode 100644 index 0000000000..28d62417a5 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-qwiic-chain.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-qwiik.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-qwiik.png new file mode 100644 index 0000000000..e10a27ebdb Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo-qwiik.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo.png new file mode 100644 index 0000000000..35591967a9 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/connection-guide-thermo.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/mp-usb-connection.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/mp-usb-connection.png new file mode 100644 index 0000000000..fb059f9e8b Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/mp-usb-connection.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/package-installer-overview.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/package-installer-overview.png new file mode 100644 index 0000000000..67678dc808 Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/package-installer-overview.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/schematic.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/schematic.png new file mode 100644 index 0000000000..b094fac53d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/assets/schematic.png differ diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/content.md b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/content.md new file mode 100644 index 0000000000..0a825a599d --- /dev/null +++ b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/content.md @@ -0,0 +1,209 @@ +--- +title: "How To Use The Modulino Thermo And MicroPython" +description: "Learn how to get the most out of your Modulino Thermo in a MicroPython environment." +tags: + - Modulino + - QWIIC + - I2C +author: 'Pedro Sousa Lima' +hardware: + - hardware/11.modulinos/modulinos/modulino-thermo +software: + - ide-v2 + - web-editor +--- +The Modulino Thermo is a modular sensor that measures temperature and humidity, making it perfect to add environmental monitoring to your projects! +The Modulino form factor is shaped with two QWIIC connectors and the I²C protocol integration, allowing the connection and programming of multiple modulinos in a very simple way. In addition to the QWIIC's connectors, the Modulinos also expose solderable pins that can be used in multiple ways and make them compatible with boards that are not QWIIC compatible. + +# General Characteristics + +The Modulino Thermo is capable of measuring temperature and relative humidity. Take a look at the following table to know more about its measuring ranges: + + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------|-------------|---------|---------|---------|------| +| Range | Temperature | \-40 | \- | +125 | °C | +| \- | Humidity | 0 | \- | 100% | φ RH | +| Accuracy | Temperature | \- | ±0,25 | \- | °C | +| \- | Humidity | \- | ±2.8% | \- | φ | + +## Sensor Details + +The HS3003 sensor from Renesas is the core component of this module. This temperature and humidity sensor natively supports digital communication (I²C), meaning it connects directly to the I²C bus on the module without requiring additional conversion circuitry. + +The default address for the Module is: + +| Modulino I²C Address | Hardware I²C Address | +|----------------------|----------------------| +| 0x44 | 0x44 | + +***Note: Since the address cannot be changed on this Modulino specifically, using two or more identical modules on the same I²C bus will result in address conflicts and cause communication issues.*** + +## Pinout + +The pinout for the Modulino Thermo is shown below. Please note that the exposed solderable pins are directly connected to the QWIIC connectors using the same I²C interface. + +![Arduino Thermo Pinout](assets/ThermoPinouts.jpg) + +### 1x4 Header (I2C) +The pinout for the Modulino Buzzer is shown below. While the recommended connection method is via the QWIIC connectors, this solderable header provides a connection option when using the modulino with a non-QWIIC compatible board. + +| Pin | Function | +|-------|--------------| +| GND | Ground | +| 3V3 | Power Supply | +| SDA | I²C Data | +| SCL | I²C Clock | + +Depending on the board connected to the modulino, the I²C pin names to program it may differ. Please check the [board tutorials](https://docs.arduino.cc/hardware/) on your modulino's compatible board or the [Modulino library](https://github.com/arduino-libraries/Modulino/tree/main/docs) to learn more. + +## Power Specifications + +The board is typically powered by +3.3 VDC when using the QWIIC interface as per the I²C standard. + +| Parameter | Condition | Minimum | Typical | Maximum | Unit | +|-----------------|-------------------------------------------------------------------|---------|-------------|---------|------| +| Supply Voltage | \- | 2.3 | 3.3 (QWIIC) | 5.5 | V | +| Average Current | 1 humidity + temperature measurement/s 3.3 VDD - Max 5,5@ 3.3 VDD | \- | 1024.4 | 24.4 | µA | + +The module additionally includes a power LED that draws 1 mA and turns on as soon as it is powered. +J1 (Qwiic connector), J2 (Qwiic connector), and the headers all share the same power branch. The power distribution of the module is therefore as follows: +![Power Tree Modulino Thermo](assets/Modulino_Thermo_Power_Tree.png) + +## Schematic + +The Modulino Thermo uses a simple circuit, as shown in the schematic below: +![Full Schematic Modulino Thermo](assets/schematic.png) +The main component is the **HS3003** sensor (U1), which handles both temperature and humidity measurements, as well as I²C communication. +You can connect to the I²C pins (SDA and SCL) using either the **QWIIC connectors** (J1 and J2, this is the recommended method) or the **solderable pins** (J4). The board runs on **3.3V**, which comes from the QWIIC cable or the **3V3 pin** on J4. +There's also a small power indicator LED that lights up when the board is on. +You can grab the full schematic and PCB files from the [Modulino Thermo](https://docs.arduino.cc/hardware/modulinos/modulino-thermo) product page. + +# How To Connect Your Modulino + +The easiest and most reliable way to connect your Modulino is through the QWIIC Connect System. It’s plug-and-play, uses standard I²C, and makes it easy to join multiple modules. If your board supports QWIIC, this is the recommended way to go. Note that the dedicated I²C pins will differ from board to board meaning it is always a good idea to check your specific model. + +If your board doesn’t have a QWIIC connector, you can still access the same I²C bus and power the module using the solderable header pads just make sure you wire it to 3.3V and match the I²C pinout. + +![Modulino Wiring Options QWIIC(A - recommended) and Header(B)](assets/connection-guide-thermo.png) + +## QWIIC Connector + +Whenever available, the **QWIIC Connect System** is the preferred method. Connecting to the Modulino is extremely simple, just use a standard QWIIC cable to connect your board to either of the QWIIC connectors on the Modulino. Because the cable and connectors are polarized, there is no need to worry about accidentally swapping connections. + +QWIIC is a plug-and-play I²C Connect System that uses standardized 4-pin connectors: +- GND +- 3.3V +- SDA (Data) +- SCL (Clock) + +![Connection Guide QWIIC](assets/connection-guide-thermo-qwiik.png) + +The Modulino features two QWIIC connectors, which are internally connected in parallel. This means you can daisy-chain multiple modules easily by connecting additional QWIIC cables between them. + +## Solderable Header +When QWIIC is not available, you can use the exposed solderable pins on the module. You can solder pins to the unpopulated pads; just remember the pinout provided in this guide to connect to the right pins of your board. + +![Connection Guide Solder Pads](assets/connection-guide-thermo-jumper.png) + +## Daisy-Chaining Multiple Modulinos + +Regardless of whether you connect the first Modulino via QWIIC or through the solderable pins, you can still take advantage of the extra QWIIC connector to daisy-chain additional modules. + +Each Modulino includes two QWIIC connectors wired in parallel, allowing you to connect one module to the next in a chain. As long as each module is configured with a unique I²C address, they can all communicate on the same bus as long as you select the correct I²C pins depending on your board. + +This approach keeps your setup clean, modular, and expandable without adding extra wiring complexity. + +![Modulino Wiring Options](assets/connection-guide-thermo-qwiic-chain.png) +***The number of modules you can connect will depend on what modules you are chaining together, as this system allows for multiple sensors from different manufacturers to be added. Also, the cables you use for these connections will play a significant role in the setup’s performance. Ensure your cables are correctly connected and capable of handling the required data transfer. +Each module should have a unique address on a chain if you plan to address them individually. Multiple modules with the same address will cause conflicts on the I²C bus.*** + +# How To Program Your Modulino + +## Installing The Modulino Library +To program your Modulino it is recommended you use the official ```Modulino``` micropython library available [here](https://github.com/arduino/arduino-modulino-mpy). The library is fully compatible with the no **Arduino Lab for MicroPython**. +For information on installing the **Arduino Lab for MicroPython** please visit our [page](https://docs.arduino.cc/micropython/first-steps/install-guide/). + +The ```Modulino``` library is not available by default on MicroPython devices hence installation is needed. +To simplify the process the [MicroPython Package Installer](https://github.com/arduino/lab-micropython-package-installer/releases) is recommended as it will provide a graphical interface to guide installation. +After installation, you should now be able to: + +1. Open the tool. +2. Plug in your board to the computer. +![USB Connection](assets/mp-usb-connection.png) + +If the board does not appear in the Detected Boards section, click Reload. If the board is still undetected, ensure no other programs (e.g., a code editor) are using the board's COM port. + +4. Search for the ```Modulino``` package by filling in the text box on the search feature. +5. Click Install and wait for the installation confirmation. +6. Disconnect the board from the tool before returning to your code editor to avoid conflicts due to a busy COM port. + +![Package Installer Overview](assets/package-installer-overview.png) + +The module should now be includable in your program using: +```from modulino import ModulinoThermo``` + +## Get Temperature And Humidity Data + +Getting data from the sensor is fairly simple using the ```Modulino``` library. +For the **Thermo** there are two crucial functions: +- ```.temperature``` - Provides the temperature measurement from the sensor. (Default in °C) +- ```.relative_humidity``` - Provides the relative humidity from the sensor. (Default in %) +By default the Modulino library uses ```Wire1``` if your board model has a different pinout for the dedicated I²C pins you might have to edit it as instructed [here](https://github.com/arduino/arduino-modulino-mpy/tree/main/docs#%E2%84%B9%EF%B8%8F-using-3rd-party-boards). More information on **Wire** can be found [here](https://docs.arduino.cc/language-reference/en/functions/communication/wire/). + +Here is an example of how to implement these functions to acquire data: + +```python +from modulino import ModulinoThermo +from time import sleep + +thermo_module = ModulinoThermo() + +while True:     + temperature = thermo_module.temperature + humidity = thermo_module.relative_humidity +    +    if temperature != None and humidity != None: +        print(f"🌡️ Temperature: {temperature:.1f} °C") +        print(f"💧 Humidity: {humidity:.1f} %")     +        print() +        +    sleep(2) +``` + +The code example provided shows how to initialize the sensor, read the data, and display it on the serial monitor. The data is updated every second, showing the current temperature and humidity values in real time. +It can be easily adapted to trigger actions at certain temperature/humidity thresholds or to log data for analysis. + +### Troubleshooting + + #### Sensor Not Reachable + + If your Modulino's power LED isn't on or the sensor isn't responsive, first check that the board is properly connected: + + - Ensure both the board and the Modulino are connected to your computer, and that the power LEDs on both are lit. + - If the issue persists, make sure the Qwiic cable is properly clicked into place. + + #### Library Not Installed Properly + + If you encounter an issue with the `#include "modulino.h"` command, verify that the Modulino library is correctly installed: + - Check your IDE to ensure the library is installed and up-to-date. + - Re-install the library through the Library Manager. + + #### Inaccurate Values + +If the sensor values are not accurate, make sure: +- The sensor is not placed near any components that might generate heat (like motors or power supplies). +- All exposed electronics are not touching any conductive surfaces, as this could interfere with readings. + +# What Is Next? + +Now that you've learned how to use your Modulino Thermo, you're all set to integrate it into your projects! + +- Experiment with temperature and humidity. What happens if you place your Modulino in the refrigerator? +- Try breathing near the sensor. Does the humidity change? +- Place your Modulino on the outside of your mug and fill it with a hot beverage. Can you create an automatic system to know when your tea has cooled down? +- How does the temperature change throughout the day at home? Let your Modulino run for an entire day and check out the data! + +# Conclusion + +The **Modulino Thermo** is a digital temperature and humidity sensor that communicates over I²C and follows the Modulino form factor. It includes standard Qwiic connectors for quick, solderless connections and easy daisy-chaining with other modules. Paired with the Modulino library, it makes accessing sensor data straightforward, allowing you to focus on experimenting or building your system logic. It’s a small, reliable module suited for both quick tests and longer-term setups. \ No newline at end of file diff --git a/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/image.png b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/image.png new file mode 100644 index 0000000000..bceefec75d Binary files /dev/null and b/content/hardware/11.accessories/modulino-nodes/modulino-thermo/tutorials/how-thermo-mp/image.png differ diff --git a/content/hardware/_unlisted/kits/braccio++/certifications/Arduino_T050002-CERT_RCM.pdf b/content/hardware/_unlisted/kits/braccio++/certifications/Arduino_T050002-CERT_RCM.pdf deleted file mode 100644 index b26f3fd1a4..0000000000 Binary files a/content/hardware/_unlisted/kits/braccio++/certifications/Arduino_T050002-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/_unlisted/kits/braccio++/product.md b/content/hardware/_unlisted/kits/braccio++/product.md index 41d4793696..7affd282e6 100644 --- a/content/hardware/_unlisted/kits/braccio++/product.md +++ b/content/hardware/_unlisted/kits/braccio++/product.md @@ -1,6 +1,6 @@ --- title: Braccio ++ -certifications: [CE,FCC,IC,RCM,RoHS,UKCA] +certifications: [CE, FCC, IC, RoHS, UKCA] sku: [T050002] status: end-of-life --- diff --git a/content/hardware/_unlisted/kits/explore-iot-kit/certifications/Arduino_AKX00027-CERT_RCM.pdf b/content/hardware/_unlisted/kits/explore-iot-kit/certifications/Arduino_AKX00027-CERT_RCM.pdf deleted file mode 100644 index c172ce50e4..0000000000 Binary files a/content/hardware/_unlisted/kits/explore-iot-kit/certifications/Arduino_AKX00027-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/_unlisted/kits/explore-iot-kit/product.md b/content/hardware/_unlisted/kits/explore-iot-kit/product.md index 16613d0e29..c71693ec54 100644 --- a/content/hardware/_unlisted/kits/explore-iot-kit/product.md +++ b/content/hardware/_unlisted/kits/explore-iot-kit/product.md @@ -1,5 +1,5 @@ --- title: Explore IoT Kit -certifications: [CE, UKCA, FCC, IC, RCM, UKCA, RoHS] +certifications: [CE, UKCA, FCC, IC, UKCA, RoHS] sku: [AKX00027, AKX01027, AKX03027, AKX04027] --- diff --git a/content/hardware/_unlisted/kits/opla-iot-kit/certifications/Arduino_AKX00026-CERT_RCM.pdf b/content/hardware/_unlisted/kits/opla-iot-kit/certifications/Arduino_AKX00026-CERT_RCM.pdf deleted file mode 100644 index 5460524264..0000000000 Binary files a/content/hardware/_unlisted/kits/opla-iot-kit/certifications/Arduino_AKX00026-CERT_RCM.pdf and /dev/null differ diff --git a/content/hardware/_unlisted/kits/opla-iot-kit/product.md b/content/hardware/_unlisted/kits/opla-iot-kit/product.md index ad6ca9e9f0..0c167e3f07 100644 --- a/content/hardware/_unlisted/kits/opla-iot-kit/product.md +++ b/content/hardware/_unlisted/kits/opla-iot-kit/product.md @@ -1,5 +1,5 @@ --- title: Oplà IoT Kit -certifications: [CE, FCC, IC, RCM, UKCA, RoHS] +certifications: [CE, FCC, IC, UKCA, RoHS] sku: [AKX00026] --- diff --git a/content/learn/01.starting-guide/03.the-arduino-web-editor/arduino-web-editor.md b/content/learn/01.starting-guide/03.the-arduino-web-editor/arduino-web-editor.md index c8ef032459..55ff818459 100644 --- a/content/learn/01.starting-guide/03.the-arduino-web-editor/arduino-web-editor.md +++ b/content/learn/01.starting-guide/03.the-arduino-web-editor/arduino-web-editor.md @@ -54,4 +54,4 @@ Now that you are all set up, **let’s try to make your board blink!** ![On-board LED blinking](./assets/onboard-led-blinking.gif) -**Congratulations!** You have successfully programmed your board to blink its on-board LED! You can find more information about the [Arduino Cloud Editor here](https://create.arduino.cc/projecthub/Arduino_Genuino/getting-started-with-arduino-web-editor-on-various-platforms-4b3e4a). +**Congratulations!** You have successfully programmed your board to blink its on-board LED! You can find more information about the [Arduino Cloud Editor here](/arduino-cloud/guides/overview). diff --git a/content/micropython/00.first-steps/03.runtime-package/assets/connect-device.png b/content/micropython/00.first-steps/03.runtime-package/assets/connect-device.png new file mode 100644 index 0000000000..5047c4e0e7 Binary files /dev/null and b/content/micropython/00.first-steps/03.runtime-package/assets/connect-device.png differ diff --git a/content/micropython/00.first-steps/03.runtime-package/assets/install-package.png b/content/micropython/00.first-steps/03.runtime-package/assets/install-package.png new file mode 100644 index 0000000000..c3cc07673e Binary files /dev/null and b/content/micropython/00.first-steps/03.runtime-package/assets/install-package.png differ diff --git a/content/micropython/00.first-steps/03.runtime-package/runtime-package.md b/content/micropython/00.first-steps/03.runtime-package/runtime-package.md new file mode 100644 index 0000000000..077eb8d383 --- /dev/null +++ b/content/micropython/00.first-steps/03.runtime-package/runtime-package.md @@ -0,0 +1,375 @@ +--- +title: "Arduino Runtime for MicroPython" +description: "Learn how to use the Arduino MicroPython runtime library, which allows you to write MicroPython code in a familiar Arduino style while adding a few helpers." +author: "Karl Söderby" +tags: [MicroPython, Runtime] +micropython_type: test +--- + +The [Arduino Runtime Library](https://github.com/arduino/arduino-runtime-mpy/tree/main) is a MicroPython library that allows you to write and program your board using the classic `setup()` and `loop()` construct. It also adds a few helpers along the way. + +The library was designed to make it easier to create programs, particularly for those familiar with the Arduino C++ environment, but it also adds a few interesting tricks to better help your program run and stop. + +In this tutorial, you will learn how the library works, along with a set of examples that will get you started. + +## Requirements + +To follow this tutorial, you will need to have the following requirements ticked: + +### Hardware Requirements + +- [A MicroPython compatible board](/micropython/first-steps/install-guide/#micropython-compatible-arduino-boards) (in this tutorial, we will be using an [Arduino Nano ESP32](https://store.arduino.cc/products/nano-esp32)) +- MicroPython installed on your board (see [installation instructions for MicroPython](/micropython/first-steps/install-guide/)). + +### Software Requirements + +- [Arduino Lab for Micropython](https://labs.arduino.cc/en/labs/micropython) - an editor where we can create and run MicroPython scripts on an Arduino board. +- [Arduino MicroPython Package Installer](https://labs.arduino.cc/en/labs/micropython-package-installer) - for installing **MicroPython libraries** on an Arduino board. + +## Installation + +To use the Arduino Runtime library, we will need to install it first. + +1. Download and install the [Arduino MicroPython Package Installer](https://labs.arduino.cc/en/labs/micropython-package-installer). +2. Connect your board to your computer. +3. Run the tool. In the tool, you should now see your board connected. + + ![Board connected.](assets/connect-device.png) + +4. After verifying that your board is connected, click on the search field, and search for **Arduino Runtime**. Install the library. + + ![Install the library.](assets/install-package.png) + +5. When the installation is complete, we are ready to use the library. + +***In case the installation fails, make sure the board is disconnected from your editor, as it would prevent it from being recognised and interacted with.*** + +## Basic Example + +We will begin by one of the most known example: blinking an LED. Let's take a look at the code example below: + +```python +from arduino import * + +led = 'LED_BUILTIN' +def setup(): + print('starting my program') + +def loop(): + print('loopy loop') + digital_write(led, HIGH) + delay(500) + digital_write(led, LOW) + delay(500) + +start(setup, loop) +``` + +This program has two main functions: `setup()` and `loop()`. If you are unfamiliar with this concept, here's how it works: + +- `setup()` - this function will run just once, at the start of a program. Like in this example, we use `print('starting my program')`. +- `loop()` - this function will continue to run, until you disrupt the program by disconnecting the board or stopping the script. + +Inside of the functions, you can see that we are using `digital_write(led, HIGH)`. This is a function that will enable a pin on the board, and write it high (or low). Since we configured it at the top as `'LED_BUILTIN'`, we will control that LED on the board. + +At the bottom of the program, we have something called `start()`. This function will launch the program launch the program and keep it in a running state until we manually stop it or an error occurs. This ensures a more user-friendly operation and allows us to catch the occurrence and act upon it. + +## Common Examples + +Arduino Runtime was created to simplify the code creation when programming in MicroPython, providing a more user-friendly syntax that allows you to understand the programs you create a bit better. + +Now that we have everything installed, and our basic example tested out, let's take a look at some of the more common examples. + +***The API is listed at [the end of this article](#runtime-api). You can also view the [source code on GitHub](https://github.com/arduino/arduino-runtime-mpy/tree/main) for further understanding.*** + +### Definitions + +Pin definitions such as `'LED_BUILTIN'` (built-in LED), `'D1'` (digital pin 1) and `'A0'` (analog pin 0), are only available to official Arduino boards. This definitions are used throughout the examples in this tutorial. If you are not using an official Arduino board, these definitions will not work. + +### Pin Mode + +- `pin_mode(pin, mode)` + +Configures a pin as an input or an output. + +```python +pin = "D6" + +def setup(): + pin_mode(pin, OUTPUT) +``` + +### Analog Read + +- `analog_read(pin)` + +Analog read is a classic example where you read the voltage from an analog pin and print it to the console. + +```python +pin = "A0" + +def setup(): + print("Analog Read Example") + +def loop(): + value = analog_read(pin) + print(value) + delay(50) + +start(setup, loop) +``` + +### Analog Write (PWM) + +- `analog_write(pin, duty_cycle)` + +To write an analog signal (using PWM), we can use the `analog_write()` method. This function takes a `pin` and the `duty_cycle` (0-255) as input. + +The example below sets the pin to "half capacity", and if you connect an LED to this pin, it will shine at half brightness. + +```python +pin = "LED_BUILTIN" +brightness = 127 #half brightness + +def setup(): + print("Analog Write Example") + +def loop(): + analog_write(pin, brightness) + +start(setup, loop) +``` + +### Digital Read + +- `digital_read(pin)` + +Reads a digital pin and returns a HIGH (1) or LOW (0) value. This value is then printed in the console. + +```python +pin = "D2" + +def setup(): + print("Digital Read Example") + +def loop(): + value = digital_read(pin) + print(value) + delay(50) + +start(setup, loop) +``` + +### Digital Write + +- `digital_write(pin)` + +Writes a **HIGH (1)** or **LOW (0)** value to a digital pin. + +```python +pin = "LED_BUILTIN" + +def setup(): + print("Digital Write Example") + +def loop(): + digital_write(pin, HIGH) + +start(setup, loop) +``` + +### Delay + +- `delay(time)` + +Freezes the program for the duration specified in _milliseconds_. + +Below is a demonstration of the classic blink example: + +```python +led = "LED_BUILTIN" + +def setup(): + print("Delay Example") + pin_mode(led, OUTPUT) + +def loop(): + digital_write(led, HIGH) + delay(1000) + digital_write(led, LOW) + delay(1000) + +start(setup, loop) +``` + +## Runtime API + +The API for the Arduino Runtime Library can be found below. See the table for a quick overview: + +| Function | Description | Parameters | Returns | Alias | +| ------------------- | ---------------------------------------------- | ------------------------------------------------------------- | ------------------------ | ---------------- | +| `start` | Begins main loop with hooks | `setup`, `loop`, `cleanup`, `preload` | None | None | +| `map_float` | Maps a value from one range to another (float) | `x`, `in_min`, `in_max`, `out_min`, `out_max` | Mapped value (float/int) | None | +| `map_int` | Maps a value from one range to another (int) | Same as `map_float` | Mapped value (int) | None | +| `random` | Generates a pseudo-random integer | `low`, `high` (optional) | Random integer | None | +| `constrain` | Clamps value within min and max | `val`, `min_val`, `max_val` | Clamped value | None | +| `lerp` | Linear interpolation between two values | `start`, `stop`, `amount` | Interpolated value | None | +| `pin_mode` | Sets GPIO pin mode | `pin`, `mode` | Configured `Pin` object | `pinMode()` | +| `digital_write` | Writes digital value to a pin | `pin`, `state` | None | `digitalWrite()` | +| `digital_read` | Reads digital state from a pin | `pin` | `0` or `1` | `digitalRead()` | +| `analog_read` | Reads analog value from a pin | `pin` | 0–65535 | `analogRead()` | +| `analog_write` | Writes PWM duty cycle to a pin | `pin`, `duty_cycle` (0–255) | None | `analogWrite()` | +| `delay` | Pauses execution in milliseconds | `ms` | None | None | +| `get_template_path` | Gets path to default sketch template | None | Template path (string) | None | +| `create_sketch` | Creates new sketch from template | `sketch_name`, `destination_path`, `overwrite`, `source_path` | Created sketch path | None | +| `copy_sketch` | Copies existing sketch to new location | `source_path`, `destination_path`, `name`, `overwrite` | Copied sketch path | None | + +### start(setup=None, loop=None, cleanup=None, preload=None) + +Begins the main execution loop, calling user-defined hooks. + +- **Parameters:** + - `setup`: Initialization function. + - `loop`: Function called repeatedly in a loop. + - `cleanup`: Function called on exception or interrupt. + - `preload`: Function run once before setup. +- **Returns:** None. +- **Alias:** None. + +### pin_mode(pin, mode) + +Configures a GPIO pin mode. + +- **Parameters:** + - `pin`: Pin identifier or number. + - `mode`: `INPUT` or `OUTPUT`. +- **Returns:** Configured `Pin` object. +- **Alias:** `pinMode()`. + +### digital_write(pin, state) + +Writes a digital state to a pin configured as output. + +- **Parameters:** + - `pin`: Pin number. + - `state`: `HIGH` or `LOW`. +- **Returns:** None. +- **Alias:** `digitalWrite()`. + +### digital_read(pin) + +Reads a digital state from a pin configured as input. + +- **Parameters:** + - `pin`: Pin number. +- **Returns:** `0` or `1`. +- **Alias:** `digitalRead()`. + +### analog_read(pin) + +Reads a 16-bit ADC value from a pin. + +- **Parameters:** + - `pin`: Pin number. +- **Returns:** Integer between 0 and 65535. +- **Alias:** `analogRead()`. + +### analog_write(pin, duty_cycle) + +Writes a PWM duty cycle (0–255) to a pin. + +- **Parameters:** + - `pin`: Pin number. + - `duty_cycle`: 0–255 duty value. +- **Returns:** None. +- **Alias:** `analogWrite()`. + +### delay(ms) + +Pauses execution for a specified number of milliseconds. + +- **Parameters:** + - `ms`: Milliseconds to sleep. +- **Returns:** None. +- **Alias:** None. + +### map_float(x, in_min, in_max, out_min, out_max) + +Maps a numeric value from one range to another, allowing floating-point output. + +- **Parameters:** + - `x`: Input value to map. + - `in_min`: Lower bound of input range. + - `in_max`: Upper bound of input range. + - `out_min`: Lower bound of output range. + - `out_max`: Upper bound of output range. +- **Returns:** The mapped value (float or int). +- **Alias:** None. + +### map_int(x, in_min, in_max, out_min, out_max) + +Maps a numeric value from one range to another and returns an integer. + +- **Parameters:** same as `map_float`. +- **Returns:** The mapped value as int. +- **Alias:** None. + +### random(low, high=None) + +Generates a pseudo-random integer within a specified range. + +- **Parameters:** + - `low`: If `high` is `None`, acts as upper bound (exclusive); otherwise, lower bound (inclusive). + - `high` (optional): Upper bound (exclusive). +- **Returns:** A random integer in the computed range. +- **Alias:** None. + +### constrain(val, min_val, max_val) + +Clamps a value to lie within a specified minimum and maximum. + +- **Parameters:** + - `val`: Value to clamp. + - `min_val`: Minimum allowable value. + - `max_val`: Maximum allowable value. +- **Returns:** The clamped value. +- **Alias:** None. + +### lerp(start, stop, amount) + +Performs linear interpolation between two numeric values. + +- **Parameters:** + - `start`: Start value. + - `stop`: End value. + - `amount`: Interpolation factor (0.0 = `start`, 1.0 = `stop`). +- **Returns:** The interpolated value. +- **Alias:** None. + +### get_template_path() + +Retrieves the filesystem path to the default sketch template. + +- **Parameters:** none. +- **Returns:** Template file path (string). +- **Alias:** None. + +### create_sketch(sketch_name=None, destination_path='.', overwrite=False, source_path=None) + +Generates a new sketch file from a template. + +- **Parameters:** + - `sketch_name` (optional): Desired filename without extension. + - `destination_path` (optional): Directory to create the sketch in. + - `overwrite` (optional): Overwrite existing file if `True`. + - `source_path` (optional): Custom template path. +- **Returns:** Path to the created sketch file. +- **Alias:** None. + +### copy_sketch(source_path='', destination_path='.', name=None, overwrite=False) + +Duplicates an existing sketch file to a new location/name. + +- **Parameters:** same as `create_sketch` except uses existing source file. +- **Returns:** Path to the copied sketch. +- **Alias:** None. \ No newline at end of file diff --git a/content/micropython/videoInfo.md b/content/micropython/videoInfo.md index 2a14475aa3..126f1e23fb 100644 --- a/content/micropython/videoInfo.md +++ b/content/micropython/videoInfo.md @@ -5,26 +5,26 @@ info: { icon: IconBoard, title: Board Installation, - description: Create smart dashboards to control connected devices using few coding, - link: /micropython/basics/board-installation, + description: Install MicroPython on your board, + link: /micropython/first-steps/install-guide, }, { icon: IconBrackets, title: Code Editors, - description: Create smart dashboards to control connected devices using few coding, - link: /micropython/basics/code-editors, + description: Learn more about the Arduino Lab for MicroPython and how to use the code editor for your MicroPython projects, + link: /micropython/environment/code-editor, }, { icon: IconBooks, title: MicroPython Basics, - description: An introduction to MicroPython, - link: /micropython/basics/micropython-basics, + description: A brief introduction to MicroPython, + link: /micropython/first-steps/intro-micropython, }, { icon: IconSmartDashBoard, title: Examples by Board, - description: Create smart dashboards to control connected devices using few coding, - link: /micropython/basics/board-examples, + description: Take full advantage of board-specific features, + link: /micropython/board-examples/giga-r1-wifi, }, ] --- diff --git a/content/retired/03.kits/arduino-engineering-kit/content.md b/content/retired/03.kits/arduino-engineering-kit/content.md index aa30ba26a5..dcef624dd3 100644 --- a/content/retired/03.kits/arduino-engineering-kit/content.md +++ b/content/retired/03.kits/arduino-engineering-kit/content.md @@ -30,7 +30,7 @@ The kit is sold in a hard plastic, stackable tool box for storage and years of r In addition, students get access to a dedicated e-learning platform and other learning materials. Additionally, they are granted a one-year individual license of MATLAB and Simulink. This license is for educational use only, not for government, research, commercial, or other organizational use. -### Need Help? +## Need Help? * On the Software [on the Arduino Forum](https://forum.arduino.cc/index.php?board=63.0) * On Projects [on the Arduino Forum](https://forum.arduino.cc/index.php?board=124.0) diff --git a/content/tutorials/generic/arduino-linux-on-up2-board-with-intel-mraa/arduino-linux-on-up2-board-with-intel-mraa.md b/content/retired/04.other/arduino-linux-on-up2-board-with-intel-mraa/arduino-linux-on-up2-board-with-intel-mraa.md similarity index 100% rename from content/tutorials/generic/arduino-linux-on-up2-board-with-intel-mraa/arduino-linux-on-up2-board-with-intel-mraa.md rename to content/retired/04.other/arduino-linux-on-up2-board-with-intel-mraa/arduino-linux-on-up2-board-with-intel-mraa.md diff --git a/content/tutorials/generic/arduino-linux-on-up2-board-with-intel-mraa/assets/intel_mraa_RqcmkLSP8z.png b/content/retired/04.other/arduino-linux-on-up2-board-with-intel-mraa/assets/intel_mraa_RqcmkLSP8z.png similarity index 100% rename from content/tutorials/generic/arduino-linux-on-up2-board-with-intel-mraa/assets/intel_mraa_RqcmkLSP8z.png rename to content/retired/04.other/arduino-linux-on-up2-board-with-intel-mraa/assets/intel_mraa_RqcmkLSP8z.png diff --git a/content/tutorials/generic/arduino-linux-on-up2-board-with-intel-mraa/assets/up2_leds_bb_GNal6juoCF.png b/content/retired/04.other/arduino-linux-on-up2-board-with-intel-mraa/assets/up2_leds_bb_GNal6juoCF.png similarity index 100% rename from content/tutorials/generic/arduino-linux-on-up2-board-with-intel-mraa/assets/up2_leds_bb_GNal6juoCF.png rename to content/retired/04.other/arduino-linux-on-up2-board-with-intel-mraa/assets/up2_leds_bb_GNal6juoCF.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/example_hOfWaKDwJw.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/example_hOfWaKDwJw.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/example_hOfWaKDwJw.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/example_hOfWaKDwJw.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/intel_gettingstarted_MCXEgoQ813.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/intel_gettingstarted_MCXEgoQ813.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/intel_gettingstarted_MCXEgoQ813.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/intel_gettingstarted_MCXEgoQ813.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/monitor_UzYEwHOZw1.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/monitor_UzYEwHOZw1.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/monitor_UzYEwHOZw1.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/monitor_UzYEwHOZw1.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/mydevices_raRSvtOAl8.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/mydevices_raRSvtOAl8.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/mydevices_raRSvtOAl8.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/mydevices_raRSvtOAl8.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/output_GoNkEM4syg.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/output_GoNkEM4syg.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/output_GoNkEM4syg.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/output_GoNkEM4syg.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/running_8WxGWRLuEG.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/running_8WxGWRLuEG.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/running_8WxGWRLuEG.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/running_8WxGWRLuEG.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_14_17_39_hUVJ4SxyAh.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_14_17_39_hUVJ4SxyAh.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_14_17_39_hUVJ4SxyAh.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_14_17_39_hUVJ4SxyAh.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_07_28_RLxedgycYm.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_07_28_RLxedgycYm.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_07_28_RLxedgycYm.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_07_28_RLxedgycYm.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_15_48_nA37NW5BoE.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_15_48_nA37NW5BoE.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_15_48_nA37NW5BoE.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_15_48_nA37NW5BoE.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_17_08_6AxIXVNTcc.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_17_08_6AxIXVNTcc.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_17_08_6AxIXVNTcc.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_17_08_6AxIXVNTcc.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_22_43_S04SRBdaEe.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_22_43_S04SRBdaEe.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_22_43_S04SRBdaEe.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_15_22_43_S04SRBdaEe.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_20_29_Hz0JuNiuek.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_20_29_Hz0JuNiuek.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_20_29_Hz0JuNiuek.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_20_29_Hz0JuNiuek.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_25_55_lZ1QGRAPnd.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_25_55_lZ1QGRAPnd.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_25_55_lZ1QGRAPnd.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_25_55_lZ1QGRAPnd.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_02_Lsp7ZfYbB6.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_02_Lsp7ZfYbB6.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_02_Lsp7ZfYbB6.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_02_Lsp7ZfYbB6.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_11_2yL30GxAId.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_11_2yL30GxAId.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_11_2yL30GxAId.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_32_11_2yL30GxAId.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_35_41_SP9sKDirwY.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_35_41_SP9sKDirwY.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_35_41_SP9sKDirwY.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_35_41_SP9sKDirwY.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_41_31_daj406T7wm.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_41_31_daj406T7wm.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_41_31_daj406T7wm.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_41_31_daj406T7wm.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_48_20_VVyegAtOEV.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_48_20_VVyegAtOEV.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_48_20_VVyegAtOEV.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_48_20_VVyegAtOEV.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_37_WuHBQ4vyj8.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_37_WuHBQ4vyj8.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_37_WuHBQ4vyj8.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_37_WuHBQ4vyj8.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_53_7vqy4vRXOc.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_53_7vqy4vRXOc.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_53_7vqy4vRXOc.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-08-08_17_51_53_7vqy4vRXOc.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_35_04_pTErVotKc3.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_35_04_pTErVotKc3.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_35_04_pTErVotKc3.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_35_04_pTErVotKc3.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_44_26_XE87GVtWGK.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_44_26_XE87GVtWGK.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_44_26_XE87GVtWGK.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_44_26_XE87GVtWGK.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_45_03_Qgbdzji2Xe.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_45_03_Qgbdzji2Xe.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_45_03_Qgbdzji2Xe.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_45_03_Qgbdzji2Xe.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_49_11_WJgBrLvddz.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_49_11_WJgBrLvddz.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_49_11_WJgBrLvddz.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_49_11_WJgBrLvddz.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_54_41_YbkEaW2ylx.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_54_41_YbkEaW2ylx.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_54_41_YbkEaW2ylx.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-10-31_11_54_41_YbkEaW2ylx.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_20_38_1X27qbXZ78.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_20_38_1X27qbXZ78.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_20_38_1X27qbXZ78.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_20_38_1X27qbXZ78.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_35_49_FjzaRevFCO.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_35_49_FjzaRevFCO.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_35_49_FjzaRevFCO.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_35_49_FjzaRevFCO.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_44_26_uZn9InT8WB.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_44_26_uZn9InT8WB.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_44_26_uZn9InT8WB.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_44_26_uZn9InT8WB.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_50_40_FotGXqIPvt.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_50_40_FotGXqIPvt.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_50_40_FotGXqIPvt.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/screenshot_2017-11-13_12_50_40_FotGXqIPvt.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/stopped_4FZUsoCoYv.png b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/stopped_4FZUsoCoYv.png similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/assets/stopped_4FZUsoCoYv.png rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/assets/stopped_4FZUsoCoYv.png diff --git a/content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/getting-started-with-intel-based-platforms-on-arduino-create.md b/content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/getting-started-with-intel-based-platforms-on-arduino-create.md similarity index 100% rename from content/software/web-editor/getting-started-with-intel-based-platforms-on-arduino-create/getting-started-with-intel-based-platforms-on-arduino-create.md rename to content/retired/04.other/getting-started-with-intel-based-platforms-on-arduino-create/getting-started-with-intel-based-platforms-on-arduino-create.md diff --git a/content/tutorials/generic/intel-math-kernel-library-on-arduino/assets/1_CsVFimT6ke.png b/content/retired/04.other/intel-math-kernel-library-on-arduino/assets/1_CsVFimT6ke.png similarity index 100% rename from content/tutorials/generic/intel-math-kernel-library-on-arduino/assets/1_CsVFimT6ke.png rename to content/retired/04.other/intel-math-kernel-library-on-arduino/assets/1_CsVFimT6ke.png diff --git a/content/tutorials/generic/intel-math-kernel-library-on-arduino/assets/2_dZplITasct.png b/content/retired/04.other/intel-math-kernel-library-on-arduino/assets/2_dZplITasct.png similarity index 100% rename from content/tutorials/generic/intel-math-kernel-library-on-arduino/assets/2_dZplITasct.png rename to content/retired/04.other/intel-math-kernel-library-on-arduino/assets/2_dZplITasct.png diff --git a/content/tutorials/generic/intel-math-kernel-library-on-arduino/assets/intel_math_j5NKlynvAk.png b/content/retired/04.other/intel-math-kernel-library-on-arduino/assets/intel_math_j5NKlynvAk.png similarity index 100% rename from content/tutorials/generic/intel-math-kernel-library-on-arduino/assets/intel_math_j5NKlynvAk.png rename to content/retired/04.other/intel-math-kernel-library-on-arduino/assets/intel_math_j5NKlynvAk.png diff --git a/content/tutorials/generic/intel-math-kernel-library-on-arduino/intel-math-kernel-library-on-arduino.md b/content/retired/04.other/intel-math-kernel-library-on-arduino/intel-math-kernel-library-on-arduino.md similarity index 100% rename from content/tutorials/generic/intel-math-kernel-library-on-arduino/intel-math-kernel-library-on-arduino.md rename to content/retired/04.other/intel-math-kernel-library-on-arduino/intel-math-kernel-library-on-arduino.md diff --git a/content/software/ide-v2/tutorials/getting-started/01.ide-v2-downloading-and-installing/assets/download-ide.png b/content/software/ide-v2/tutorials/getting-started/01.ide-v2-downloading-and-installing/assets/download-ide.png new file mode 100644 index 0000000000..c19891b318 Binary files /dev/null and b/content/software/ide-v2/tutorials/getting-started/01.ide-v2-downloading-and-installing/assets/download-ide.png differ diff --git a/content/software/ide-v2/tutorials/getting-started/01.ide-v2-downloading-and-installing/ide-v2-downloading-and-installing.md b/content/software/ide-v2/tutorials/getting-started/01.ide-v2-downloading-and-installing/ide-v2-downloading-and-installing.md index c8dbd5f07d..495087203c 100644 --- a/content/software/ide-v2/tutorials/getting-started/01.ide-v2-downloading-and-installing/ide-v2-downloading-and-installing.md +++ b/content/software/ide-v2/tutorials/getting-started/01.ide-v2-downloading-and-installing/ide-v2-downloading-and-installing.md @@ -27,6 +27,8 @@ The Arduino IDE 2 is an open-source project. It is a big step from its sturdy pr Downloading the Arduino IDE 2 is done through the [Arduino Software page](https://www.arduino.cc/en/software). Here you will also find information on the other editors available to use. +[![ ](assets/download-ide.png)](https://www.arduino.cc/en/software) + ### Installation #### Windows diff --git a/content/software/ide-v2/tutorials/getting-started/02.ide-v2-uploading-a-sketch/ide-v2-uploading-a-sketch.md b/content/software/ide-v2/tutorials/getting-started/02.ide-v2-uploading-a-sketch/ide-v2-uploading-a-sketch.md index 84374bf2df..fe2d8cf343 100644 --- a/content/software/ide-v2/tutorials/getting-started/02.ide-v2-uploading-a-sketch/ide-v2-uploading-a-sketch.md +++ b/content/software/ide-v2/tutorials/getting-started/02.ide-v2-uploading-a-sketch/ide-v2-uploading-a-sketch.md @@ -56,6 +56,8 @@ So connect your board to the computer and select it from the drop down menu. You Congratulations, you have now uploaded a sketch to your Arduino board! +*** NOTE: If you are having any issues uploading a sketch, please have a look at our support page [here](https://support.arduino.cc/hc/en-us/articles/9207690465436-IDE-Support) *** + ### Please Read (Only Linux Users) It might happen that when you upload a sketch - after you have selected your board and the serial port - you get an error such as **"... Permission denied"**. If you get this error, you need to set serial port permission. diff --git a/content/software/plc-ide/tutorials/01.plc-ide-setup-license/content.md b/content/software/plc-ide/tutorials/01.plc-ide-setup-license/content.md index 61aa3e3397..2420adcbde 100644 --- a/content/software/plc-ide/tutorials/01.plc-ide-setup-license/content.md +++ b/content/software/plc-ide/tutorials/01.plc-ide-setup-license/content.md @@ -117,6 +117,8 @@ Open the Arduino PLC IDE program, and the welcome screen will greet you. The following sections will guide you through creating a project, downloading the runtime, and properly interfacing the Portenta Machine Control or Opta™ with its dedicated license activation procedure. +***Before using the PLC IDE with your Opta™ or Portenta Machine Control device, ensure proper memory partitioning using the latest Arduino Mbed OS board core (version 4.3.1 or higher) and libraries. Memory partitioning ensures your device is configured with the intended default settings for optimal PLC IDE functionality. Please refer to the [__Memory Partitioning for Use with the Arduino IDE tutorial__](https://docs.arduino.cc/tutorials/opta/memory-partitioning/) for more information.*** + ### 2. Project Setup Create a new project by clicking the middle **New project ...** button or **File > New Project**. diff --git a/content/software/plc-ide/tutorials/08.memory-partitioning b/content/software/plc-ide/tutorials/08.memory-partitioning new file mode 120000 index 0000000000..cf8f3c4204 --- /dev/null +++ b/content/software/plc-ide/tutorials/08.memory-partitioning @@ -0,0 +1 @@ +../../../hardware/07.opta/opta-family/opta/tutorials/08.memory-partitioning \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e94490ef9e..f334a47b7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@arduino/docs-arduino-cc": "^2.0.29", + "@arduino/docs-arduino-cc": "^2.0.35-hotfix.3", "gatsby": "^5.11.0", "gatsby-background-image": "^1.6.0", "gatsby-image": "^3.11.0", @@ -339,9 +339,9 @@ } }, "node_modules/@arduino/docs-arduino-cc": { - "version": "2.0.29", - "resolved": "https://npm.pkg.github.com/download/@arduino/docs-arduino-cc/2.0.29/af69ecb9b7b1fded5ec575951a35793300d7ace6", - "integrity": "sha512-85yEMesqdCV9+A/FzPfVjUJBFRsFuYOZK/3O/bGo7AnHmws7QRFgrsmIV+wjxJ1ZrkXUJxWSErOAlcIdhHRdtg==", + "version": "2.0.35-hotfix.3", + "resolved": "https://npm.pkg.github.com/download/@arduino/docs-arduino-cc/2.0.35-hotfix.3/e72b1738441963153b9cb87e9f9627e73da5cf4d", + "integrity": "sha512-v1A1tOZHa3kcGk/V9nmKuVEYiATRofyDeC5/OQoa1GmGuUtr4h/Bis1OSZjvV8cqyC5xgSXfORyPjFsyjUj9Uw==", "dependencies": { "@algolia/autocomplete-core": "^1.10.0", "@algolia/autocomplete-plugin-recent-searches": "^1.17.0", @@ -391,10 +391,10 @@ "prism-react-renderer": "^2.0.6", "prop-types": "^15.8.1", "qs": "^6.11.2", - "react": "^18.2.0", + "react": "^18.3.1", "react-aria": "^3.26.0", "react-content-loader": "^6.2.1", - "react-dom": "^18.2.0", + "react-dom": "^18.3.1", "react-helmet": "^6.1.0", "react-i18next": "^14.1.0", "react-instantsearch-dom": "^6.40.4", @@ -22661,9 +22661,10 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -22863,15 +22864,16 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-error-overlay": { @@ -24482,9 +24484,10 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } diff --git a/package.json b/package.json index a82c1aac57..c6a5c5c24f 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "homepage": "https://github.com/arduino/docs-content#readme", "dependencies": { - "@arduino/docs-arduino-cc": "^2.0.29", + "@arduino/docs-arduino-cc": "^2.0.35-hotfix.3", "gatsby": "^5.11.0", "gatsby-background-image": "^1.6.0", "gatsby-image": "^3.11.0", diff --git a/scripts/datasheet-rendering/render-datasheets.sh b/scripts/datasheet-rendering/render-datasheets.sh index d9141b328c..e22934ab98 100755 --- a/scripts/datasheet-rendering/render-datasheets.sh +++ b/scripts/datasheet-rendering/render-datasheets.sh @@ -23,13 +23,24 @@ if [ -n "$CI" ]; then fc-list | grep "NotoSansSC" fc-list | grep "NotoSansTC" - apt-get -qq update -y + sudo apt-get -qq update -y # SEE: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#chrome-headless-doesnt-launch-on-unix - apt-get -qq install -y -o=Dpkg::Use-Pty=0 ca-certificates fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils + sudo apt-get -qq install -y -o=Dpkg::Use-Pty=0 ca-certificates fonts-liberation libasound2 libappindicator3-1 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils + sudo apt-get -qq install -y chromium || sudo apt-get -qq install -y chromium-browser echo "Running on Node version: `node -v`" - npm install - npx datasheet-renderer config.json + + echo "Setting up registry..." + npm config set registry https://registry.npmjs.org/ + echo "Registry attuale: $(npm config get registry)" + + echo "Installing dependencies..." + export PUPPETEER_SKIP_DOWNLOAD=true + npm install --verbose + export PUPPETEER_EXECUTABLE_PATH=$(which chromium || which chromium-browser) + + echo "Running datasheet-renderer..." + time npx datasheet-renderer config.json exit $? fi