diff --git a/.github/workflows/search_new_update.yml b/.github/workflows/search_new_update.yml
index b54462765315..f42ec031d389 100644
--- a/.github/workflows/search_new_update.yml
+++ b/.github/workflows/search_new_update.yml
@@ -1,8 +1,7 @@
name: Algolia Docsearch Action
-on:
- schedule:
- - cron: "0 2 15 * *"
+# Trigger removed to never automatically run this action
+on: []
jobs:
algolia:
@@ -11,10 +10,8 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: crawling
- # the `uses' attribute must be a path, a Docker image, or owner/repo@ref
uses: darrenjennings/algolia-docsearch-action@master
with:
algolia_api_key: ${{ secrets.ALGOLIA_API_KEY }}
algolia_application_id: ${{ secrets.ALGOLIA_APPLICATION_ID }}
- # needs to be inside $GITHUB_WORKSPACE from actions/checkout step
file: docs/wiki_update.json
diff --git a/.gitignore b/.gitignore
index 80e645226ae8..0798a239e6cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -137,4 +137,6 @@ yarn.lock
.vscode/*
.*vs*
-
+# plugin FrontMatter
+frontmatter.json
+taxonomyDb.json
\ No newline at end of file
diff --git a/docs/Cloud_Chain/SenseCAP_Mate_APP/SenseCAP_APP.md b/docs/Cloud_Chain/SenseCAP_Mate_APP/SenseCAP_APP.md
deleted file mode 100644
index f09ca3d5cbd2..000000000000
--- a/docs/Cloud_Chain/SenseCAP_Mate_APP/SenseCAP_APP.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-description: SenseCAP Mate APP
-title: SenseCAP Mate APP
-keywords:
-- Cloud and Chain
-image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-last_update:
- date: 02/14/2023
- author: Matthew
----
-
-
-
-
-SenseCAP Mate APP is a powerful APP for data visualization and remote device management.
-
-
Save time - provides a scan-and-play experience to enable users to complete the whole configuration in 4 steps
-
Works for people with less or no technical background to get started with sensor data easily
-
Acquire and view data on clean user interfaces
-
Set time intervals: improve the battery efficiency
-
Set threshold values: focus on the data you need to take action for - coming soon
-
Send alarms if data is out of the safe range - coming soon
-
-
-
-
-
-
-
-
-## Download
-
-
The App is available in both iOS and Android versions.
-
-
-
-
-## Account
-
-SenseCAP Mate supports device configuration and remote management. To use the SenseCAP Portal platform and other functions, please register an account. SenseCAP Mate supports offline functionality, and you can opt out of an account if you only use the configuration sensor. Just click Skip.
-
-Note: Please select Global of Server Location. You can also create an account via the SenseCAP Portal
-
-
-## Config
-
-Select the corresponding product for quick binding.
-
-
-
Device
-View the bound devices, click on the device to view data and details.
-
-
-
-## User
-
-Account details and settings, app version, etc.
-
-
-
-
\ No newline at end of file
diff --git a/docs/Cloud_Chain/SenseCAP_Mate_APP/sensecraft_app.md b/docs/Cloud_Chain/SenseCAP_Mate_APP/sensecraft_app.md
new file mode 100644
index 000000000000..afb035d3e25a
--- /dev/null
+++ b/docs/Cloud_Chain/SenseCAP_Mate_APP/sensecraft_app.md
@@ -0,0 +1,128 @@
+---
+description: SenseCraft APP
+title: Introduction and Usage
+keywords:
+- App
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /sensecraft_app
+last_update:
+ date: 7/26/2024
+ author: Jessie
+---
+
+
+
+:::tip note
+SenseCAP Mate App is officially renamed as `SenseCraft` App!
+:::
+
+
+SenseCraft APP is a powerful APP for data visualization and device management.
+
+## Features
+
+* Save time - provides a scan-and-play experience to enable users to complete the whole configuration in 4 steps
+* Works for people with less or no technical background to get started with sensor data easily
+* Acquire and view data on clean user interfaces
+* Set time intervals: improve the battery efficiency
+* Set threshold values: focus on the data you need to take action for - coming soon
+* Send alarms if data is out of the safe range - coming soon
+
+## Download
+
+SenseCraft App is available in both iOS and Android versions.
+
+
+
+
+## Account
+
+SenseCraft supports device configuration and remote management. To use the SenseCAP Portal platform and other functions, please register an account.
+
+:::tip Note
+Please select `Global` of Server Location. You can also create an account via the SenseCAP Portal
+:::
+
+
+
+
+## Device
+
+* On the device page, you can add new devices by clicking the `+` in the upper right corner.
+
+
+
+* Click the target device to view the data.
+
+
+
+
+* Click the bell icon in the upper right corner to enter the message center.
+
+
+
+
+## AIGC
+
+AIGC is the AI-powered solution that helps you make the most of your sensor data and unlock the full potential of your sensor data.
+By connecting your SenseCAP sensors to the SenseCAP platform, you can easily collect and analyze data on environmental factors such as temperature, humidity, light, and air quality. Meanwhile, our powerful AI algorithms then use this data to provide you with actionable insights and recommendations that can help you optimize your operations, reduce costs, and improve efficiency.
+
+
+
+Click [here](https://wiki.seeedstudio.com/How_to_Use_SenseCAP_AI_on_SenseCAP_Portal_and_SenseCAP_Mate_APP/) for more details.
+
+
+## MALL
+
+
+
+## Event
+
+
+Add Events to get notification.
+
+
+1. Click the Add icon or Add Event button to create an Event alert, Add Event page Conditioins to add condition options, and click the Add button to select a device.
+
+
+
+2. Select the device, select the type of measurement, set the alarm conditions, select the conditions such as greater than or less than drag the progress bar to set the value, click on the next step.
+
+
+
+3. Add Event page Back to normal actions device back to normal, select whether to send a notification, click Save, enter Event name, click Submit to add an Event alarm successfully return to Event list.
+
+
+
+4. Device page, click Message Center to view alarm messages, showing Device warning device triggered alarm push messages, System notification system messages.
+
+
+
+5. Click the alarm message, the device triggers the condition item, push the alarm message, click to view the alarm details. Return to the alarm list status changes to read, click the edit button to select the message, you can read, delete and other operations.
+
+
+
+6. Toggle system messages, click to view system push message details.
+
+
+
+
+
+## User
+
+Account details and settings, app version, etc.
+
+
+
+**Delete Account**
+
+
+
+
+
+## Bluetooth Configuration
+
+Select the corresponding product for quick binding.
+
+
+
diff --git a/docs/Edge/NVIDIA_Jetson/Application/Developer_Tools/NVStreamer_Getting_Started.md b/docs/Edge/NVIDIA_Jetson/Application/Developer_Tools/NVStreamer_Getting_Started.md
new file mode 100644
index 000000000000..63cf4d9e5747
--- /dev/null
+++ b/docs/Edge/NVIDIA_Jetson/Application/Developer_Tools/NVStreamer_Getting_Started.md
@@ -0,0 +1,153 @@
+---
+description: This wiki provides a tutorial on how to use NVStreamer for RTSP video streaming on reComputer Jetson.
+title: Getting Started with NVStreamer
+keywords:
+- reComputer
+- NVStreamer
+- RTSP
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /getting_started_with_nvstreamer
+last_update:
+ date: 7/24/2024
+ author: ZhuYaoHui
+---
+# How to Use NVStreamer for RTSP Streaming on reComputer with Jetson Platform Services
+
+## Introduction
+[NVStreamer](https://docs.nvidia.com/moj/nvstreamer/moj-nvstreamer.html) is a software developed by NVIDIA that can store and serve video files, which can then be streamed using the RTSP protocol. It is particularly useful for testing with VST, as it provides an alternative method to cameras for creating video sources as input for VST. Specifically, it offers a mechanism to use specific video files as input for VST testing. VST can be configured to receive RTSP streams as if they were coming from ONVIF-S cameras.
+
+This wiki provides a tutorial on how to use NVStreamer for RTSP video streaming on [reComputer J4012](https://www.seeedstudio.com/reComputer-J4012-p-5586.html).
+
+
+
+
+
+## Prerequisites
+Before proceeding with the setup process, please ensure that your system meets the following prerequisites:
+
+
+- A reComputer J4012 Orin NX 16G running Ubuntu `22.04` or `later`.
+- The Linux system must have sufficient available space to store the video files you will be serving (typically several hundred GB).
+- Driver Version: `535.113.01`, Jetpack `6.0` and CUDA Version: `12.2`.
+- Make sure that `JetPack` and the related `Jetson services` packages are installed.
+ ```bash
+ sudo apt-get install nvidia-jetpack
+ sudo apt install nvidia-jetson-services
+ ```
+
+## Getting Started
+
+### Installation and Startup
+
+**Step 1**: Download the application package **`nvstreamer-1.1.0.tar.gz`** from NGC to your Jetson using this link: [NGC Reference Workflow and Resources](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/jps/resources/reference-workflow-and-resources). You will need to enter your NGC credentials. On the page, use one of the options available in the **`Download`** menu (top right corner):
+
+```bash
+tar -xvzf nvstreamer-1.1.0.tar.gz
+```
+
+**Step 2**: Run the following commands to increase the operating system socket buffer size. This is to avoid packet loss in cases of videos with high bit rates or large IDR frames. Without increasing these buffer sizes, you may sometimes see blocky artifacts in a few video files:
+
+```bash
+sudo sysctl -w net.core.wmem_max=2000000
+sudo sysctl -w net.core.rmem_max=2000000
+```
+
+**Step 3**: Start NVStreamer using the following command line:
+
+```bash
+cd nvstreamer
+sudo docker compose -f compose_nvstreamer.yaml up -d --force-recreate
+```
+
+To terminate the NVStreamer instance, use the following command:
+
+```bash
+cd nvstreamer
+sudo docker compose -f compose_nvstreamer.yaml down --remove-orphans
+```
+
+### Upload Video to NVStreamer
+**Step 1**: Open a web browser (we recommend using Chrome) and navigate to this address (on the same system or another system on the same network).
+
+```markdown
+http://[reComputer-IP]:31000
+```
+
+
+
+
+**Step 2**: Select **`File Upload`** and choose the video disk file you want to test as a camera (supported codecs: h264/h265, containers: mp4/mkv). Drag and drop it into the indicated area. If the video file contains B-frames, NVStreamer will automatically transcode the file, which may take a few minutes depending on the file size.
+
+
+
+
+**Step 3** Once the file is successfully uploaded, a green progress bar in the bottom left corner will complete, indicating the end of the upload process. Then, the transcoding process will begin. After completion, the file name will be displayed in gray, and an RTSP stream with the file name will be automatically created.
+
+
+
+
+
+The RTSP streaming tutorial ends at this step. Copy or note down the RTSP address (including "rtsp://"; make sure there are no spaces before it). You will need to enter this address into another user interface discussed in the next step.
+
+### Adding RTSP Stream to VST
+
+**Step 1**: Access VST web server here: **`http://[JETSON-IP]:30080/vst/`**, (Note: HTTP, not HTTPS) where `[JETSON-IP]` is the IP address of the Jetson device on which you are running the docker container.
+
+ You will see a UI similar to this:
+
+
+
+
+- If it fails to start, enter the following in the terminal:
+
+ ```bash
+ sudo systemctl start jetson-ingress
+ sudo systemctl start jetson-monitoring
+ sudo systemctl start jetson-sys-monitoring
+ sudo systemctl start jetson-gpu-monitoring
+ sudo systemctl start jetson-redis
+ sudo systemctl start jetson-vst
+ ```
+
+**Step 2**: Click the **`Camera Management`** tab and Click on **`RTSP`**, paste the RTSP address copied from NVStreamer UI to **`rtsp url`** box. Fill **`location`** and **`name`** fields with the same string (it will become the camera name) and hit **`Submit`**.
+
+
+
+
+**Step 3**: You can now click on **`Streams tab`** to see the file.
+
+
+
+
+## More Details
+- NVStreamer on Jetson Orin: https://docs.nvidia.com/moj/nvstreamer/moj-nvstreamer.html
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/NVIDIA_Jetson/Application/Generative_AI/How_to_run_VLM_on_reComputer.md b/docs/Edge/NVIDIA_Jetson/Application/Generative_AI/How_to_run_VLM_on_reComputer.md
new file mode 100644
index 000000000000..ea95799082b6
--- /dev/null
+++ b/docs/Edge/NVIDIA_Jetson/Application/Generative_AI/How_to_run_VLM_on_reComputer.md
@@ -0,0 +1,189 @@
+---
+description: This wiki provides a tutorial on how to run VLM on reComputer Jetson.
+title: How to Run VLM on reComputer
+keywords:
+- reComputer
+- VLM
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /run_vlm_on_recomputer
+last_update:
+ date: 7/24/2024
+ author: ZhuYaoHui
+---
+
+# How to Run VLM on reComputer with Jetson Platform Services
+
+## Introduction
+vision language models (VLMs) are multi modal models supporting images, video and text and using a combination of large language models and vision transformers. Based on this capability, they are able to support text prompts to query videos and images thereby enabling capabilities such as chatting with the video, and defining natural language based alerts. The [VLM AI service](https://docs.nvidia.com/jetson/jps/inference-services/vlm.html), enables quick deployment of VLMs with Jetson Platform Services for video insight applications. The VLM service exposes REST API endpoints to configure the video stream input, set alerts and ask questions in natural language about the input video stream.
+
+This wiki provides a tutorial on how to run VLM on [reComputer J4012 Jetson Orin NX](https://www.seeedstudio.com/reComputer-J4012-p-5586.html).
+
+
+
+
+
+## Requirements
+Before proceeding with the setup process, please ensure that your system meets the following prerequisites:
+
+
+
+- A reComputer J4012 Orin NX 16G running Ubuntu `22.04` or `later`.
+- Driver Version: `535.113.01`, Jetpack `6.0` and CUDA Version: `12.2`.
+- Make sure that JetPack and the related Jetson services packages are installed.
+ ```bash
+ sudo apt-get install nvidia-jetpack
+ sudo apt install nvidia-jetson-services
+ ```
+- IP cameras or local videos can be streamed via RTSP. (We recommend using our provided [NVStreamer tutorial](/getting_started_with_nvstreamer) for RTSP streaming.)
+
+
+
+
+## Getting Started
+
+**Step 1**: Download the application package **`vlm-1.1.0.tar.gz`** from NGC to your Jetson using this link: [NGC Reference Workflow and Resources](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/jps/resources/reference-workflow-and-resources). You will need to enter your NGC credentials. On the page, use one of the options available in the **`Download`** menu (top right corner):
+```bash
+tar -xvf vlm-1.1.0.tar.gz
+cd ~/vlm/example_1
+```
+
+**Step 2**: The VLM AI service will use the `jetson-ingress` and `jetson-monitoring` services. You need to configure these two services to integrate with the VLM AI service. Copy the provided default configuration to the corresponding service configuration directory:
+```bash
+sudo cp config/vlm-nginx.conf /opt/nvidia/jetson/services/ingress/config
+sudo cp config/prometheus.yml /opt/nvidia/jetson/services/monitoring/config/prometheus.yml
+sudo cp config/rules.yml /opt/nvidia/jetson/services/monitoring/config/rules.yml
+```
+
+**Step 3**: Run the basic services:
+```bash
+sudo systemctl start jetson-ingress
+sudo systemctl start jetson-monitoring
+sudo systemctl start jetson-sys-monitoring
+sudo systemctl start jetson-gpu-monitoring
+sudo systemctl start jetson-redis
+sudo systemctl start jetson-vst
+```
+
+**Step 4**: When starting the VLM service for the first time, it will automatically download and quantize the VLM. This process may take some time. If deploying on Orin NX16, you might need to mount more SWAP space because the quantization process can consume a large amount of memory. Run the following commands to mount more swap space:
+
+```bash
+sudo fallocate -l 10G /data/10GB.swap
+sudo mkswap /data/10GB.swap
+sudo swapon /data/10GB.swap
+```
+
+**Step 5**: Start the VLM AI service:
+```bash
+cd ~/vlm/example_1
+sudo docker compose up -d
+```
+To check if all required containers have started, you can run the following command:
+```bash
+sudo docker ps
+```
+
+
+
+
+## Add the RTSP stream input
+You can first add an RTSP stream for the VLM model to use with the following curl command. It is recommended to use the [NVStreamer tutorial](/getting_started_with_nvstreamer) for streaming.
+- **Step 1**: Replace `0.0.0.0` with your Jetson IP and the `liveStreamUrl` link with your RTSP link, then enter the following command in the terminal:
+ ```bash
+ curl --location 'http://0.0.0.0:5010/api/v1/live-stream' \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "liveStreamUrl": "rtsp://0.0.0.0:31554/nvstream/root/store/nvstreamer_videos/car.mp4"
+ }'
+ ```
+ Note: Besides the curl command, you can also directly test the REST API through the API documentation page, which is available at `http://0.0.0.0:5010/docs` when the zero-shot detection service is started.
+
+- **Step 2**: After executing the first step, an ID will be returned. You need to record this ID for use in subsequent steps:
+ ```bash
+ {"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"}
+ ```
+ You can also obtain the ID later using the following command:
+
+ ```bash
+ curl --location 'http://0.0.0.0:5010/api/v1/live-stream'
+ ```
+ To delete a stream by its ID, you can use the following command:
+ ```bash
+ curl --location --request DELETE 'http://0.0.0.0:5010/api/v1/live-stream/{id}'
+ ```
+
+## Set Alerts
+Alerts are questions that the VLM will continuously evaluate on the live stream input. For each alert rule set, the VLM will try to decide if it is True or False based on the most recent frame from of the live stream. These True and False states as determined by the VLM, are sent to a websocket and the jetson monitoring service.
+
+When setting alerts, the alert rule should be phrased as a yes/no question. Such as “Is there fire?” or “Is there smoke?”. The body of the request must also have the “id” field that corresponds to the stream ID that was returned when the RTSP stream was added.
+
+By default, the VLM service supports up to 10 alert rules. This can be increased by adjusting the configuration files.
+
+**Step 1**: Replace `0.0.0.0` with your reComputer IP address, modify `alerts` to include the objects you need to alerts, use the `id` returned in the previous step. After completing the command, enter the following in the terminal:
+``` bash
+curl --location 'http://0.0.0.0:5010/api/v1/alerts' \
+--header 'Content-Type: application/json' \
+--data '{
+ "alerts": ["is there a fire?", "is there smoke?"],
+ "id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"
+}'
+```
+
+## View RTSP Stream Result
+The detection output will be streamed through `rtsp://reComputer_ip:5011/out`. We provide a Python script for visualizing the video stream output, You need to install the opencv-python library in advance and then run the following Python script:
+- **Step 1:** Install the opencv-python library:
+ ```bash
+ pip install opencv-python
+ ```
+- **Step 2:** Run the following Python script:
+ ```python
+ import cv2
+ rtsp_url = "rtsp://reComputer_ip:5011/out"
+ cap = cv2.VideoCapture(rtsp_url)
+ if not cap.isOpened():
+ print("Cannot open RTSP stream")
+ exit()
+ while True:
+ ret, frame = cap.read()
+ if not ret:
+ print("Failed to retrieve frame")
+ break
+ cv2.imshow('RTSP Stream', frame)
+ if cv2.waitKey(1) & 0xFF == ord('q'):
+ break
+ cap.release()
+ cv2.destroyAllWindows()
+ ```
+
+## Shut Down
+To stop the zero-shot detection service, run the following command in the same directory where the `compose.yaml` file is located:
+```bash
+sudo docker compose down
+```
+
+## More Details
+Visual Language Models (VLM) with Jetson Platform Services: https://docs.nvidia.com/jetson/jps/inference-services/vlm.html
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/NVIDIA_Jetson/Application/Generative_AI/How_to_run_zero_shot_detection_on_reComputer.md b/docs/Edge/NVIDIA_Jetson/Application/Generative_AI/How_to_run_zero_shot_detection_on_reComputer.md
new file mode 100644
index 000000000000..275771dede84
--- /dev/null
+++ b/docs/Edge/NVIDIA_Jetson/Application/Generative_AI/How_to_run_zero_shot_detection_on_reComputer.md
@@ -0,0 +1,179 @@
+---
+description: This wiki provides a tutorial on how to run Zero-Shot Detection on reComputer Jetson.
+title: How to Run Zero-Shot Detection on reComputer
+keywords:
+- reComputer
+- Zero-Shot Detection
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /run_zero_shot_detection_on_recomputer
+last_update:
+ date: 7/24/2024
+ author: ZhuYaoHui
+---
+
+# How to Run Zero-Shot Detection on reComputer with Jetson Platform Services
+
+## Introduction
+Generative AI vision transformers such as CLIP have made it possible to build zero shot detection models capable of open vocabulary object detection. Meaning, the model is not bounded by a set of pre-defined classes to detect. The objects to detect are configured at runtime by the user. The Zero Shot Detection AI service, enables quick deployment of generative AI with Jetson Services for open vocabulary detection on video live stream input. The Zero Shot Detection AI service exposes REST API endpoints to control stream input and objects to detect.
+
+This wiki provides a tutorial on how to run Zero-Shot Detection on [reComputer J4012](https://www.seeedstudio.com/reComputer-J4012-p-5586.html).
+
+
+
+
+
+## Requirements
+Before proceeding with the setup process, please ensure that your system meets the following prerequisites:
+
+
+
+- A reComputer J4012 Orin NX 16G running Ubuntu `22.04` or `later`.
+- Driver Version: `535.113.01`, Jetpack `6.0` and CUDA Version: `12.2`.
+- Make sure that JetPack and the related Jetson services packages are installed.
+ ```bash
+ sudo apt-get install nvidia-jetpack
+ sudo apt install nvidia-jetson-services
+ ```
+- IP cameras or local videos can be streamed via RTSP. (We recommend using our provided [NVStreamer tutorial](/getting_started_with_nvstreamer) for RTSP streaming.)
+
+## Getting Started
+
+**Step 1**: Download the application package **`zero_shot_detection-1.1.0.tar.gz`** from NGC to your Jetson using this link: [NGC Reference Workflow and Resources](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/jps/resources/reference-workflow-and-resources). You will need to enter your NGC credentials. On the page, use one of the options available in the **`Download`** menu (top right corner):
+```bash
+tar -xvf zero_shot_detection-1.1.0.tar.gz
+cd ~/zero_shot_detection/example_1
+```
+**Step 2**: Zero-shot detection AI service will use the `jetson-ingress` and `jetson-redis` services. You need to configure the jetson-ingress service to expose the zero-shot detection REST API. Copy the provided default configuration to the corresponding service configuration directory.
+```bash
+sudo cp config/zero_shot_detection-nginx.conf /opt/nvidia/jetson/services/ingress/config
+```
+**Step 3**: Run the basic services.
+```bash
+sudo systemctl start jetson-monitoring
+sudo systemctl start jetson-sys-monitoring
+sudo systemctl start jetson-gpu-monitoring
+```
+**Step 4**: Verify that all lines in the platform ingress configuration file (used for monitoring services) are uncommented in the following file:
+```bash
+/opt/nvidia/jetson/services/ingress/config/platform-nginx.conf
+```
+**Step 5**: Start the API Gateway to access the monitoring dashboard.
+```bash
+sudo systemctl restart jetson-ingress
+sudo systemctl restart jetson-redis
+sudo systemctl restart jetson-vst
+```
+**Step 6**: Start the zero-shot detection AI service.
+```bash
+sudo docker compose up -d
+```
+To check if all required containers have started, you can run the following command:
+```bash
+sudo docker ps
+```
+
+
+
+
+## Add the RTSP stream input
+You can first add an RTSP stream for the zero-shot detection model to use with the following curl command. It is recommended to use the [NVStreamer tutorial](/getting_started_with_nvstreamer) for streaming.
+- **Step 1**: Replace `0.0.0.0` with your Jetson IP and the `liveStreamUrl` link with your RTSP link, then enter the following command in the terminal:
+ ```bash
+ curl --location 'http://0.0.0.0:5010/api/v1/live-stream' \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "liveStreamUrl": "rtsp://0.0.0.0:31554/nvstream/root/store/nvstreamer_videos/car.mp4"
+ }'
+ ```
+Note: Besides the curl command, you can also directly test the REST API through the API documentation page, which is available at `http://0.0.0.0:5010/docs` when the zero-shot detection service is started.
+
+- **Step 2**: After executing the first step, an ID will be returned. You need to record this ID for use in subsequent steps.
+ ```bash
+ {"id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"}
+ ```
+ You can also obtain the ID later using the following command:
+
+ ```bash
+ curl --location 'http://0.0.0.0:5010/api/v1/live-stream'
+ ```
+ To delete a stream by its ID, you can use the following command:
+ ```bash
+ curl --location --request DELETE 'http://0.0.0.0:5010/api/v1/live-stream/{id}'
+ ```
+## Add Detection Classes
+The zero shot detection model is capable of updating its detection classes at runtime. This endpoint accepts a list of objects to detect and an associated threshold value. The threshold is the sensitivity of the detection. Higher values will reduce false positives. Lower values will increase false positives. Currently this service only supports 1 stream but in the future this API will allow for multi-stream support.
+- **Step 1**: Replace `0.0.0.0` with your reComputer IP address, modify `objects` to include the objects you need to detect (up to ten), set `thresholds` for each category, and use the `id` returned in the previous step. After completing the command, enter the following in the terminal:
+ ```bash
+ curl -X 'POST' \
+ 'http://192.168.49.101:5010/api/v1/detection/classes' \
+ -H 'accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -d '{
+ "objects": [
+ "a car", "a people"
+ ],
+ "thresholds": [
+ 0.2, 0.04
+ ],
+ "id": "a782e200-eb48-4d17-a1b9-5ac0696217f7"
+ }'
+ ```
+## View RTSP Stream Result
+The detection output will be streamed through `rtsp://reComputer_ip:5011/out`. We provide a Python script for visualizing the video stream output, You need to install the opencv-python library in advance and then run the following Python script:
+- **Step 1:** Install the opencv-python library:
+ ```bash
+ pip install opencv-python
+ ```
+- **Step 2:** Run the following Python script:
+ ```python
+ import cv2
+ rtsp_url = "rtsp://reComputer_ip:5011/out"
+ cap = cv2.VideoCapture(rtsp_url)
+ if not cap.isOpened():
+ print("Cannot open RTSP stream")
+ exit()
+ while True:
+ ret, frame = cap.read()
+ if not ret:
+ print("Failed to retrieve frame")
+ break
+ cv2.imshow('RTSP Stream', frame)
+ if cv2.waitKey(1) & 0xFF == ord('q'):
+ break
+ cap.release()
+ cv2.destroyAllWindows()
+ ```
+
+## Shut Down
+To stop the zero-shot detection service, run the following command in the same directory where the `compose.yaml` file is located:
+```bash
+sudo docker compose down
+```
+
+## More Details
+Zero Shot Detection with Jetson Platform Services: https://docs.nvidia.com/jetson/jps/inference-services/zero_shot_detection.html
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/NVIDIA_Jetson/Application/Robotics/Hardware/CSI_Camera.md b/docs/Edge/NVIDIA_Jetson/Application/Robotics/Hardware/CSI_Camera.md
new file mode 100644
index 000000000000..abc79d1c5e9c
--- /dev/null
+++ b/docs/Edge/NVIDIA_Jetson/Application/Robotics/Hardware/CSI_Camera.md
@@ -0,0 +1,120 @@
+---
+description: This wiki provides a step-by-step guide to use multiple CSI cameras on reComputer by ROS.
+title: CSI Camera with ROS
+keywords:
+- Jetson Nano
+- reComputer
+- CSI
+- Camera
+- ROS
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /csi_camera_on_ros
+last_update:
+ date: 05/7/2024
+ author: ZhuYaoHui
+---
+# How to Use Multiple CSI Cameras on reComputer with ROS
+
+## Introduction
+This tutorial provides a step-by-step guide on how to read multiple CSI camera image data through ROS on [reComputer J30/J40](https://www.seeedstudio.com/reComputer-J4012-p-5586.html) series devices and publish image topics to be displayed in the RVIZ visualization interface.
+
+
+
+
+
+## Prerequisites
+- __[reComputer J30/40 series](https://www.seeedstudio.com/reComputer-J4012-p-5586.html)__: Ensure you have completed the [installation of the JetPack 5.x](/reComputer_J4012_Flash_Jetpack) system and the [ROS Noetic environment](/installing_ros1) according to the provided tutorials.
+
+- __Supported cameras are as follows:__
+
+ - IMX219 cameras
+
+ - [Raspberry Pi Camera V2](https://www.seeedstudio.com/Raspberry-Pi-Camera-Module-V2.html)
+ - [IMX219-130 8MP Camera with 130° FOV](https://www.seeedstudio.com/IMX219-130-Camera-130-FOV-Applicable-for-Jetson-Nano-p-4606.html)
+ - [IMX219-160 8MP Camera with 160° FOV](https://www.seeedstudio.com/IMX219-160-Camera-160-FOV-Applicable-for-Jetson-Nano-p-4603.html)
+ - [IMX219-200 8MP Camera with 200° FOV](https://www.seeedstudio.com/IMX219-200-Camera-200-FOV-Applicable-for-Jetson-Nano-p-4609.html)
+ - [IMX219-77 8MP Camera with 77° FOV](https://www.seeedstudio.com/IMX219-77-Camera-77-FOV-Applicable-for-Jetson-Nano-p-4608.html)
+ - [IMX219 M12/CS mount CMOS Camera Module](https://www.seeedstudio.com/IMX-219-CMOS-camera-module-M12-and-CS-camera-available-p-5372.html)
+ - [IMX219-83 8MP 3D Stereo Camera Module](https://www.seeedstudio.com/IMX219-83-Stereo-Camera-8MP-Binocular-Camera-Module-Depth-Vision-Applicable-for-Jetson-Nano-p-4610.html)
+ - [IMX219-77IR 8MP IR Night Vision Camera with 77° FOV](https://www.seeedstudio.com/IMX219-77IR-Camera-77-FOV-Infrared-Applicable-for-Jetson-Nano-p-4607.html)
+ - [IMX219-160IR 8MP Camera with 160° FOV](https://www.seeedstudio.com/IMX219-160IR-Camera160-FOV-Infrared-Applicable-for-Jetson-Nano-p-4602.html)
+ - [IMX219 M12/CS mount CMOS Camera Module](https://www.seeedstudio.com/IMX-219-CMOS-camera-module-M12-and-CS-camera-available-p-5372.html)
+
+ - IMX477 cameras
+
+ - [Raspberry Pi High Quality Camera](https://www.seeedstudio.com/Raspberry-Pi-High-Quality-Cam-p-4463.html)
+ - [Raspberry Pi HQ Camera - M12 mount](https://www.seeedstudio.com/Raspberry-Pi-HQ-Camera-M12-mount-p-5578.html)
+ - [High Quality Camera for Raspberry Pi](https://www.seeedstudio.com/High-Quality-Camera-For-Raspberry-Pi-Compute-Module-Jetson-Nano-p-4729.html)
+
+
+## Getting Started
+### Connecting the Cameras
+Please follow this tutorial to complete the [Connecting and testing of the CSI cameras](/J401_carrierboard_Hardware_Interfaces_Usage), and ensure that [ROS is already installed](/installing_ros1) on your system.
+
+
+
+
+
+### Installation
+- **Step 1:** Open a terminal on your reComputer and create a directory for your workspace:
+ ```bash
+ mkdir -p ~/catkin_ws/src
+ cd ~/catkin_ws/src
+ ```
+- **Step 2:** Clone the desired ROS package:
+ ```bash
+ git clone https://github.com/ZhuYaoHui1998/csi_camera_reader.git
+ ```
+
+- **Step 3:** Build the workspace:
+ ```bash
+ cd ~/catkin_ws/
+ catkin_make
+ ```
+
+- **Step 4:** Source the setup file again to update your environment:
+ ```bash
+ source devel/setup.bash
+ ```
+
+### Usage
+- To publish the one camera stream to the ROS topic /csi_cam_0/image_raw, use this command in the terminal:
+ ```bash
+ roslaunch csi_camera_reader csi_camera.launch sensor_id:=0
+ ```
+
+- You can also change sensor_id to 1 to match your interface:
+ ```bash
+ roslaunch csi_camera_reader csi_camera.launch sensor_id:=1
+ ```
+
+- If you want to open two CSI cameras simultaneously and publish topics to ROS, you can execute the following commands:
+
+ ```bash
+ roslaunch csi_camera_reader dual_camera.launch
+ ```
+ You can enter the "**rostopic list**" command in the terminal to see the image topics published by the cameras.
+
+
+
+ You can also use the RVIZ visualization tool to subscribe to the image topics and view the visual information.
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/NVIDIA_Jetson/Application/Robotics/Hardware/Robosense_Lidar.md b/docs/Edge/NVIDIA_Jetson/Application/Robotics/Hardware/Robosense_Lidar.md
index 86798c1ad3a6..580c14012292 100644
--- a/docs/Edge/NVIDIA_Jetson/Application/Robotics/Hardware/Robosense_Lidar.md
+++ b/docs/Edge/NVIDIA_Jetson/Application/Robotics/Hardware/Robosense_Lidar.md
@@ -1,6 +1,6 @@
---
description: This wiki provides a step-by-step guide to install and set up RoboSense LiDAR on reComputer J30/40 using ROS.
-title: Use RoboSense Lidar
+title: RoboSense Lidar with ROS
keywords:
- Jetson Nano
- reComputer
diff --git a/docs/Edge/NVIDIA_Jetson/Carrier_Boards/J401/reComputer_J4012_Flash_Jetpack.md b/docs/Edge/NVIDIA_Jetson/Carrier_Boards/J401/reComputer_J4012_Flash_Jetpack.md
index 5d7c53279e08..9a116552139e 100644
--- a/docs/Edge/NVIDIA_Jetson/Carrier_Boards/J401/reComputer_J4012_Flash_Jetpack.md
+++ b/docs/Edge/NVIDIA_Jetson/Carrier_Boards/J401/reComputer_J4012_Flash_Jetpack.md
@@ -193,14 +193,15 @@ reComputer J40/ J30 series comes with JetPack 5.1 pre-installed on the included
### Prerequisites
-- Ubuntu Host PC (native or VM using VMware Workstation Player)
+- Ubuntu
- reComputer J4012/ J4011/ J3010 and J3011
- USB Type-C data transmission cable
### Enter Force Recovery Mode
:::note
-Before we can move on to the installation steps, we need to make sure that the board is in force recovery mode.
+- We do not recommend using virtual machines and ARM architecture Ubuntu for flashing.
+- Before we can move on to the installation steps, we need to make sure that the board is in force recovery mode.
:::
@@ -505,6 +506,14 @@ The flash command may run for 2-10 minutes.
Please complete the **System Configuration** according to your needs.
:::
+**Step 5:** After starting the system, you need to execute the following command to reactivate the wireless network card driver:
+```bash
+sudo rm /lib/modules/5.15.136-tegra/build
+sudo ln -s /usr/src/linux-headers-5.15.136-tegra-ubuntu22.04_aarch64/3rdparty/canonical/linux-jammy/kernel-source/ /lib/modules/5.15.136-tegra/build
+sudo apt install -y iwlwifi-modules
+```
+
+
diff --git a/docs/Edge/NVIDIA_Jetson/reComputer_Jetson_Series/reComputer_Industrial/reComputer_Industrial_Getting_Started.md b/docs/Edge/NVIDIA_Jetson/reComputer_Jetson_Series/reComputer_Industrial/reComputer_Industrial_Getting_Started.md
index 0a5bbb18c2ec..6f189a80afd8 100644
--- a/docs/Edge/NVIDIA_Jetson/reComputer_Jetson_Series/reComputer_Industrial/reComputer_Industrial_Getting_Started.md
+++ b/docs/Edge/NVIDIA_Jetson/reComputer_Jetson_Series/reComputer_Industrial/reComputer_Industrial_Getting_Started.md
@@ -315,29 +315,29 @@ The first method download is around 14GB and the second method download is about
## Introduction
-reComputer J3010 built with Jetson Orin Nano 4GB is a powerful and compact intelligent edge box to bring up to 20TOPS modern AI performance to the edge, which offers around the same performance as Jetson Xavier NX. While combining the NVIDIA Ampere™ GPU architecture with 64-bit operating capability.
+reComputer J30/40 built with Jetson Orin is a powerful and compact intelligent edge box to bring up to 100TOPS modern AI performance to the edge. While combining the NVIDIA Ampere™ GPU architecture with 64-bit operating capability.
-The full system includes one NVIDIA Jetson Orin Nano 4GB production module, a heatsink, and a power adapter. reComputer J3010 is preinstalled with Jetpack 5.1, simplifies development, and fits for deployment for edge AI solution providers working in video analytics, object detection, natural language processing, medical imaging, and robotics across industries of smart cities, security, industrial automation, smart factories.
+The full system includes one NVIDIA Jetson Orin production module, a heatsink, and a power adapter. reComputer J30/40 is preinstalled with Jetpack 5.1.1, simplifies development, and fits for deployment for edge AI solution providers working in video analytics, object detection, natural language processing, medical imaging, and robotics across industries of smart cities, security, industrial automation, smart factories.
-If you are looking for the version with power adapter, please check out [reComputer J3010](https://www.seeedstudio.com/reComputer-J3010-p-5589.html).
+If you are looking for the version without power adapter, please check out [reComputer-Jetson](https://www.seeedstudio.com/reComputer-J4012-w-o-power-adapter-p-5628.html).
## Features
-- **Brilliant AI Performance for production:** on-device processing with up to 20 TOPS AI performance with low power and low latency
-- **Hand-size edge AI device:** compact size at 130mm x120mm x 58.5mm, includes NVIDIA Jetson Orin Nano 4GB production module, a heatsink, enclosure, and a power adapter. Support desktop, wall mount, fit in anywhere
+- **Brilliant AI Performance for production:** on-device processing with up to 100 TOPS AI performance with low power and low latency
+- **Hand-size edge AI device:** compact size at 130mm x120mm x 58.5mm, includes NVIDIA Jetson Orin production module, a heatsink, enclosure, and a power adapter. Support desktop, wall mount, fit in anywhere
- **Expandable with rich I/Os:** 4x USB3.2, HDMI 2.1, 2xCSI, 1xRJ45 for GbE, M.2 Key E, M.2 Key M, CAN and GPIO
- **Accelerate solution to market:** pre-installed Jetpack with NVIDIA JetPack™ 5.1 on the included 128GB NVMe SSD, Linux OS BSP, 128GB SSD, WiFi BT combo module, Antennas x2, support Jetson software and leading AI frameworks and software platforms
- **Comprehensive certificates:** FCC, CE, RoHS, UKCA
@@ -158,7 +160,7 @@ If you are looking for the version with power adapter, please check out [reCompu
1* 40-Pin Expansion header,1* 12-Pin Control and UART header
- colSpan={4}
RTC
+
RTC
RTC 2-pin, RTC socket (supports CR1220 but not included)
@@ -180,8 +182,31 @@ If you are looking for the version with power adapter, please check out [reCompu
-## Flash JetPack to reComputer J30/40
+## Flash JetPack
:::info
-Please refer to this [wiki](/reComputer_J4012_Flash_Jetpack) page for more information because J30/40 use J401 carrier board.
+reComputer J30/40 powered by J401 Carrier Board.
+Please refer to this [wiki page](/reComputer_J4012_Flash_Jetpack) for more information about flash jetpack.
:::
+
+## Interfaces Usage
+
+:::info
+reComputer J30/40 powered by J401 Carrier Board.
+Please refer to this [wiki page](/J401_carrierboard_Hardware_Interfaces_Usage) for more information about Interfaces Usage.
+:::
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Edge/NVIDIA_Jetson/reServer_Jetson_Series/reServer_Industrial_J30_J40/reServer_Industrial_Getting_Started.md b/docs/Edge/NVIDIA_Jetson/reServer_Jetson_Series/reServer_Industrial_J30_J40/reServer_Industrial_Getting_Started.md
index f34a5bc304f6..88128d8c03e0 100644
--- a/docs/Edge/NVIDIA_Jetson/reServer_Jetson_Series/reServer_Industrial_J30_J40/reServer_Industrial_Getting_Started.md
+++ b/docs/Edge/NVIDIA_Jetson/reServer_Jetson_Series/reServer_Industrial_J30_J40/reServer_Industrial_Getting_Started.md
@@ -535,17 +535,38 @@ There are 2 LEDs (green and yellow) on each Ethernet port which indicates the fo
#### Usage
-Before connecting PoE cameras, you need to enable the PoE function for the 4 Ethernet ports. Enable it as follows:
-
-```sh
-sudo -i
-cd /sys/class/gpio
-echo 315 > export
-cd gpio315
-echo "out" > direction
-echo 1 > value
-```
-
+- Before connecting PoE cameras, you need to enable the PoE function for the 4 Ethernet ports. Enable it as follows:
+
+ ```sh
+ sudo -i
+ cd /sys/class/gpio
+ echo 315 > export
+ cd gpio315
+ echo "out" > direction
+ echo 1 > value
+ ```
+
+- If you need to configure different IP addresses for each POE interface, follow these instructions:
+
+ **Step 1**: Connect the POE to the reServer Industrial device. For example, to configure eth3, set the name of eth3 to POE3.
+ ```bash
+ sudo nmcli connection add type ethernet ifname eth3 con-name POE3
+ ```
+
+ **Step 2**: Configure the IP address of POE3 to **192.168.6.6**. The IP address can be customized according to actual usage.
+ ```bash
+ sudo nmcli connection modify POE3 ipv4.addresses 192.168.6.6/24
+ ```
+
+ **Step3**: To set POE3's IPv4 address to manual configuration.
+ ```bash
+ sudo nmcli connection modify POE3 ipv4.method manual
+ ```
+
+ **Step4**: Start the connection
+ ```bash
+ sudo nmcli connection up POE3
+ ```
### SATA Connectors
reServer Industrial supports 2 SATA 2.5" HDD/SSD and comes with both SATA data and power connectors. You can connect to HDD/ SSD as follows
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/benchmark_on_rpi5_and_cm4_running_yolov8s_with_rpi_ai_kit.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/benchmark_on_rpi5_and_cm4_running_yolov8s_with_rpi_ai_kit.md
new file mode 100644
index 000000000000..1c79ca2b9fa1
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/benchmark_on_rpi5_and_cm4_running_yolov8s_with_rpi_ai_kit.md
@@ -0,0 +1,254 @@
+---
+description: This wiki demonstrates yolov8s pose estimation and object detection benchmark on Raspberry Pi5 and Raspberry Pi Compute Module 4.
+title: Benchmark on RPi5 and CM4 running yolov8s with rpi ai kit
+keywords:
+ - Edge
+ - reComputer r1000
+ - Object detecton
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /benchmark_on_rpi5_and_cm4_running_yolov8s_with_rpi_ai_kit
+last_update:
+ date: 07/17/2024
+ author: Jiahao
+
+no_comments: false # for Disqus
+---
+
+# Benchmark on RPi5 and CM4 running yolov8s with rpi ai kit
+
+## Introduction
+
+[YOLOv8](https://github.com/ultralytics/ultralytics) (You Only Look Once version 8) is the popular most YOLO series of real-time pose estimation and object de tection models. It builds upon the strengths of its predecessors by introducing several advancements in speed, accuracy, and flexibility. The [Raspberry-pi-AI-kit](https://www.seeedstudio.com/Raspberry-Pi-AI-Kit-p-5900.html) is used to accelerate inference speed, featuring a 13 tera-operations per second (TOPS) neural network inference accelerator built around the Hailo-8L chip.
+
+This wiki showcases benchmarking of YOLOv8s for pose estimation and object detection on Raspberry Pi 5 and Raspberry Pi Compute Module 4. All tests utilize the same model (YOLOv8s), quantized to int8, with an input size of 640x640 resolution, batch size set to 1, and input from the same video at 240 FPS.
+
+
+## Prepare Hardware
+
+### For CM4
+
+
+
+
+## Run this project
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+
+For object detection please refer to the following wiki:
+[yolov8_object_detection_on_recomputer_r1000_with_hailo_8l](https://wiki.seeedstudio.com/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l/)
+
+For pose estimation Please refer to the following wiki:
+[yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l](https://wiki.seeedstudio.com/yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l/)
+
+
+
+
+### Install AI kit on RPi5
+Please refer to [this](https://www.raspberrypi.com/documentation/accessories/ai-kit.html)
+
+### Install Hailo Software & Verify Installation
+
+#### update the system:
+
+```
+sudo apt update
+sudo apt full-upgrade
+```
+
+#### Set pcie to gen2/gen3(gen3 is faster than gen2):
+
+Add following text to ```/boot/firmware/config.txt```
+
+```
+#Enable the PCIe external connector
+
+dtparam=pciex1
+
+#Force Gen 3.0 speeds
+
+dtparam=pciex1_gen=3
+
+```
+:::note
+If you want to use gen2,please comment dtparam=pciex1_gen=3
+:::
+
+#### Install hailo-all and reboot:
+
+Open terminal on the Raspberry Pi5, and input command as follows to install Hailo software.
+
+```
+sudo apt install hailo-all
+sudo reboot
+```
+#### Check Software and Hardware:
+
+Open terminal on the Raspberry Pi5, and input command as follows to check if hailo-all have been installed.
+
+```
+hailortcli fw-control identify
+```
+
+The right result show as bellow:
+
+
+Open terminal on the Raspberry Pi5, and input command as follows to check if hailo-8L have been connected.
+
+```
+lspci | grep Hailo
+```
+
+The right result show as bellow:
+
+
+Open terminal on the reCompuer R1000, and input command as follows to run YOLOv8.
+
+### Run Project
+
+
+
+
+
+
+#### Install Project
+
+```
+git clone https://github.com/Seeed-Projects/Benchmarking-YOLOv8-on-Raspberry-PI-reComputer-r1000-and-AIkit-Hailo-8L.git
+cd Benchmarking-YOLOv8-on-Raspberry-PI-reComputer-r1000-and-AIkit-Hailo-8L
+```
+
+#### Run the project
+
+```
+# run pose estimation with AI kit
+
+bash run.sh pose-estimation-hailo
+
+# run pose estimation without AI kit
+
+bash run.sh pose-estimation
+```
+
+#### Result
+
+
+
+
+
+
+
+
+#### Install Project
+
+```
+git clone https://github.com/Seeed-Projects/Benchmarking-YOLOv8-on-Raspberry-PI-reComputer-r1000-and-AIkit-Hailo-8L.git
+cd Benchmarking-YOLOv8-on-Raspberry-PI-reComputer-r1000-and-AIkit-Hailo-8L
+```
+
+#### Run the project
+
+```
+# run object detection with AI kit
+
+bash run.sh object-detection-hailo
+
+# run object detection without AI kit
+
+bash run.sh object-detection
+```
+
+#### Result
+
+
+
+
+
+
+
+
+
+
+## Result
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/convert_model_to_edge_tpu_tflite_format_for_google_coral.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/convert_model_to_edge_tpu_tflite_format_for_google_coral.md
new file mode 100644
index 000000000000..30171e1d7867
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/convert_model_to_edge_tpu_tflite_format_for_google_coral.md
@@ -0,0 +1,301 @@
+---
+description: This wiki demonstrates how to compile a tensorflow model or pytorch model to edge tup model, and run it.
+title: Convert Model to Edge TPU TFlite Format for Google Coral
+keywords:
+ - Edge TPU
+ - rpi5
+ - M.2 coral
+ - Tensorflow
+ - Pytorch
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /convert_model_to_edge_tpu_tflite_format_for_google_coral
+last_update:
+ date: 07/23/2024
+ author: Jiahao
+
+no_comments: false # for Disqus
+---
+
+# Convert Model to Edge TPU TFlite Format for Google Coral
+## Introduction
+
+The [Coral M.2 Accelerator](https://www.seeedstudio.com/Coral-M2-Accelerator-with-Dual-Edge-TPU-p-4681.html) with Dual Edge TPU is an M.2 module that brings two Edge TPU coprocessors to existing systems and products with an available M.2 E-key slot.[Tensorflow](https://www.tensorflow.org/) and [Pytorch](https://pytorch.org/) is the most popular deep learning frameworks. So in order to use the Edge TPU, we need to compile the model to Edge TPU format.
+
+This wiki article will guide you through the process of compiling a model and running it on the Google Coral TPU, enabling you to leverage its capabilities for high-performance machine learning applications.
+
+## Prepare Hardware
+
+
+
+## Install Hardware
+
+
+
+## Convert Model
+
+:::note
+Before you start, make sure you have installed the Google Coral TPU to Pi 5 follow the [installation guide](https://wiki.seeedstudio.com/install_m2_coral_to_rpi5/).
+:::
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+
+:::note
+And all process have been tested on Python 3.11.9.
+:::
+### Install Tensorflow
+
+```
+pip install tensorflow
+```
+### Check tflite_converter
+
+```
+tflite_convert -h
+```
+
+The result should be like this:
+```
+2024-07-23 10:41:03.750087: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
+To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
+2024-07-23 10:41:04.276520: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
+usage: tflite_convert [-h] --output_file OUTPUT_FILE [--saved_model_dir SAVED_MODEL_DIR | --keras_model_file KERAS_MODEL_FILE] [--saved_model_tag_set SAVED_MODEL_TAG_SET]
+ [--saved_model_signature_key SAVED_MODEL_SIGNATURE_KEY] [--enable_v1_converter] [--experimental_new_converter [EXPERIMENTAL_NEW_CONVERTER]]
+ [--experimental_new_quantizer [EXPERIMENTAL_NEW_QUANTIZER]]
+
+Command line tool to run TensorFlow Lite Converter.
+
+optional arguments:
+ -h, --help show this help message and exit
+ --output_file OUTPUT_FILE
+ Full filepath of the output file.
+ --saved_model_dir SAVED_MODEL_DIR
+ Full path of the directory containing the SavedModel.
+ --keras_model_file KERAS_MODEL_FILE
+ Full filepath of HDF5 file containing tf.Keras model.
+ --saved_model_tag_set SAVED_MODEL_TAG_SET
+ Comma-separated set of tags identifying the MetaGraphDef within the SavedModel to analyze. All tags must be present. In order to pass in an empty tag set, pass in "". (default "serve")
+ --saved_model_signature_key SAVED_MODEL_SIGNATURE_KEY
+ Key identifying the SignatureDef containing inputs and outputs. (default DEFAULT_SERVING_SIGNATURE_DEF_KEY)
+ --enable_v1_converter
+ Enables the TensorFlow V1 converter in 2.0
+ --experimental_new_converter [EXPERIMENTAL_NEW_CONVERTER]
+ Experimental flag, subject to change. Enables MLIR-based conversion instead of TOCO conversion. (default True)
+ --experimental_new_quantizer [EXPERIMENTAL_NEW_QUANTIZER]
+ Experimental flag, subject to change. Enables MLIR-based quantizer instead of flatbuffer conversion. (default True)
+
+```
+### Convert Tensorflow Model to TFlite Model
+
+
+```
+tflite_convert --saved_model_dir=YOUR_MODEL_PATH --output_file=YOUR_MODEL_NAME.tflite
+```
+### Convert TFlite Model to Edge TPU Model
+
+:::note
+You should optimize your model before you convert tflite model to edge tup model, please check the [Optimize Tensorflow Model](https://www.tensorflow.org/lite/performance/model_optimization)
+:::
+
+#### Install edgetpu compiler
+
+```
+curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+
+echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
+
+sudo apt-get update
+
+sudo apt-get install edgetpu-compiler
+```
+#### Transform TFlite Model to Edge TPU Model
+
+```
+edgetpu_compiler YOUR_MODEL_NAME.tflite
+```
+And then you should get a new file named `YOUR_MODEL_NAME_edgetpu.tflite`
+
+
+
+
+
+
+:::note
+We do not recommend this approach because there are many conflicting packages in the actual process. And TensorFlow Lite supports a limited set of operations, some PyTorch operations may not be supported.
+:::
+
+### Convert Pytorch model to tflite model
+
+#### Install dependencies
+
+```
+pip install -r https://github.com/google-ai-edge/ai-edge-torch/releases/download/v0.1.1/requirements.txt
+pip install ai-edge-torch==0.1.1
+```
+
+#### Convert
+```
+import ai_edge_torch
+import numpy
+import torch
+import torchvision
+
+
+resnet18 = torchvision.models.resnet18(torchvision.models.ResNet18_Weights.IMAGENET1K_V1).eval()
+sample_inputs = (torch.randn(1, 3, 224, 224),)
+torch_output = resnet18(*sample_inputs)
+
+edge_model = ai_edge_torch.convert(resnet18.eval(), sample_inputs)
+
+edge_model.export('resnet.tflite')
+```
+
+You will get ```resnet.tflite```
+
+### Check tflite_converter
+:::note
+You should optimize your model before you convert tflite model to edge tup model, please check the [Optimize Tensorflow Model](https://www.tensorflow.org/lite/performance/model_optimization)
+:::
+```
+tflite_convert -h
+```
+
+The result should be like this:
+```
+2024-07-23 10:41:03.750087: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
+To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
+2024-07-23 10:41:04.276520: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
+usage: tflite_convert [-h] --output_file OUTPUT_FILE [--saved_model_dir SAVED_MODEL_DIR | --keras_model_file KERAS_MODEL_FILE] [--saved_model_tag_set SAVED_MODEL_TAG_SET]
+ [--saved_model_signature_key SAVED_MODEL_SIGNATURE_KEY] [--enable_v1_converter] [--experimental_new_converter [EXPERIMENTAL_NEW_CONVERTER]]
+ [--experimental_new_quantizer [EXPERIMENTAL_NEW_QUANTIZER]]
+
+Command line tool to run TensorFlow Lite Converter.
+
+optional arguments:
+ -h, --help show this help message and exit
+ --output_file OUTPUT_FILE
+ Full filepath of the output file.
+ --saved_model_dir SAVED_MODEL_DIR
+ Full path of the directory containing the SavedModel.
+ --keras_model_file KERAS_MODEL_FILE
+ Full filepath of HDF5 file containing tf.Keras model.
+ --saved_model_tag_set SAVED_MODEL_TAG_SET
+ Comma-separated set of tags identifying the MetaGraphDef within the SavedModel to analyze. All tags must be present. In order to pass in an empty tag set, pass in "". (default "serve")
+ --saved_model_signature_key SAVED_MODEL_SIGNATURE_KEY
+ Key identifying the SignatureDef containing inputs and outputs. (default DEFAULT_SERVING_SIGNATURE_DEF_KEY)
+ --enable_v1_converter
+ Enables the TensorFlow V1 converter in 2.0
+ --experimental_new_converter [EXPERIMENTAL_NEW_CONVERTER]
+ Experimental flag, subject to change. Enables MLIR-based conversion instead of TOCO conversion. (default True)
+ --experimental_new_quantizer [EXPERIMENTAL_NEW_QUANTIZER]
+ Experimental flag, subject to change. Enables MLIR-based quantizer instead of flatbuffer conversion. (default True)
+
+```
+
+### Convert TFlite Model to Edge TPU Model
+
+#### Install edgetpu compiler
+
+```
+curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+
+echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
+
+sudo apt-get update
+
+sudo apt-get install edgetpu-compiler
+```
+#### Transform TFlite Model to Edge TPU Model
+
+```
+edgetpu_compiler resnet18.tflite
+```
+And then you should get a new file named `resnet18_edgetpu.tflite`
+
+
+
+
+
+
+### Install Ultralytics
+
+```
+pip install ultralytics
+```
+
+### Convert YOLO Model to egde TPU Model
+
+```
+# For example, if you want to convert yolov8n.pt to yolov8n_integer_quant_edgetpu.tflite
+
+yolo export model=yolov8n.pt format=edge int8=True
+
+```
+The result should be like this:
+```
+jiahao@PC:~/yolov8s_saved_model$ ls
+assets saved_model.pb yolov8s_float32.tflite yolov8s_full_integer_quant.tflite
+fingerprint.pb variables yolov8s_full_integer_quant_edgetpu.log yolov8s_int8.tflite
+metadata.yaml yolov8s_float16.tflite yolov8s_full_integer_quant_edgetpu.tflite yolov8s_integer_quant.tflite
+```
+
+The ```yolov8s_full_integer_quant_edgetpu.tflite``` is the model you need.
+
+### You can convert other tflite model to edge TPU model by using the following command:
+
+```
+# For example, you can convert yolov8s_int8.tflite to edge TPU model
+edgetpu_compiler yolov8s_int8.tflite
+
+```
+
+
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/install_m.2_coral_to_rpi5.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/install_m.2_coral_to_rpi5.md
new file mode 100644
index 000000000000..aa5b7e5d50d4
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/install_m.2_coral_to_rpi5.md
@@ -0,0 +1,268 @@
+---
+description: This wiki demonstrates how to install M.2 coral to rpi5 and test coral.
+title: Install M.2 Coral to Raspberry Pi 5
+keywords:
+ - Edge
+ - rpi5
+ - M.2 coral
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /install_m2_coral_to_rpi5
+last_update:
+ date: 07/19/2024
+ author: Jiahao
+
+no_comments: false # for Disqus
+---
+
+# Install M.2 Coral to Raspberry Pi 5
+## Introduction
+
+The [Coral M.2 Accelerator](https://www.seeedstudio.com/Coral-M2-Accelerator-with-Dual-Edge-TPU-p-4681.html) with Dual Edge TPU is an M.2 module that brings two Edge TPU coprocessors to existing systems and products with an available M.2 E-key slot.
+
+[Raspberry Pi Fifth Flagship Development Computer](https://www.seeedstudio.com/Raspberry-Pi-5-8GB-p-5810.html) is assembled with a powerful 2.4GHz 64-bit quad-core Arm processor and an 800MHz VideoCore VII GPU for impressive graphics. It offers advanced camera support, versatile connectivity, and enhanced peripherals, perfect for multimedia, gaming, and industrial tasks.
+
+This wiki we will show you how to install Coral M.2 Accelerator to Raspberry Pi 5 and finally we will test Coral M.2 Accelerator.
+
+## Prepare Hardware
+
+
+
+## Install Hardware
+
+
+
+
+## Install Python3.8
+
+Coral software only support Python3.6-Python3.9, but the latest version of Raspberry Pi OS Python is Python3.11. So we need to install Python3.8.
+
+### Step 1: Update system
+Open a terminal and run the following commands to update the system:
+```
+sudo apt update
+sudo apt full-upgrade
+```
+### Step 2: Install requirements
+
+Open a terminal and run the following commands to install the required packages:
+```
+sudo apt-get install -y build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev tar wget vim
+```
+
+### Step 3: Download Python3.8
+
+Open a terminal and run the following commands to download Python3.8:
+```
+wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
+```
+
+### Step 4: Install Python3.8
+
+Open a terminal and run the following commands to install Python3.8:
+
+```
+sudo tar zxf Python-3.8.0.tgz
+cd Python-3.8.0
+sudo ./configure --enable-optimizations
+sudo make -j 4
+sudo make altinstall
+cd ..
+```
+### Step 5: Check Python3.8
+
+Open a terminal and run the following commands to check Python3.8:
+
+```
+python3.8 -V
+```
+
+The result should be:
+
+
+
+
+### Step 6: Create a virtual environment with Python3.8
+
+```
+python3.8 -m venv coral_venv
+```
+
+## Configure Hardware Settings
+
+Open a terminal and run the following commands to open ```config.txt```:
+
+```
+sudo nano /boot/firmware/config.txt
+```
+
+And then add the following text to ```config.txt```:
+
+```
+[all]
+# Enable the PCIe External connector.
+dtparam=pciex1
+kernel=kernel8.img
+# Enable Pineboards Hat Ai
+dtoverlay=pineboards-hat-ai
+```
+Save and close the file by pressing CTRL+X, then Y to confirm. And then reboot the system.
+
+```
+sudo reboot
+```
+
+Check the kernel:
+
+Open a terminal and run the following commands to check the kernel:
+
+:::note
+Make sure your kernel version 6.6.30 or higher
+:::
+
+```
+uname -a
+```
+
+## Install the PCIe Driver and Edge TPU Runtime
+
+### Step 1: Enter the virtual environment
+
+```
+source coral_venv/bin/activate
+```
+
+### Step 2: Install Edge TPU Runtime
+
+Add the Google Coral Edge TPU package repository
+
+````
+echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
+
+curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+
+sudo apt-get update
+````
+
+Install necessary packages and Edge TPU Runtime
+
+```
+sudo apt-get install cmake libedgetpu1-std devscripts debhelper dkms dh-dkms
+```
+
+### Step 3: Install the PCIe driver
+
+```
+git clone https://github.com/google/gasket-driver.git
+cd gasket-driver
+sudo debuild -us -uc -tc -b
+cd ..
+sudo dpkg -i gasket-dkms_1.0-18_all.deb
+```
+## Set Up the udev Rule Add a udev rule to manage device permissions:
+
+open a terminal and run the following commands to set up the udev rule:
+```
+sudo sh -c "echo 'SUBSYSTEM==\"apex\", MODE=\"0660\", GROUP=\"apex\"' >> /etc/udev/rules.d/65-apex.rules"
+
+sudo groupadd apex
+
+sudo adduser $USER apex
+
+sudo reboot
+
+```
+
+## Check Edge TPU
+
+```
+lspci -nn | grep 089a
+```
+The result should be:
+
+
+
+```
+ls /dev/apex_0
+```
+
+
+
+## Install the PyCoral library and test the Edge TPU
+
+### Step 1: Install the PyCoral library
+```
+source coral_venv/bin/activate
+pip install --upgrade pip
+python3 -m pip install --extra-index-url https://google-coral.github.io/py-repo/ pycoral~=2.0
+```
+### Step 2: Test the Edge TPU
+
+Install resources for the example:
+```
+mkdir coral && cd coral
+git clone https://github.com/google-coral/pycoral.git
+cd pycoral
+bash examples/install_requirements.sh classify_image.py
+```
+Test the Edge TPU:
+
+```
+python3 examples/classify_image.py \
+--model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
+--labels test_data/inat_bird_labels.txt \
+--input test_data/parrot.jpg
+```
+
+The result should be:
+
+
+
+## Result
+
+We have successfully installed the M.2 Coral accelerator on a Raspberry Pi 5 and tested the Edge TPU. We also ran the YOLOv8s model on the Coral M.2 Accelerator with int8 quantization, using an input size of 640x640 and a batch size of 1. The inference time is approximately 800-1000ms, which translates to around 1.1 frames per second (FPS).
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/pose_based_light_control_with_nodered_and_rpi_with_aikit.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/pose_based_light_control_with_nodered_and_rpi_with_aikit.md
new file mode 100644
index 000000000000..9051d05d29f3
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/pose_based_light_control_with_nodered_and_rpi_with_aikit.md
@@ -0,0 +1,176 @@
+---
+description: This wiki demonstrates how to use pose estimation with yolov8 to control your lights.
+title: Pose-Based Light Control with Node-Red and Raspberry Pi with AIkit
+keywords:
+ - Edge
+ - reComputer r1000
+ - Object detecton
+ - AI kit
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /pose_based_light_control_with_nodered_and_rpi_with_aikit
+last_update:
+ date: 07/26/2024
+ author: Jiahao
+
+no_comments: false # for Disqus
+---
+
+# Pose-Based Light Control with Node-Red and Raspberry Pi with AIkit
+
+## Introduction
+This wiki will guide you on how to run YOLOv8 using an AI kit, use YOLOv8 to monitor your posture, and ultimately control your lights based on your posture. In this project, a USB camera captures your pose, and yolov8n run on [AI kit](https://www.seeedstudio.com/Raspberry-Pi-AI-Kit-p-5900.html) with [reComputer R1000](https://www.seeedstudio.com/reComputer-R1000-Series-Optional-Accessories.html) to detect your pose. The processed video, displaying the detected pose, is then streamed in real-time to [reTerminal DM](https://www.seeedstudio.com/reTerminal-DM-CM4104032-p-5898.html) using [gstreamer](https://gstreamer.freedesktop.org/). Meanwhile, the joint coordinates are sent using [mqtt](https://mqtt.org/) to [Node-RED](https://nodered.org/) which deploy on the reComputer R1000. At last, the Node-RED flow controls the smart lights based on the joint coordinates.
+
+
+
+## Prepare Hardware
+
+
+
+## Run this project
+
+### On reComputer R1000
+
+#### Step 1: Install AI kit
+
+Pleses refer to [this wiki](https://wiki.seeedstudio.com/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l/) and make sure you install the AI kit to your reComputer R1000.
+
+#### Step 2: Install project
+
+Download the project with the command below:
+```
+git clone https://github.com/LJ-Hao/Pose-Based_Light_Control_with_Node-Red_and_Raspberry_Pi_with_AIkit.git && cd Pose-Based_Light_Control_with_Node-Red_and_Raspberry_Pi_with_AIkit
+```
+
+#### Step 3: Run pose estimation
+
+Edit the ```pose_estimation.py``` file and change the ```mqtt_server``` to your reTerminal DM's IP address. And change the ```Gstreamer pipeline``` to your reTerminal DM's IP address. And then run the command below to start the pose estimation.
+
+```
+bash run.sh
+```
+
+#### Step 4: Install Node-RED
+
+Install Node-RED. You can download Node-RED with just one line of command:
+
+```
+bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
+```
+
+#### Step 5: Import flows.json
+
+Import project files. Click ```Settings => Import``` in the upper right corner, ```click select a file``` to import in the new pop-up window, select ```flows.jeson```, and finally click ```Import```.
+
+
+
+#### Step 6: Download the required controls
+
+After importing the project file, the system may prompt that your node-red is missing some controls. You need to download the following controls:
+
+```
+@bartbutenaers/node-red-rtsp-to-mjpeg
+@chirpstack/node-red-contrib-chirpstack
+@flowfuse/node-red-dashboard
+node-bacnet-contrib-extended
+node-red-contrib-buffer-parser
+node-red-contrib-image-output
+node-red-contrib-image-tools
+node-red-contrib-modbus
+node-red-contrib-msg-speed
+node-red-contrib-multipart-stream-encoder
+node-red-contrib-onvif
+node-red-contrib-play-audio
+node-red-dashboard
+node-red-node-base64
+node-red-node-mysql
+node-red-node-pi-gpio
+node-red-node-ping
+node-red-node-serialport
+node-red-node-smooth
+node-red-sensecap-paas
+node-red-node-random
+```
+
+Take ```node-red-node-random``` as an example, click ```Settings => Manage Palette``` in the upper right corner, select the ```Install``` column in the new window, enter ```node-red-node-random```, and finally click ```Install``` Button.
+
+
+
+#### Step 7: Deploy the project
+
+Click the deploy button in the upper right corner and the system will run normally.
+
+
+
+### On reTerminal DM
+
+#### Step 1: Install the gstreamer on reTerminal DM
+
+Download the gstreamer with the command below:
+
+```
+sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
+```
+
+#### Step 2: Install the repository
+
+Download the repository with the command below:
+```
+git clone https://github.com/LJ-Hao/Pose-Based_Light_Control_with_Node-Red_and_Raspberry_Pi_with_AIkit.git && cd Pose-Based_Light_Control_with_Node-Red_and_Raspberry_Pi_with_AIkit
+```
+#### Step 3: Run video reciver
+
+```
+python3 video_receiver.py
+```
+
+## Result
+
+We showed this demonstration in a youtube live broadcast which begin at ```19:47```. And you can see the light will turn on when the host clap her hands, then the light will turn off when the host wave her hand, enjoy this demo:
+
+
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l.md
similarity index 99%
rename from docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l.md
rename to docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l.md
index b24cddf6ce7b..a347e79d6d39 100644
--- a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l.md
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/yolov8_object_detection_on_recomputer_r1000_with_hailo_8l.md
@@ -116,7 +116,8 @@ hailortcli fw-control identify
The right result show as bellow:
-
+
+
Open terminal on the reCompuer R1000, and input command as follows to check if hailo-8L have been connected.
@@ -125,7 +126,8 @@ lspci | grep Hailo
```
The right result show as bellow:
-
+
+
### Run YOLOv8
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l.md
similarity index 99%
rename from docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l.md
rename to docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l.md
index b95088d746c6..91dbf621419d 100644
--- a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l.md
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Computer-Vision/yolov8_pose_estimation_on_recomputer_r1000_with_hailo_8l.md
@@ -116,7 +116,8 @@ hailortcli fw-control identify
The right result show as bellow:
-
+
+
Open terminal on the reCompuer R1000, and input command as follows to check if hailo-8L have been connected.
@@ -125,7 +126,8 @@ lspci | grep Hailo
```
The right result show as bellow:
-
+
+
### Run YOLOv8
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with-_fin_use_logic_to_alarm.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with-_fin_use_logic_to_alarm.md
new file mode 100644
index 000000000000..99f9a467cf76
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with-_fin_use_logic_to_alarm.md
@@ -0,0 +1,130 @@
+---
+description: This article will show you how to use the Logic Builder of FIN Framwork
+
+title: reComputer R1000 with FIN Logic Builder
+keywords:
+ - Edge Controller
+ - reComputer R1000
+ - FIN
+ - ModbusTCP
+ - LOGIC
+image: https://files.seeedstudio.com/wiki/reComputer-R1000/recomputer_r_images/01.png
+slug: /reComputer_r1000_fin_logic_builder
+last_update:
+ date: 07/16/2024
+ author: ShuishengPeng
+---
+
+## Introduction
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+This article will show you how to use the `Logic Builder` of FIN Framwork, and to implement an alarm using the `Logic Builder`.We monitor the value of a Modbus device. When the value exceeds the critical value, FIN will alarm.
+
+## Getting Start
+
+Before you start this project, you may need to prepare your hardware and software in advance as described here.
+
+### Hardware Preparation
+
+
+
+### Software Preparation
+* Regarding how to install FIN Framwork, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/).
+* About reComputer R1000 using FIN for Modbus communication, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_use_rs485_modbus_rtu/).
+* Using [modbusmechanic](https://modbusmechanic.scifidryer.com/) on W10 PC.You can also use other modbus testing tools.
+### Hardware Configuration
+
+For ModbusTCP, we use Ethernet cables to connect the W10 PC and reComputer R1000 to a switch to ensure that they are on the same network segment.
+
+
+
+## Steps of implement an alarm
+### Create new Logic Builder program
+**Step 1**: First click the directory bar at the top to switch the system directory to the desired target location.
+
+
+
+**Step 2**: Click `Logic Builder => new` on the setting interface, and the following pop-up window will appear:
+
+
+
+To fill in the following parameters:
+ - **Name** - Name of the program
+ - **Description** - Description for what the program is for/does
+ - **Program On** - Used to specify what the program will run on
+ - **Points** - Able to choose points from the equip to use
+ - **Tags** - Find tags used on equip or refs
+ - **Project Variables** - If other project variables exist on other programs, it provides a list of variables that can be used in the new program being create
+ - **Absolute Points** - Able to add hardcoded points based on their id
+
+`Points` can enter multiple points, but we only entered one here. After filling in the information, click `OK` and click `Edit` in the pop-up window on the right to enter the Logic editing interface.
+
+
+
+### Configure Block logic
+**Step 1**: Add an `if` block. There are two ways to add blocks in the workspace. The first is to click on the port of a block to add it, as shown in the figure:
+
+
+
+The second way is to add through the search box in the lower left corner, as shown in the figure:
+
+
+
+**Step 2**: Add the data points to be judged. On the left, you can see the data points we introduced when we created the Logic Builder program. It has two functions: `get` and `set`. Our logic is to determine whether the sensor value exceeds the critical value, so we choose `get` here. . Click `get` and drag it into the workspace, and a `sensor` block will appear.
+
+
+
+**Step 3**: Add the `>=` block. We need to determine whether the sensor value exceeds the critical value, so we need to add a `>=` block, which will output a result to the `if` block. The `if` block determines the next step by judging the result of the `>=` block. action. Here we set the critical value to `23`.
+
+
+
+**Step 4**: Add a delay block. Sometimes we need to make the system more anti-interference, we can add a delay module, and the alarm will only occur after a certain condition is met for a certain period of time. We set the delay time to 3s and connect the output of the module to the `if` block.
+
+
+
+**Step 5**: Create variables. When the sensor value exceeds the critical value, we can set a flag to mark the sensor value as abnormal. This flag can be implemented by creating a `variable`. `variable` has the following types:
+
+
+
+As shown in the figure, we added a variable named `Alarm_bool`, which also has `set` and `get` function blocks. We connect the `set` block of `Alarm_bool` after the `if` block. When the sensor value exceeds the critical value, it is set to `True`. When the sensor does not exceed the critical value, it is set to `False`.
+
+
+
+**Step 6**: Click `alarm` at the top to enter the `alarm` configuration interface. Type `alarm` in the lower left corner to find `alarmBlock` and drag it into the workspace. We need to select the `Alarm_bool` variable we created for `alarmBlock`. When the `Alarm_bool` variable is `True`, the alarm will be triggered, and when the `Alarm_bool` variable is `False`, the alarm will not be triggered.
+
+
+
+### Alarm demonstration
+
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with-fin_create_floor_graphic.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with-fin_create_floor_graphic.md
new file mode 100644
index 000000000000..d12d99285816
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with-fin_create_floor_graphic.md
@@ -0,0 +1,115 @@
+---
+description: This article will show you how to create a Floor Graphic
+
+title: reComputer R1000 with FIN to create a Floor Graphic
+keywords:
+ - Edge Controller
+ - reComputer R1000
+ - FIN
+ - ModbusTCP
+ - Graphic
+image: https://files.seeedstudio.com/wiki/reComputer-R1000/recomputer_r_images/01.png
+slug: /reComputer_r1000_fin_floor_gaphic
+last_update:
+ date: 07/18/2024
+ author: ShuishengPeng
+---
+
+## Introduction
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+This article will show you how to use the `Graphics Builder` of FIN Framwork, and to create a `Floor Graphic` using the `Graphics Builder`.
+
+## Getting Start
+
+Before you start this project, you may need to prepare your hardware and software in advance as described here.
+
+### Hardware Preparation
+
+
+
+### Software Preparation
+* Regarding how to install FIN Framwork, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/).
+* Regarding how to use the Modbus function of FIN framwork, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_fin_modbus_tcp_and_rtu/)
+
+## Steps of create a Floor Graphic
+### Create new Floor Graphic
+**Step 1**: We established a Modbus TCP connection and a Modbus RTU connection, and created the corresponding Equip. Each Equip has a label of `humidty` and `temperature`. For how to implement this step, you can refer to this [wiki]( https://wiki.seeedstudio.com/reComputer_r1000_fin_modbus_tcp_and_rtu/). At the same time, please put the context of FIN Framwork under the corresponding `Floor`. Here we put the context under `Tower => Floor1`.
+
+
+
+**Step 2**: Create a new Floor Graphic and enter the editing interface. Click `Graphic Builder => new`, and the pop-up window of `Create a Floorplan Graphic` will appear.
+
+
+It has four attributes:
+
+ - Craphic Name
+ - Pick a Sample Equip
+ - Pick Default Point : Attributes that will be displayed in the graphic
+ - Pick Comparison Point : Reference point for color range
+
+Clicking 'OK' will bring up a new pop-up window that lists' Equip 'with the same properties as' Pick Default Point'. Here, we select all of them and finally click 'OK'.
+After that, our newly created Graphic will appear on the right side. Click `CCFloor1 => Edit` to enter the editing interface.
+
+
+
+### Configure new Site Graphic
+
+**Step 1**: Import background image. First, select `BACGROUND` in the property bar in the lower left corner, select `TYPE` as `IMAGE`, then import the background image into the workspace, Select `Center` for the `POSITION` option and `NO REPEAT` for the `REPEAT` option. There are two ways to import background images. The first way is to drag it directly from the folder into the edit box; the second way is to click `BROWSE` in the lower left corner. If you have imported a certain image before, you can click here find that picture.
+
+
+
+**Step 2**: Draw polygons. We use the `polygon Tool` to draw polygons to mark the position of each `Equip`.
+
+
+
+**Step 3**: Add `Virtual points`. Switch to the `Virtual points` panel on the left, select the `virtual point` that matches the `Equip` we selected, and drag it into the drawn polygon.
+
+
+
+**Step 4**: Add smart tags. Click on `Magic Buttons => Smart Label to Polys` to automatically place the label on the corresponding `Virtual Points`.
+
+
+
+**Step 5**: Adjust the size of smart tags. You can click on the smart label to adjust its size. If you want to modify the size of multiple smart labels at the same time, you can click on `Compulsions=>Smart label=>Select` to select all smart labels, and then adjust their size
+
+
+
+
+**Step 6**: Change the smart tag to `non interactive` so that the tag does not interfere with your operations
+
+
+
+**Step 7**: Save and display the effect.
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_create_equip_graphic.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_create_equip_graphic.md
new file mode 100644
index 000000000000..5c1d539a10e6
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_create_equip_graphic.md
@@ -0,0 +1,115 @@
+---
+description: This article will show you how to create a Equip Graphic
+
+title: reComputer R1000 with FIN to create a Equip Graphic
+keywords:
+ - Edge Controller
+ - reComputer R1000
+ - FIN
+ - ModbusTCP
+ - Graphic
+image: https://files.seeedstudio.com/wiki/reComputer-R1000/recomputer_r_images/01.png
+slug: /reComputer_r1000_fin_equip_gaphic
+last_update:
+ date: 07/22/2024
+ author: ShuishengPeng
+---
+
+## Introduction
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+This article will show you how to use the `Graphics Builder` of FIN Framwork, and to create a `Equip Graphic` using the `Graphics Builder`.
+
+## Getting Start
+
+Before you start this project, you may need to prepare your hardware and software in advance as described here.
+
+### Hardware Preparation
+
+
+
+### Software Preparation
+* Regarding how to install FIN Framwork, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/).
+
+## Steps of create a Equip Graphic
+### Create new Equip Graphic
+**Step 1**: Please put the context under the path `Tower => Floor1 => ModbusEquip`.
+
+
+
+**Step 2**: Create a new `Equip Graphic`. Click `Graphic Builder => new`, and according to the system context, a pop-up window named `Create a Graphic` will appear:
+
+
+
+The pop-up window mainly has the following attributes:
+- **Graphic Name:** Allows you to type in a name for the graphic.
+- **Graphic Template:** Allows you to select a starter template from a list of available pre-built "duct templates." This is not a required parameter, just gives you a starting point of ductwork. (You can also create your own templates to be used here).
+- **Graphic On Filter:** The Graphic On filter refers to the graphic's "graphicOn" tags, which determine what database records this graphic will run on. By default, this filter will automatically be filled in based on your context equipment. (In our example, I created the graphic while on a VAV, which is why this filter in the screenshot is filled in with that VAV's tags). This filter can be changed after the fact if the need arises.
+- **Relative - By Tags:** This option makes it so that the points automatically come in Relative, based on their current tags. When points are relative, they are not "hardcoded" to one set of equipment's data. They are relative and will load on any equipment that has similar points based on the points' tags.
+- **Relative - By navName:**This option makes it so that the points automatically come in Relative, based on their current navName. When points are relative, they are not "hardcoded" to one set of equipment's data. They are relative and will load on any equipment that has similar points based on the points' navName.
+- **Absolute - by Point Ids:** This option makes it so that the points automatically come in Absolute (or `hardcoded`) to the current equipment you are on. When a point is brought in "Absolute by Point id" the path is automatically hardcoded to get data from that exact point no matter where the graphic is loaded.
+- **Points:** This allows you to select which points you would like to bring into the graphic. By using the *CTRL* and/or *SHIFT* keys, you can select multiple points. The points are populated based on your context equipment. You also get points associated to that equip's refs. (In our example, the VAV has an ahuRef, so we are able to select points from the ahuRef to show in our graphic)
+- **Add Components For:** This list is populated by the points you select in the previous "Points" section. By highlighting points in this section, you are telling FIN to automatically create a graphical component (based on its tags) and bind the point to the graphical component. This isn't required but can save time since it selects the component, brings it in, binds the point to it, and brings out a Display Label for it.
+
+After the configuration is completed, click the `OK` button. A new graphic will appear on the right side. Click `EquipGraphic => Edit` to enter the editing interface.
+
+
+
+
+### Configure new Equip Graphic
+**Step 1**:After entering the editing interface, the system will automatically generate smart labels and component based on the content selected in the `Add Components for` property. Move the control and click `Magic Button => Smart Label to GraphicObjects` to have the smart label automatically align with the control.
+
+
+
+**Step 2**:Check `Virtual point`. You can click on the control through email and select `Edit Properties`. You can see `virtual point` in the new pop-up window, and you can modify it here; you can also view the `virtual point` corresponding to the control through `ADVANCED` in the lower left corner.
+
+
+
+**Step 3**:Add new component and connect `virtual point`. In addition to the component automatically generated for us by the system, we can also add them ourselves. There are many component in the `COMPONENTS` box on the left. Drag the control with the left mouse button to the working control, then select the corresponding `virtual point` in the `VIRTUAL POINTS` column and drag it into the new home control. This way The binding of the new control to the virtual point is completed.
+
+
+
+**Step 4**:Add `Overview Box`. We can add an `Overview Box` to display all values together. Click `Overview Box => New` and a new pop-up window will appear:
+
+
+
+- **Mini Group:** If enabled, this will make the overview box appear with larger values and smaller title area. This box is smaller than the regular box and is recommended for scenarios where the box needs to be on the graphic, such as VFD (Spd,Cmd,Ena,Stat)
+- **Points**: This will allow you to select which points to include in the overview box. **TIP:** If you had any smart labels selected before opening the Overview Box wizard, those points will already be selected in the list of points in the wizard.
+
+After selecting the point, enter the window title in the next window, and finally click `APPLY`.
+
+
+
+**Step 5**:Show results
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_create_site_graphic.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_create_site_graphic.md
new file mode 100644
index 000000000000..efc0a44791aa
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_create_site_graphic.md
@@ -0,0 +1,98 @@
+---
+description: This article will show you how to create a Site Graphic
+
+title: reComputer R1000 with FIN to create a Site Graphic
+keywords:
+ - Edge Controller
+ - reComputer R1000
+ - FIN
+ - ModbusTCP
+ - Graphic
+image: https://files.seeedstudio.com/wiki/reComputer-R1000/recomputer_r_images/01.png
+slug: /reComputer_r1000_fin_site_gaphic
+last_update:
+ date: 07/18/2024
+ author: ShuishengPeng
+---
+
+## Introduction
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+This article will show you how to use the `Graphics Builder` of FIN Framwork, and to create a `Site Graphic` using the `Graphics Builder`.
+
+## Getting Start
+
+Before you start this project, you may need to prepare your hardware and software in advance as described here.
+
+### Hardware Preparation
+
+
+
+### Software Preparation
+* Regarding how to install FIN Framwork, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/).
+
+## Steps of create a Site Graphic
+### Create new Site Graphic
+**Step 1**: We created 4 Floors. For how to create Floors, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_fin_modbus_tcp_and_rtu/). Then place the context under the corresponding `Site`, Here we place it under the `Tower` path.
+
+
+
+**Step 2**: Create a new Graphic and enter the editing interface. Click `Graphic Builder => new`, and the pop-up window of `Create a Graphic` will appear. The difference from creating `Top Level Graphic` is that the second property here becomes `Select floors to include in site graphic`, We select all the created `Floor` and finally click `OK`. After that, our newly created Graphic will appear on the right side. Click `CC Main => Edit` to enter the editing interface.
+
+
+
+### Configure new Site Graphic
+
+**Step 1**: Import background image. First, select `BACGROUND` in the property bar in the lower left corner, select `TYPE` as `IMAGE`, then import the background image into the workspace, adjust the size and fix it. There are two ways to import background images. The first way is to drag it directly from the folder into the edit box; the second way is to click `BROWSE` in the lower left corner. If you have imported a certain image before, you can click here find that picture. After importing, right-click the mouse and select `Arrange => Send to back` to move the image to the bottom layer.
+
+
+
+**Step 2**: Adjust label position. Since we imported 4 `Floors`, the system automatically generated 4 labels for us. For the sake of beauty, we mapped these labels to the floors one by one.
+
+
+
+**Step 3**: Draw polygons. We use the `polygon Tool` to draw polygons to mark the position of each `Floor`.
+
+
+
+**Step 4**: Add `Virtual points`. Switch to the `Virtual points` panel on the left, select the `virtual point` that matches the `Floor` we selected, and drag it into the drawn polygon.
+
+
+
+**Step 5**: Make the polygon transparent.
+
+
+
+**Step 6**: After saving the settings, we can enter the new `Site graphic` from `Top Level Graphic`.
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_top_level_graphic.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_top_level_graphic.md
new file mode 100644
index 000000000000..b4f89f564e92
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_top_level_graphic.md
@@ -0,0 +1,106 @@
+---
+description: This article will show you how to create a Top Level Graphic
+
+title: reComputer R1000 with FIN to create a Top Level Graphic
+keywords:
+ - Edge Controller
+ - reComputer R1000
+ - FIN
+ - ModbusTCP
+ - Graphic
+image: https://files.seeedstudio.com/wiki/reComputer-R1000/recomputer_r_images/01.png
+slug: /reComputer_r1000_fin_top_level_gaphic
+last_update:
+ date: 07/17/2024
+ author: ShuishengPeng
+---
+
+## Introduction
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+This article will show you how to use the `Graphics Builder` of FIN Framwork, and to create a `Top Level Graphic` using the `Graphics Builder`.
+
+## Getting Start
+
+Before you start this project, you may need to prepare your hardware and software in advance as described here.
+
+### Hardware Preparation
+
+
+
+### Software Preparation
+* Regarding how to install FIN Framwork, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/).
+
+## Steps of create a Top Level Graphic
+### Create new Top Level Graphic
+**Step 1**: We create three sites. For how to create sites under Equip Tree, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_fin_modbus_tcp_and_rtu/#add-data-points-to-equip-tree). And please keep the system context in the home directory.
+
+
+
+**Step 2**: Click `Graphics Builder => New`, and a pop-up window named `Create a Graphic` will appear. You need to fill in the `Graphic Name` and `Select sites to include in Top Level graphic` properties, among which the optional `site` is the `site` we created in the first step. Finally, click `OK` and our newly created Graphic will appear on the right side. Click it and then click `Edit` to enter the editing page.
+
+
+
+### Configure new Top Level Graphic
+
+**Step 1**: Import the floor plan. First select `IMAGE` in the `TYPE` column in the lower left corner, and then you can import the background image. There are two ways to import background images. The first way is to drag it directly from the folder into the edit box; the second way is to click `BROWSE` in the lower left corner. If you have imported a certain image before, you can click here find that picture. After importing, right-click the mouse and select `Arrange => Send to back` to move the image to the bottom layer.
+
+
+
+**Step 2**: Since we selected three `site`, the system will automatically generate three labels. For the sake of beauty, we will place them in the lower right corner and align them.
+
+
+
+**Step 3**: We can add a `label` to explain some information. We find the `label` control on the left and drag it into the workspace, adjust its size, and then change the text and text size of `label` in the lower right corner.
+
+
+
+**Step 4**: Add `Graphic include` to put our tags together and set a background color to make the visual effect more beautiful
+
+
+
+**Step 5**: Draw the polygon. Use the `polygon Tool` at the top to draw a polygon to mark the location of our `site`. After drawing, you can also use the `Edit polygon Tool` tool to adjust the polygon.
+
+
+
+**Step 6**: Add `Virtual points`. Switch to the `Virtual points` panel on the left, select the `virtual point` that matches the `site` we selected, and drag it into the drawn polygon.
+
+
+
+**Step 7**: Make the polygon transparent.
+
+
+
+**Step 8**: After saving the settings, click `Graphics Builder => Menu` and a new interface will appear on the right. Click `Top Level Graphic => Create` in the new interface and a popup named `Edit Top Level Record` will appear. window, select the Graphic we set, and finally click `APPLY`. After returning to the main interface, you can see the Top Level Graphic we set.
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_use_modbus.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_use_modbus.md
new file mode 100644
index 000000000000..65ec855e26ad
--- /dev/null
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/Applications/Fin/recomputer_r1000_with_fin_use_modbus.md
@@ -0,0 +1,248 @@
+---
+description: This article introduces how to use the `Modbus Connector` of `FIN Framwork`.
+
+title: reComputer R1000 with FIN to use modbus TCP/RTU
+keywords:
+ - Edge Controller
+ - reComputer R1000
+ - FIN
+ - ModbusTCP/RTU
+image: https://files.seeedstudio.com/wiki/reComputer-R1000/recomputer_r_images/01.png
+slug: /reComputer_r1000_fin_modbus_tcp_and_rtu
+last_update:
+ date: 07/15/2024
+ author: ShuishengPeng
+---
+
+## Introduction
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+This article introduces how to use the `Modbus Connector` of `FIN Framwork`, the use of Modbus TCP/RTU in FIN Framwork was explained in detail. which mainly includes three aspects: creating a `FIN Framwork` project, configure `serial port number`, configuring the `Modbus Connector`, and adding data points to `Equip`.
+
+## Getting Start
+
+Before you start this project, you may need to prepare your hardware and software in advance as described here.
+
+### Hardware Preparation
+
+
+
+### Software Preparation
+* Regarding how to install FIN Framwork, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/).
+* Regarding how to use the modbus function of reComputer R1000, you can refer to this [wiki](https://wiki.seeedstudio.com/reComputer_r1000_use_rs485_modbus_rtu/).
+* Using [modbusmechanic](https://modbusmechanic.scifidryer.com/) on W10 PC.You can also use other modbus testing tools.
+### Hardware Configuration
+
+For ModbusTCP, we use Ethernet cables to connect the W10 PC and reComputer R1000 to a switch to ensure that they are on the same network segment.
+
+
+
+For ModbustRTU, we used an rs485 to USB module to connect the reComuputer R1000 with the W10 pc.
+
+
+
+
+### Create New Project
+**Step 1**: Click the `Create` button in the lower left corner of the homepage, and a new pop-up window will appear. The pop-up window mainly has three attributes that need to be filled in:
+ - NAME: the name of the new project
+ - DISPLAY NAME: displayed project name
+ - DESCRIPTION: description of the project
+
+
+
+**Step 2**: Open the project, enter `DB Builder`, click `Connectors`, you can see that there is no `Modbus` option at this time, we need to open the `Modbus Connector` of `FIN Framwork`, then `Modbus` option will appear here.
+
+
+
+### Configure `Modbus Connector` for Modbus TCP
+
+**Step 1**: Open `Modbus Connector`. Click `Settrings => Ext` and find `Modbus`. At this time, `Modbus` is marked in red. Click `Enable` and you can see that the `Modbus` mark turns green, indicating that the `Modbus Connector` has been successfully opened. Enter `DB Builder` again and you can see that there is already a `Modbus` option.
+
+
+
+**Step 2**: Add a new Modbus connection. Click `Modbus => Add`, the new pop-up window mainly has the following parameters to fill in:
+ - Dis: the name of the connector
+ - ModbusSlave: this would be the slave of the modbus device being connected (default is 1)
+ - Existing Register Map: If the user already configured a Modbus connector, they would see available registers here to choose from or create a new one with the next property ModbusRegMapUri.
+ - ModbusRegMapUri: this is where the user would specify the name of the register map to link with this connector. Replace "xxx" with whatever the name of the register map is.
+ - Uri: this is where the uri of the modbus connector would be specified.The format of URI is as shown in the table:
+
+
+ | Protocol | URI setup | Example | Notes |
+ | ------------------------------------------------------------ | ----------- | -------------- | --------- |
+ | TCP/IP | `modbus-tcp://host:port/` | `modbus-tcp://10.0.0.17/` | Default port is 502, can be omitted if standard |
+ | RTU over TCP/IP | `modbus-rtutcp://host:port/` | `modbus-rtutcp://192.168.1.120:9001/` | Default port is 502, can be omitted if standard |
+ | RTU over RS-485 | `modbus-rtu://---` | `modbus-rtu://serial0-9600-8n1-none` | |
+
+
+
+In our example, we specified "r1000_demo" as our register map. Then added our IP to the device in the Uri.
+
+
+
+**Step 3**: Add a new `Register Maps`. Click `Register Maps => Add`, enter `Name`, which needs to be consistent with the name of `ModbusRegMapUri` in the second step, and finally click `ADD`.
+
+
+
+The system will create a new `r1000_demo.csv` file in the `opt/finFramework_5.1.6.55/var/proj/recomputer_R1000_demo/data/modbus/` directory. This file describes the Modbus register information we need to read.
+
+
+
+
+**Step 4**: Add the register information to be read. `Modbus Connector` exists as a Modbus master. It will read the registers of the slave. We need to configure the register information to be read. Click `r1000_demo`, you can see that there is a description of `ping` by default, this is a must. We continue to add new register information and click `Register Maps => r1000_demo => Add`. The new pop-up window mainly has the following parameters to fill in:
+
+- name(required): name of register.
+
+ - It must be unique
+
+ - It must start with a lower case letter a-z
+ - Only a-z, A-Z, 0-9 and underscores are allowed. No spaces or other special characters.
+
+- addr(required): this would be the address of the register that follows the modbus convention.
+
+ - 0xxxx - Coil (00001-065536)
+ - 1xxxx - Discrete Input (10001-165536)
+ - 3xxxx - Input Register (30001-365536)
+ - 4xxxx - Holding Register (40001-465536)
+
+- data(required): this defines the data type of the register.
+
+ - Types:
+ - bit - Bool
+ - u1 - Unsigned 8-bit Int
+ - u2 - Unsigned 16-bit Int
+ - u4 - Unsigned 32-bit Int
+ - s1 - Signed 8-bit Int
+ - s2 - Signed 16-bit Int
+ - s4 - Signed 32-bit Int
+ - s8 - Signed 64-bit Int
+ - f4 - 32-bit Float
+ - f8 - 64-bit Float
+
+- rw(required): this would determine the read/write permissions
+
+ - rw - Register may be read and written
+ - r - Register is read-only
+ - w - Register is write-only
+
+- scale(optional): this allows the user to apply a scale factor to the registers. The format is [operator] [number] where the factor is a numeric constant.
+
+ - Examples:
+ - add: +1.5
+ - minus: -0.25
+ - mult: *10
+ - div: /1000
+
+- dis(optional): this is an optional tag that the user can specify a pretty display name for the register.
+
+- unit(optional): this would define the unit to use for the register.
+
+- tags(optional): this would be the tags to apply to the point when learned into the database.
+
+- folderPath(optional): if the user wants to organize the points, they can do so by applying a folderPath.
+
+
+
+**Step 5**: Communication test. After adding the description information of the register, communication can be carried out. Here we use `ModbusMechanic` as the Modbus slave. Click `Modbus => Ping` and you can see that `Status` changes to `OK`, indicating that the communication is normal.
+
+
+
+
+### Configure `Modbus Connector` for Modbus RTU
+#### Configure serial port
+The script that needs to be executed is as follows:
+```shell
+## Turn off FIN service
+sudo systemctl stop fin
+## After downloading the config file, place it in /opt/finFramework_5.1.6.55/etc/finStackSerial/
+sudo cp ~/config.props /opt/finFramework_5.1.6.55/etc/finStackSerial/
+## Modify the config.props file to: serialPorts=/dev/ttyAMA30, /dev/ttyAMA31, /dev/ttyAMA32
+sudo nano /opt/finFramework_5.1.6.55/etc/finStackSerial/config.props
+## Restart the FIN service, wait for a while and then use a browser to open FIN
+sudo systemctl restart fin
+
+```
+**Step 1**: Turn off FIN service, then download [config file](https://drive.google.com/file/d/1j1aGGSsGPjGCYfUGcXTqL2XGP2EuqFw2/view?usp=share_link) and save it to `/opt/finFramework_5.1.6 .55/etc/finStackSerial/` directory
+
+
+
+**Step 2**: Modify config.props to:
+```shell
+serialPorts=/dev/ttyAMA30, /dev/ttyAMA31, /dev/ttyAMA32
+```
+After the modification is completed, restart the FIN service
+
+
+**Step 3**:Click on `Folio => launch`,and insert the following query:`serialPorts()`, The result will show which name has to be used for your specific port.The port is not the name of the physical port, but there is a match between the physical ports of the device and the name of the port to be used like `serial0`, `serial1` ...
+
+
+
+#### Configure Modbus RTU
+
+**Step 1**: Open `Modbus Connector`. Click `Settrings => Ext` and find `Modbus`. At this time, `Modbus` is marked in red. Click `Enable` and you can see that the `Modbus` mark turns green, indicating that the `Modbus Connector` has been successfully opened. Enter `DB Builder` again and you can see that there is already a `Modbus` option.
+
+
+
+**Step 2**: Add a new Modbus connection. Click `Modbus => Add`.In our example, we specified "r1000_demo_rtu" as our register map. Then added our serial port to the device in the Uri.
+
+
+
+**Step 3**: Add a new `Register Maps`. Click `Register Maps => Add`, enter `Name`, which needs to be consistent with the name of `ModbusRegMapUri` in the second step, and finally click `ADD`.
+
+
+
+The system will create a new `r1000_demo_rtu.csv` file in the `opt/finFramework_5.1.6.55/var/proj/recomputer_R1000_demo/data/modbus/` directory. This file describes the Modbus register information we need to read.
+
+**Step 4**: Add the register information to be read. `Modbus Connector` exists as a Modbus master. It will read the registers of the slave. We need to configure the register information to be read. Click `r1000_demo_rtu`, you can see that there is a description of `ping` by default, this is a must. We continue to add new register information and click `Register Maps => r1000_demo_rtu => Add`.
+
+
+
+**Step 5**: Communication test. After adding the description information of the register, communication can be carried out. Here we use `ModbusMechanic` as the Modbus slave. Click `Modbus => Ping` and you can see that `Status` changes to `OK`, indicating that the communication is normal.
+
+
+
+
+### Add data points to `Equip Tree`
+
+**Step 1**: add `Equip`. Click `Equip Tree => + => Add site`, enter `Name`, here I enter `Tower`, it can add a `site` named `Tower`; then click `Equip Tree => Tower => + => Add Floor`, enter `Name`, here I enter `Floor1`, it can add a `Floor` named `Floor1`; click `Equip Tree again => Tower => Floor1 => + => Add Equip`, enter `Name`, here I enter `ModbusEquip` to add a new `Equip`.
+
+
+
+**Step 2**: Click `->` on the right side of `ModbusEquip` to make the system path under `Tower/Floor1/ModbusEquip`.
+
+
+
+**Step 3**: Add data points. Click `Modbus => Modbus Conn`, click `Discover Points` in the new window, the register information points we set will appear, select a register to be read, and click `Add`.
+
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r.md
index d072f5bd4677..95c3080e12e7 100644
--- a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r.md
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r.md
@@ -100,7 +100,7 @@ With robust IoT network communication capabilities, the R1000 series supports mu
Operating System
-
Raspbian, Debian
+
Raspberry Pi OS, Ubuntu
RAM
diff --git a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r1000_assembly_guide.md b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r1000_assembly_guide.md
index 5ef31ba528f7..ebda4c4d4569 100644
--- a/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r1000_assembly_guide.md
+++ b/docs/Edge/Raspberry_Pi_Devices/reComputer_R1000/recomputer_r1000_assembly_guide.md
@@ -121,7 +121,7 @@ Following these steps should help you disassemble the device without any issues.
- Carefully solder the PoE module onto the board. Due to the compact nature of the board, exercise caution while soldering to avoid damaging nearby components.
:::note
-Place the PoE module correctly according to the PCB silk screen orientation and solder it.
+Please correctly install the PoE module, placing the white dots facing inward, next to a capacitor.
:::
diff --git a/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/reTerminal-build-UI-using-LVGL.md b/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/reTerminal-build-UI-using-LVGL.md
index 5c6452d41897..5b4c349c1410 100644
--- a/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/reTerminal-build-UI-using-LVGL.md
+++ b/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/reTerminal-build-UI-using-LVGL.md
@@ -147,7 +147,7 @@ To see how can you build your own UI application for reTerminal with LVGL 8.0, y
All the necessary components are imported and initialized in main.c, after that the main UI function is called. The UI description, callbacks and helper functions are located inside of **lv_demo_reterminal_UI/lv_demo_reterminal_UI.c**.
-```C
+```cpp
tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, tab_h);
lv_obj_set_style_text_font(lv_scr_act(), font_normal, 0);
@@ -166,7 +166,7 @@ We create a Tabview widget on the active screen and populate it with three tabs:
The content of each tab is initialized separately in a corresponding function:
-```C
+```cpp
assistant_create(t1);
debug_create(t2);
stats_create(t3);
@@ -178,7 +178,7 @@ The content of each tab is initialized separately in a corresponding function:
Additionally color changer elements are created on the Tabview widget and built-in accelerometer is initialized. After that we create three timer callbacks with dummy input data:
-```C
+```cpp
static uint32_t user_data = 10;
lv_timer_t * time_timer = lv_timer_create(time_timer_cb, 1, &user_data);
lv_timer_t * system_timer = lv_timer_create(system_timer_cb, 500, &user_data);
@@ -187,7 +187,7 @@ Additionally color changer elements are created on the Tabview widget and built-
These are responsible for getting system time, system status (CPU, Mem, Disk Space, Ethernet current speed, etc) and accelerometer readings respectively. You can find these three callback functions at the bottom of the lv_demo_reterminal_UI.c.
-```C
+```cpp
void time_timer_cb(lv_timer_t * timer)
{
@@ -245,7 +245,7 @@ If you decide to follow our demo application closely when creating your first UI
**assistant_create**
We create a panel object for the tab and set its height.
-```C
+```cpp
lv_obj_t * panel1 = lv_obj_create(parent);
lv_obj_set_height(panel1, lv_pct(100));
```
@@ -256,7 +256,7 @@ Then we create an image button object from C array located in assets folder, obt
-```C
+```cpp
LV_IMG_DECLARE(speech_btn_img);
/*Create a transition animation on width transformation and recolor.*/
@@ -289,7 +289,7 @@ In the next code block we create text labels for time, date, user greeting. Thes
-```C
+```cpp
lv_obj_t * name = lv_label_create(panel1);
lv_label_set_text(name, "Hi there, Username");
lv_obj_add_style(name, &style_large, 0);
@@ -318,7 +318,7 @@ Note that the grid layout feature of LVGL needs to be globally enabled with ```L
You can read about Layouts in LVGL in more detail by following [this link](https://docs.lvgl.io/master/layouts/grid.html).
-```C
+```cpp
static lv_coord_t grid_main_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_main_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
diff --git a/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/weather-dashboard-with-Grafana-reTerminal.md b/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/weather-dashboard-with-Grafana-reTerminal.md
index 71233d6345f5..6ec581567581 100644
--- a/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/weather-dashboard-with-Grafana-reTerminal.md
+++ b/docs/Edge/Raspberry_Pi_Devices/reTerminal/Application/UI_design/weather-dashboard-with-Grafana-reTerminal.md
@@ -127,7 +127,7 @@ To collect the weather data, we are going to be using an ESP32 with a DHT11 sens
- **Step 2.** Copy the following codes in the skecth.
-```c++
+```cpp
#include //Import the required libraries
#include "DHT.h"
#include "Seeed_BMP280.h"
diff --git a/docs/FAQ/XIAO/check_battery_voltage.md b/docs/FAQ/XIAO/check_battery_voltage.md
index 679172b1ff81..dbc8b104f7f6 100644
--- a/docs/FAQ/XIAO/check_battery_voltage.md
+++ b/docs/FAQ/XIAO/check_battery_voltage.md
@@ -27,7 +27,7 @@ In addition, during communication in particular, spike-like errors occurred, whi
The following is the procedure to test the battery voltage.
-```c++
+```cpp
void setup() {
Serial.begin(115200);
pinMode(A0, INPUT); // ADC
diff --git a/docs/Network/Meshtastic_Network/sensecap_t1000_e.md b/docs/Network/Meshtastic_Network/sensecap_t1000_e.md
new file mode 100644
index 000000000000..bbbfc33b05b0
--- /dev/null
+++ b/docs/Network/Meshtastic_Network/sensecap_t1000_e.md
@@ -0,0 +1,213 @@
+---
+description: SenseCAP Card Tracker T1000-E for Meshtastic
+title: T1000-E Tracker for Meshtastic
+keywords:
+- Tracker
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /sensecap_t1000_e
+last_update:
+ date: 7/1/2024
+ author: Jessie
+---
+
+## Introduction
+
+
+
+
+
+
+
+
+It is a high-performance tracker designed for Meshtastic, as small as a credit card, effortlessly fitting in your pocket or attaching to your assets. It embeds Semtech's LR1110, Nordic's nRF52840, and Mediatek's AG3335 GPS module, providing Meshtastic users with a high-precision, low-power positioning and communication solution.
+
+
+
+### Features
+
+
+
+* **Multi-Protocol Support**: Featuring nRF52840 and LR1110, it supports Bluetooth 5.0, Thread, Zigbee, and LoRa, ensuring compatibility with a wide range of devices and networks.
+* **Powerful Positioning Capabilities**: Integrated with the Mediatek‘s AG3335 GPS chip, it provides high-precision positioning services.
+* **Expandable Interfaces**: Designed with four pogo pins, it supports USB interface for DFU (Device Firmware Upgrade), serial logging, and API interface, simplifying device management and debugging.
+* **Open Source Support**: Compatible with the Meshtastic open-source mesh networking protocol, suitable for long-range and low-power communication needs.
+
+
+### Specification
+
+**General**
+
+
+|**Network protocol**|LoRa, Bluetooth v5.1|
+| :- | :- |
+|**Temperature**|
Range: -20 to 60℃;
Accuracy: ± 1℃ (min ±0.5℃, max ±1℃)
Resolution: 0.1℃
|
+|**Light**|0 to 100% (0% is dark, 100% is brightest)|
+|**3-Axis Accelerometer**|3-Axis Accelerometer to detect movement|
+|**LED and Buzzer**|1\*LED and 1\* buzzer to indicate status|
+|**Button**|1\* Button to operate|
+|**Antenna**|Internal (GNSS/LoRa/Wi-Fi/BLE)|
+|**Communication Distance**|2 to 5km (depending on antenna, installation, and environments)|
+|**IP Rating**|IP65|
+|**Dimensions**|85 \* 55 \* 6.5 mm|
+|**Device Weight**|32g|
+|**Operating Temperature**|-20℃ to +60℃|
+|**Operating Humidity**|5% - 95% (No condensation)|
+|**Certification**|CE /FCC|
+
+**Battery**
+
+|**Battey Capacity**|Rechargeable lithium battery, 700mAh|
+| :- | :- |
+|**Battery Life Monitoring**|Periodic uplink battery level|
+|
**Charge Cable**
**(Adapter not included)**
|USB magnetic charging cable, 1 meter|
+|**Power Input Voltage**|4\.7 to 5.5V DC|
+|**Charging Temperature Limit**|0 to +45℃|
+
+
+### Hardware overview
+
+
+
+
+
+
+## Get Started
+
+### Configuration
+
+
+Press the button once to power on the T1000-E tracker, the Bluetooth pairing will be activated automatically.
+
+#### Device Connection
+
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+
+
+* Download the `Meshtastic` App.
+
+* Select the target device on the Bluetooth panel.
+
+
+
+
+* Enter the code(default code is `123456`) and then click `OK` to connect the device.
+
+
+
+
+
+
+
+
+* Download the `Meshtastic` App.
+
+* Click `+` and choose the target device.
+
+
+
+
+* Enter the code(default code is `123456`) and then click `OK` to connect the device.
+
+
+
+
+
+
+
+#### Parameters Configuration
+
+
+
+In order to start communicating over the mesh, you must set your region. This setting controls which frequency range your device uses and should be set according to your regional location.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+**Region List**
+
+Refer to [LoRa Region by Country](https://meshtastic.org/docs/configuration/region-by-country/) for a more comprehensive list.
+
+
+|**Region Code**|**Description**|**Frequency Range (MHz)**|**Duty Cycle (%)**|**Power Limit (dBm)**|
+| :-: | :-: | :-: | :-: | :-: |
+|UNSET|Unset|N/A|N/A|N/A|
+|US|United States|902\.0 - 928.0|100|30|
+|EU\_433|European Union 433MHz|433\.0 - 434.0|10|12|
+|EU\_868|European Union 868MHz|869\.4 - 869.65|10|27|
+|CN|China|470\.0 - 510.0|100|19|
+|JP|Japan|920\.8 - 927.8|100|16|
+|ANZ|Australia & New Zealand|915\.0 - 928.0|100|30|
+|KR|Korea|920\.0 - 923.0|100||
+|TW|Taiwan|920\.0 - 925.0|100|27|
+|RU|Russia|868\.7 - 869.2|100|20|
+|IN|India|865\.0 - 867.0|100|30|
+|NZ\_865|New Zealand 865MHz|864\.0 - 868.0|100|36|
+|TH|Thailand|920\.0 - 925.0|100|16|
+|UA\_433|Ukraine 433MHz|433\.0 - 434.7|10|10|
+|UA\_868|Ukraine 868MHz|868\.0 - 868.6|1|14|
+|MY\_433|Malaysia 433MHz|433\.0 - 435.0|100|20|
+|MY\_919|Malaysia 919MHz|919\.0 - 924.0|100|27|
+|SG\_923|Singapore 923MHz|917\.0 - 925.0|100|20|
+|LORA\_24|2\.4 GHz band worldwide|2400\.0 - 2483.5|100|10|
+
+:::info
+**EU_433** and **EU_868** have to adhere to an hourly duty cycle limitation of 10%, calculated every minute on a rolling 1-hour basis. Your device will stop transmitting if you reach it, until it is allowed again.
+:::
+
+
+Now that you have set the LoRa region on your device, you can continue with configuring any [additional configs](https://meshtastic.org/docs/configuration/) to suit your needs.
+
+
+
+
+
+
+## Resource
+
+[Meshtastic Doc](https://meshtastic.org/docs/introduction/)
+
+
+
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Network/Meshtastic_Network/wio_tracker_kit/flash_meshtastic_kit.md b/docs/Network/Meshtastic_Network/wio_tracker_kit/flash_meshtastic_kit.md
index e58f3e8e22db..3927142ac279 100644
--- a/docs/Network/Meshtastic_Network/wio_tracker_kit/flash_meshtastic_kit.md
+++ b/docs/Network/Meshtastic_Network/wio_tracker_kit/flash_meshtastic_kit.md
@@ -35,17 +35,23 @@ Connect the Dev Board to your PC via the USB cable.
### Flash the bootloader
+
+
+* [Bootloader download](https://files.seeedstudio.com/wiki/SenseCAP/respeaker/update-wio_tracker_1110_bootloader-0.9.1_nosd.uf2)
+
Double click the `Reset` button, there should be a `WM1110_BOOT` drive on your PC.
-Copy the `update-wio_tracker_1110_bootloader-0.9.1_nosd.uf2` file to the drive. The download will run automatically, then the drive will log out.
+Drag the `update-wio_tracker_1110_bootloader-0.9.1_nosd.uf2` file to the driver. The download will run automatically, then the driver will log out.
+* [Bootloader download](https://files.seeedstudio.com/wiki/SenseCAP/respeaker/wio_tracker_1110_bootloader-0.9.1_s140_7.3.0.zip)
+
**Step1: Adafruit-nrfutil Installation**
**Prerequisites**
@@ -151,11 +157,11 @@ Select the device to `Seeed Wio WM1110 Tracker` and the latest firmware, and dow
-Double click the `Reset` button, there should be a `WM1110_BOOT` drive on your PC.
+Double click the `Reset` button, there should be a `WM1110_BOOT` driver on your PC.
-Copy the `firmware-wio-tracker-wm1110-2.3.14.681ae9d8.uf2` file to the drive. The download will run automatically, then the drive will log out.
+Drag the `.uf2` file to the driver. The download will run automatically, then the driver will log out.
:::tip
Just ignore this error prompt, the device has actually been upgraded successfully.
diff --git a/docs/Network/Meshtastic_Network/wio_tracker_kit/meshtastic_kit_wio_tracker_1110.md b/docs/Network/Meshtastic_Network/wio_tracker_kit/meshtastic_kit_wio_tracker_1110.md
index f82c0d502b36..dac9732556fa 100644
--- a/docs/Network/Meshtastic_Network/wio_tracker_kit/meshtastic_kit_wio_tracker_1110.md
+++ b/docs/Network/Meshtastic_Network/wio_tracker_kit/meshtastic_kit_wio_tracker_1110.md
@@ -294,11 +294,15 @@ Now that you have set the LoRa region on your device, you can continue with conf
## Resource
-[Meshtastic Doc](https://meshtastic.org/docs/introduction/)
+[Wio Tracker 1110 Dev Board v1.0_SCH](https://files.seeedstudio.com/products/SenseCAP/Wio-Tracker/Wio%20Tracker%201110%20v1.0_SCH_PDF_20230822.pdf)
+[Meshtastic Doc](https://meshtastic.org/docs/introduction/)
+[Github-Meshtastic Firmware](https://github.com/meshtastic/firmware/blob/master/boards/wio-tracker-wm1110.json)
+[Enclosure File(3D-Print)](https://files.seeedstudio.com/products/E24070201/wio%20tracker%20723.stp)
+[Enclosure File(Acrylic)](https://files.seeedstudio.com/products/114993370/%E4%BA%9A%E5%85%8B%E5%8A%9B%E5%A4%96%E5%A3%B3%E5%9B%BE%E7%BA%B8.zip)
## Tech Support & Product Discussion
diff --git a/docs/Network/SenseCAP_K1100/Embedded_ML_Application/K1111-Edge-Impulse.md b/docs/Network/SenseCAP_K1100/Embedded_ML_Application/K1111-Edge-Impulse.md
index 8dcead1db813..6d8cbd7ca2b6 100644
--- a/docs/Network/SenseCAP_K1100/Embedded_ML_Application/K1111-Edge-Impulse.md
+++ b/docs/Network/SenseCAP_K1100/Embedded_ML_Application/K1111-Edge-Impulse.md
@@ -170,7 +170,7 @@ After we generated the library from Edge Impulse. We need to modify the code for
Flash the test code below.
-```c++
+```cpp
#include
#include"LIS3DHTR.h"
#include"TFT_eSPI.h"
diff --git a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Helium_Cloud_Services/Helium_Connected&Azure_Integrated/Connecting-to-Helium.md b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Helium_Cloud_Services/Helium_Connected&Azure_Integrated/Connecting-to-Helium.md
index 37b2062caaf3..9b9db85e361f 100644
--- a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Helium_Cloud_Services/Helium_Connected&Azure_Integrated/Connecting-to-Helium.md
+++ b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Helium_Cloud_Services/Helium_Connected&Azure_Integrated/Connecting-to-Helium.md
@@ -152,7 +152,7 @@ The above code has no restrictions on the Grove - Wio-E5 connection, it will aut
:::
Please select the LoRaWAN® band you wish to use. This band must be consistent with the gateway band you are using. The available frequency bands are in the comments of the code below. In the tutorials we use, the default is the **EU868** band.
-```c++
+```cpp
#define Frequency DSKLORAE5_ZONE_EU868
/*
Select your frequency band here.
@@ -532,7 +532,7 @@ If you want to apply the content of this tutorial to your own project developmen
At the beginning of the program, we need to prepare the necessary triad information to connect to Helium and to set the frequency of the Wio-E5.
-```c++
+```cpp
#define Frequency DSKLORAE5_ZONE_EU868
/*
Select your frequency band here.
@@ -556,7 +556,7 @@ Next, a `data_decord()` function is defined. This function converts the sensor v
In general, to prevent data overflow, we need to consider the maximum and minimum values that the sensor may read. And split into hexadecimal numbers that will not overflow.
-```c++
+```cpp
void data_decord(int val_1, int val_2, uint8_t data[4])
{
int val[] = {val_1, val_2};
@@ -580,20 +580,20 @@ void data_decord(int val_1, int val_2, uint8_t data[4])
For the SHT40 sensor, he will have two data, one is temperature data and one is humidity data, and there are positive and negative values, so the negative numbers need to be processed, and also the decimal places need to be processed.
-```c++
+```cpp
int_temp = temperature*100;
int_humi = humidity*100;
```
The next step is the initialization of the SHT40 and the initial setup of the Wio-E5. These will all be executed in the `setup()` function.
-```c++
+```cpp
lorae5.begin(DSKLORAE5_SWSERIAL_WIO_P2)
```
In the initialization code, `DSKLORAE5_SWSERIAL_WIO_P2` represents the Grove interface on the **right** side of the Wio Terminal, while `DSKLORAE5_SWSERIAL_WIO_P1` represents the Grove interface on the **left** side. For other projects without external sensors, you can also use `DSKLORAE5_SEARCH_WIO` , which will automatically search for the Grove interface your Wio-E5 is connected to.
-```c++
+```cpp
lorae5.send_sync( //Sending the sensor values out
8, // LoRaWan Port
data, // data array
@@ -606,7 +606,7 @@ lorae5.send_sync( //Sending the sensor values out
The important role of the `send_sync()` function is to send the sensor values over the LoRaWAN®. The first parameter indicates the channel number to send the data, the second parameter indicates the content of the data sent, and the third parameter indicates the length of the data sent. In general, we only need to focus on the content of the first three parameters.
-```c++
+```cpp
delay(15000);
```
diff --git a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-IMU-Sensor-Grove-LoRa-E5.md b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-IMU-Sensor-Grove-LoRa-E5.md
index c1ab3e392b99..479788e3b674 100644
--- a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-IMU-Sensor-Grove-LoRa-E5.md
+++ b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-IMU-Sensor-Grove-LoRa-E5.md
@@ -171,7 +171,7 @@ Now, the 3-Axis Digital Accelerometer library can be installed to the Arduino ID
This repo demonstrates how to use the built-in IMU sensor as a component in Wio Terminal. Using the library's **getAccelerationX()**, **getAccelerationY()**, and **getAccelerationZ()** functions, you can directly obtain the X-axis, Y-axis, and Z-axis offsets of the IMU sensor. These three values may be positive or negative float numbers.
-```c++
+```cpp
#include"LIS3DHTR.h"
LIS3DHTR lis;
diff --git a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Soil-Moisture-Sensor-Grove-LoRa-E5.md b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Soil-Moisture-Sensor-Grove-LoRa-E5.md
index 386632ea0f11..234c836d9c3b 100644
--- a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Soil-Moisture-Sensor-Grove-LoRa-E5.md
+++ b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Soil-Moisture-Sensor-Grove-LoRa-E5.md
@@ -157,7 +157,7 @@ The reason why the wiring method of the soil moisture sensor is different from o
This repo demonstrates how to use the soil moisture sensor. The soil moisture sensor uses an analog interface where you can simply read the moisture value of the soil by reading its pins.
-```c++
+```cpp
int sensorPin = A0;
int sensorValue = 0;
diff --git a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Temp-Humi-Sensor-Grove-LoRa-E5.md b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Temp-Humi-Sensor-Grove-LoRa-E5.md
index 54603146cd3c..439250e066af 100644
--- a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Temp-Humi-Sensor-Grove-LoRa-E5.md
+++ b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Temp-Humi-Sensor-Grove-LoRa-E5.md
@@ -174,7 +174,7 @@ Now, the Grove Temp&Humi Sensor library can be installed to the Arduino IDE. Ope
This repo shows us the temperature and humidity data obtained. In the code, we use the `measureHighPrecision()` function to get the temperature and humidity information, which is positive and float.
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-VOC-and-eCO2-Gas-Sensor-Grove-LoRa-E5.md b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-VOC-and-eCO2-Gas-Sensor-Grove-LoRa-E5.md
index 928df8c2dba2..e96facea89c2 100644
--- a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-VOC-and-eCO2-Gas-Sensor-Grove-LoRa-E5.md
+++ b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-VOC-and-eCO2-Gas-Sensor-Grove-LoRa-E5.md
@@ -170,7 +170,7 @@ Now, the Grove VOC and eCO2 Gas Sensor library can be installed to the Arduino I
This repo shows us the VOC and eCO2 data obtained. In the code, we use the `sgp_measure_signals_blocking_read()` function to get the VOC and eCO2 information, which is positive and integer.
-```c++
+```cpp
#include
#include "sensirion_common.h"
#include "sgp30.h"
diff --git a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Vision-AI-Module-Grove-LoRa-E5.md b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Vision-AI-Module-Grove-LoRa-E5.md
index dbcec9b075e3..b3b276d84089 100644
--- a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Vision-AI-Module-Grove-LoRa-E5.md
+++ b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/Sensors_Basic_Usage_with_Arduino/K1100-Vision-AI-Module-Grove-LoRa-E5.md
@@ -171,7 +171,7 @@ Now, the Vision AI Module library can be installed to the Arduino IDE. Open the
This repo is able to obtain the number of models identified by the camera feed and the confidence level. They are unsigned integer data with no more than 8 bits.
-```c++
+```cpp
#include "Seeed_Arduino_GroveAI.h"
#include
diff --git a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/TTN_Cloud_Services/Connecting-to-TTN.md b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/TTN_Cloud_Services/Connecting-to-TTN.md
index 1ca66ab9eb5c..408c2dd28afc 100644
--- a/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/TTN_Cloud_Services/Connecting-to-TTN.md
+++ b/docs/Network/SenseCAP_K1100/LoRaWAN-Network_Application/TTN_Cloud_Services/Connecting-to-TTN.md
@@ -83,7 +83,7 @@ Please download the necessary environment for Arduino and Wio Terminal in [pre-a
Click [here](https://github.com/limengdu/Seeed-Studio-LoRaWAN-Dev-Kit/blob/main/example/Get-Grove-LoRa-E5-AppEUI-DevEUI/Get-Grove-LoRa-E5-AppEUI-DevEUI.ino) to download the code for the DevEUI, AppEUI that comes with Grove - Wio-E5 and upload it to Wio Terminal.
-```c++
+```cpp
#include
#include "disk91_LoRaE5.h"
@@ -164,7 +164,7 @@ lorae5.sendATCommand("AT+KEY=APPKEY,\"2B7E151628XXXXXXXXXX158809CF4F3C\"","","+K
Here is the complete code.
-```c++
+```cpp
#include
#include "disk91_LoRaE5.h"
@@ -472,7 +472,7 @@ If you want to apply the content of this tutorial to your own project developmen
At the beginning of the program, we need to prepare the necessary triad information to connect to TTN and to set the frequency of the Wio-E5.
-```c++
+```cpp
#define Frequency DSKLORAE5_ZONE_EU868
/*
Select your frequency band here.
@@ -496,7 +496,7 @@ Next, a `data_decord()` function is defined. This function converts the sensor v
In general, to prevent data overflow, we need to consider the maximum and minimum values that the sensor may read. And split into hexadecimal numbers that will not overflow.
-```c++
+```cpp
void data_decord(int val_1, int val_2, uint8_t data[4])
{
int val[] = {val_1, val_2};
@@ -520,20 +520,20 @@ void data_decord(int val_1, int val_2, uint8_t data[4])
For the SHT40 sensor, he will have two data, one is temperature data and one is humidity data, and there are positive and negative values, so the negative numbers need to be processed, and also the decimal places need to be processed.
-```c++
+```cpp
int_temp = temperature*100;
int_humi = humidity*100;
```
The next step is the initialization of the SHT40 and the initial setup of the Wio-E5. These will all be executed in the `setup()` function.
-```c++
+```cpp
lorae5.begin(DSKLORAE5_SWSERIAL_WIO_P2)
```
In the initialization code, `DSKLORAE5_SWSERIAL_WIO_P2` represents the Grove interface on the **right** side of the Wio Terminal, while `DSKLORAE5_SWSERIAL_WIO_P1` represents the Grove interface on the **left** side. For other projects without external sensors, you can also use `DSKLORAE5_SEARCH_WIO` , which will automatically search for the Grove interface your Wio-E5 is connected to.
-```c++
+```cpp
lorae5.send_sync( //Sending the sensor values out
8, // LoRaWan Port
data, // data array
@@ -546,7 +546,7 @@ lorae5.send_sync( //Sending the sensor values out
The important role of the `send_sync()` function is to send the sensor values over the LoRaWAN®. The first parameter indicates the channel number to send the data, the second parameter indicates the content of the data sent, and the third parameter indicates the length of the data sent. In general, we only need to focus on the content of the first three parameters.
-```c++
+```cpp
delay(15000);
```
diff --git a/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Connect-Wio-Terminal-to-Google-Cloud.md b/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Connect-Wio-Terminal-to-Google-Cloud.md
index be855c7f3cd4..92edd121b06d 100644
--- a/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Connect-Wio-Terminal-to-Google-Cloud.md
+++ b/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Connect-Wio-Terminal-to-Google-Cloud.md
@@ -248,14 +248,14 @@ Now we need to set the Wi-Fi credentials and Google Cloud IoT Core information i
- **STEP 3:** Change the **Wifi network details**
-```c++
+```cpp
const char *ssid = "Enter_SSID";
const char *password = "Enter_Password";
```
- **STEP 4:** Change the **Google Cloud IoT details**
-```c++
+```cpp
const char *project_id = "Enter_Project_ID";
const char *location = "Enter_location";
const char *registry_id = "Enter_Registry_ID";
@@ -264,7 +264,7 @@ const char *device_id = "Enter_Device_ID";
- **STEP 5:** Copy the private key bytes that we obtained from **ec_private.pem** and saved into notepad before
-```c++
+```cpp
const char *private_key_str =
"6e:b8:17:35:c7:fc:6b:d7:a9:cb:cb:49:7f:a0:67:"
"63:38:b0:90:57:57:e0:c0:9a:e8:6f:06:0c:d9:ee:"
@@ -277,7 +277,7 @@ const char *private_key_str =
Open **esp32-mqtt.h** and replace the entire file with the following codes. Here we have replaced configTime function with the implementation of obtaining NTP time via UDP.
-```c++
+```cpp
#include
#include
#include
@@ -484,7 +484,7 @@ void setupCloudIoT(){
Add Wio Terminal board to macro definitions inside **Esp32-lwmqtt.ino**
-```c++
+```cpp
#if defined(ESP32) || defined(WIO_TERMINAL)
#define __ESP32_MQTT_H__
#endif
@@ -546,7 +546,7 @@ Navigate to **Esp32-lwmqtt.ino** and add the following
- **STEP 1:** After the loop, add the following for the built-in light sensor
-```c++
+```cpp
void loop() {
int light = analogRead(WIO_LIGHT); //assign variable to store light sensor values
light = map(light,0,1023,0,100); //Map sensor values
@@ -554,7 +554,7 @@ void loop() {
- **STEP 2:** Add the topic with the Subfolder name
-```c++
+```cpp
publishTelemetry(getDefaultSensor());
publishTelemetry("/light",String(light));
```
@@ -590,7 +590,7 @@ Navigate to the previously used **Esp32-lwmqtt.ino** and add the following:
- **STEP 1:** Add the following after **#include "esp32-mqtt.h"**
-```c++
+```cpp
#include "DHT.h" //DHT library
#define DHTPIN 0 //Define Signal Pin of DHT
@@ -600,13 +600,13 @@ DHT dht(DHTPIN, DHTTYPE); //Initializing DHT sensor
- **STEP 2:** Add the following inside the **setup** to start the DHT sensor
-```c++
+```cpp
dht.begin();
```
- **STEP 3:** Add the following inside the **if loop** within **void loop()**
-```c++
+```cpp
int temperature = dht.readTemperature(); //Assign variable to store temperature
int humidity = dht.readHumidity(); //Assign variable to store humidity
diff --git a/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Getting_started_with_Ubidots.md b/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Getting_started_with_Ubidots.md
index 12cac8cf8737..c04d175ae808 100644
--- a/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Getting_started_with_Ubidots.md
+++ b/docs/Network/SenseCAP_K1100/Wi-Fi-Network_Application/Cloud_Service/Getting_started_with_Ubidots.md
@@ -206,7 +206,7 @@ To establish an MQTT connection, we will need to prepare the following informati
At the beginning of the program below, we will define for these requirements at the top of the code, please fill in your own information as appropriate.
-```c++
+```cpp
//examples
#define WIFISSID "" // Put your WifiSSID here
#define PASSWORD "
#include
#include
@@ -420,7 +420,7 @@ void loop() {
If you want to send Grove Soil Moisture Sensor data to Ubidots, paste the complete code below into the Arduino and upload it to the Wio Terminal.
-```c++
+```cpp
#include
#include
#include
@@ -553,7 +553,7 @@ void loop() {
If you want to send Grove VOC and eCO2 Gas Sensor data to Ubidots, paste the complete code below into the Arduino and upload it to the Wio Terminal.
-```c++
+```cpp
#include
#include
#include
@@ -711,7 +711,7 @@ void loop() {
If you want to send Grove Temp&Humi Sensor data to Ubidots, paste the complete code below into the Arduino and upload it to the Wio Terminal.
-```c++
+```cpp
#include
#include
#include
@@ -866,7 +866,7 @@ void loop() {
If you want to send Grove Vision Ai Module data to Ubidots, paste the complete code below into the Arduino and upload it to the Wio Terminal.
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/Network/SenseCAP_Network/SenseCAP_M2_Data_Only-Helium_gateway/SenseCAP_M2_Data_Only_Overview.md b/docs/Network/SenseCAP_Network/SenseCAP_M2_Data_Only-Helium_gateway/SenseCAP_M2_Data_Only_Overview.md
index c7b93bf959ad..b8e25e643f62 100644
--- a/docs/Network/SenseCAP_Network/SenseCAP_M2_Data_Only-Helium_gateway/SenseCAP_M2_Data_Only_Overview.md
+++ b/docs/Network/SenseCAP_Network/SenseCAP_M2_Data_Only-Helium_gateway/SenseCAP_M2_Data_Only_Overview.md
@@ -75,7 +75,7 @@ Besides the powerful features of the SenseCAP device itself, SenseCAP has been p
**Note:**
-**Please note that the onboarding fees are NOT included in the product. A $10 onboarding fee and a $5 location asserting fee will be deducted by users' wallets to onboard**. Please make sure you have enough Helium Data Credit in the Wallet when you proceed with the onboarding process.
+**Please note that the onboarding fees are NOT included in the product. A $0.50 onboarding fee and a $0.50 location asserting fee will be deducted by users' wallets to onboard**. Please make sure you have enough Helium Data Credit and at least $1 of SOL in the Wallet when you proceed with the onboarding process.
![](https://www.sensecapmx.com/wp-content/uploads/2022/07/Pasted-into-Overview.png)
diff --git a/docs/Seeed_Elderly/Air_Serial/Air602_WiFi_Development_Board.md b/docs/Seeed_Elderly/Air_Serial/Air602_WiFi_Development_Board.md
index bde0839ae5d3..50dd947eea7c 100644
--- a/docs/Seeed_Elderly/Air_Serial/Air602_WiFi_Development_Board.md
+++ b/docs/Seeed_Elderly/Air_Serial/Air602_WiFi_Development_Board.md
@@ -110,7 +110,7 @@ What ever, please make sure you have checked the option **AddCrLf**, and set the
Tap **AT+** then click **SEND** or press `enter` key to to check if the connection was successfully established.
-```C
+```cpp
AT+
```
@@ -120,19 +120,19 @@ When it returns **+OK**, you can use the AT command to control this module.
- 1- **WPRT** sets the wireless network card working mode to SoftAP:
-```C
+```cpp
AT+WPRT=2
```
- 2- **APSSID** Set the AP SSID for the STA, e.g.*MyAP*:
-```C
+```cpp
AT+APSSID=MyAp
```
- 3- **APENCRY** Set the wireless network card security mode to WEP64:
-```C
+```cpp
AT+APENCRY=1
```
@@ -142,7 +142,7 @@ open:0,WEP64:1,WEP128:2
- 4- **APKEY** Set the wireless network card key to *12345*
-```C
+```cpp
AT+APKEY=1,1,12345
```
@@ -154,7 +154,7 @@ Parameter 3:wireless key, e.g.:12345
- 5- **APNIP** Set the ip address and subnet mask
-```C
+```cpp
AT+APNIP=1,192.168.1.1,255.255.255.0,192.168.1.1,192.168.1.1
```
@@ -166,19 +166,19 @@ parameter 5:dns:192.168.1.1
- 6- **PMTF** saves the above parameters to spi flash, just start from step 7 with the next boot.
-```C
+```cpp
AT+PMTF
```
- 7- **WJOIN** Create wireless network *MyAp*
-```C
+```cpp
AT+WJOIN
```
- 8- **SLIST** Query the STA information which connected to your SoftAP.
-```C
+```cpp
AT+SLIST
```
@@ -186,7 +186,7 @@ AT+SLIST
Wireless network card scanning AP's AT command is :
-```C
+```cpp
AT+WSCAN
```
@@ -198,19 +198,19 @@ The last paremeter is the signal strength, unit db
- 1- **WPRT** Set the working mode to STA
-```C
+```cpp
AT+WPRT=0
```
- 2- **SSID** Set the AP name to join. e.g. *TEST_AP*
-```C
+```cpp
AT+SSID=TEST_AP
```
- 3- **KEY** Set the wireless key of the AP you want to join. e.g. *12345678*
-```C
+```cpp
AT+KEY=1,0,12345678
```
@@ -222,19 +222,19 @@ parameter 3: Wireless key e.g.:12345678
- 4- **NIP** Enable DHCP
-```C
+```cpp
AT+NIP=0
```
- 5- PMTF Save the above parameters to spi flash, Just start from step 6 with the next boot
-```C
+```cpp
AT+PMTF
```
- 6- WJOIN Join the wireless network TEST_AP
-```C
+```cpp
AT+WJOIN
```
@@ -244,19 +244,19 @@ AT+WJOIN
- 1- **WPRT** Set the working mode to APSTA
-```C
+```cpp
AT+WPRT=3
```
- 2- **SSID** Set the AP name to be joined, such as *TEST_AP*
-```C
+```cpp
AT+SSID=TEST_AP
```
- 3- **KEY** Set the wireless key of the AP you want to join. e.g. *12345678*
-```C
+```cpp
AT+KEY=1,0,12345678
```
@@ -268,37 +268,37 @@ parameter 3: Wireless key e.g.:12345678
- 4- **APSSID** Set the network name of the created SOFTAP
-```C
+```cpp
AT+APSSID=”MYSoftAP”
```
- 5- **APENCRY** Set the encryption type of SoftAP (such as WPA2-TKIP)
-```C
+```cpp
AT+APENCRY=5
```
- 6- **APKEY** Set the password for SoftAP (e.g. ASCII code 87654321)
-```C
+```cpp
AT+APKEY=1,0,87654321
```
- 7- **APNIP** Set the IP address and subnet mask
-```C
+```cpp
AT+APNIP=1,192.168.1.1,255.255.255.0,192.168.1.1,192.168.1.1
```
- 8- **PMTF** Save the above parameters to spi flash, just start from step 9
-```C
+```cpp
AT+PMTF
```
- 9- **WJOIN** Join the wireless network TEST_AP
-```C
+```cpp
AT+WJOIN
```
@@ -314,7 +314,7 @@ For the firmware programming please check here:
A: The wireless network card disconnects the AP's AT command:
-```C
+```cpp
AT+WLEAV
```
@@ -322,7 +322,7 @@ AT+WLEAV
A: The AT command of SoftAP disconnected network is:
-```C
+```cpp
AT+WLEAV=2
```
@@ -330,7 +330,7 @@ AT+WLEAV=2
A: The AT command for the wireless network card to view the status of the current network card is:
-```C
+```cpp
AT+LKSTT
```
@@ -338,7 +338,7 @@ AT+LKSTT
A: The AT command to view the current SoftAP status is:
-```C
+```cpp
AT+APLKSTT
```
diff --git a/docs/Seeed_Elderly/Artik/Eagleye_530s.md b/docs/Seeed_Elderly/Artik/Eagleye_530s.md
index 8a4712ff12af..4c2241834aa0 100644
--- a/docs/Seeed_Elderly/Artik/Eagleye_530s.md
+++ b/docs/Seeed_Elderly/Artik/Eagleye_530s.md
@@ -984,7 +984,7 @@ git clone https://github.com/DexterInd/GrovePi.git
- Step 2. Modify the source code /root/GrovePi/Software/Cpp/grovepi.cpp and add one line as shown.
-```c++
+```cpp
void GrovePi::SMBusName(char *smbus_name)
{
unsigned int hw_revision = gpioHardwareRevision();
diff --git a/docs/Seeed_Elderly/Bee/Bluetooth_Bee.md b/docs/Seeed_Elderly/Bee/Bluetooth_Bee.md
index 964e2e355874..c234706aa489 100644
--- a/docs/Seeed_Elderly/Bee/Bluetooth_Bee.md
+++ b/docs/Seeed_Elderly/Bee/Bluetooth_Bee.md
@@ -291,7 +291,7 @@ xx status:
The following sketch configures **Bluetooth Bee** for [Transportunternehmen](http://aps-solver.de/leistungen/) as Slave Device and waits for connection request from PC or other master device.
Bluetooth Bee is connected to Seeeduino via XBee Shield as shown above. Bluetooth Bee is connected to digital Pins 11 and 12 of Arduino / Seeduino. We use NewSoftSerial library for supporting serial communication on these pins. The hardware serial port of Arduino is available for uploading sketch or debugging. This sketch uses a flow control mechanism using CheckOK(). It avoids using arbitrary delay between each command. If CheckOK() is not required, use a delay of at least 3 seconds between commands.
-```c++
+```cpp
/*
BluetoothBee Demo Code - Flowcontrol Based Implementation
2010,2011 Copyright (c) Seeed Technology Inc. All right reserved.
@@ -408,7 +408,7 @@ void sendBlueToothCommand(char command[])
The following sketch is a modification of above program using delay() instead of CheckOK(). In this case the hardware serial port is used for debugging purpose. Open serial monitor with setting 9600 baud. The complete communication between MCU and Bluetooth Bee will be visible in serial monitor.
-```c++
+```cpp
/*
BluetoothBee Demo Code - Delay Based Implementaion
2011 Copyright (c) Seeed Technology Inc. All right reserved.
diff --git a/docs/Seeed_Elderly/Radar_Sensor/Microwave-Sensor-24GHz-Doppler-Radar-Motion-Sensor-MW2401TR11.md b/docs/Seeed_Elderly/Radar_Sensor/Microwave-Sensor-24GHz-Doppler-Radar-Motion-Sensor-MW2401TR11.md
index 6c93ef4b0630..38e5f8939b2f 100644
--- a/docs/Seeed_Elderly/Radar_Sensor/Microwave-Sensor-24GHz-Doppler-Radar-Motion-Sensor-MW2401TR11.md
+++ b/docs/Seeed_Elderly/Radar_Sensor/Microwave-Sensor-24GHz-Doppler-Radar-Motion-Sensor-MW2401TR11.md
@@ -192,7 +192,7 @@ it just an example, you are able to use other devices with RX and TX port or s
- **step 2. setup Seeeduino Cortex-MO+, please follow** [seeedruino Cortex-MO+ instructions](https://wiki.seeedstudio.com/Seeeduino-Cortex-M0/)
- **step 3. copy the code into arduino IDE then upload.** [upload code guide](https://wiki.seeedstudio.com/Upload_Code/)
-```C
+```cpp
int MW_out = 2;
// set pin 2 as OUT port
void setup() {
diff --git a/docs/Seeed_Elderly/W600/W600_Module.md b/docs/Seeed_Elderly/W600/W600_Module.md
index b06905f7bf42..c254c5c32e4c 100644
--- a/docs/Seeed_Elderly/W600/W600_Module.md
+++ b/docs/Seeed_Elderly/W600/W600_Module.md
@@ -131,7 +131,7 @@ What ever, please make sure you have checked the option **AddCrLf**, and set the
Tap **AT+** then click **SEND** or press ++enter++ key to to check if the connection was successfully established.
-```C
+```cpp
AT+
```
@@ -141,19 +141,19 @@ When it returns **+OK**, you can use the AT command to control this module.
- 1- **WPRT** sets the wireless network card working mode to SoftAP:
-```C
+```cpp
AT+WPRT=2
```
- 2- **APSSID** Set the AP SSID for the STA, e.g.*MyAP*:
-```C
+```cpp
AT+APSSID=MyAp
```
- 3- **APENCRY** Set the wireless network card security mode to WEP64:
-```C
+```cpp
AT+APENCRY=1
```
@@ -163,7 +163,7 @@ open:0,WEP64:1,WEP128:2
- 4- **APKEY** Set the wireless network card key to *12345*
-```C
+```cpp
AT+APKEY=1,1,12345
```
@@ -175,7 +175,7 @@ Parameter 3:wireless key, e.g.:12345
- 5- **APNIP** Set the ip address and subnet mask
-```C
+```cpp
AT+APNIP=1,192.168.1.1,255.255.255.0,192.168.1.1,192.168.1.1
```
@@ -187,19 +187,19 @@ parameter 5:dns:192.168.1.1
- 6- **PMTF** saves the above parameters to spi flash, just start from step 7 with the next boot.
-```C
+```cpp
AT+PMTF
```
- 7- **WJOIN** Create wireless network *MyAp*
-```C
+```cpp
AT+WJOIN
```
- 8- **SLIST** Query the STA information which connected to your SoftAP.
-```C
+```cpp
AT+SLIST
```
@@ -207,7 +207,7 @@ AT+SLIST
Wireless network card scanning AP's AT command is :
-```C
+```cpp
AT+WSCAN
```
@@ -219,19 +219,19 @@ The last paremeter is the signal strength, unit db
- 1- **WPRT** Set the working mode to STA
-```C
+```cpp
AT+WPRT=0
```
- 2- **SSID** Set the AP name to join. e.g. *TEST_AP*
-```C
+```cpp
AT+SSID=TEST_AP
```
- 3- **KEY** Set the wireless key of the AP you want to join. e.g. *12345678*
-```C
+```cpp
AT+KEY=1,0,12345678
```
@@ -243,19 +243,19 @@ parameter 3: Wireless key e.g.:12345678
- 4- **NIP** Enable DHCP
-```C
+```cpp
AT+NIP=0
```
- 5- PMTF Save the above parameters to spi flash, Just start from step 6 with the next boot
-```C
+```cpp
AT+PMTF
```
- 6- WJOIN Join the wireless network TEST_AP
-```C
+```cpp
AT+WJOIN
```
@@ -265,19 +265,19 @@ AT+WJOIN
- 1- **WPRT** Set the working mode to APSTA
-```C
+```cpp
AT+WPRT=3
```
- 2- **SSID** Set the AP name to be joined, such as *TEST_AP*
-```C
+```cpp
AT+SSID=TEST_AP
```
- 3- **KEY** Set the wireless key of the AP you want to join. e.g. *12345678*
-```C
+```cpp
AT+KEY=1,0,12345678
```
@@ -289,37 +289,37 @@ parameter 3: Wireless key e.g.:12345678
- 4- **APSSID** Set the network name of the created SOFTAP
-```C
+```cpp
AT+APSSID=”MYSoftAP”
```
- 5- **APENCRY** Set the encryption type of SoftAP (such as WPA2-TKIP)
-```C
+```cpp
AT+APENCRY=5
```
- 6- **APKEY** Set the password for SoftAP (e.g. ASCII code 87654321)
-```C
+```cpp
AT+APKEY=1,0,87654321
```
- 7- **APNIP** Set the IP address and subnet mask
-```C
+```cpp
AT+APNIP=1,192.168.1.1,255.255.255.0,192.168.1.1,192.168.1.1
```
- 8- **PMTF** Save the above parameters to spi flash, just start from step 9
-```C
+```cpp
AT+PMTF
```
- 9- **WJOIN** Join the wireless network TEST_AP
-```C
+```cpp
AT+WJOIN
```
@@ -339,7 +339,7 @@ For the firmware programming please check here:
A: The wireless network card disconnects the AP's AT command:
-```C
+```cpp
AT+WLEAV
```
@@ -347,7 +347,7 @@ AT+WLEAV
A: The AT command of SoftAP disconnected network is:
-```C
+```cpp
AT+WLEAV=2
```
@@ -355,7 +355,7 @@ AT+WLEAV=2
A: The AT command for the wireless network card to view the status of the current network card is:
-```C
+```cpp
AT+LKSTT
```
@@ -363,7 +363,7 @@ AT+LKSTT
A: The AT command to view the current SoftAP status is:
-```C
+```cpp
AT+APLKSTT
```
diff --git a/docs/Seeed_Elderly/weekly_wiki/wiki240708.md b/docs/Seeed_Elderly/weekly_wiki/wiki240708.md
new file mode 100644
index 000000000000..9a174dbbc258
--- /dev/null
+++ b/docs/Seeed_Elderly/weekly_wiki/wiki240708.md
@@ -0,0 +1,224 @@
+---
+description: Weekly Wiki
+title: Weekly Wiki
+keywords:
+- weeely wiki
+image: https://files.seeedstudio.com/wiki/IndexWiki/logo_image.jpg
+last_update:
+ date: 07/08/2024
+ author: Seraphina
+---
+
+
+
+## Greetings
+
+This is Seraphina in Seeed Studio and welcome to the Seeed Studio weekly wiki! Each Monday, I will introduce you our latest wiki, including the ones related to our new products, the interesting projects published by Seeed Studio, and the tutorials, introductions, etc... You name it.
+
+✨ For each week, when a collaborator contributes a project or fixes something important, we put the stars at the end of title of "Weekly Wiki" for more people be able to see their efforts👍.
+
+Today is July 8th and a brand new week has begun! Check out what Seeed Studio did last week!
+
+## Latest Wiki Launched
+
+
+### [Watcher to Node-RED Quick Start](https://wiki.seeedstudio.com/watcher_to_node_red/)
+
+**Node-RED** is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.
+
+It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.
+
+
+
+To make it easier for our users to **connect data from the Watcher to various other Paas platforms for more in-depth data processing**. For example. from Watcher to IFTTT, Telegram, Twilio etc. We will do a series of tutorials for **Watcher & Node-RED**.
+
+This tutorial, the first in a series, will walk you through installing and using Node-red and calling the Watcher API to connect to Node-RED.
+
+
+### [reComputer R1000 Walk Through](https://wiki.seeedstudio.com/recomputer_r1000_intro/)
+
+The reComputer R1000 edge IoT controller, powered by Raspberry Pi CM4, features a quad-core A72 processor, dual Ethernet, and multiple RS485 channels supporting BACnet, Modbus RTU, and Modbus TCP/IP. With versatile wireless options including 4G, LoRa®, and Wi-Fi/BLE, it ensures robust IoT network communication. Ideal for remote device and energy management, the R1000 is perfect for smart building applications.
+
+
+
+
+### [reComputer R1000 with Node Red and MQTT](https://wiki.seeedstudio.com/recomputer_r1000_nodered_mqtt/)
+
+**MQTT (Message Queuing Telemetry Transport)** is a lightweight messaging protocol ideal for IoT (Internet of Things) applications due to its efficiency and low bandwidth requirements. It facilitates communication between devices in a publish-subscribe model, allowing for real-time data exchange over unreliable networks. With Node-RED, integrating MQTT enables seamless connectivity between edge devices and central servers or other devices, fostering efficient data transmission and processing reComputer R1000 Edge Controller, by supporting MQTT natively, eliminates the need for additional hardware gateways by allowing the installation of an MQTT broker directly on the reComputer R1000 itself. This reduces complexity, minimizes latency, and enhances reliability, as data can be processed and acted upon at the edge without relying on external intermediaries, thus optimizing IoT system architecture.
+
+
+
+### [reCoputer R1000 with Node Red and InfluxDB](https://wiki.seeedstudio.com/recomputer_r1000_node_red_influxdb/)
+
+Deploying [InfluxDB](https://www.influxdata.com/) on an reComputer R1000 , a Raspberry Pi-powered edge controller, enables robust time-series data collection and analysis at the edge of your network. This setup is ideal for IoT applications, providing real-time insights and monitoring capabilities. By leveraging the lightweight yet powerful InfluxDB database, you can efficiently manage and analyze sensor data directly on the reComputer R1000. The following guide outlines the steps to install, configure, and use InfluxDB on your reComputer R1000 , ensuring a seamless integration into your data infrastructure.
+
+
+### [reComputer R1000 with Grafana](https://wiki.seeedstudio.com/recomputer_r1000_grafana/)
+
+[Grafana](https://grafana.com/oss/grafana/) is an open-source visualization and analytics software that enables you to query, visualize, alert on, and explore your metrics, logs, and traces from any storage location. It offers tools to transform your time-series database (TSDB) data into insightful graphs and visualizations. As a powerful monitoring solution, Grafana helps in making informed decisions, enhancing system performance, and streamlining troubleshooting. In this wiki, we will guide you through the installation of Grafana on a Raspberry Pi-powered reComputer R1000 , connect it to an existing InfluxDB database, and create an illustrative dashboard.
+
+
+
+
+### [reComputer R1000 with fuxa to achieve SCADA](https://wiki.seeedstudio.com/reComputer_r1000_fuxa_achieve_scada/)
+
+FUXA is a web-based Process Visualization (SCADA/HMI/Dashboard) software. With FUXA you can create modern process visualizations with individual designs for your machines and real-time data display.It supports Modbus RTU/TCP, Siemens S7 Protocol, OPC-UA, BACnet IP, MQTT, and other protocols.
+
+This article mainly introduces how to use fuxa to achieve SCADA. In the article, fuxa receives data from `node-red` and `OPC UA Simulator`, and displays it using `chart` and `Circular Gauge`; at the same time, it draws a series of patterns to simulate industrial processes.
+
+
+### [SenseCAP Watcher - 1# Concepts and Classification of Tasks](https://wiki.seeedstudio.com/recomputer_r1000_node_red_modbus_tcp/)
+
+Watcher is a powerful tool that relies on user-issued commands to perform various monitoring and analysis tasks. By sending precise instructions to Watcher, you can direct it to focus on specific targets, collect data, and provide valuable insights.
+
+In the following sections, we will dive into the details of task categorization, model selection, and pricing information. Our goal is to equip you with the knowledge and skills necessary to efficiently assign tasks to Watcher and make the most of its functionalities. We will explore the different types of tasks available, guide you in selecting the appropriate models for your requirements, and provide clarity on the associated costs.
+
+
+
+### [reComputer R1000 install fin](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/)
+
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+
+
+
+This article mainly introduces how to install Fin on reComputer R1000.
+
+
+### [Finetune with Llama-Factory](https://wiki.seeedstudio.com/Finetune_LLM_on_Jetson/)
+
+🚀Finetune LLM by Llama-Factory on Jetson! Now you can tailor a custom private local LLM to meet your requirements.
+
+
+
+
+
+Llama-Factory provides a highly convenient large language model fine-tuning tool that supports common large language models, datasets, and fine-tuning methods. With this platform, we can easily customize private large language models.
+
+In this wiki, we will learn how to deploy Llama-Factory on Nvidia Jetson and use Llama-Factory to train a large language model that supports Chinese Q&A.
+
+### [reComputer R1000 with N3uron](https://wiki.seeedstudio.com/recomputer_r1000_n3uron/)
+
+N3uron is a complete Industrial Edge Platform for IIoT & DataOps that enables seamless integration between the industrial plant floor and third-party applications, whether on-premise or in the cloud.
+With N3uron, you can easily create bidirectional data pipelines between OT and IT systems and decouple devices from applications by consolidating, modeling, processing and visualizing all your operational data in a single source of truth and ultimately making all this data available across the entire organization.
+
+
+
+### [reComputer R1000 use bacnet MS/TP](https://wiki.seeedstudio.com/reComputer_r1000_use_bacnet_mstp/)
+
+This article mainly introduces how to perform functional testing of bacnet MS/TP protocol on reComputer R1000.We simulated a bacnet MS/TP server on reComputer R1000, and then used YABE on the W10 PC to check whether the device is present. If the device we simulated can be found normally, it means that the bacnet MS/TP communication is normal.
+
+## Existed Wiki Updated
+
+### [reTerminal && reTerminal DM-FAQ - How to solve screen refresh rate is too low](https://wiki.seeedstudio.com/screen_refresh_rate_low/)
+
+Screen has noticeable refresh stutter stripes. If your situation is the same, you can follow this wiki to solve it.
+
+
+
+### recomputer J401 and industrial JetPack 6 Compatibility
+
+We've now updated the method for flashing Jetpack 6 on recomputer J401 and industrial.
+
+[recomputer J401](https://wiki.seeedstudio.com/reComputer_J4012_Flash_Jetpack)
+
+[recomputer J401 industrial](https://wiki.seeedstudio.com/reComputer_Industrial_Getting_Started)
+
+### [Installation to reTerminal DM Lorawan Module](https://wiki.seeedstudio.com/reterminal-dm/#lorawan--module)
+
+We have updated packages installation to reterminal dm lorawan module.
+
+
+
+### [Using Grove Vision AI V2 with AT Commands - Compatibility of different XIAO](https://wiki.seeedstudio.com/grove_vision_ai_v2_at/)
+
+We've added a table of how the Grove Vision AI V2 pairs with the XIAO
+
+
+
+## The Efforts of Contributor
+
+
+
+- Check on [GitHub](https://github.com/orgs/Seeed-Studio/projects/6) for more information.
+- We will be really appreciate if you can [share your ideas](https://github.com/orgs/Seeed-Studio/projects/6?pane=issue&itemId=35179519) with us!
+
+
+## Past Weekly wiki
+
+Click here
+
+- [weekly wiki on 2.27th](/Seeed_Elderly/weekly_wiki/wiki227)
+- [weekly wiki on 3.06th](/Seeed_Elderly/weekly_wiki/wiki306)
+- [weekly wiki on 3.13th](/Seeed_Elderly/weekly_wiki/wiki313)
+- [weekly wiki on 3.20th](/Seeed_Elderly/weekly_wiki/wiki320)
+- [weekly wiki on 3.27th](/Seeed_Elderly/weekly_wiki/wiki327)
+- [weekly wiki on 4.03rd](/Seeed_Elderly/weekly_wiki/wiki403)
+- [weekly wiki on 4.10th](/Seeed_Elderly/weekly_wiki/wiki410)
+- [weekly wiki on 4.17th](/Seeed_Elderly/weekly_wiki/wiki417)
+- [weekly wiki on 4.24th](/Seeed_Elderly/weekly_wiki/wiki424)
+- [weekly wiki on 5.15th](/Seeed_Elderly/weekly_wiki/wiki515)
+- [weekly wiki on 5.22nd](/Seeed_Elderly/weekly_wiki/wiki522)
+- [weekly wiki on 5.29th](/Seeed_Elderly/weekly_wiki/wiki529)
+- [weekly wiki on 6.05th](/Seeed_Elderly/weekly_wiki/wiki605)
+- [weekly wiki on 6.12th](/Seeed_Elderly/weekly_wiki/wiki612)
+- [weekly wiki on 6.19th](/Seeed_Elderly/weekly_wiki/wiki619)
+- [weekly wiki on 7.03th](/Seeed_Elderly/weekly_wiki/wiki703)
+- [weekly wiki on 7.10th](/Seeed_Elderly/weekly_wiki/wiki710)
+- [weekly wiki on 7.17th](/Seeed_Elderly/weekly_wiki/wiki717)
+- [weekly wiki on 7.24th](/Seeed_Elderly/weekly_wiki/wiki724)
+- [weekly wiki on 7.31th](/Seeed_Elderly/weekly_wiki/wiki731)
+- [weekly wiki on 8.07th](/Seeed_Elderly/weekly_wiki/wiki807)
+- [weekly wiki on 8.21st](/Seeed_Elderly/weekly_wiki/wiki821)
+- [weekly wiki on 8.28th](/Seeed_Elderly/weekly_wiki/wiki828)
+- [weekly wiki on 9.11st](/Seeed_Elderly/weekly_wiki/wiki911)
+- [weekly wiki on 9.18th](/Seeed_Elderly/weekly_wiki/wiki918)
+- [weekly wiki on 9.25th](/Seeed_Elderly/weekly_wiki/wiki925)
+- [weekly wiki on 10.9th](/Seeed_Elderly/weekly_wiki/wiki1009)
+- [weekly wiki on 10.16th](/Seeed_Elderly/weekly_wiki/wiki1016)
+- [weekly wiki on 10.23th](/Seeed_Elderly/weekly_wiki/wiki1023)
+- [weekly wiki on 10.30th](/Seeed_Elderly/weekly_wiki/wiki1030)
+- [weekly wiki on 11.06th](/Seeed_Elderly/weekly_wiki/wiki1106)
+- [weekly wiki on 11.13th](/Seeed_Elderly/weekly_wiki/wiki1113)
+- [weekly wiki on 11.20th](/Seeed_Elderly/weekly_wiki/wiki1120)
+- [weekly wiki on 11.27th](/Seeed_Elderly/weekly_wiki/wiki1127)
+- [weekly wiki on 12.04th](/Seeed_Elderly/weekly_wiki/wiki1204)
+- [weekly wiki on 12.11th](/Seeed_Elderly/weekly_wiki/wiki1211)
+- [weekly wiki on 12.18th](/Seeed_Elderly/weekly_wiki/wiki1218)
+- [weekly wiki on 12.25th](/Seeed_Elderly/weekly_wiki/wiki1225)
+- [weekly wiki on 2024.1.08th](/Seeed_Elderly/weekly_wiki/wiki240108)
+- [weekly wiki on 2024.1.15th](/Seeed_Elderly/weekly_wiki/wiki240115)
+- [weekly wiki on 2024.1.22nd](/Seeed_Elderly/weekly_wiki/wiki240122)
+- [weekly wiki on 2024.1.29th](/Seeed_Elderly/weekly_wiki/wiki240129)
+- [weekly wiki on 2024.2.19th](/Seeed_Elderly/weekly_wiki/wiki240219)
+- [weekly wiki on 2024.2.26th](/Seeed_Elderly/weekly_wiki/wiki240226)
+- [weekly wiki on 2024.3.04th](/Seeed_Elderly/weekly_wiki/wiki240304)
+- [weekly wiki on 2024.3.11th](/Seeed_Elderly/weekly_wiki/wiki240311)
+- [weekly wiki on 2024.3.18th](/Seeed_Elderly/weekly_wiki/wiki240318)
+- [weekly wiki on 2024.3.25th](/Seeed_Elderly/weekly_wiki/wiki240325)
+- [weekly wiki on 2024.4.01st](/Seeed_Elderly/weekly_wiki/wiki240401)
+- [weekly wiki on 2024.4.08th](/Seeed_Elderly/weekly_wiki/wiki240408)
+- [weekly wiki on 2024.4.15th](/Seeed_Elderly/weekly_wiki/wiki240415)
+- [weekly wiki on 2024.4.22nd](/Seeed_Elderly/weekly_wiki/wiki240422)
+- [weekly wiki on 2024.4.29th](/Seeed_Elderly/weekly_wiki/wiki240429)
+- [weekly wiki on 2024.5.06th](/Seeed_Elderly/weekly_wiki/wiki240506)
+- [weekly wiki on 2024.5.13th](/Seeed_Elderly/weekly_wiki/wiki240513)
+- [weekly wiki on 2024.5.20th](/Seeed_Elderly/weekly_wiki/wiki240520)
+- [weekly wiki on 2024.5.27th](/Seeed_Elderly/weekly_wiki/wiki240527)
+- [weekly wiki on 2024.6.03rd](/Seeed_Elderly/weekly_wiki/wiki240603)
+- [weekly wiki on 2024.6.10th](/Seeed_Elderly/weekly_wiki/wiki240610)
+- [weekly wiki on 2024.6.17th](/Seeed_Elderly/weekly_wiki/wiki240617)
+- [weekly wiki on 2024.6.24th](/Seeed_Elderly/weekly_wiki/wiki240624)
+- [weekly wiki on 2024.7.01st](/Seeed_Elderly/weekly_wiki/wiki240701)
+
+
+
diff --git a/docs/Seeed_Elderly/weekly_wiki/wiki240716.md b/docs/Seeed_Elderly/weekly_wiki/wiki240716.md
new file mode 100644
index 000000000000..89c42cb97880
--- /dev/null
+++ b/docs/Seeed_Elderly/weekly_wiki/wiki240716.md
@@ -0,0 +1,153 @@
+---
+description: Weekly Wiki
+title: Weekly Wiki
+keywords:
+- weeely wiki
+image: https://files.seeedstudio.com/wiki/IndexWiki/logo_image.jpg
+last_update:
+ date: 07/16/2024
+ author: Frank
+---
+
+
+
+## Greetings
+
+This is Frank in Seeed Studio and welcome to the Seeed Studio weekly wiki! Each Monday, I will introduce you our latest wiki, including the ones related to our new products, the interesting projects published by Seeed Studio, and the tutorials, introductions, etc... You name it.
+
+✨ For each week, when a collaborator contributes a project or fixes something important, we put the stars at the end of title of "Weekly Wiki" for more people be able to see their efforts👍.
+
+Today is July 15th and a brand new week has begun! Check out what Seeed Studio did last week!
+
+## Latest Wiki Launched
+
+
+### [Watcher To IFTTT Quick Start](https://wiki.seeedstudio.com/watcher_to_ifttt/)
+
+
+
+IFTTT (If This Then That) is a web-based service that allows developers to create automations and integrations between various apps, devices, and services without complex programming. It enables users to define simple conditional statements called "applets" that trigger actions based on specific events. It provides a user-friendly interface and a vast library of pre-built applets, making it accessible for developers to create powerful automations and integrations efficiently.
+
+### [Watcher To Telegram Quick Start](https://wiki.seeedstudio.com/watcher_to_telegram/)
+
+
+
+**What is Telegram**
+
+Telegram is a popular messaging app that offers a wide range of features for users and developers alike. With its open API and protocol, developers can create custom Telegram clients, bots, and integrate Telegram's services into their own applications. Telegram provides a secure and reliable platform for real-time communication, supporting various media types, group chats, and end-to-end encryption. Its cloud-based infrastructure ensures seamless synchronization across devices and allows for easy scalability. Developers can leverage Telegram's features and tools to build innovative solutions and enhance user experiences within their projects.
+
+### [AWS IoT Core Intergate With reComputer R1000](https://wiki.seeedstudio.com/recomputer_r1000_aws/)
+
+AWS IoT Core is a service that assists in securely connecting and managing Internet of Things (IoT) devices. It enables devices to communicate with each other and with the cloud, facilitating the development of smart and connected applications. AWS IoT Core streamlines the integration of IoT devices into the broader AWS ecosystem, offering a reliable and scalable platform for building IoT solutions. In this guide, we will discuss how to connect our reComputer R1000 to the AWS IoT cloud.
+
+### [reComputer R1000 Connect AWS IoT Core with N3uron](https://wiki.seeedstudio.com/recomputer_r1000_n3uron_aws/)
+
+We have outlined the process of transmitting data from your [reComputer-R1000 device with AWS IoT Core using the MQTT protocol](https://wiki.seeedstudio.com/recomputer_r1000_aws/). This tutorial will seamlessly integrate with the aforementioned process. In this tutorial, we will delve into the intricacies of interfacing between the N3uron Edge IIoT platform and AWS IoT Core.
+
+### [reComputer R1000 with FIN to use modbus TCP](https://wiki.seeedstudio.com/reComputer_r1000_fin_modbus_tcp/)
+
+FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
+
+This article introduces how to use the `Modbus Connector` of `FIN Framwork`, which mainly includes three aspects: creating a `FIN Framwork` project, configuring the `Modbus Connector`, and adding data points to `Equip`.
+
+
+## Existed Wiki Updated
+
+### [Flash the Sidewalk version to LoRaWAN version](https://wiki.seeedstudio.com/flash_to_wio_tracker/)
+
+We've added the [Application Firmware](https://files.seeedstudio.com/wiki/SenseCAP/Sidewalk_Kit/wio_tracker_app_release_sw_0.5_2024-06-06.uf2).
+
+### [Get Started with SenseCAP Indicator](https://wiki.seeedstudio.com/Sensor/SenseCAP/SenseCAP_Indicator/Get_started_with_SenseCAP_Indicator/)
+
+We have added the [RP2040 Datasheet](https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf) and the [ESP32-S3 Datasheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/esp32-s3_datasheet.pdf).
+
+
+
+
+
+## The Efforts of Contributor
+
+
+
+- Check on [GitHub](https://github.com/orgs/Seeed-Studio/projects/6) for more information.
+- We will be really appreciate if you can [share your ideas](https://github.com/orgs/Seeed-Studio/projects/6?pane=issue&itemId=35179519) with us!
+
+
+## Past Weekly wiki
+
+Click here
+
+- [weekly wiki on 2.27th](/Seeed_Elderly/weekly_wiki/wiki227)
+- [weekly wiki on 3.06th](/Seeed_Elderly/weekly_wiki/wiki306)
+- [weekly wiki on 3.13th](/Seeed_Elderly/weekly_wiki/wiki313)
+- [weekly wiki on 3.20th](/Seeed_Elderly/weekly_wiki/wiki320)
+- [weekly wiki on 3.27th](/Seeed_Elderly/weekly_wiki/wiki327)
+- [weekly wiki on 4.03rd](/Seeed_Elderly/weekly_wiki/wiki403)
+- [weekly wiki on 4.10th](/Seeed_Elderly/weekly_wiki/wiki410)
+- [weekly wiki on 4.17th](/Seeed_Elderly/weekly_wiki/wiki417)
+- [weekly wiki on 4.24th](/Seeed_Elderly/weekly_wiki/wiki424)
+- [weekly wiki on 5.15th](/Seeed_Elderly/weekly_wiki/wiki515)
+- [weekly wiki on 5.22nd](/Seeed_Elderly/weekly_wiki/wiki522)
+- [weekly wiki on 5.29th](/Seeed_Elderly/weekly_wiki/wiki529)
+- [weekly wiki on 6.05th](/Seeed_Elderly/weekly_wiki/wiki605)
+- [weekly wiki on 6.12th](/Seeed_Elderly/weekly_wiki/wiki612)
+- [weekly wiki on 6.19th](/Seeed_Elderly/weekly_wiki/wiki619)
+- [weekly wiki on 7.03th](/Seeed_Elderly/weekly_wiki/wiki703)
+- [weekly wiki on 7.10th](/Seeed_Elderly/weekly_wiki/wiki710)
+- [weekly wiki on 7.17th](/Seeed_Elderly/weekly_wiki/wiki717)
+- [weekly wiki on 7.24th](/Seeed_Elderly/weekly_wiki/wiki724)
+- [weekly wiki on 7.31th](/Seeed_Elderly/weekly_wiki/wiki731)
+- [weekly wiki on 8.07th](/Seeed_Elderly/weekly_wiki/wiki807)
+- [weekly wiki on 8.21st](/Seeed_Elderly/weekly_wiki/wiki821)
+- [weekly wiki on 8.28th](/Seeed_Elderly/weekly_wiki/wiki828)
+- [weekly wiki on 9.11st](/Seeed_Elderly/weekly_wiki/wiki911)
+- [weekly wiki on 9.18th](/Seeed_Elderly/weekly_wiki/wiki918)
+- [weekly wiki on 9.25th](/Seeed_Elderly/weekly_wiki/wiki925)
+- [weekly wiki on 10.9th](/Seeed_Elderly/weekly_wiki/wiki1009)
+- [weekly wiki on 10.16th](/Seeed_Elderly/weekly_wiki/wiki1016)
+- [weekly wiki on 10.23th](/Seeed_Elderly/weekly_wiki/wiki1023)
+- [weekly wiki on 10.30th](/Seeed_Elderly/weekly_wiki/wiki1030)
+- [weekly wiki on 11.06th](/Seeed_Elderly/weekly_wiki/wiki1106)
+- [weekly wiki on 11.13th](/Seeed_Elderly/weekly_wiki/wiki1113)
+- [weekly wiki on 11.20th](/Seeed_Elderly/weekly_wiki/wiki1120)
+- [weekly wiki on 11.27th](/Seeed_Elderly/weekly_wiki/wiki1127)
+- [weekly wiki on 12.04th](/Seeed_Elderly/weekly_wiki/wiki1204)
+- [weekly wiki on 12.11th](/Seeed_Elderly/weekly_wiki/wiki1211)
+- [weekly wiki on 12.18th](/Seeed_Elderly/weekly_wiki/wiki1218)
+- [weekly wiki on 12.25th](/Seeed_Elderly/weekly_wiki/wiki1225)
+- [weekly wiki on 2024.1.08th](/Seeed_Elderly/weekly_wiki/wiki240108)
+- [weekly wiki on 2024.1.15th](/Seeed_Elderly/weekly_wiki/wiki240115)
+- [weekly wiki on 2024.1.22nd](/Seeed_Elderly/weekly_wiki/wiki240122)
+- [weekly wiki on 2024.1.29th](/Seeed_Elderly/weekly_wiki/wiki240129)
+- [weekly wiki on 2024.2.19th](/Seeed_Elderly/weekly_wiki/wiki240219)
+- [weekly wiki on 2024.2.26th](/Seeed_Elderly/weekly_wiki/wiki240226)
+- [weekly wiki on 2024.3.04th](/Seeed_Elderly/weekly_wiki/wiki240304)
+- [weekly wiki on 2024.3.11th](/Seeed_Elderly/weekly_wiki/wiki240311)
+- [weekly wiki on 2024.3.18th](/Seeed_Elderly/weekly_wiki/wiki240318)
+- [weekly wiki on 2024.3.25th](/Seeed_Elderly/weekly_wiki/wiki240325)
+- [weekly wiki on 2024.4.01st](/Seeed_Elderly/weekly_wiki/wiki240401)
+- [weekly wiki on 2024.4.08th](/Seeed_Elderly/weekly_wiki/wiki240408)
+- [weekly wiki on 2024.4.15th](/Seeed_Elderly/weekly_wiki/wiki240415)
+- [weekly wiki on 2024.4.22nd](/Seeed_Elderly/weekly_wiki/wiki240422)
+- [weekly wiki on 2024.4.29th](/Seeed_Elderly/weekly_wiki/wiki240429)
+- [weekly wiki on 2024.5.06th](/Seeed_Elderly/weekly_wiki/wiki240506)
+- [weekly wiki on 2024.5.13th](/Seeed_Elderly/weekly_wiki/wiki240513)
+- [weekly wiki on 2024.5.20th](/Seeed_Elderly/weekly_wiki/wiki240520)
+- [weekly wiki on 2024.5.27th](/Seeed_Elderly/weekly_wiki/wiki240527)
+- [weekly wiki on 2024.6.03rd](/Seeed_Elderly/weekly_wiki/wiki240603)
+- [weekly wiki on 2024.6.10th](/Seeed_Elderly/weekly_wiki/wiki240610)
+- [weekly wiki on 2024.6.17th](/Seeed_Elderly/weekly_wiki/wiki240617)
+- [weekly wiki on 2024.6.24th](/Seeed_Elderly/weekly_wiki/wiki240624)
+- [weekly wiki on 2024.7.01st](/Seeed_Elderly/weekly_wiki/wiki240701)
+- [weekly wiki on 2024.7.08th](/Seeed_Elderly/weekly_wiki/wiki240708)
+
+
+
diff --git a/docs/Seeed_Elderly/weekly_wiki/wiki240722.md b/docs/Seeed_Elderly/weekly_wiki/wiki240722.md
new file mode 100644
index 000000000000..c56d0359fa2c
--- /dev/null
+++ b/docs/Seeed_Elderly/weekly_wiki/wiki240722.md
@@ -0,0 +1,155 @@
+---
+description: Weekly Wiki
+title: Weekly Wiki
+keywords:
+- weeely wiki
+image: https://files.seeedstudio.com/wiki/IndexWiki/logo_image.jpg
+last_update:
+ date: 07/22/2024
+ author: Frank
+---
+
+
+
+## Greetings
+
+This is Frank in Seeed Studio and welcome to the Seeed Studio weekly wiki! Each Monday, I will introduce you our latest wiki, including the ones related to our new products, the interesting projects published by Seeed Studio, and the tutorials, introductions, etc... You name it.
+
+✨ For each week, when a collaborator contributes a project or fixes something important, we put the stars at the end of title of "Weekly Wiki" for more people be able to see their efforts👍.
+
+Today is July 22th and a brand new week has begun! Check out what Seeed Studio did last week!
+
+## Latest Wiki Launched
+
+### [Watcher To IFTTT Quick Start](https://wiki.seeedstudio.com/watcher_node_red_to_mongodb/)
+
+
+
+**MongoDB** is a powerful, cross-platform document database that excels in handling both structured and unstructured data. Its flexible, schema-less data model is based on JSON-like documents, making it an excellent choice for dynamic applications requiring ad hoc queries and indexing.
+
+Using MongoDB provides a straightforward method to **store and utilize data from the Watcher for further processing or other project applications.**
+
+This tutorial will guide you through using the Watcher API and Node-RED to seamlessly send data to MongoDB, a setup perfect for projects that demand real-time data handling and persistence.
+
+
+### [reComputer R1000 with FIN to create a Top Level Graphic](https://wiki.seeedstudio.com/reComputer_r1000_fin_top_level_gaphic/)
+
+IFTTT (If This Then That) is a web-based service that allows developers to create automations and integrations between various apps, devices, and services without complex programming. It enables users to define simple conditional statements called "applets" that trigger actions based on specific events. It provides a user-friendly interface and a vast library of pre-built applets, making it accessible for developers to create powerful automations and integrations efficiently.
+
+This article will show you how to use the of FIN Framwork, and to create a using the .Graphics BuilderTop Level GraphicGraphics Builder.
+
+
+### [reComputer R1000 with FIN to create a Floor Graphic](https://wiki.seeedstudio.com/reComputer_r1000_fin_floor_gaphic/)
+
+This article will show you how to use the `Graphics Builder` of FIN Framwork, and to create a `Floor Graphic` using the `Graphics Builder`.
+
+### [reComputer R1000 with FIN to create a Site Graphic](https://wiki.seeedstudio.com/reComputer_r1000_fin_site_gaphic/)
+
+
+This article will show you how to use the `Graphics Builder` of FIN Framwork, and to create a `Site Graphic` using the `Graphics Builder`.
+
+
+
+## Existed Wiki Updated
+
+### [Voice Assistant System for Home Assitant](https://wiki.seeedstudio.com/respeaker_lite_ha/)
+
+We've added examples of [Adding smart devices](https://wiki.seeedstudio.com/respeaker_lite_ha/#add-your-smart-device).
+
+### [Flash the Sidewalk version to LoRaWAN version](https://wiki.seeedstudio.com/reServer_Industrial_Getting_Started/)
+
+We've added instructions for [Configuring the IP address for the POE interface](https://wiki.seeedstudio.com/reServer_Industrial_Getting_Started/#usage).
+
+
+
+
+
+
+
+## The Efforts of Contributor
+
+
+
+- Check on [GitHub](https://github.com/orgs/Seeed-Studio/projects/6) for more information.
+- We will be really appreciate if you can [share your ideas](https://github.com/orgs/Seeed-Studio/projects/6?pane=issue&itemId=35179519) with us!
+
+
+## Past Weekly wiki
+
+Click here
+
+- [weekly wiki on 2.27th](/Seeed_Elderly/weekly_wiki/wiki227)
+- [weekly wiki on 3.06th](/Seeed_Elderly/weekly_wiki/wiki306)
+- [weekly wiki on 3.13th](/Seeed_Elderly/weekly_wiki/wiki313)
+- [weekly wiki on 3.20th](/Seeed_Elderly/weekly_wiki/wiki320)
+- [weekly wiki on 3.27th](/Seeed_Elderly/weekly_wiki/wiki327)
+- [weekly wiki on 4.03rd](/Seeed_Elderly/weekly_wiki/wiki403)
+- [weekly wiki on 4.10th](/Seeed_Elderly/weekly_wiki/wiki410)
+- [weekly wiki on 4.17th](/Seeed_Elderly/weekly_wiki/wiki417)
+- [weekly wiki on 4.24th](/Seeed_Elderly/weekly_wiki/wiki424)
+- [weekly wiki on 5.15th](/Seeed_Elderly/weekly_wiki/wiki515)
+- [weekly wiki on 5.22nd](/Seeed_Elderly/weekly_wiki/wiki522)
+- [weekly wiki on 5.29th](/Seeed_Elderly/weekly_wiki/wiki529)
+- [weekly wiki on 6.05th](/Seeed_Elderly/weekly_wiki/wiki605)
+- [weekly wiki on 6.12th](/Seeed_Elderly/weekly_wiki/wiki612)
+- [weekly wiki on 6.19th](/Seeed_Elderly/weekly_wiki/wiki619)
+- [weekly wiki on 7.03th](/Seeed_Elderly/weekly_wiki/wiki703)
+- [weekly wiki on 7.10th](/Seeed_Elderly/weekly_wiki/wiki710)
+- [weekly wiki on 7.17th](/Seeed_Elderly/weekly_wiki/wiki717)
+- [weekly wiki on 7.24th](/Seeed_Elderly/weekly_wiki/wiki724)
+- [weekly wiki on 7.31th](/Seeed_Elderly/weekly_wiki/wiki731)
+- [weekly wiki on 8.07th](/Seeed_Elderly/weekly_wiki/wiki807)
+- [weekly wiki on 8.21st](/Seeed_Elderly/weekly_wiki/wiki821)
+- [weekly wiki on 8.28th](/Seeed_Elderly/weekly_wiki/wiki828)
+- [weekly wiki on 9.11st](/Seeed_Elderly/weekly_wiki/wiki911)
+- [weekly wiki on 9.18th](/Seeed_Elderly/weekly_wiki/wiki918)
+- [weekly wiki on 9.25th](/Seeed_Elderly/weekly_wiki/wiki925)
+- [weekly wiki on 10.9th](/Seeed_Elderly/weekly_wiki/wiki1009)
+- [weekly wiki on 10.16th](/Seeed_Elderly/weekly_wiki/wiki1016)
+- [weekly wiki on 10.23th](/Seeed_Elderly/weekly_wiki/wiki1023)
+- [weekly wiki on 10.30th](/Seeed_Elderly/weekly_wiki/wiki1030)
+- [weekly wiki on 11.06th](/Seeed_Elderly/weekly_wiki/wiki1106)
+- [weekly wiki on 11.13th](/Seeed_Elderly/weekly_wiki/wiki1113)
+- [weekly wiki on 11.20th](/Seeed_Elderly/weekly_wiki/wiki1120)
+- [weekly wiki on 11.27th](/Seeed_Elderly/weekly_wiki/wiki1127)
+- [weekly wiki on 12.04th](/Seeed_Elderly/weekly_wiki/wiki1204)
+- [weekly wiki on 12.11th](/Seeed_Elderly/weekly_wiki/wiki1211)
+- [weekly wiki on 12.18th](/Seeed_Elderly/weekly_wiki/wiki1218)
+- [weekly wiki on 12.25th](/Seeed_Elderly/weekly_wiki/wiki1225)
+- [weekly wiki on 2024.1.08th](/Seeed_Elderly/weekly_wiki/wiki240108)
+- [weekly wiki on 2024.1.15th](/Seeed_Elderly/weekly_wiki/wiki240115)
+- [weekly wiki on 2024.1.22nd](/Seeed_Elderly/weekly_wiki/wiki240122)
+- [weekly wiki on 2024.1.29th](/Seeed_Elderly/weekly_wiki/wiki240129)
+- [weekly wiki on 2024.2.19th](/Seeed_Elderly/weekly_wiki/wiki240219)
+- [weekly wiki on 2024.2.26th](/Seeed_Elderly/weekly_wiki/wiki240226)
+- [weekly wiki on 2024.3.04th](/Seeed_Elderly/weekly_wiki/wiki240304)
+- [weekly wiki on 2024.3.11th](/Seeed_Elderly/weekly_wiki/wiki240311)
+- [weekly wiki on 2024.3.18th](/Seeed_Elderly/weekly_wiki/wiki240318)
+- [weekly wiki on 2024.3.25th](/Seeed_Elderly/weekly_wiki/wiki240325)
+- [weekly wiki on 2024.4.01st](/Seeed_Elderly/weekly_wiki/wiki240401)
+- [weekly wiki on 2024.4.08th](/Seeed_Elderly/weekly_wiki/wiki240408)
+- [weekly wiki on 2024.4.15th](/Seeed_Elderly/weekly_wiki/wiki240415)
+- [weekly wiki on 2024.4.22nd](/Seeed_Elderly/weekly_wiki/wiki240422)
+- [weekly wiki on 2024.4.29th](/Seeed_Elderly/weekly_wiki/wiki240429)
+- [weekly wiki on 2024.5.06th](/Seeed_Elderly/weekly_wiki/wiki240506)
+- [weekly wiki on 2024.5.13th](/Seeed_Elderly/weekly_wiki/wiki240513)
+- [weekly wiki on 2024.5.20th](/Seeed_Elderly/weekly_wiki/wiki240520)
+- [weekly wiki on 2024.5.27th](/Seeed_Elderly/weekly_wiki/wiki240527)
+- [weekly wiki on 2024.6.03rd](/Seeed_Elderly/weekly_wiki/wiki240603)
+- [weekly wiki on 2024.6.10th](/Seeed_Elderly/weekly_wiki/wiki240610)
+- [weekly wiki on 2024.6.17th](/Seeed_Elderly/weekly_wiki/wiki240617)
+- [weekly wiki on 2024.6.24th](/Seeed_Elderly/weekly_wiki/wiki240624)
+- [weekly wiki on 2024.7.01st](/Seeed_Elderly/weekly_wiki/wiki240701)
+- [weekly wiki on 2024.7.08th](/Seeed_Elderly/weekly_wiki/wiki240708)
+- [weekly wiki on 2024.7.16th](/Seeed_Elderly/weekly_wiki/wiki240716)
+
+
+
diff --git a/docs/Sensor/Beyond_Grove/Sensors/Gear_Stepper_Motor_Driver_Pack.md b/docs/Sensor/Beyond_Grove/Sensors/Gear_Stepper_Motor_Driver_Pack.md
index 5ea182d2fd8f..a63626b28f58 100755
--- a/docs/Sensor/Beyond_Grove/Sensors/Gear_Stepper_Motor_Driver_Pack.md
+++ b/docs/Sensor/Beyond_Grove/Sensors/Gear_Stepper_Motor_Driver_Pack.md
@@ -120,7 +120,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 1.** Click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
int pwm1=9;
int pwm2=10;
int ctr_a =9;
diff --git a/docs/Sensor/Beyond_Grove/Sensors/Ultra_Sonic_range_measurement_module.md b/docs/Sensor/Beyond_Grove/Sensors/Ultra_Sonic_range_measurement_module.md
index b9b2d4f7392a..7277e7e4797c 100755
--- a/docs/Sensor/Beyond_Grove/Sensors/Ultra_Sonic_range_measurement_module.md
+++ b/docs/Sensor/Beyond_Grove/Sensors/Ultra_Sonic_range_measurement_module.md
@@ -107,7 +107,7 @@ A short ultrasonic pulse is transmitted at the time 0, reflected by an object. T
**Step 1.** Copy the code and flash it into the controller board.
**Step 2.** Upload the code and open monitor window.
-```C
+```cpp
#include "Arduino.h"
class Ultrasonic
{
diff --git a/docs/Sensor/Beyond_Grove/Sensors/Water-Flow-Sensor.md b/docs/Sensor/Beyond_Grove/Sensors/Water-Flow-Sensor.md
index 0068a3dfc75d..06f431b6f0b2 100755
--- a/docs/Sensor/Beyond_Grove/Sensors/Water-Flow-Sensor.md
+++ b/docs/Sensor/Beyond_Grove/Sensors/Water-Flow-Sensor.md
@@ -149,7 +149,7 @@ The code here **WORKS** for the most classic YF – S201, YF - S402 and other Wa
#### Software Code
-```C++
+```cpp
/*
YF‐ S201 Water Flow Sensor
Water Flow Sensor output processed to read in litres/hour
@@ -203,7 +203,7 @@ If everything goes well, open the serial monitor tool and set the baud rate to 9
In the code section, we used the following formula, so how did this formula come about?
-```C++
+```cpp
l_hour = (flow_frequency * 60 / 7.5)
```
@@ -211,26 +211,26 @@ Earlier we mentioned that with each revolution of the wheel, the volume of fluid
For the YF-S201, every liter of water that flows, the Hall Sensor outputs 450 pulses. Let’s do little math here. 450 pulse for 1 liter, so each pulse means 1/450 liter water flowing through. We take the total volume of liquid flowing through the water flow sensor at a certain time **t**(unit s) as **V_total**(unit L), and the total number of pulses detected as **N**. Then we get:
-```C++
+```cpp
V_total(L) = N* 1/450(L)
```
Also, the total volume of fluid flowing through the water flow sensor is equal to the **water flow rate(Q - unit L/s)** multiplied by time **t**(unit s) .
-```C++
+```cpp
V_total(L) = Q(L/s)*t(s)
```
So we get:
-```C++
+```cpp
N* 1/450 = Q(L/s)*t(s)
N/t = 450 * Q(L/s)
```
**N/t** happen to be frequency **f**, so:
-```C++
+```cpp
f = 450*Q(L/s);
Q(L/s) = f/450;
Q(L/min) = f*60/450 = f/7.5
@@ -239,7 +239,7 @@ Q(L/hour) = f*60*60/450 = f*60 /7.5
For the YF – S402, every liter of water that flows, the Hall Sensor outputs 4380 pulses. So, the formula should be:
-```C++
+```cpp
f = 4380*Q(L/s);
Q(L/s) = f/4380;
Q(L/min) = f*60/4380 = f/73
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-16-Channel_PWM_Driver-PCA9685.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-16-Channel_PWM_Driver-PCA9685.md
index 480fab6369d3..c894fbd7ae3d 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-16-Channel_PWM_Driver-PCA9685.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-16-Channel_PWM_Driver-PCA9685.md
@@ -172,7 +172,7 @@ If you want to use servo, you can connect as shown below:
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "PCA9685.h"
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_SPDT_Relay.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_SPDT_Relay.md
index db462d9ec563..d09e85b672cf 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_SPDT_Relay.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_SPDT_Relay.md
@@ -129,7 +129,7 @@ The **SIG1** is pulled down by the 10k R2, if there is no signal, the 'Gate' of
- **Step 1.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```c++
+```cpp
#include
uint8_t channel1 = 7;
uint8_t channel2 = 8;
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_Solid_State_Relay.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_Solid_State_Relay.md
index 7d1deaca86a6..1e56f8e2b5b6 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_Solid_State_Relay.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-2-Channel_Solid_State_Relay.md
@@ -157,7 +157,7 @@ The **CTR1** is the control signal from the Arduino or other board. It is pulled
- **Step 1.** Open the Arduino IDE and create a new file, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```c++
+```cpp
#include
uint8_t channel1 = 2;
uint8_t channel2 = 3;
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_SPDT_Relay.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_SPDT_Relay.md
index 48b3318432ac..4ceee635b438 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_SPDT_Relay.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_SPDT_Relay.md
@@ -149,7 +149,7 @@ An introduction of **What is a Grove Relay Module** and **How does a Relay work*
Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```c++
+```cpp
#include
Multi_Channel_Relay relay;
@@ -319,7 +319,7 @@ Channel 2 on
In case you want to change the address, you need to set the address before use. For example, we want to change it into 0x2f. We can use the following code.
-```C++
+```cpp
#include
Multi_Channel_Relay relay;
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_Solid_State_Relay.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_Solid_State_Relay.md
index 3392a15fcf20..10345cb2081d 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_Solid_State_Relay.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-4-Channel_Solid_State_Relay.md
@@ -181,7 +181,7 @@ This is a typical Bi-directional level shifter circuit to connect two different
Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```c++
+```cpp
#include
Multi_Channel_Relay relay;
@@ -275,7 +275,7 @@ void loop()
If every thing goes well, you will get the result. Meanwhile, you will see the on-board LEDs alternately lit and extinguished.
:::
-```c++
+```cpp
Scanning...
I2C device found at address 0x12 !
Found 1 I2C devices
@@ -343,7 +343,7 @@ Channel 2 on
In case you want to change the address, you need to set the address before use. For example, we want to change it into 0x2f. We can use the following code.
-```C++
+```cpp
#include
Multi_Channel_Relay relay;
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-8-Channel_Solid_State_Relay.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-8-Channel_Solid_State_Relay.md
index 38fce331d810..64ce8aeefaa9 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-8-Channel_Solid_State_Relay.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-8-Channel_Solid_State_Relay.md
@@ -180,7 +180,7 @@ This is a typical Bi-directional level shifter circuit to connect two different
Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```c++
+```cpp
#include
#define USE_8_CHANNELS (1)
@@ -302,7 +302,7 @@ void loop()
If every thing goes well, you will get the result. Meanwhile, you will see the on-board LEDs alternately lit and extinguished.
:::
-```c++
+```cpp
Scanning...
I2C device found at address 0x11 !
Found 1 I2C devices
@@ -376,7 +376,7 @@ Channel 2 on
In case you want to change the address, you need to set the address before use. For example, we want to change it into 0x2f. We can use the following code.
-```C++
+```cpp
#include
Multi_Channel_Relay relay;
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Haptic_Motor.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Haptic_Motor.md
index 6623098a6621..13daf7c859bd 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Haptic_Motor.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Haptic_Motor.md
@@ -109,7 +109,7 @@ Grove - Haptic motor is a grove module integrated with [DRV2605L](http://www.ti.
- **Step 2.** Refer [How to install library](https://wiki.seeedstudio.com/How_to_install_Arduino_Library) to install library for Arduino.
- **Step 3.** Copy the code into Arduino IDE and upload. If you do not know how to upload the code, please check [how to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```c++
+```cpp
#include
DRV2605 haptic;
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Infrared_Emitter.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Infrared_Emitter.md
index 6440705b3cd0..cc4dc0899eea 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Infrared_Emitter.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Infrared_Emitter.md
@@ -114,7 +114,7 @@ Copy the following **Send Example Code** to the Arduino IDE:
**Send Example Code:**
-```c++
+```cpp
/* send.ino Example sketch for IRLib2
* Illustrates how to send a code.
*/
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3-v3.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3-v3.md
index 03294fd56e15..408fb152db54 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3-v3.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3-v3.md
@@ -94,7 +94,7 @@ As the name indicates, the Grove - MP3 V3 is the upgraded version of Grove - MP3
The WT2003S_Terminal_Player Example code is as follow:
-```C++
+```cpp
#include "WT2003S_Player.h"
#ifdef __AVR__
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3_v2.0.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3_v2.0.md
index 51577e3aa7db..8a3b87104598 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3_v2.0.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-MP3_v2.0.md
@@ -142,7 +142,7 @@ Most of arduino boards have at least one Serial, some have multiple serials(Ardu
For more info about the Serial, please refer to [Seeed Arduino Serial](https://wiki.seeedstudio.com/Seeed_Arduino_Serial/).
:::
-```c++
+```cpp
#ifdef __AVR__
#include
SoftwareSerial SSerial(2, 3); // RX, TX
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Optocoupler_Relay-M281.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Optocoupler_Relay-M281.md
index 339db9ca48a5..3db0aea148f1 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Optocoupler_Relay-M281.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Optocoupler_Relay-M281.md
@@ -126,7 +126,7 @@ Unlike the other TRIAC SSR in our website, this relay is based on MOSFET, so it
- **Step 1.** Copy the following code into a new sketch in the Arduino IDE
-```C++
+```cpp
const int Pinout = 5;
void setup() {
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Passive-Buzzer.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Passive-Buzzer.md
index e34aa1ca2cb0..de146b3f7256 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Passive-Buzzer.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Passive-Buzzer.md
@@ -63,7 +63,7 @@ The Grove interface on the breadboard and on the Grove Passive Buzzer are connec
#### Code example1 - simply get the beep sound
-```c++
+```cpp
int buzzer = 5; // Buzzer connect with Pin 5
int frequency = 2700; //reach the Resonant Frequency
int cycle = 1000000/frequency;
@@ -86,7 +86,7 @@ void loop()
#### Code example2 - Use buzzer to play music
-```c++
+```cpp
//set the corresponding notes with frequency
#define NOTE_D0 0
#define NOTE_D1 294
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Solid_State_Relay_V2.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Solid_State_Relay_V2.md
index 5bad8e6355e8..ee40d9b3c46d 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Solid_State_Relay_V2.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Solid_State_Relay_V2.md
@@ -151,7 +151,7 @@ The **CTR** is the control signal from the Arduino or other board. It is pulled
- **Step 1.** Open the Arduino IDE and create a new file, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```c++
+```cpp
#include
uint8_t pin = 7;
void setup() {
diff --git a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Speaker-Plus.md b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Speaker-Plus.md
index 8944b09d6085..6bbe322afd26 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Speaker-Plus.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Actuator/Grove-Speaker-Plus.md
@@ -105,7 +105,7 @@ You can supply different frequency signal to this module with Arduino. Arduino g
If this is the first time you work with Arduino, we strongly recommend you to see [Getting Started with Arduino](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/) before the start.
:::
-```C++
+```cpp
/*macro definition of Speaker pin*/
#define SPEAKER 3
diff --git a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-10A_DC_Current_Sensor-ACS725.md b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-10A_DC_Current_Sensor-ACS725.md
index efe18ae66795..bf6f3c9e4bfb 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-10A_DC_Current_Sensor-ACS725.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-10A_DC_Current_Sensor-ACS725.md
@@ -132,7 +132,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 2.** In the /example/ folder, you can find the demo code. Here we take the **Grove_10A_Current_Sensor** for instance. Just click the [Grove_10A_Current_Sensor.ino](https://github.com/Seeed-Studio/Grove_Current_Sensor/blob/master/examples/Grove_10A_Current_Sensor/Grove_10A_Current_Sensor.ino) to open the demo. Or you can copy the following code:
-```C++
+```cpp
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define RefVal 3.3
#define SERIAL SerialUSB
@@ -226,14 +226,14 @@ Due to the presence of zero offset, the sensor will also have a reading when the
Line 19:
-```C++
+```cpp
float Vref = 322;
//Vref is zero drift value, you need to change this value to the value you actually measured before using it.
```
In the demo code, we set the Vref to 322, however, the zero offset value varies from board to board. As you know, the board we use in this demo is 346.68. So let's modify the Line 21:
-```C++
+```cpp
float Vref = 346.68;
```
diff --git a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-2.5A-DC-Current-Sensor-ACS70331.md b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-2.5A-DC-Current-Sensor-ACS70331.md
index 77781e168c8a..da97b1d0e6b2 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-2.5A-DC-Current-Sensor-ACS70331.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-2.5A-DC-Current-Sensor-ACS70331.md
@@ -151,7 +151,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 2.** In the /example/ folder, you can find the demo code. Here we take the [Grove_2_5A_Current_Sensor.ino](https://github.com/Seeed-Studio/Grove_Current_Sensor/tree/master/examples/Grove_2_5A_Current_Sensor) for instance. Just click the Grove_2_5A_Current_Sensor.ino to open the demo. Or you can copy the following code:
-```C++
+```cpp
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define RefVal 3.3
#define SERIAL SerialUSB
@@ -248,14 +248,14 @@ Due to the presence of zero offset, the sensor will also have a reading when the
Line 21:
-```C++
+```cpp
float Vref = 265;
//Vref is zero drift value, you need to change this value to the value you actually measured before using it.
```
In the demo code, we set the Vref to 265, however, the zero offset value varies from board to board. As you know, the board we use in this demo is 288.09. So let's modify the Line 21:
-```C++
+```cpp
float Vref = 283.20;
```
diff --git a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-5A_DC_AC_Current_Sensor-ACS70331.md b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-5A_DC_AC_Current_Sensor-ACS70331.md
index 3becc603790e..f03a7748cc2b 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-5A_DC_AC_Current_Sensor-ACS70331.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-5A_DC_AC_Current_Sensor-ACS70331.md
@@ -156,7 +156,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 2.** In the /example/ folder, you can find the demo code. Here we take the [Grove - ±5A DC/AC Current Sensor (ACS70331)](https://github.com/Seeed-Studio/Grove_Current_Sensor/blob/master/examples/Grove_5A_DC_Current_Sensor/Grove_5A_DC_Current_Sensor.ino) for instance. Just click the **Grove_5A_DC_Current_Sensor.ino** to open the demo. Or you can copy the following code:
-```C++
+```cpp
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define RefVal 3.3
#define SERIAL SerialUSB
@@ -254,14 +254,14 @@ Due to the presence of zero offset, the sensor will also have a reading when the
Line 32:
-```C++
+```cpp
float Vref = 1508;
//Vref is zero drift value, you need to change this value to the value you actually measured before using it.
```
In the demo code, we set the Vref to 1508, however, the zero offset value varies from board to board. As you know, the board we use in this demo is 595.70. So let's modify the Line 21:
-```C++
+```cpp
float Vref = 595.70;
```
@@ -288,7 +288,7 @@ When you use AC power, please pay attention to safety and avoid electric shock.
For the hardware connection and calibration part, please refer to the [DC Demo](#dc-demo), the only difference is the code. Please use the following code for AC load.
-```C++
+```cpp
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define RefVal 3.3
#define SERIAL SerialUSB
diff --git a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-Coulomb_Counter_3.3V_to_5V-LTC2941.md b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-Coulomb_Counter_3.3V_to_5V-LTC2941.md
index 4b7abd4882dd..95994f2dd0fe 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Current/Grove-Coulomb_Counter_3.3V_to_5V-LTC2941.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Current/Grove-Coulomb_Counter_3.3V_to_5V-LTC2941.md
@@ -186,7 +186,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "LTC2941.h"
@@ -242,7 +242,7 @@ The library file may be updated. This code may not be applicable to the updated
If every thing goes well, when you open the Serial Monitor and tap any key the press the send button , it may show as below:
:::
-```C++
+```cpp
LTC2941 Raw Data
1439.96C,399.99mAh,100.00%
1439.96C,399.99mAh,100.00%
@@ -255,7 +255,7 @@ LTC2941 Raw Data
In the demo, we use a 400mAh battery, so you can see the results `1439.96mC,399.99mAh,100.00%`. The percentage of remaining battery is valid only after you set the battery capacity. You can change the battery capacity at the code line 21,
-```C
+```cpp
ltc2941.setBatteryFullMAh(400); // set the battery capacity here
```
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-1.2_inch_IPS_Display.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-1.2_inch_IPS_Display.md
index 40ac488f332c..129071da827c 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-1.2_inch_IPS_Display.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-1.2_inch_IPS_Display.md
@@ -16,7 +16,7 @@ last_update:
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-16x2_LCD_Series.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-16x2_LCD_Series.md
index 8f0811d426c8..176b65c0a1b6 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-16x2_LCD_Series.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-16x2_LCD_Series.md
@@ -162,7 +162,7 @@ The first version of Grove - 16 x 2 LCD series does not have a built-in pull-up
in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include
#include "rgb_lcd.h"
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-LCD_RGB_Backlight.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-LCD_RGB_Backlight.md
index 8650059dcac8..8a48227f28ea 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-LCD_RGB_Backlight.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-LCD_RGB_Backlight.md
@@ -165,7 +165,7 @@ Here are some projects for your reference.
Here is the code of HelloWorld.ino.
-```c++
+```cpp
#include
#include "rgb_lcd.h"
@@ -371,7 +371,7 @@ if __name__=="__main__":
- Q2: How to use button to switch Grove RGB LCD to display different pages?
- A2: Here is the code.
-```c++
+```cpp
#include
#include "rgb_lcd.h"
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.66-SSD1306_v1.0.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.66-SSD1306_v1.0.md
index 540701d32b84..c19214b2583c 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.66-SSD1306_v1.0.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.66-SSD1306_v1.0.md
@@ -93,7 +93,7 @@ This Grove-OLED Display supports the U8g2 monochrome displays library written by
- **Step 2.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```C++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.96-SSD1315.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.96-SSD1315.md
index 609940955f0d..c471ac89c586 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.96-SSD1315.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-0.96-SSD1315.md
@@ -95,7 +95,7 @@ Thanks to the new SSD1315 chip, it can work with 3.3V, so that we removed the ex
- **Step 2.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```C++
+```cpp
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-1.12-SH1107_V3.0.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-1.12-SH1107_V3.0.md
index 4da36ff05945..f6fa20d18ee9 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-1.12-SH1107_V3.0.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED-Display-1.12-SH1107_V3.0.md
@@ -100,7 +100,7 @@ This is an easy-to-use module, what you need to do is connect the module to I2C
- **Step 4.** Upload the demo code below in your Arduino IDE.
-```C++
+```cpp
#include
#include
#include
@@ -178,7 +178,7 @@ void loop(void) {
- **Step 3.** Upload the demo code below in your Arduino IDE.
-```C++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_0.96inch.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_0.96inch.md
index 565b20556733..54ef3da270aa 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_0.96inch.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_0.96inch.md
@@ -117,7 +117,7 @@ The OLED128*64 uses all the pins of SSD1308 chip, the default original point is
- **Step 2.** Refer [How to install library](https://wiki.seeedstudio.com/How_to_install_Arduino_Library) to install library for Arduino.
- **Step 3.** Copy the code into Arduino IDE and upload. If you do not know how to upload the code, please check [how to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```CPP
+```cpp
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_1.12inch.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_1.12inch.md
index 1f14ff838ff7..bce1ca6d1659 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_1.12inch.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-OLED_Display_1.12inch.md
@@ -112,7 +112,7 @@ This is an easy-to-use module, what you need to do is connect the module to I2C
- **Step 4.** Upload the demo code below in your Arduino IDE.
-```C++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_1_54.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_1_54.md
index 8ba07d92ce87..6f122b9f7aa8 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_1_54.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_1_54.md
@@ -174,7 +174,7 @@ It will be a lot fun to display your own image, now, let's show you how to DIY y
Before the start, please check the **E_ink154_factoryCode.ino** again. You can find the two array easily.
-```c++
+```cpp
const unsigned char IMAGE_BLACK[] PROGMEM = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
@@ -190,7 +190,7 @@ const unsigned char IMAGE_BLACK[] PROGMEM = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00,
and
-```c++
+```cpp
const unsigned char IMAGE_RED[] PROGMEM = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
diff --git a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_2_13.md b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_2_13.md
index 07a08d8f4b48..a6ad5cd874a2 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_2_13.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Display/Grove-Triple_Color_E-Ink_Display_2_13.md
@@ -175,7 +175,7 @@ It will be a lot fun to display your own image, now, let's show you how to DIY y
Before the start, please check the **Eink_factory_code_213.ino** again. You can find the two array easily.
-```c++
+```cpp
const unsigned char IMAGE_BLACK[] PROGMEM = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
@@ -191,7 +191,7 @@ const unsigned char IMAGE_BLACK[] PROGMEM = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00,
and
-```c++
+```cpp
const unsigned char IMAGE_RED[] PROGMEM = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
diff --git a/docs/Sensor/Grove/Grove_Accessories/Grove_Accessories_Intro.md b/docs/Sensor/Grove/Grove_Accessories/Grove_Accessories_Intro.md
index cfa24eae44dd..defe13a6c050 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Grove_Accessories_Intro.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Grove_Accessories_Intro.md
@@ -10,96 +10,1536 @@ last_update:
author: Matthew
---
+# Grove Accessories Guide
+
+Grove Accessories refer to components and peripherals compatible with the Grove ecosystem. Grove is an open-source hardware platform developed by Seeed Studio, designed to simplify electronics prototyping and experimentation. It features a standardized interface and connectors that allow users to easily combine various modules such as sensors, actuators, displays, cables, and adapters without soldering or complex wiring.
+
+
+
+Grove Accessories typically include a variety of actuators, displays, switch&button, and so on. These accessories are designed to be directly plugged into Grove interfaces, enabling rapid prototyping and project development. The Grove system's standardized connectors facilitate easy and quick assembly of components, making it straightforward for users to build and iterate on their electronic designs without the complexities of soldering or intricate wiring.
+
## Different types of Grove sensors
-- We have different kinds of Grove accessories as you can see on the left side.
-- Here is a small part of entire Grove accessories ecosystem:
-
-
- Grove - Wrapper
-
+We have various types of Grove accessories that can be applied to different scenarios such as IoT projects, wireless sensor networks, and smart homes.
+
+### Display
+
+#### Grove 1.2-inch IPS Display
+
+
+
+
+
+
+ The Grove-1.22 Inch IPS Display is a compact and easy-to-use display that offers colorful, clear, and vibrant images with 240x240 resolution and up to 65 RGB colors. It uses IPS technology for accurate color from all viewing angles. With its wide operating temperature range and compatibility with a wide range of power sources, this display is suitable for various environments.
+
+
+
+#### Grove - 0.54 inch Red Alphanumeric Display
+
+This module is an alphanumeric display with high brightness and red backlight, each digit is consists of a 14-segment digital tube
+
+
+
+
+
Grove - 0.54" Red Dual Alphanumeric Display,Nixie Tube
+
Grove - 0.54' Red Quad Alphanumeric Display,Nixie Tube
+
+#### Grove - 16x2 LCD
+
+Grove - 16 x 2 LCD is a perfect I2C LCD display for Arduino and Raspberry Pi with high contrast and easy deployment. 16x2 means two lines and each line has 16 columns, 32 characters in total.
+
+
+ Grove - 16X2 LCD RGB Backlight is a full-color backlight 16x2 LCD display for Arduino. High contrast and ease of use make it a perfect I2C LCD display for Arduino and Raspberry Pi.
+
+ The Grove - OLED Display 0.66" (SSD1306) is a monochrome display with 64×48 resolution. It contains user-friendly design and outstanding performance with Grove I2C interface in 20mm×20mm ultra-small size.
+
+ The Grove - OLED Display 0.96" (SSD1315) is a monochrome(white) 128×64 pixels passive display matrix module with Grove I2C Interface. It is the upgrade version of the old Grove - OLED Display 0.96", better performance, a quarter price.
+
+ Grove - OLED Yellow&Blue Display 0.96 is built 128*64 resolution with a blue and yellow bi-color display. It can be light up by either I2C or SPI interface.
+
+ The Grove - OLED Display 1.12'' V2 is a little elegant screen that can add a screen interaction feature to your Arduino. With the onboard 4-pin I2C Grove connector, you can plug-and-play with the screen and Arduino in no time.
+
+ The Grove - OLED Display 1.12 V3.0 (SH1107) is a monochrome display with 128*128 resolution. It has a lower price, user-friendly design and better performance with both I2C and SPI available.
+
+ This module is based on 2-Coil Latching Relay. Contrast to the ordinary relay, this latching relay does not need continuous power to keep the state, only a rising/falling pulse is needed to change the work state.
+
+ Grove - Buzzer is a simple yet enjoyable twig to use. It can output noise at a volume over 85 dB and is integrated with Grove interface, which makes it easy to connect and experiment by just plug & play. It is a perfect add-on for all kinds of Arduino projects and human-machine interfaces.
+
+ This is a 3-5V passive buzzer. You can change the PMW frequency to award different beep sounds to get a "buzzer music". Also, the buzzer can be set as an alarm for security applications. So get one and start your own project!
+
+ Grove - Chainable RGB LED is based on a P9813 chip which is a full-color LED driver. It provides 3 constant-current drivers as well as modulated output of 256 shades of grey. This Grove module is suitable for any colorful LED based projects.
+
+ Grove - I2C Motor Driver(L298P) is a common-use motor driver for stepping motor and servo motor. It embeds an STM32 chip for burning the code to control the motor driver.
+
+ The Infrared Emitter is used to transmit infrared signals through an infrared LED, while there is an Infrared receiver to get the signals on the other side
+
+ This MP3 module with an Arduino can be turned into your multi-format music player! It's a Music module based on WT2605CX high-quality audio chip, which has better performance then MP3 V3 and supports Grove interface, Speaker JST interface, 3.5mm audio jack and SD card, supporting SPI-Flash, TF card, and USB flash disk.
+
+ Kid-friendly cartoon style mini fan Built-in programmable microcontroller that uses Arduino IDE Harmless soft fan-blade to avoid injuries Easy to use Grove connector compatible
+
+ This is the latest version of Grove-recorder, and also the best version. Comparing the previous one, there are some updates that we would like to mention.
+
+ The Grove-Relay module is a digital normally-open switch that can handle the current up to 5A at 250VAC for long periods of time. When the relay is switched on, the LED will light up and the relay will allow current to flow. The peak voltage capability is 250V at 10A. It is widely used in remote control, telemetry, communication, automatic control, mechatronics, power electronics and other fields.
+
+ The Grove - 2-Channel SPDT Relay has two single pole - double throw (SPDT) switches. It only requires low-voltage and low current signals to control switches. Specifically, you can use 5V DC to control max.250V AC or 110V DC.
+
+
+ The Grove - 4-Channel SPDT Relay has four single pole - double throw (SPDT) switches. It only requires low-voltage and low current signals to control those switches.
+
+ The Servo motor is a rotary actuator that allows for precise control of angular position which makes them suitable for use in closed-loop systems where precise position control is needed and is commonly used in electronics.
+ The Grove Speaker Plus includes a powerful amplifier driver board and a fancy speaker. With the help of the on-board potentiometer, you can easily adjust the output volume. You could replace the speaker with other speakers you like as it adopts separated and replaceable speaker design.
+
+ Grove - Vibration Motor consists of one coin type motor which is a permanent magnet coreless DC motor. It vibrates when the input logic is HIGH which can be used to notify the user. Integrated with Grove interface, it provides a simple way to connect with Arduino boards without soldering (A Grove Base Shield is required).
+
+ Grove - Water Atomization is a perfect module for you to quickly DIY a humidifier with Arduino. You can also develop more advanced and interesting projects with digital scent technology and any other situations in which atomization is required.
+
+ Grove – 16-Channel PWM Driver (PCA9685) is a 12-bit PWM driver based on the NXP PCA9685 and can drive up to 16 servos with an external power supply of 5V.
+
+
+
+#### Grove - I2C Motor Driver (TB6612FNG)
+
+
+
+
+
+
+ The Grove - I2C Motor Driver (TB6612FNG) can drive two DC motors up to 12V/1.2A or drive one stepper motor up to 12V/1.2A. With the on-board MCU, it can work with Arduino easily via the Grove I2C interface.
+
+ Grove - Hall Sensor is based on the A1101 Hall-effect magnetic switch. Hall sensors are capable of measuring a wide range of magnetic fields and are sensitive to both the magnitude and orientation of the field. When used as electronic switches, they are less prone to mechanical failure.
+
+
+
+### Time
+
+#### Grove - DS1307 RTC (Real Time Clock) for Arduino
+
+
+
+
+
+
+ Grove - DS1307 RTC is based on the clock chip DS1307 and supports I2C communication! It uses a Lithium cell battery (CR1225). We choose to use the RTC based on DS1307 as it is low cost and also very energy efficient. It can run for years on a very small coin cell.
+
+
+
+#### Grove - High Precision RTC (Real Time Clock)
+
+
+
+
+
+
+ Grove – High Precision RTC is a more accurate real-time-clock comparing to Grove – RTC with the regular clock chip DS1307. The heart of Grove – High Precision RTC is PHILIPS PCF85063TP, which is a CMOS chip that optimized for low power consumption, the typical current can be less than 1.2uA at certain environment.
+
+
+
+### Current
+
+#### Grove - 10A DC Current Sensor (ACS725)
+
+
+
+
+
+
+ The Grove - 10A DC Current Sensor (ACS725) is a high precision DC current sensor based on ACS725. The Allegro™ ACS725 current sensor IC is an economical and precise solution DC current sensing in industrial, automotive, commercial, and communications systems.
+
+
+
+#### Grove - ±5A DC/AC Current Sensor (ACS70331)
+
+
+
+
+
+
+ The Grove - ±5A DC/AC Current Sensor (ACS70331) is a high precision DC/AC current sensor based on ACS70331. The ACS70331EESATR-005B3 is Allegro’s high sensitivity, current sensor IC for use with less than 5A current sensing applications.
+
+ Grove – MOSFET enables you to control higher voltage project, say 15VDC, with low voltage, say 5V, on microcontroller. MOSFET is also a kind of switch, but its switching frequency can reach up to 5MHz, much faster than a normal mechanical relay.
+
+ The Single Pole Double Throw SPDT relay is quite useful in certain applications because it has one common terminal and 2 contacts which are great for selecting between two options.
+
+ Grove - Screw Terminal with four 3.5mm pitch pins rated up to 6A. Terminal can accept 30 to 20AWG wire. It is most commonly used pitch screw terminal.
+
+ A general-purpose LED module in Grove form factor, available in different colors. Support adjustable LED orientation and adjustable LED brightness.
+
+ The Grove-circular LED is a circular shaped lamp circle with 24 LEDs and about 5.5 mA drive current for each channel, which could make controllable LEDs with florid effects Grove Interface.
+
+
+
+#### Grove - RGB LED Stick (10 - WS2813 Mini)
+
+
+
+
+
+
+ The Grove RGB LED Stick (10 - WS2813 Mini) is a full color LED which integrated 10 full-color RGB LEDs on this stick, with only one signal pin you can control all 10 LEDs easily.you can use this little stick to create hundreds and thousands of light effects.
+
+ Grove - LED String Light is a LED Driver.work voltage of module is 5V/3V3,But String light is working on 12V,so this module is base on AIC1896, which is a current mode step up DC/DC Converter. Grove - LED String Light is equipped a 5M RGB LED String Light,you can use it to dress Christmas tree and light you Party.
+
+ Grove - RGB LED Matrix w/Driver is based on 64 KTR-3528RGB LEDs to form an 8x8 RGB LED Matrix, which is only simple programming you can control all matrix LEDs easily. You can use this matrix LED to create hundreds and thousands of light effects and design various patterns.
+
+ LED Matrix is low cost and usually used to display simple numbers and images. The Grove - LED Matrix Driver is the I2C based product which allows you to control the LED matrix with our prepared and easy-to-use libraries, or you can create your own library to control it to satisfy your need. The 8*8 LED Matrix can be assembled and unassembled from the driver board easily, so it is convenient to change different color LED matrix display based on your need.
+
+ Grove - Red LED Matrix w/Driver is based on HT16K33. It is the combination of the 20mm 8*8 square LED Matrix - Red and the Grove - LED Matrix Driver and usually used to display simple numbers and images.
+
+ The Grove – Switch(P) is a mini SPDT slide, great for “ON/OFF” situations. It is a reliable switch of great build quality that we adopt it on many of our boards. You should stock some for your Grove prototyping system.
+
+
+
+
+#### Grove-LED Button
+
+The Grove - LED Button is composed of Grove - Yellow Button, Grove - Blue LED Button and Grove - Red LED Button. This button is stable and reliable with a 100 000 times long life. With the build-in LED, you can apply it to many interesting projects, it is really useful to use the LED to show the status of the button. We use a high-quality N-Channel MOSFET to control the LED to ensure the high swithching speed and a low consumption.
+
+
+ Grove - Dual Button includes 2 buttons, enables you to control two signal channels with one grove module. With 4 different color keycaps provided, you can freely adjust the color combination as needed.
+
+ The Grove-Mech keycap is a mechanical switch with a build-in LED. The 255 full color RGB LED makes it simple and easy to show the statues of your switch. This keycap is very reliable with 20,000,000 times press operating life.
+
+ Grove - I2C Hub (6 Port) is an I2C expansion interface board, compared with the old Grove - I2C Hub, the same size, two more connectors, almost half the price!
+
+ Grove - 8 Channel I2C Multiplexer/I2C Hub is based on TCA9548A I2C Multiplexer Chip, you can plug up to 8 same-address I2C devices to the same Grove I2C system.
+
+
+
+#### Grove - 4-Channel 16-bit ADC(ADS1115)
+
+
+
+
+
+
+ The Grove - 4 Channel 16-bit ADC (ADS1115) is a 4-channel 16-bit high-resolution, low-power ADC chip with PGA (programmable gain amplifier) function. The PGA allows it to measure input voltages from ±256 mV to ±6.144 V, thus greatly expanding its application scenarios.
+
+ Grove - Wrapper is a kind of wrapper to fix and protect Grove modules. It will save you a lot of work on aligning your modules, and it will easy for you to show your project. For example, it will simpler to take pictures for showing your product on the Internet, and it will give a clear and clean scene if you use Grove - Wrapper to demo your project. What is more, it is expandable for Lego, mechanical parts, and so on, this will introduce more flavor into your works and make your project adapt to various circumstances.
+
+
+## Co-Create Grvoe sensors with Seeed Studio Fusion
+
+Seeed Studio Fusion has launched a Grove Sensor Co-brand Campaign to help engineers turn their Grove designs into real products. Participants can have their designs manufactured and sold on Seeed Studio Bazaar (Product purchase page).
+
+
+
+
+
+
## ✨ Contributor Project
- We have a task list for updating this page, which is categorized under our [contributor project](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=30957479), as we are dedicated to enhancing the user experience and providing better support through the development of our wiki platform.
diff --git a/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-8-Channel-I2C-Multiplexer-I2C-Hub-TCA9548A.md b/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-8-Channel-I2C-Multiplexer-I2C-Hub-TCA9548A.md
index 55447b6ced91..d985c07b0da1 100755
--- a/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-8-Channel-I2C-Multiplexer-I2C-Hub-TCA9548A.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-8-Channel-I2C-Multiplexer-I2C-Hub-TCA9548A.md
@@ -54,7 +54,7 @@ Connect the I2C Hub with Seeeduino XIAO's I2C interface, and connect each I2C de
#### Software code
-```C++
+```cpp
#include "TCA9548A.h"
// if you use the software I2C to drive, you can uncommnet the define SOFTWAREWIRE which in TCA9548A.h.
diff --git a/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-Differential_Amplifier_v1.0.md b/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-Differential_Amplifier_v1.0.md
index 96f5a616ce5e..c8c7ad43ef5b 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-Differential_Amplifier_v1.0.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-Differential_Amplifier_v1.0.md
@@ -159,7 +159,7 @@ Connect the weight sensor to the amplifier as the picture depicts below.
Copy and paste the demo code below to Arduino IDE and upload it.
-```c++
+```cpp
void setup()
{
Serial.begin(9600);
diff --git a/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-RS485.md b/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-RS485.md
index 95f256e1c792..00563dd747c4 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-RS485.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Input_Output/Grove-RS485.md
@@ -92,7 +92,7 @@ The Grove - NFC supports I2C and UART, [Seeed Arduino NFC Library](https://githu
- **Step 1.** Open two Arduino IDE windows and copy these codes as below separately. One of the device is using as master device and the other one is using as slave device.
-```c++
+```cpp
/* Slave */
#include
SoftwareSerial Slave(6, 7);
@@ -117,7 +117,7 @@ void loop() {
}
```
-```c++
+```cpp
/* Master */
#include
SoftwareSerial Master(6, 7);
diff --git a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_Matrix_Driver-HT16K33.md b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_Matrix_Driver-HT16K33.md
index 7337397be3a3..2081fc76cc7a 100644
--- a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_Matrix_Driver-HT16K33.md
+++ b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_Matrix_Driver-HT16K33.md
@@ -159,7 +159,7 @@ For example, if I want to change the address to 0x73, I need to connect pad A1,A
-```C++
+```cpp
#include
@@ -222,7 +222,7 @@ Are you willing to let the LED matrix to display the emoji? Now, it is your turn
- **Step 5.** Create the new '.ino' file under the same folder with other LED Matrix examples and copy below code.
-```C++
+```cpp
#include "Grove_LED_Matrix_Driver_HT16K33.h"
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_ring.md b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_ring.md
index a05a452598f0..ef01b5a1ede7 100644
--- a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_ring.md
+++ b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-LED_ring.md
@@ -167,7 +167,7 @@ Now, we will demonstrate you how to run the code 'buttoncycler'. This is a demon
#### buttoncycler
After run this code, when you press the button it will change to a new pixel animation. Note that you need to press the button once to start the first animation!
-```C++
+```cpp
#include "Adafruit_NeoPixel.h"
@@ -344,7 +344,7 @@ uint32_t Wheel(byte WheelPos) {
**RGBW strand test**
-```C++
+```cpp
#include "Adafruit_NeoPixel.h"
#ifdef __AVR__
@@ -613,7 +613,7 @@ uint8_t blue(uint32_t c) {
**Simple**
-```C++
+```cpp
#include "Adafruit_NeoPixel.h"
#ifdef __AVR__
@@ -665,7 +665,7 @@ void loop() {
**Simple New Operator**
-```C++
+```cpp
#include "Adafruit_NeoPixel.h"
#ifdef __AVR__
@@ -723,7 +723,7 @@ void loop() {
**Strand test**
-```C++
+```cpp
#include "Adafruit_NeoPixel.h"
#ifdef __AVR__
diff --git a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Matrix_w-Driver.md b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Matrix_w-Driver.md
index 4648d9b5685d..d5ca4a15c44f 100644
--- a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Matrix_w-Driver.md
+++ b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Matrix_w-Driver.md
@@ -222,7 +222,7 @@ e.g.
in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "grove_two_rgb_led_matrix.h"
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
@@ -339,7 +339,7 @@ Let's begin DIY.
-```C++
+```cpp
#include "grove_two_rgb_led_matrix.h"
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
diff --git a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Stick-10-WS2813_Mini.md b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Stick-10-WS2813_Mini.md
index 7686770a476e..8285af517616 100644
--- a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Stick-10-WS2813_Mini.md
+++ b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-RGB_LED_Stick-10-WS2813_Mini.md
@@ -168,7 +168,7 @@ As long as not two or more adjacent LEDs are broken, the remaining LEDs will be
in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
diff --git a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-Red_LED_Matrix_w_Driver.md b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-Red_LED_Matrix_w_Driver.md
index ee29f00ec983..6ce84e11f4f6 100644
--- a/docs/Sensor/Grove/Grove_Accessories/LED/Grove-Red_LED_Matrix_w_Driver.md
+++ b/docs/Sensor/Grove/Grove_Accessories/LED/Grove-Red_LED_Matrix_w_Driver.md
@@ -158,7 +158,7 @@ For example, if I want to change the address to 0x73, I need to connect pad A1,A
-```C++
+```cpp
#include
@@ -221,7 +221,7 @@ Are you willing to let the LED matrix to display the emoji? Now, it is your turn
- **Step 5.** Create the new '.ino' file under the same folder with other LED Matrix examples and copy below code.
-```C++
+```cpp
#include "Grove_LED_Matrix_Driver_HT16K33.h"
#include
diff --git a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-5-Way_Switch.md b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-5-Way_Switch.md
index 32e23285ae61..6e09a0c6d822 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-5-Way_Switch.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-5-Way_Switch.md
@@ -130,7 +130,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Grove_Multi_Switch.h"
GroveMultiSwitch mswitch[1];
@@ -262,7 +262,7 @@ void loop()
If every thing goes well, you will get the result. When you press the **KEY E**, it will trigger **KEY E: RAW - LOW PRESSED**
:::
-```C++
+```cpp
Grove Multi Switch
***** Device probe Device BN-5E-0.1
Grove Multi Switch
diff --git a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-6-Position_DIP_Switch.md b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-6-Position_DIP_Switch.md
index 16f587a3644a..9882fa39d734 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-6-Position_DIP_Switch.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-6-Position_DIP_Switch.md
@@ -118,7 +118,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Grove_Multi_Switch.h"
GroveMultiSwitch mswitch[1];
@@ -250,7 +250,7 @@ void loop()
If every thing goes well, you will get the result. For instance, the default switch is off-High, when you turn the **Switch6** to **ON**, the output will be **POS 6: RAW - LOW ON**.
:::
-```C++
+```cpp
Grove Multi Switch
***** Device probe OK *****
Grove 6-Position DIP Switch Inserted!
diff --git a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Dual-Button.md b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Dual-Button.md
index 3ffe1d2b58ed..079a6f34357e 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Dual-Button.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Dual-Button.md
@@ -70,7 +70,7 @@ interface.
- **Step1** Copy the code below to the Arduino IDE and upload. If you do not know how to update the code, please check [How to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```c++
+```cpp
//set the corresponding notes with frequency
#define NOTE_D0 0
#define NOTE_D1 294
diff --git a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-LED_Button.md b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-LED_Button.md
index ce3c6682f151..5413a5c64648 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-LED_Button.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-LED_Button.md
@@ -135,7 +135,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 1.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```C++
+```cpp
#include "Arduino.h"
//1: toggle mode, 2: follow mode
diff --git a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Mech_Keycap.md b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Mech_Keycap.md
index 3e09bd910d95..074d16d2cdfa 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Mech_Keycap.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Switch&Button/Grove-Mech_Keycap.md
@@ -30,7 +30,7 @@ You will find that this is an interesting and stable module to make some really
20,000,000 cycles of operation shall be performed continuously at a rate of 300 cycles per minute without load.
:::
-
+
## Features
@@ -131,7 +131,7 @@ If we don't have Grove Base Shield, We also can directly connect Grove-Mech keyc
- **Step 3.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```c++
+```cpp
/**
* This is an exmaple of the Grove - Mech Keycap.
* Every press of the key will change the color the SK6805 RGB LED. The SK6805 is a NeoPixel compatible chip.
diff --git a/docs/Sensor/Grove/Grove_Accessories/Time/Grove-RTC.md b/docs/Sensor/Grove/Grove_Accessories/Time/Grove-RTC.md
index 05bcd1a15a72..18422c81e961 100644
--- a/docs/Sensor/Grove/Grove_Accessories/Time/Grove-RTC.md
+++ b/docs/Sensor/Grove/Grove_Accessories/Time/Grove-RTC.md
@@ -95,7 +95,7 @@ If we don't have the base shield, we also can directly connect the Grove-RTC to
-```c++
+```cpp
#include
#include "DS1307.h"
diff --git a/docs/Sensor/Grove/Grove_Sensors/AI-powered/Grove-Vision-AI-Module.md b/docs/Sensor/Grove/Grove_Sensors/AI-powered/Grove-Vision-AI-Module.md
index 34cbea03824d..33a4ff5e624b 100644
--- a/docs/Sensor/Grove/Grove_Sensors/AI-powered/Grove-Vision-AI-Module.md
+++ b/docs/Sensor/Grove/Grove_Sensors/AI-powered/Grove-Vision-AI-Module.md
@@ -185,7 +185,7 @@ Before we get started developing a sketch, let's look at the available functions
5. `Serial.print(data.confidence)` - The **struct** format can not be directly used to print, it should point to the specific type which is defined in the head file.
-```C
+```cpp
typedef struct
{
uint16_t x;
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis-Digital-Accelerometer-LIS3DHTR.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis-Digital-Accelerometer-LIS3DHTR.md
index 336cd5839ba5..b2b418541edc 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis-Digital-Accelerometer-LIS3DHTR.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis-Digital-Accelerometer-LIS3DHTR.md
@@ -65,7 +65,7 @@ Connect the Grove - 3-Axis Digital Accelerometer (LIS3DHTR) with Seeeduino XIAO'
#### Software Code
-```C++
+```cpp
// This example use I2C.
#include "LIS3DHTR.h"
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_20g-ADXL356B.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_20g-ADXL356B.md
index 13287e19cc3e..ebecdd612f3c 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_20g-ADXL356B.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_20g-ADXL356B.md
@@ -146,7 +146,7 @@ Product|Measurement Range|Output Port|Power Consumption
or you can just copy the code below:
-```c++
+```cpp
#include
@@ -271,7 +271,7 @@ void loop()
- **Step 5.** Now you can use this sensor, and the output will be like this:
-```C++
+```cpp
Please Place the module horizontally!
Start calibration........
Calibration OK!!
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_40g-ADXL356C.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_40g-ADXL356C.md
index 6bfb8a9e6577..f19fe9965d4e 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_40g-ADXL356C.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Analog_Accelerometer_40g-ADXL356C.md
@@ -142,7 +142,7 @@ or you can just copy the following code.
:::note
This code is written for both ADXL_356B and ADXL_356C, and if you need to implement them on 356C, pls switch the line `#define MODUEL_RANGE 20` with `#define MODUEL_RANGE 40`, or it will not work.
:::
-```c++
+```cpp
#include
@@ -267,7 +267,7 @@ void loop()
- **Step 5.** Now you can use this sensor, and the output will be like this:
-```C++
+```cpp
Please Place the module horizontally!
Start calibration........
Calibration OK!!
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_200g-ADXL372.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_200g-ADXL372.md
index 6c3460c5725b..8857223f04d5 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_200g-ADXL372.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_200g-ADXL372.md
@@ -250,7 +250,7 @@ void loop() {
- **Step 7.** Now you can use this sensor, and the output will be like this:
-```C++
+```cpp
Please Place the module horizontally!
Start calibration........
................
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_40g-ADXL357.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_40g-ADXL357.md
index 84980230e662..6caeaa7c9820 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_40g-ADXL357.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer_40g-ADXL357.md
@@ -287,7 +287,7 @@ void loop(void)
- **Step 7.** Now you can use this sensor, and the output will be like this:
-```C++
+```cpp
Start calibration.......Init OK!
Uncalibration temp = 29.20
Please Place the module horizontally!
diff --git "a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer\302\26116g_Ultra-low_Power-BMA400.md" "b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer\302\26116g_Ultra-low_Power-BMA400.md"
index 4f6ec5dd8696..34f98b0fd004 100644
--- "a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer\302\26116g_Ultra-low_Power-BMA400.md"
+++ "b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-3-Axis_Digital_Accelerometer\302\26116g_Ultra-low_Power-BMA400.md"
@@ -191,7 +191,7 @@ This is a typical Bi-directional level shifter circuit to connect two different
3. Or, you can just click the icon
in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "BMA400.h"
@@ -254,7 +254,7 @@ void loop(void)
If every thing goes well, it may show as below:
:::
-```C++
+```cpp
BMA400 Raw Data
BMA400 is connected
85.94,357.42,916.02,23
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-6-Axis_Accelerometer&Gyroscope_BMI088.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-6-Axis_Accelerometer&Gyroscope_BMI088.md
index 3c5c46242d16..cac1a65ffe8a 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-6-Axis_Accelerometer&Gyroscope_BMI088.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-6-Axis_Accelerometer&Gyroscope_BMI088.md
@@ -145,7 +145,7 @@ This is a typical Bi-directional level shifter circuit to connect two different
in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "BMI088.h"
@@ -215,7 +215,7 @@ void loop(void)
If every thing goes well, when you open the Serial Monitor, it may show as below:
:::
-```c++
+```cpp
BMI088 Raw Data
BMI088 is connected
394.41,-383.06,818.66,1.71,-4.88,-2.93,27
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_10DOF.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_10DOF.md
index 168b68145bd8..59b6dbf6c093 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_10DOF.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_10DOF.md
@@ -113,7 +113,7 @@ We will provide an example here to show you how to use this sensor.
Here is a part of the code:
-```c++
+```cpp
void setup()
{
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF-lcm20600+AK09918.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF-lcm20600+AK09918.md
index 60ffcd7057d7..a195c1502b3f 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF-lcm20600+AK09918.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF-lcm20600+AK09918.md
@@ -187,7 +187,7 @@ This is a typical Bi-directional level shifter circuit to connect two different
in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "AK09918.h"
#include "ICM20600.h"
#include
@@ -389,7 +389,7 @@ void calibrate(uint32_t timeout, int32_t *offsetx, int32_t *offsety, int32_t*off
If every thing goes well, when you open the Serial Monitor, the notice will pop up--*Start figure-8 calibration after 2 seconds.* Which means in order to calibrate this module, you should move it and draw the number 8 trajectory in the air. When the "......." appears, you can start your calibration.
:::
-```C++
+```cpp
Start figure-8 calibration after 2 seconds.
.......................................................................
A: -362, -205, 738 mg
diff --git a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF_v2.0.md b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF_v2.0.md
index 4b1e04fa17b1..4fe04fb4959c 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF_v2.0.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Accelerometer/Grove-IMU_9DOF_v2.0.md
@@ -113,7 +113,7 @@ Grove - IMU 9DOF v2.0 is an upgraded version of **Grove - IMU 9DOF v1.0** and it
Here is the main part of the code
-```c++
+```cpp
void setup() {
// join I2C bus (I2Cdev library doesn't do this automatically)
diff --git a/docs/Sensor/Grove/Grove_Sensors/Air_Quality/Grove-Laser_PM2.5_Sensor-HM3301.md b/docs/Sensor/Grove/Grove_Sensors/Air_Quality/Grove-Laser_PM2.5_Sensor-HM3301.md
index c869f60d4a82..ee0bf2ef3ca2 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Air_Quality/Grove-Laser_PM2.5_Sensor-HM3301.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Air_Quality/Grove-Laser_PM2.5_Sensor-HM3301.md
@@ -135,7 +135,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Seeed_HM330X.h"
diff --git a/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-CO2_Temperature_Humidity_Sensor-SCD30.md b/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-CO2_Temperature_Humidity_Sensor-SCD30.md
index bf5385008fab..7c75d73781bb 100644
--- a/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-CO2_Temperature_Humidity_Sensor-SCD30.md
+++ b/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-CO2_Temperature_Humidity_Sensor-SCD30.md
@@ -182,7 +182,7 @@ SenseCAP S210x series industrial sensors provide an out-of-box experience for en
c. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "SCD30.h"
#if defined(ARDUINO_ARCH_AVR)
diff --git a/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-Light-Gesture-Color-Proximity_Sensor-TMG39931.md b/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-Light-Gesture-Color-Proximity_Sensor-TMG39931.md
index da45f83c2da8..a8e3e39a9d80 100644
--- a/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-Light-Gesture-Color-Proximity_Sensor-TMG39931.md
+++ b/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove-Light-Gesture-Color-Proximity_Sensor-TMG39931.md
@@ -140,7 +140,7 @@ The gesture functionality is not supported yet, since this functionality needs a
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include
#include "Seeed_TMG3993.h"
@@ -201,7 +201,7 @@ Two thresholds need to be configured - low and high. Any proximity value which i
- **Step 3.** Restart the Arduino IDE. Open the example, the same way as in Example 1, but this time choose "Example2-ProximityInterrupt" instead of "Example1". Or copy the following code into Arduino IDE:
-```C++
+```cpp
#include
@@ -272,7 +272,7 @@ This example reads the R, G, B, C sensor values. C is defined as the non-color f
- **Step 3.** Restart the Arduino IDE. Open the example, the same way as in Example 1, but this time choose "Example3-Color-Light" instead of "Example1". Or copy the following code into Arduino IDE:
-```C++
+```cpp
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove_SEN5X_All_in_One.md b/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove_SEN5X_All_in_One.md
index 75a13eb0cea2..47dee32a6f75 100644
--- a/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove_SEN5X_All_in_One.md
+++ b/docs/Sensor/Grove/Grove_Sensors/All_in_one/Grove_SEN5X_All_in_One.md
@@ -95,7 +95,7 @@ This demo can detect 4 types of PM (particulate matter), VOC (Volatile Organi
|![enter image description here](https://files.seeedstudio.com/wiki/wiki_english/docs/images/seeeduino_v4.2.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/wiki_english/docs/images/base_shield.jpg)|
|[Get ONE Now](https://www.seeedstudio.com/Seeeduino-V4.2-p-2517.html)|[Get ONE Now](https://www.seeedstudio.com/Base-Shield-V2-p-1378.html)|[Get ONE Now](https://www.seeedstudio.com/Grove-All-in-one-Environmental-Sensor-SEN54-p-5374.html)|
-```c++
+```cpp
/*
* I2C-Generator: 0.3.0
@@ -400,7 +400,7 @@ Compile the driver:
**Step 4.** Run `./sen5x_i2c_example_usage` in the same directory you used to compile the driver.
-```c++
+```cpp
//sen5x_i2c_example_usage.c
diff --git a/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP180.md b/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP180.md
index 33a164e80364..1478488390bc 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP180.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP180.md
@@ -208,7 +208,7 @@ Platforms Supported
Here is the code
-```c++
+```cpp
#include "Barometer.h"
#include
float temperature;
diff --git a/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP280.md b/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP280.md
index 434d8814a3e7..48234d6212c7 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP280.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-Barometer_Sensor-BMP280.md
@@ -19,7 +19,7 @@ last_update:
The BMP280 is an upgraded version of BMP180 and gets dramatic improvements from BMP180. BMP280 comes with a smaller footprint, lower power consumption, lower noise measurements, higher resolutions for pressure and temperature, lower RMS noise, newly added interface SPI, more measuring modes, higher measuring rate and newly added filter against environmental interference. Since the atmosphere pressure reading is affected by altitude and temperature, we have added compensation features in the library. Hence, Grove - Barometer Sensor (BMP280) would be more reliable on providing precise temperature, atmospheric pressure values and approximate altitude data.
-[](https://www.seeedstudio.com/depot/Grove-Barometer-Sensor-BMP280-p-2652.html)
+[](https://www.seeedstudio.com/Grove-Barometer-Sensor-BMP280.html)
## Upgradable to Industrial Sensors
With the SenseCAP [S2110 controller](https://www.seeedstudio.com/SenseCAP-XIAO-LoRaWAN-Controller-p-5474.html) and [S2100 data logger](https://www.seeedstudio.com/SenseCAP-S2100-LoRaWAN-Data-Logger-p-5361.html), you can easily turn the Grove into a LoRaWAN® sensor. Seeed not only helps you with prototyping but also offers you the possibility to expand your project with the SenseCAP series of robust [industrial sensors](https://www.seeedstudio.com/catalogsearch/result/?q=sensecap&categories=SenseCAP&application=Temperature%2FHumidity~Soil~Gas~Light~Weather~Water~Automation~Positioning~Machine%20Learning~Voice%20Recognition&compatibility=SenseCAP).
@@ -164,7 +164,7 @@ Do not touch or shake or let this product in vibration when it works. This will
**Here is the code:**
-```c++
+```cpp
/*
* bmp280_example.ino
* Example sketch for BMP280
diff --git a/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-High-Precision-Barometric-Pressure-Sensor-DPS310.md b/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-High-Precision-Barometric-Pressure-Sensor-DPS310.md
index 9057b0767180..018d7f877267 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-High-Precision-Barometric-Pressure-Sensor-DPS310.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Barometer/Grove-High-Precision-Barometric-Pressure-Sensor-DPS310.md
@@ -171,7 +171,7 @@ We've already released the [Grove - Barometer Sensor (BMP280)](https://wiki.seee
- **Step 3.** Copy the code into Arduino IDE and upload.
-```C++
+```cpp
#include
Dps310 Dps310PressureSensor = Dps310();
diff --git a/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Capacitive-Fingerprint-Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Capacitive-Fingerprint-Sensor.md
index bd809c4d75ab..c798fde25d76 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Capacitive-Fingerprint-Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Capacitive-Fingerprint-Sensor.md
@@ -127,7 +127,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
2. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
/*
@@ -230,7 +230,7 @@ The library file may be updated. This code may not be applicable to the updated
If every thing goes well, when you open the Serial Monitor, it may show as below:
:::
-```c++
+```cpp
Usage:
Please put your finger on the touchpad
Repeat for 4 times or pressed continuously
diff --git a/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Finger-clip_Heart_Rate_Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Finger-clip_Heart_Rate_Sensor.md
index 3f7a23c89a52..7c3084ed99d1 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Finger-clip_Heart_Rate_Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Finger-clip_Heart_Rate_Sensor.md
@@ -66,7 +66,7 @@ Link the Sensor to I2C port of Seeeduino with Grove Cable.
Copy the following code into a new sketch of Arduino and upload the sketch, then you can get heart rate from the Serial Monitor.
It may take about a minute to get valid heart rate after you touch your finger with sensor.
-```c++
+```cpp
#include
void setup() {
Serial.begin(9600);
@@ -88,7 +88,7 @@ void loop() {
The standard I2C library for the Arduino is the Wire Library. While this library does not work when the I2C pins SDA/SCL are in use already for other purposes. So you can use the SoftwareI2C. You can connect the SCL to D2 and SDA to D3. Please download the [SoftI2CMaster library](https://github.com/felias-fogg/SoftI2CMaster) and follow [How to install arduino library](https://wiki.seeedstudio.com/How_to_install_Arduino_Library/) to setup the library. Copy the following code into a new sketch of Arduino and upload the sketch, then you can get heart rate from the Serial Monitor.
It may take about a minute to get valid heart rate after you touch your finger with sensor.
-```c++
+```cpp
#define SDA_PORT PORTD
#define SDA_PIN 3
#define SCL_PORT PORTD
@@ -116,7 +116,7 @@ void loop() {
Read a byte from I2C device 0xA0 (8 bit address), it's the heart rate.
-```c++
+```cpp
#include "mbed.h"
I2C i2c(I2C_SDA, I2C_SCL);
diff --git a/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Human_Presence_Sensor-AK9753.md b/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Human_Presence_Sensor-AK9753.md
index 8e7ed724304b..46c6e7ff386e 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Human_Presence_Sensor-AK9753.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Biometric/Grove-Human_Presence_Sensor-AK9753.md
@@ -160,7 +160,7 @@ Now let's check what will happen then:
When you upload the example1 code, Open the **Serial Monitor** of Arduino IDE by click **Tool-> Serial Monitor**. Or tap the ++ctrl+shift+m++ key at the same time. Set the baud rate to **9600**.
You can see the following results:
-```C++
+```cpp
Grove - Human Presence Sensor example
1:[432], 2:[288], 3[248], 4:[384], temp[20.87], millis[109]
1:[424], 2:[296], 3[232], 4:[400], temp[20.87], millis[215]
@@ -212,7 +212,7 @@ This example reads the data of four IR sensors and converts them into current (p
When you upload the example1 code, Open the **Serial Monitor** of Arduino IDE by click **Tool-> Serial Monitor**. Or tap the ++ctrl+shift+m++ key at the same time. Set the baud rate to **9600**.
You can see the following results:
-```c++
+```cpp
Grove - Human Presence Sensor example
o o x o millis: 16949
o x x o millis: 17050
diff --git a/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-Gas_Sensor-MQ2.md b/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-Gas_Sensor-MQ2.md
index 3c935401ca03..2e82b3a00cb5 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-Gas_Sensor-MQ2.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-Gas_Sensor-MQ2.md
@@ -145,7 +145,7 @@ there are some examples Please copy and paste code below to a new Arduino sketc
**Basic example:Gas Detection**
In this example, the sensor is connected to A0 pin. The voltage read from the sensor is displayed. This value can be used as a threshold to detect any increase/decrease in gas concentration.
-```C
+```cpp
void setup() {
Serial.begin(9600);
}
diff --git a/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-HCHO_Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-HCHO_Sensor.md
index 5fe6c5a04ca3..b00aa9b88897 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-HCHO_Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Gas/Grove-HCHO_Sensor.md
@@ -15,7 +15,7 @@ last_update:
The Grove - HCHO Sensor is a semiconductor VOC gas sensor. Its design is based on WSP2110 whose conductivity changes with the concentration of VOC gas in air. Through the circuit, the conductivity can be converted to output signal that corresponding to the gas concentration. This sensor can detect the gas whose concentration is up to 1ppm. It’s suitable for detecting formaldehyde, benzene, toluene and other volatile components. This product can be used to detect harmful gas in the home environment. Therefore, it’s a good assistant for you to improve indoor environment quality of life.
-[](https://www.seeedstudio.com/depot/grove-hcho-sensor-p-1593.html)
+[](https://www.seeedstudio.com/Grove-HCHO-Sensor.html)
Warning
diff --git a/docs/Sensor/Grove/Grove_Sensors/Grove_Sensor_Intro.md b/docs/Sensor/Grove/Grove_Sensors/Grove_Sensor_Intro.md
index 6a927cb4ccf7..7cba513abbef 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Grove_Sensor_Intro.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Grove_Sensor_Intro.md
@@ -10,188 +10,2448 @@ last_update:
author: Matthew
---
+# Grove Sensors Guide
+
+Grove Sensor is a modular sensor introduced by Seeed Studio, and it is part of the Grove system. The Grove system uses a unified interface design, making it easy for users to quickly build various electronic projects. There are many types of Grove sensors, including but not limited to temperature sensors, humidity sensors, light sensors, gas sensors, and more.
+
+
+
+
+Overall, the Grove sensor system provides a convenient solution for electronics enthusiasts and developers, greatly simplifying the use of sensors and the development of projects.
+
+## Features
+
+- Easy to Use: The unified interface design requires no soldering, allowing for quick and convenient project setup.
+- Modular Design: A wide variety of sensors are available, enabling users to combine them flexibly according to their needs.
+- High Compatibility: Supports multiple development platforms, such as Arduino, Raspberry Pi, BeagleBone, and more.
+
## Different types of Grove sensors
-- We have different kinds of Grove sensors as you can see on the left side.
-- Here is a small part of entire Grove sensor ecosystem:
-
-
- PIR Motion ,
- Mouse
-
- Vibration ,
- Collision
-
- Slide Potentiometer
+We have various types of Grove sensors, including but not limited to temperature sensors, humidity sensors, light sensors, gas sensors, and more.
+
+### Temp & Humi
+
+#### Grove - AHT20 I2C Industrial Grade Temperature&Humidity Sensor
+
+
+
+
+
+
+ AHT20 is a new generation of temperature and humidity sensor embedded with a dual-row flat and no-lead SMD package, suitable for the reflow soldering. AHT20 is equipped with a newly designed ASIC chip: an improved MEMS semiconductor capacitive humidity sensor, and a standard on-chip temperature sensor. As a matter of fact, AHT20 is fittable in most industrial scenarios.
+
+ Grove - Temperature & Humidity Sensor (SHT31) measures temperature and humidity with high accuracy ±2% RH and ±0.3°C, respectively. Based on Sensirion SHT3x-DIS sensor, it offers exceptional intelligence, reliability, and improved accuracy specifications compared to its predecessor. Enables easy integration into industrial automation, smart home systems, etc.
+
+
+
+
+#### Grove - I2C High Accuracy Temp&Humi Sensor(SHT35)
+
+
+
+
+
+
+ This Grove - SHT35 is an I2C environmental sensor for temperature and humidity measurement with high accuracy ±1.5% RH and ±0.1°C, respectively. Based on Sensirion SHT3x-DIS sensor, it offers exceptional intelligence, reliability, and improved accuracy specifications compared to its predecessor. Enables easy integration into industrial automation, smart home systems, etc.
+
+
+
+#### Grove - Temperature&Humidity Sensor Pro(DHT22)
+
+
+
+
+
+
+ Grove - DHT22 is a high-accuracy temperature and humidity sensor based on the DHT22 module (also known as AM2302 or RHT03). High-cost performance and high precision make it ideal for temperature and humidity monitoring of Arduino and Raspberry Pi, you can also use it to make a thermometer and hygrometer.
+
+
+
+#### Grove - Temperature&Humidity Sensor(DHT20)
+
+
+
+
+
+
+ The new Grove - Temperature & Humidity Sensor is based on the DHT20 sensor. The DHT20 is an upgraded version of the DHT11, compared with the previous version, the temperature and humidity measurement accuracy are higher, and the measurement range is larger. It features I2C output which means easier to use.
+
+ This is a multifunctional sensor that gives you temperature and relative humidity information at the same time. It utilizes a TH02 sensor,which is a digital I2C humidty temperature sensor. It can meet measurement needs for general purposes. It provides reliable readings when environment humidity conditions between 0-80% RH, and temperature conditions between 0-70°C, covering needs in most home and daily applications that don't contain extreme conditions.
+
+
+
+#### Grove - Temperature & Humidity Sensor
+
+
+
+
+
+
+ This Grove SHT40 digital sensor is based on Sensirion's industry-proven humidity and temperature sensors. It can provide constant temperature and humidity accuracy over an extensive measurement range And with the grove platform, you are ready to plug and play the SHT4x sensor on any microcontroller (Arduino) or microprocessor (Raspberry Pi).
+
+
+
+
+### Temperature
+
+#### Grove - 1-Wire Thermocouple Amplifier(MAX31850K)
+
+
+
+
+
+
+ The Grove - 1-Wire Thermocouple Amplifier (MAX31850K) is a thermocouple-to-digital converter with 14-bit resolution and cold-junction compensation. It can measure the values of temperature from -50°C to 600°C.
+
+ The Grove - I2C Thermocouple Amplifier (MCP9600) is a thermocouple-to-digital converter. This module is designed to be used in conjunction with a k-type thermocouple. If you need to measure a wide range of temperatures, this is a good choice.
+
+ This 2m long One Wire Temperature Sensor has a waterproof probe and long wire shape, suitable for immersive temperature detection. The chip inside this sensor is DS18B20 which is widely adopted.
+
+ Thermocouples are very sensitive, requiring a good amplifier with a cold - compensation reference. The Grove - Temperature Sensor USES a K-type thermocouple Temperature detection, with a Thermistor to detect The ambient Temperature as Temperature compensation. The detectable range of this Sensor is -50-600℃, and The accuracy is ±(2.0% + 2℃)
+
+
+
+#### Grove - Thermal Imaging Camera IR-Array MLX90641
+
+
+
+
+
+
+ This IR thermal camera carries a 16x12 array of thermal sensors (MLX90641) and it can detect the temperature of objects from far away with a centre area accuracy of ±1℃ and average accuracy of ±1.5℃. In order to obtain the thermal images easily, the I2C protocol is used to get the low-resolution images from the camera. The FOV (Field of View) of this camera is 110°x75°, and the temperature measurement range is -40℃ to 300℃.
+
+
+
+#### Grove - Digital Infrared Temperature Sensor
+
+
+
+
+
+
+ The Digital Infrared temperature sensor is a non-contact temperature measurement module which bases on MLX90615. Both the IR-sensitive thermopile detector chip and the signal conditioning chip are integrated into the same package.
+
+ This Grove-Infrared temperature sensor is a non-contact temperature measure model. The sensor is composed of 116 elements of thermocouple in series on a floating micro-membrane having an active diameter of 545μm and with a blackened surface to absorb the incident thermal infrared radiation, which induces a voltage response at output terminals.
+
+
+
+#### Grove - Infrared Temperature Sensor Array(AMG8833)
+
+
+
+
+
+
+ This is a high precision infrared array sensor based on advanced MEMS technology, which can measure temperatures ranging from 0°C to 80°C (32°F to 176°F) and provide the accuracy of +- 2.5°C (4.5°F). It can support temperature detection of the two-dimensional area of 8 × 8 (64 pixels) and a maximum 7 meters detection distance.
+
+
+
+#### Grove - I2C High Accuracy Temperature Sensor(MCP9808)
+
+
+
+
+
+
+ The Grove - I2C High Accuracy Temperature Sensor(MCP9808) is a high accuracy digital module based on MCP9808. Integrated with Microchip MCP9808 temperature sensor, it provides high accuracy & a wide range of temperature measurements from -40°C to +125°C. Unlike other sensors, you can choose the measurement resolution of this sensor, providing high flexibility for your temperature sensing applications.
+
+
+
+
+### Multiple in one
+
+#### Grove SEN5X All in One
+
+
+
+
+
+
+ The Grove-SEN54 is a comprehensive solution for measuring essential air quality parameters including particulate matter, VOC, humidity, and temperature. Its advanced algorithms make integration into HVAC and Air Purifier systems effortless and providing a hassle-free experience for end-users without the need for any coding.
+
+
+
+#### Grove - Temperature Humidity Pressure Gas Sensor(BME680)
+
+
+
+
+
+
+ Grove BME680 sensor is a 4-in-1 environmental sensor with strong sensing capability for Temperature, Humidity, Pressure, and Gas even in a small package! It will be very beneficial to apply on GPS devices or IoT projects such as your own Arduino weather station or weather forecast system.
+
+
+
+
+#### Grove - CO2 & Temperature & Humidity Sensor (SCD41)
+
+
+
+
+
+
+ The Grove - SCD41 is a compact yet powerful 3-in-1 environmental sensor for CO2, Humidity and Temperature measurement. Based on Sensirion SCD41, the photoacoustic NDIR sensor technology enables high accuracy and wide measurement range. Its miniture size, large supply voltage, high robustness and adjustable power consumption allow it to perfectly integrate into a variety of environmental monitoring applications such as Smart Ventilation System.
+
+
+
+#### Grove - CO2 & Temperature & Humidity Sensor (SCD30)
+
+
+
+
+
+
+ The Grove - SCD30 is an Arduino-compatible 3-in-1 environmental sensor for CO2, temperature, and humidity measurement. Based on Sensirion SCD30, its Non-Dispersive Infrared(NDIR) technology enables high accuracy and wide measurement range, and can measture humidity and teamperature by algorithm through modelling and compensating of external heat sources. Easily integrate into various Environmental Monitoring applications such as Smart Ventilation System.
+
+
+
+#### Grove - Light Gesture Color Proximity Sensor (TMG39931)
+
+
+
+
+
+
+ The Grove - Light & Color & proximity sensor is TMG39931 based product, which features advanced detection, Proximity detection, Digital Ambient Light Sense(ALS), Color Sense(RGBC), and optical pattern generation/transmission for broadcast. This four-in-one sensor allows you to collect the data from the ambient environment and transfers it over to the I2C bus.
+
+
+
+### AI-powered
+
+#### Grove Vision AI Module
+
+
+
+
+
+
+ Grove Vision AI Module is a thumb-sized board based on Himax HX6537-A processor and equips with an OV2640 camera, a digital microphone and a 6-axis Inertial Measurement Unit (IMU). It's fully supported by Edge Impulse which allows you seamlessly sample raw data, build models and deploy the trained ML models to the module without any programming. It is compatible with the ecology of XIAO series and Arduino, ideal for a wide range of object detection applications.
+
+ It is an MCU-based vision AI module powered by Himax WiseEye2, featuring Arm Cortex-M55 & Ethos-U55. TensorFlow and PyTorch frameworks are supported. Compatible with Arduino IDE and no code model deployment and immediate visualization of identification results with SenseCraft AI.
+
+
+
+#### Grove Smart IR Gesture Sensor (PAJ7660)
+
+
+
+
+
+
+ Grove Smart IR Gesture Sensor is an intelligent gesture recognition module equipped with an infrared camera sensor and applied AI algorithm. It can detect over 15 gestures with wide detection while supporting both IIC and SPI communication. This module also allows Grove, Type-C, and Seeed Studio XIAO direct connecting.
+
+ The Grove - Capacitive Moisture Sensor (Corrosion Resistant) is a soil moisture sensor based on capacitance changes. Compared with resistive sensors, capacitive sensors do not require direct exposure to the metal electrodes, which can significantly reduce the erosion of the electrodes.
+
+ Grove - Soil Moisture Sensor can measure soil moisture for plants. The soil moisture sensor consists of two probes that allow the current to pass through the soil and then obtain resistance values to measure soil moisture content.
+
+ The Grove - Ultrasonic Distance Sensor is an ultrasonic transducer that utilizes ultrasonic waves to measure distance. It can measure from 3cm to 350cm with an accuracy of up to 2mm. It is a perfect ultrasonic module for distance measurement, proximity sensors, and ultrasonic detectors.
+
+ The TF Mini LiDAR is based on the ToF (Time of Flight) principle and integrated with unique optical and electrical designs, so as to achieve stable, precise, high sensitivity, and high-speed distance detection.
+
+ The Grove – Doppler Radar is based on the BGT24LTR11 Silicon Germanium MMIC which is a 24GHz radar transceiver. It is driven by an XMC1302 MCU based on Arm® Cortex®-M0. This comes in a compact package and runs on very low power, providing high-precision measurements of objects' movement and speed.
+
+ The 80cm Infrared Proximity Sensor is a General Purpose Type Distance Measuring Sensor based on Sharp GP2Y0A21YK, which is a wide-angle distance measuring sensor. This proximity sensor takes a continuous distance reading and returns a corresponding analog voltage with a range of 10cm (4") to 80cm (30").
+
+
+
+#### Grove - Adjustable PIR Motion Sensor
+
+
+
+
+
+
+ Grove - Adjustable PIR Motion Sensor is an easy to use Passive Infrared motion sensor, which can detect infrared object motion up to 3 meters. Any infrared object moves in its detecting range, the sensor outputs HIGH on its SIG pin. It will be a prefect motion sensor for your Arduino / Raspberry Pi project.
+
+
+### Air Quality
+
+#### Grove - Laser PM2.5 Sensor (HM3301)
+
+
+
+
+
+
+ The Grove - Laser PM2.5 Sensor (HM3301) is a new generation of laser dust detection sensor, which is used for continuous and real-time detection of dust in the air. With its stable output, low noise, and ultra-low power consumption, it is suitable for air conditioners, intelligent air purifiers, and other air quality-related IoT projects.
+
+ Grove - Air quality sensor v1.3 is designed for indoor air quality testing. It can respond to carbon monoxide, alcohol, acetone, thinner, formaldehyde, and other slightly toxic gases. Compatible with 5V and 3.3V power supplies, it can work with Arduino and Raspberry Pi. With its long-term stability & low power consumption, it would be a perfect choice for air quality monitoring.
+
+ Grove- Formaldehyde Sensor based on Sensirion SFA30 offers excellent formaldehyde sensing performance with a uniquely low cross-sensitivity to other VOCs. On-board SHT sensor provides accurate humidity and temperature readings. Designed for easy integration into Air Conditioners, Air Purifiers and Smart Ventilation System, etc specially in new house.
+
+
+
+
+### Gas
+
+#### Grove - Gas Sensor V2(Multichannel)
+
+
+
+
+
+
+ Grove - Multichannel Gas Sensor V2 provides stable and reliable gases detecting function under the circumstances of any other four sorts of gases. It can detect a variety of gases, besides Carbon monoxide (CO), Nitrogen dioxide (NO2), Ethyl alcohol(C2H5CH), Volatile Organic Compounds (VOC), and etc.
+
+
+#### Grove - Gas Sensor module
+
+The Grove - Gas Sensor module is useful for gas leakage detecting(in home and industry). It can detect LPG, i-butane, methane, alcohol, Hydrogen, smoke and so on. Measurements can be taken as soon as possible based on its fast response time. Also, the sensitivity can be adjusted by the potentiometer.
+
+
+ This Grove O2 sensor can be used to make a simple oxygen level detector and analyzer. It can measure O2 concentration within a range of 0 to 25% Vol and the max detecting concentration is 30% Vol. This sensor will be EOL soon. Please choose the newly upgraded O2 sensor.
+
+ Grove - Oxygen Sensor (MIX8410) is an electrochemical oxygen sensor and it can be used to test the oxygen concentration in air. Under the catalysis of the electrodes, a redox reaction occurs on the working electrode and the counter electrode, thereby generating a current. The concentration of oxygen in the air is calculated by measuring this current and referring to the oxygen concentration linear characteristic graph.
+
+ GGC2330-O2 is a professional Oxygen Sensor, which is precalibrated with the built-in MCU and temperature sensor. It features low power consumption, good stability, high sensitivity, and long life.
+
+ The Grove - CO2 Sensor(MH-Z16) is an infrared CO2 detection sensor, Which features high sensitivity and high Precision Non-dispersive, measuring the range of 0-2000 parts per million (PPM).
+
+
+
+#### Grove -Smart Air Quality Sensor (SGP41)
+
+
+
+
+
+
+ This is a digital gas sensor that uses Sensirion's SGP41 with advanced CMOSens technology to measure VOCs and NOx in indoor air. It is highly stable and durable, making it suitable for continuous monitoring over extended periods. Its compact size and flexible power supply options make it easy to use in various applications such as air purifiers and demand-controlled ventilation systems.
+
+
+
+#### Grove-VOC and eCO2 Gas Sensor(SGP30)
+
+
+
+
+
+
+ The Grove-VOC and eCO2 Gas Sensor SGP30 is an air quality sensor. Based on SGP30, this module provides TVOC(Total Volatile Organic Compounds) and CO2eq output with outstanding long-term stability and low power consumption, which makes it a perfect choice for indoor air quality detection using Arduino or Raspberry Pi.
+
+ The Grove - VOC Gas Sensor (SGP40) is an innovative environmental sensing module developed for a wide array of Volatile Organic Compound (VOC) detection applications. This sensor can perform high-quality VOC measurements in real-time.
+
+ The Grove - HCHO Sensor can be used to detect VOCs, such as HCHO, toluene, benzene, and alcohol which is Built with VOC sensor WSP2110 and Up to 1ppm high sensibility.
+
+ Three independent gas channels in one package Built with ATmega168PA Detectable gases include:Carbon monoxide (CO) , Nitrogen dioxide (NO2) , Hydrogen (H2) , Ammonia (NH3) , Methane (CH4) , etc Grove compat
+
+ This Grove - Barometer (High-Accuracy) Sensor features an HP206C high-accuracy chip to detect barometric pressure, Altimeter, and temperature. It can widely measure pressure ranging from 300mbar~1200mbar, with super high accuracy of 0.01mbar(0.1m) in ultra-high resolution mode.
+
+ Grove - Temp&Humi&Barometer Sensor (BME280) is a breakout board for Bosch BMP280, a high-precision, low-power combined humidity, pressure, and temperature sensor.
+
+ Grove - BMP280 I2C and SPI Barometric and Temperature Sensor is built around Bosch BMP280. It is a low-cost and high-precision environmental sensor measures the temperature and barometer. Grove - BMP280 supports both I2C and SPI communication and we provide the BMP280 Arduino library.
+
+
+
+#### Grove - High Precision Barometric Pressure Sensor DPS310
+
+
+
+
+
+
+ Grove - DPS310 is a high precision barometric pressure sensor, it can measure air pressure change caused by height changes in the centimeter level.
+
+ Grove - Integrated Pressure Sensor Kit (MPX5700AP) is made for measuring pressure in the range of 15Kpa to 700Kpa, which is perfectly suitable for making your own Arduino air pressure measurement system.
+
+ The Grove - D7S Vibration Sensor is an earthquake detection module that provides real-time monitoring of seismic activities. It uses a high-precision accelerometer and advanced earthquake algorithms to detect and classify various types of vibrations based on their severity.
+
+
+#### Grove - 3-Axis Digital Accelerometer
+
+The Grove - 3-Axis Digital Accelerometer is a 3-axis digital accelerometer often used for orientation detection, gesture detection and motion detection, among other items.
+
+
+
+
+
Grove - 3-Axis Digital Accelerometer(±1.5g)
+
Grove - ADXL345 - 3-Axis Digital Accelerometer(±16g)
+
+
+#### Grove - 3-Axis Digital Accelerometer (LIS3DHTR)
+
+
+
+
+
+
+ Grove - 3-Axis Digital Accelerometer(LIS3DHTR) is a low-cost 3 - Axis accelerometer which is based on the LIS3DHTR chip which provides multiple ranges and interfaces selection.
+
+
+
+
+#### Grove - 3-Axis Analog Accelerometer
+
+
+
+
+
+
+ The ADXL335 is a triple axis MEMS accelerometer with a low power consumption of 150 μA in the measurement mode! This analog accelerometer is a low g accelerometer with a minimum full-scale range of ±3 g. The ADXL335 can measure the static acceleration of gravity in tilt-sensing applications, as well as dynamic acceleration resulting from motion, shock, or vibration.
+
+ The Grove - 3-Axis Digital Compass is a digital compass sensor based on Bosch BMM150. It allows measurement of the magnatic field in three perpendicular axes and the output can be read out over I2C and SPI interface, perfectly suitable for 3-Axis mobile applications.
+
+
+
+#### Grove - 3 Axis Digital Accelerometer±16g Ultra-low Power (BMA400)
+
+
+
+
+
+
+ The Grove - 3-Axis Digital Accelerometer ±16g Ultra-low Power (BMA400) sensor is a 12 bit, digital, triaxial acceleration sensor with smart on-chip motion and position-triggered interrupt features. It can detect your movement posture, such as Walking, Running, Standing still.
+
+
+
+#### Grove - 6-Axis Accelerometer&Gyroscope
+
+
+
+
+
+
+ Grove - 6-Axis Accelerometer&Gyroscope is a cost-effective Grove sensor integrated with a 3-axis digital accelerometer and a 3-axis digital gyroscope
+
+
+
+#### Grove - 6-Axis Accelerometer&Gyroscope(BMI088)
+
+
+
+
+
+
+ The Grove - 6-Axis Accelerometer&Gyroscope(BMI088) is a 6 DoF(degrees of freedom) High-performance Inertial Measurement Unit(IMU) .This sensor is based on BOSCH BMI088, which is a high-performance IMU with high vibration suppression.
+
+ The Grove - IMU 9DOF (lcm20600+AK09918) is a 9 Degrees of Freedom IMU (Inertial measurement unit) which combines gyroscope, accelerometer and electronic compass. We use two chips LCM20600+AK09918 to implement those 3 functions.
+
+ The Grove AS3935 Lightning sensor is an easy-to-use sensor built around the AS3935 IC, which can detect both cloud-to-ground and intra-cloud types of lightning for up to 30 or 40 km. It is programmable with I2C or SPI communication and supports 3.3V and 5.0V power supply.
+
+ This module is based on the I2C light-to-digital converter TSL2561 to transform light intensity into a digital signal. It has three detection modes to take your readings (infrared mode, full-spectrum, and human visible mode) and can be used to measure the change in light intensity in various light situations with many popular microcontrollers.
+
+ The Grove - Light Sensor v1.2 is an analog module and can output various electrical signals which can be converted to different ranges. It integrates LS06-S photoresistor, a high-sensitive and reliable photodiode, to detect the intensity of light in the environment. It is a perfect Arduino light sensor module for light measurement, light detection, and light-controlled switch.
+
+ Grove - Sunlight Sensor is a multi-channel digital light sensor, which has the ability to detect visible light and infrared light. It offers excellent performance under a wide dynamic range and a variety of light sources including direct sunlight. Suitable for your Raspberry Pi weather station or smart irrigation system using Arduino if you need to monitor the visible spectrum.
+
+ The Grove – UV Sensor is used for detecting the intensity of incident ultraviolet(UV) radiation. It is based on the sensor GUVA-S12D which has a wide spectral range of 240~370nm.
+
+ Grove - IR (Infrared) Receiver is used to receive infrared signals and also used for remote control detection. The IR detector has a demodulator inside that looks for modulated IR at 38 kHz. The Infrared Receiver can receive signals well within 10 meters.
+
+ The Grove-Flame Sensor can be used to detect fire sources or other light sources of the wavelength in the range of 760nm - 1100 nm. It is based on the YG1006 sensor which is a high-speed and high-sensitive NPN silicon phototransistor. Due to its black epoxy, the sensor is sensitive to infrared radiation. With an extra buzzer and LED, you can easily build a fire alarm system.
+
+ Grove - Infrared Reflective Sensor v1.2 can be used for the detection of proximity and color of objects. The reflective photosensor - RPR-220 used in this module consists of an infrared light emitting diode and a high –sensitivity phototransistor.
+
+ Grove - Finger-clip Heart Rate Sensor is based on PAH8001EI-2G. Low power consumption and flexible power saving mode make it suitable for wearable device.
+
+ EMG detector is a bridge connects human body and electrical, the sensor gathers small muscle signal then process with 2th amplify and filter, the output signal can be recognized by Arduino.
+
+ Grove - GSR Sensor stands for galvanic skin response and it is a method of measuring the electrical conductance of the skin. It can be used to reflect human emotional activity.
+
+ This Grove-Sound Sensor is based on an LM358 amplifier and an electret microphone. It detects the sound intensity of the environment and outputs an analog signal which is easily sampled and tested by a Seeeduino.
+
+ The Grove - Analog Microphone is a based on high-performance SiSonic MEMS technology, which is an ideal choice of sound sensors where excellent audio performance is required.
+
+ Grove - Recorder v2.0 is an upgraded recorder with enriched features and is able to record 8-20 seconds of audio with high-quality and natural voice.
+
+ This is a low-power pure-offline voice recognition module with less than 100ms identification time and 150 pre-programmed commands. It uses the US516P6 voice chip with a 32-bit RSIC architecture core, DSP instruction set, and FPU arithmetic unit. Ideal for various smart devices like smart home appliances, toys, and lamps that require voice control.
+
+ Grove - Rotary Angle Sensor, this potentiometer twig produces analog output between 0 and Vcc (5V DC with Seeeduino) on its D1 connector. The D2 connector is not used. The angular range is 300 degrees with a linear change in value. The resistance value is 10k ohms, perfect for Arduino use. This may also be known as a rotary angle sensor.
+
+
+
+#### Grove - Grove - Round Force Sensor FSR402
+
+
+
+
+
+
+ The Grove-Round Force Sensor(FSR402) is a force sensitive module. At the end of the sensor there is a round force sensitive resistor, the resistance of which depends on pressure applied to this resistor. Simply say, the greater the pressure, the smaller the resistance. However, the output of this sensor is not strictly linear, so we do not recommend it for accurate measurements.
+
+
+
+#### Grove - 2-Channel Inductive Sensor(LDC1612)
+
+
+
+
+
+
+ The Grove - 2-Channel Inductive Sensor is based on Texas Instruments(TI) LDC1612. The LDC1612 enables the performance and reliability benefits of inductive sensing to be realized at minimal cost and power.
+
+ The Grove - 12 Key Capacitive I2C Touch Sensor V3 (MPR121) is a multichannel proximity capacitive touch sensor. It's a 3-in-1 module with the following features: Capacitance Sensing, Touch Sensing, and Proximity Sensing.
+
+
+
+### Liquid
+
+#### Grove - ORP Sensor Kit Pro
+
+
+
+
+
+
+ Grove - ORP Sensor Kit (HR-O) is a Grove sensor that measures the ORP value, detecting the quality of the liquid. It works with a 5-meter IP68 ORP probe, offering a -2000mV to 2000mV sensing range, operating under 0-80℃, supporting Arduino programming. The sensor is environmentally friendly and RoHS certificated.
+
+ The Water Sensor module is part of the Grove system. It indicates whether the sensor is dry, damp or completely immersed in water by measuring conductivity.
+
+ The Grove Water Level Sensor is a very accurate sensor that can be helpful in water level sensing applications. It is completely waterproof and uses capacitive pads to detect water levels up to 10cm.
+
+ An Arduino-compatible TDS(Total Dissolved Solids) sensor/meter for measuring TDS levels in water to indicate the water quality. It can be implemented in fields such as homemade water filter, hydroponics, aquarium and others related to testing water quality.
+
+
+
+### Motion
+
+#### Grove - PIR Motion Sensor
+
+
+
+
+
+
+ The Grove - PIR Motion Sensor(Passive Infrared Sensor) is an easy-to-use motion sensor with Grove compatible interface. Simply connecting it to Base Shield and programming it, it can be used as a suitable motion detector for Arduino projects.
+
+ This Grove Digital PIR Sensor is the cheapest PIR sensor in the PIR families, however, it is able to give a quick response and generate a high signal from the "sig" Pin.
+
+ Grove-Piezo Vibration Sensor is suitable for measurements of flexibility, vibration, impact and touch. The module is based on PZT film sensor LDT0-028.
+
+
+#### Grove - Optical Rotary Encoder(TCUT1600X01)
+
+
+
+
+
+
+ The Grove - Optical Rotary Encoder(TCUT1600X01) is a transmissive sensor that includes an infrared emitter and two phototransistor detectors. Usually, the infrared emitter emits infrared rays, the phototransistor detectors receives the infrared rays, then the phototransistor is turned on, both of the output is High, the on-board LED indicators light up. When there is an obstacle blocking, the phototransistor can not receive the infrared rays, so the phototransistor will be turned off and both of the output will be Low, the on-board LED indicators fade away.
+
+
+#### Grove - 12-bit Magnetic Rotary Position Sensor / Encoder (AS5600)
+
+
+
+
+
+
+ Grove 12-bit Magnetic Rotary Position Sensor / Encoder (AS5600) is a programmable 12-bit high-resolution contactless magnetic rotary position sensor. Compared with the traditional potentiometer, it has significant advantages: high precision, non-contact, no rotation angle limitation.
+
+ This module is an incremental rotary encoder. It encodes the rotation signal from the axis and output the signal by electronic pulse. The Grove – Encoder is one of the Grove series and has a standard Grove interface.
+
+
+
+### Weight
+
+#### Grove - ADC for Load Cell (HX711)
+
+
+
+
+
+
+ Grove - ADC for Load Cell is born to save your time and make it easy to use load cells, based on HX711. It is a 24-bit A/D converter chip designed for high precision electronic scales.
+
+
+
+## Co-Create Grvoe sensors with Seeed Studio Fusion
+
+Seeed Studio Fusion has launched a Grove Sensor Co-brand Campaign to help engineers turn their Grove designs into real products. Participants can have their designs manufactured and sold on Seeed Studio Bazaar (Product purchase page).
+
+
+
+
+
+
+
## ✨ Contributor Project
- We have a task list for updating this page, which is categorized under our [contributor project](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=30957479), as we are dedicated to enhancing the user experience and providing better support through the development of our wiki platform.
diff --git a/docs/Sensor/Grove/Grove_Sensors/Light/Grove-I2C_UV_Sensor-VEML6070.md b/docs/Sensor/Grove/Grove_Sensors/Light/Grove-I2C_UV_Sensor-VEML6070.md
index bca0093dae8d..a2ff5274d7ae 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Light/Grove-I2C_UV_Sensor-VEML6070.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Light/Grove-I2C_UV_Sensor-VEML6070.md
@@ -124,7 +124,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Seeed_VEML6070.h"
diff --git a/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Receiver.md b/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Receiver.md
index 814ebeee3c13..2b54a6f35f78 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Receiver.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Receiver.md
@@ -99,7 +99,7 @@ Copy the following **Send Example Code** to the Arduino IDE:
**Send Example Code:**
-```c++
+```cpp
/* send.ino Example sketch for IRLib2
* Illustrates how to send a code.
*/
diff --git a/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Reflective_Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Reflective_Sensor.md
index e09d4faf6780..be18f3c26c30 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Reflective_Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Light/Grove-Infrared_Reflective_Sensor.md
@@ -143,7 +143,7 @@ Let us implement simple optical encoder to detect the speed of a motor
- **Step 3.** Open a new sketch, and copy the following code into the sketch.
-```c++
+```cpp
unsigned int counter=0;
void blink()
{
diff --git a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-EC-Sensor-kit.md b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-EC-Sensor-kit.md
index df4b5388ddea..ee76222d696e 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-EC-Sensor-kit.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-EC-Sensor-kit.md
@@ -96,7 +96,7 @@ are reach the standard.Grove EC Sensor is a analog electrical conductivity meter
- **Step 4.** Upload the demo. If you do not know how to upload the code, please check [How to upload code](https://wiki.seeedstudio.com/Upload_Code/).
#### Software Code
-```C++
+```cpp
#include "DFRobot_EC.h"
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-Pro.md b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-Pro.md
index ab0da796b1cf..72e6cd41216f 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-Pro.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-Pro.md
@@ -184,7 +184,7 @@ The probe is then fully inserted into the liquid to be measured. You can rest as
The following is a sample program for the Grove ORP Sensor.
-```c++
+```cpp
#define VOLTAGE 3.37 //vcc voltage(unit: V)
#define OFFSET 16 //UNUSED - zero drift voltage(unit: mV)
#define LED 13 //operating instructions
diff --git a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-kit.md b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-kit.md
index 3da5a86f96be..dac788964d26 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-kit.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-ORP-Sensor-kit.md
@@ -79,7 +79,7 @@ An Oxidation Reduction Potential (ORP) Sensor measures the activity of oxidizers
#### Software Code
-```C++
+```cpp
#define VOLTAGE 5.00 //system voltage
#define OFFSET 0 //zero drift voltage
#define LED 13 //operating instructions
diff --git a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-PH-Sensor-kit.md b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-PH-Sensor-kit.md
index c70058f6c375..6fedd829a340 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-PH-Sensor-kit.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-PH-Sensor-kit.md
@@ -92,7 +92,7 @@ Are you trying to find an easy to use and cost-effect PH sensor/meter? Do you wa
- **Step 4.** Upload the demo. If you do not know how to upload the code, please check [How to upload code](https://wiki.seeedstudio.com/Upload_Code/).
#### Software Code
-```C++
+```cpp
/*
# This sample code is used to test the pH meter V1.1.
# Editor : YouYou
diff --git a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-TDS-Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-TDS-Sensor.md
index 648746d5eb3a..97ed968f42b0 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-TDS-Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-TDS-Sensor.md
@@ -6,8 +6,8 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /Grove-TDS-Sensor
last_update:
- date: 1/6/2023
- author: shuxu hu
+ date: 7/12/2024
+ author: Harrison Xu
---
@@ -62,7 +62,7 @@ It supports 3.3 / 5V input voltage and 0 ~ 2.3V Output Voltage making it easy to
### Play With Arduino
-**Materials required**
+#### Materials required
| Seeeduino V4.2 | Base Shield | Grove - TDS Sensor|
@@ -82,15 +82,16 @@ It supports 3.3 / 5V input voltage and 0 ~ 2.3V Output Voltage making it easy to
+
#### Software
:::note
- If this is the first time you work with Arduino, we strongly recommend you to see [Getting Started with Arduino](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/) before the start.
+If this is the first time you work with Arduino, we strongly recommend you to see [Getting Started with Arduino](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/) before the start.
:::
- **Step 1.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```C++
+```cpp showLineNumbers
#define SERIAL Serial
#define sensorPin A0
@@ -104,7 +105,7 @@ void setup() {
void loop() {
sensorValue = analogRead(sensorPin);
Voltage = sensorValue*5/1024.0; //Convert analog reading to Voltage
- tdsValue=(133.42/Voltage*Voltage*Voltage - 255.86*Voltage*Voltage + 857.39*Voltage)*0.5; //Convert voltage value to TDS value
+ tdsValue=(133.42*Voltage*Voltage*Voltage - 255.86*Voltage*Voltage + 857.39*Voltage)*0.5; //Convert voltage value to TDS value
SERIAL.print("TDS Value = ");
SERIAL.print(tdsValue);
SERIAL.println(" ppm");
@@ -124,7 +125,7 @@ void loop() {
### Play With Raspberry Pi
-**Materials required**
+#### Materials required
| Raspberry Pi | Grove Base Hat for RasPi | Grove - TDS Sensor|
|--------------|-------------|-----------------|
@@ -137,6 +138,7 @@ void loop() {
+
- **Step 4.** Connect the Raspberry Pi to PC through USB cable.
#### Software
@@ -159,7 +161,7 @@ nano TDS.py
- **Step 4.** Copy the following code into the file:
-```py
+```py showLineNumbers
import math
import sys
import time
@@ -176,7 +178,7 @@ class GroveTDS:
value = self.adc.read(self.channel)
if value != 0:
voltage = value*5/1024.0
- tdsValue = (133.42/voltage*voltage*voltage-255.86*voltage*voltage+857.39*voltage)*0.5
+ tdsValue = (133.42*voltage*voltage*voltage-255.86*voltage*voltage+857.39*voltage)*0.5
return tdsValue
else:
return 0
@@ -207,8 +209,7 @@ if __name__ == '__main__':
python TDS.py 0
```
-!!!Success
- If everything goes well, you will be able to see the following result:
+If everything goes well, you will be able to see the following result:
```sh
pi@raspberrypi:~/grove.py/grove$ python TDS.py 0
@@ -228,7 +229,7 @@ TDS Value: 30.9311414242
## FAQ
-**Q1#** Limitations of Grove - TDS Sensor/Meter For Water Quality (Total Dissolved Solids)?
+**Q1:** Limitations of Grove - TDS Sensor/Meter For Water Quality (Total Dissolved Solids)?
**A1:** Limitations are as followed:
diff --git a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-Water-Level-Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-Water-Level-Sensor.md
index ab735e34a0d4..7caa96421724 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-Water-Level-Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Liquid/Grove-Water-Level-Sensor.md
@@ -97,7 +97,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 1.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```C++
+```cpp
#include
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
diff --git a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-12-bit-Magnetic-Rotary-Position-Sensor-AS5600.md b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-12-bit-Magnetic-Rotary-Position-Sensor-AS5600.md
index 09e36b18ff5d..f3e8acef65c9 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-12-bit-Magnetic-Rotary-Position-Sensor-AS5600.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-12-bit-Magnetic-Rotary-Position-Sensor-AS5600.md
@@ -104,7 +104,7 @@ Refer How to install library to [install library](https://wiki.seeedstudio.com/H
The readAngle Example code is as follow:
-```C++
+```cpp
#include
#include
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
diff --git a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Digital-PIR-Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Digital-PIR-Sensor.md
index 761d6f1e15b4..d84062454584 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Digital-PIR-Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Digital-PIR-Sensor.md
@@ -72,7 +72,7 @@ The Grove interface on the breadboard and on the Grove digital PIR Sensor are co
#### Softwawre
- **Step1** Copy the code below to the Arduino IDE and upload. If you do not know how to update the code, please check [How to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```c++
+```cpp
#define digital_pir_sensor 5 // connect to Pin 5
void setup()
diff --git a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Encoder.md b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Encoder.md
index cd8b59733656..8dccf31aa8f6 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Encoder.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Encoder.md
@@ -100,7 +100,7 @@ When you need to add a rotary knob to your project, for example a volume knob fo
- **Step 2.** Refer [How to install library](https://wiki.seeedstudio.com/How_to_install_Arduino_Library) to install library for Arduino.
- **Step 3.** Copy the code into Arduino IDE and upload. If you do not know how to upload the code, please check [how to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Mini_Track_Ball.md b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Mini_Track_Ball.md
index 8eabb8061d1b..29c0ad2dba30 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Mini_Track_Ball.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Mini_Track_Ball.md
@@ -93,7 +93,7 @@ Interface to control motions.
-```c++
+```cpp
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Optical_Rotary_Encoder-TCUT1600X01.md b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Optical_Rotary_Encoder-TCUT1600X01.md
index f8eecd5fc560..cf2f5d923585 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Optical_Rotary_Encoder-TCUT1600X01.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Optical_Rotary_Encoder-TCUT1600X01.md
@@ -183,7 +183,7 @@ When the library is installed you will see **INSTALLED** , click **Close** then.
in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
/* Encoder Library - Basic Example
* http://www.pjrc.com/teensy/td_libs_Encoder.html
*
@@ -228,7 +228,7 @@ void loop() {
:::success
If every thing goes well, you will get the result. When you move the obstacle from left to right, the count value will increase by 1; when you move the obstacle from right to left, the count value will be decremented by 1.
:::
-```C++
+```cpp
Basic Encoder Test:
0
1
diff --git a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Step_Counter-BMA456.md b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Step_Counter-BMA456.md
index 7c6b0b70554d..a8b515fc6ea9 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Step_Counter-BMA456.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Step_Counter-BMA456.md
@@ -166,7 +166,7 @@ This is a typical Bi-directional level shifter circuit to connect two different
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "arduino_bma456.h"
uint32_t step = 0;
@@ -204,7 +204,7 @@ void loop(void)
If every thing goes well, when you open the Serial Monitor and walk with this sensor on or move it to simulated walking posture , it may show as below:
:::
-```C++
+```cpp
BM
Step: 0
BMA456 Step Counter
diff --git a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Vibration_Sensor_SW-420.md b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Vibration_Sensor_SW-420.md
index e7d9ecfbb389..613c2ab107a3 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Vibration_Sensor_SW-420.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Motion/Grove-Vibration_Sensor_SW-420.md
@@ -189,7 +189,7 @@ Now you can set the **V+** to adjust the sensitivity, just remember: the lower t
- **Step 2.** Copy all the code below, or you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into the new sketch.
-```C++
+```cpp
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int buzzer = 3; // the number of the buzzer pin
diff --git a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Adjustable_PIR_Motion_Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Adjustable_PIR_Motion_Sensor.md
index b5f55bf3545b..27a1ae9fcb2f 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Adjustable_PIR_Motion_Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Adjustable_PIR_Motion_Sensor.md
@@ -141,7 +141,7 @@ The typical voltage of L221D is 3.3V, so we use the [XC6206P332MR](https://files
- **Step 1.** Just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
/*macro definitions of PIR motion sensor pin and LED pin*/
#define PIR_MOTION_SENSOR 2//Use pin 2 to receive the signal from the module
#define LED 4//the Grove - LED is connected to D4 of Arduino
diff --git a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Digital_Distance_Interrupter_0.5_to_5cm-GP2Y0D805Z0F.md b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Digital_Distance_Interrupter_0.5_to_5cm-GP2Y0D805Z0F.md
index 75a90ef0615e..8d0579e26051 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Digital_Distance_Interrupter_0.5_to_5cm-GP2Y0D805Z0F.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Digital_Distance_Interrupter_0.5_to_5cm-GP2Y0D805Z0F.md
@@ -97,7 +97,7 @@ GP2Y0D805Z0F is a distance measuring sensor unit, composed of an integrated comb
- **Step 1.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```c++
+```cpp
/*
*
* Copyright (c) 2018 Seeed Technology Co., Ltd.
diff --git a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Doppler-Radar.md b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Doppler-Radar.md
index 08cb5c795f14..b802e1801036 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Doppler-Radar.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Doppler-Radar.md
@@ -136,7 +136,7 @@ Doppler radar works by sending a beam of electromagnetic radiation waves from th
- **Step 4.** Upload the demo. If you do not know how to upload the code, please check [How to upload code](https://wiki.seeedstudio.com/Upload_Code/).
#### Software Code
-```C++
+```cpp
#include "GBT24LTR11.h"
#ifdef __AVR__
diff --git a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Gesture_v1.0.md b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Gesture_v1.0.md
index 12d9152d400d..2f105569c222 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Gesture_v1.0.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Gesture_v1.0.md
@@ -106,7 +106,7 @@ Software Installation.
- **Step 4.** Start the Arduino IDE, Let's try the up/down demo.
- **Step 5.** Copy below code and paste to arduino IDE.
-```c++
+```cpp
/*
The following simple demo will show you a very easy application: When you move up, the red led will be turned on, otherwise the red led will be turned off.
*/
@@ -138,7 +138,7 @@ void loop()
- **Step 8.** Let's try the 9 gestures by select **File->Example->Grove_Gesture->paj7620_9gestures**, then select Seeeduino v4 as board manager and correct COM port.
-```c++
+```cpp
#include
#include "paj7620.h"
@@ -281,7 +281,7 @@ void loop()
- **Step 9.** Click upload and open the Serial Monitor port.
- **Step 10.** This example can recognize 9 gestures and output the result, including move up, move down, move left, move right, move forward, move backward, circle-clockwise, circle-counter clockwise, and wave. Let's try and see COM port output as below.
-```c++
+```cpp
PAJ7620U2 TEST DEMO: Recognize 9 gestures.
INIT SENSOR...
Addr0 =20, Addr1 =76
@@ -1030,7 +1030,7 @@ while True:
- **Step 4.** Here is the screen output.
-```c++
+```cpp
pi@raspberrypi:~/Dexter/GrovePi/Software/Python/grove_gesture_sensor $ python3 gesture_value.py
wake-up finish.
Paj7620 initialize register finished.
diff --git a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-TF_Mini_LiDAR.md b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-TF_Mini_LiDAR.md
index 1db0a8a32170..e259babc7080 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-TF_Mini_LiDAR.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-TF_Mini_LiDAR.md
@@ -107,7 +107,7 @@ Platforms Supported
- **Step 2**. Copy the code into Arduino IDE and upload.
-```C++
+```cpp
#include "TFLidar.h"
#define USETFMINI
@@ -169,7 +169,7 @@ void loop() {
You could delete **Line 41** to **Line 43** of the demo code if only the **Distance** is required:
:::
-```C++
+```cpp
SERIAL.print("strength = ");
SERIAL.print(SeeedTFLidar.get_strength()); //output signal strength value
```
@@ -208,7 +208,7 @@ SERIAL.print(SeeedTFLidar.get_strength()); //output signal strength value
#### Software
-```C++
+```cpp
#include"seeed_line_chart.h" //include the library
#include "TFLidar.h"
#define LINE_DIS 0X00
diff --git a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Time_of_Flight_Distance_Sensor-VL53L0X.md b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Time_of_Flight_Distance_Sensor-VL53L0X.md
index 9dff01d70f8b..4ca010965eb0 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Time_of_Flight_Distance_Sensor-VL53L0X.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Time_of_Flight_Distance_Sensor-VL53L0X.md
@@ -21,7 +21,7 @@ The VL53L0X integrates a leading-edge SPAD array (Single Photon Avalanche Diodes
The VL53L0X’s 940 nm VCSEL emitter (VerticalCavity Surface-Emitting Laser), is totally invisible to the human eye, coupled with internal physical infrared filters, it enables longer ranging distances, higher immunity to ambient light, and better robustness to cover glass optical crosstalk.
-
+
## Features
diff --git a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Ultrasonic_Ranger.md b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Ultrasonic_Ranger.md
index d44a0694929e..70465543933f 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Ultrasonic_Ranger.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Proximity/Grove-Ultrasonic_Ranger.md
@@ -509,7 +509,7 @@ The distance to obstacles in front is: 2 inches
- A4: Yes, Here is the example, one sensor is connected to D2 and other to D3.
-```c++
+```cpp
#include "Ultrasonic.h"
Ultrasonic ultrasonic1(2);
diff --git a/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Capacitive_Moisture_Sensor-Corrosion-Resistant.md b/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Capacitive_Moisture_Sensor-Corrosion-Resistant.md
index a2fd44350ef0..534bdc64acb7 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Capacitive_Moisture_Sensor-Corrosion-Resistant.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Capacitive_Moisture_Sensor-Corrosion-Resistant.md
@@ -16,7 +16,7 @@ The Grove - Capacitive Moisture Sensor (Corrosion Resistant) is a soil moisture
It is important to note that this sensor can only qualitatively test the humidity of the soil and cannot measure quantitatively. Which means when the humidity of the soil rises, the value of the output decreases; conversely, when the humidity decreases, the output value becomes higher.
-
+
## Upgradable to Industrial Sensors
@@ -147,7 +147,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
**Step 1.** Copy the code below, and download it to your arduino. If you do not know how to upload the code, please check [How to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```C++
+```cpp
/*
AnalogReadSerial
@@ -182,7 +182,7 @@ void loop() {
If every thing goes well, when you open the Serial Monitor it may show as below:
:::
-```C++
+```cpp
678
663
631
diff --git a/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Moisture_Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Moisture_Sensor.md
index 016bce46f76f..a8db8c68b0f7 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Moisture_Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Soli_Humidity/Grove-Moisture_Sensor.md
@@ -112,7 +112,7 @@ If we don't have Grove Base Shield, We also can directly connect Grove-Moisture
- **Step 1.** Copy the code into Arduino IDE and upload. If you do not know how to upload the code, please check [how to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```c++
+```cpp
int sensorPin = A0;
int sensorValue = 0;
diff --git a/docs/Sensor/Grove/Grove_Sensors/Sound/Grove-Analog-Microphone.md b/docs/Sensor/Grove/Grove_Sensors/Sound/Grove-Analog-Microphone.md
index e425ea973c1f..019f309ecad2 100755
--- a/docs/Sensor/Grove/Grove_Sensors/Sound/Grove-Analog-Microphone.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Sound/Grove-Analog-Microphone.md
@@ -152,7 +152,7 @@ void loop() {
**Software**
-```C
+```cpp
#include "seeed_line_chart.h" //include the library
TFT_eSPI tft;
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-AHT20-I2C-Industrial-Grade-Temperature&Humidity-Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-AHT20-I2C-Industrial-Grade-Temperature&Humidity-Sensor.md
index 5ee1d887b8d9..1a1342516241 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-AHT20-I2C-Industrial-Grade-Temperature&Humidity-Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-AHT20-I2C-Industrial-Grade-Temperature&Humidity-Sensor.md
@@ -104,7 +104,7 @@ Please plug the USB cable,Grove-AHT20 Temperature&Humidity Sensor Interface in
#### Software Code
-```C++
+```cpp
// ARDUINO DEMO FOR GROVE-AHT20
//
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-I2C_High_Accuracy_Temp&Humi_Sensor-SHT35.md b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-I2C_High_Accuracy_Temp&Humi_Sensor-SHT35.md
index bfd80ab8ad5e..3cd08e4b4f28 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-I2C_High_Accuracy_Temp&Humi_Sensor-SHT35.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-I2C_High_Accuracy_Temp&Humi_Sensor-SHT35.md
@@ -149,7 +149,7 @@ If we don't have Grove Base Shield, We also can directly connect this module to
3. Or, you can just click the icon in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Seeed_SHT35.h"
@@ -223,7 +223,7 @@ void loop()
If every thing goes well, when you open the Serial Monitor , it may show as below:
:::
-```C++
+```cpp
serial start!!
=>
temperature =24.10
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-SHT4x.md b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-SHT4x.md
index 93587f0827b4..cca66110cd58 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-SHT4x.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-SHT4x.md
@@ -148,7 +148,7 @@ Now that we have our library installed and we understand the basic functions, le
**Step 4.** Negative to "file-->examples-->Sensirion IIC Sen4x-->exampleUsage" and open the example provided in the library. You can also copy the code below:
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TempAndHumi_Sensor-SHT31.md b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TempAndHumi_Sensor-SHT31.md
index 774b8e972a57..127bea79bf4a 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TempAndHumi_Sensor-SHT31.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TempAndHumi_Sensor-SHT31.md
@@ -131,7 +131,7 @@ SenseCAP S210x series industrial sensors provide an out-of-box experience for en
- **Step 3.** Restart the Arduino IDE. Open a new sketch, and copy the following code into the new sketch.
-```C
+```cpp
#include
#include
#include "SHT31.h"
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-Temperature-Humidity-Sensor-DH20.md b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-Temperature-Humidity-Sensor-DH20.md
index 8f69489dbfc4..b61c0869a54a 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-Temperature-Humidity-Sensor-DH20.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-Temperature-Humidity-Sensor-DH20.md
@@ -111,7 +111,7 @@ It has equipped with a fully calibrated digital I2C interface, so there are slig
Once it is all set up, we can upload the sample code to see if it works:
-```C++
+```cpp
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "Wire.h"
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TemperatureAndHumidity_Sensor-HDC1000.md b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TemperatureAndHumidity_Sensor-HDC1000.md
index 30e3a300cbc1..4031a2d014b3 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TemperatureAndHumidity_Sensor-HDC1000.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temp&Humi/Grove-TemperatureAndHumidity_Sensor-HDC1000.md
@@ -246,7 +246,7 @@ Here is how to use Grove - Temperature&Humidity Sensor (HDC1000) with Seeeduino
- **Step 3.** Restart the Arduino IDE. Open a new sketch, and copy the following code into the new sketch.
-```c++
+```cpp
/*
* HDC1000.h
* A library for HDC1000 1.0
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-1-Wire_Thermocouple_Amplifier-MAX31850K.md b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-1-Wire_Thermocouple_Amplifier-MAX31850K.md
index 975e5407559c..52b9a0e61dc8 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-1-Wire_Thermocouple_Amplifier-MAX31850K.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-1-Wire_Thermocouple_Amplifier-MAX31850K.md
@@ -179,7 +179,7 @@ This folder **\Arduino\libraries\Seeed_MAX31850K-master\examples** contains two
Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include
#include
@@ -300,7 +300,7 @@ void loop(void)
If every thing goes well, you will get the result.
:::
-```c++
+```cpp
DONE
Device Address: 3B23211800ing temperatures... 77.00
Requesting temperatures...DONE
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-High_Temperature_Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-High_Temperature_Sensor.md
index f9eaef763d12..3d6fc538c02e 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-High_Temperature_Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-High_Temperature_Sensor.md
@@ -105,7 +105,7 @@ The platforms mentioned above as supported is/are an indication of the module's
- Step 2. Refer [How to install library](https://wiki.seeedstudio.com/How_to_install_Arduino_Library) to install library for Arduino.
- Step 3. Copy the code into Arduino IDE and upload.
-```c++
+```cpp
#include "High_Temp.h"
HighTemp ht(A1, A0);
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_High_Accuracy_Temperature_Sensor-MCP9808.md b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_High_Accuracy_Temperature_Sensor-MCP9808.md
index 4dfa479208aa..6a79f14e4dda 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_High_Accuracy_Temperature_Sensor-MCP9808.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_High_Accuracy_Temperature_Sensor-MCP9808.md
@@ -87,7 +87,7 @@ we often use the hexadecimal address in the code, so let's convert the binary ad
high level, we will get 0001,1111, which is 0x1F. So the I2C address range from 0x18 to 0x1F, among them, you can choose whatever you want, just make sure you will change
the I2C address in the file **Seeed_MCP9808.h** in the **Grove_Temperature_sensor_MCP9808-master** library.
-```c++
+```cpp
#define DEFAULT_IIC_ADDR 0X18
```
@@ -207,7 +207,7 @@ This is a typical Bi-directional level shifter circuit to connect two different
The result sould be like
-```C++
+```cpp
sensor init!!
temperature value is: 29.31
temperature value is: 29.31
@@ -225,7 +225,7 @@ temperature value is: 29.25
The code in the demo **MCP9808_demo_with_limit**:
-```c++
+```cpp
#include "Seeed_MCP9808.h"
@@ -268,7 +268,7 @@ When the temperature is higher than 30℃, the **ALE Pad** output high between 28℃ and 30℃, and output low when the tempareture is higer than 30℃ or lower than 28℃.
The code should be like:
-```c++
+```cpp
sensor.set_lower_limit(SET_LOWER_LIMIT_ADDR,0x01c0);
delay(10);
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_Thermocouple_Amplifier-MCP9600.md b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_Thermocouple_Amplifier-MCP9600.md
index 0af2fc922402..e2d33640a178 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_Thermocouple_Amplifier-MCP9600.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-I2C_Thermocouple_Amplifier-MCP9600.md
@@ -169,7 +169,7 @@ If we don't have Grove Base Shield, We also can directly connect this module to
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Seeed_MCP9600.h"
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
@@ -300,7 +300,7 @@ void loop()
If every thing goes well, when you open the Serial Monitor, you will see the temperature value and the alert information.
:::
-```C++
+```cpp
serial start!!
version =4011
@@ -355,7 +355,7 @@ $$
Alert pin 1, alert pin2 and alert pin3 follow the same principle. You can change the hysteresis value and the limit by modify the line 23 and line 26.
-```C++
+```cpp
CHECK_RESULT(ret,sensor.set_alert_limit(i,sensor.covert_temp_to_reg_form(28+i)));
/*Set hysteresis.for example,set hysteresis to 2℃,when the INT limitation is 30℃,interruption will be generated when
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Infrared_Temperature_Sensor_Array-AMG8833.md b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Infrared_Temperature_Sensor_Array-AMG8833.md
index 5b94cf693d1e..c3150db15cb3 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Infrared_Temperature_Sensor_Array-AMG8833.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Infrared_Temperature_Sensor_Array-AMG8833.md
@@ -138,7 +138,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Thermal-Imaging-Camera-IR-Array.md b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Thermal-Imaging-Camera-IR-Array.md
index 370691605960..117df51331cf 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Thermal-Imaging-Camera-IR-Array.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temperature/Grove-Thermal-Imaging-Camera-IR-Array.md
@@ -89,7 +89,7 @@ If it is your first time playing Wio Terminal and not sure which interface to pl
**Software Code 1**
-```C++
+```cpp
/*
Output the temperature readings to all pixels to be read by a Processing visualizer
*/
@@ -286,7 +286,7 @@ Upload the software code 1 above into your Arduino IDE and open the **Serial Por
**Software Code 2**
-```C++
+```cpp
#include
#include "MLX90641_API.h"
#include "MLX9064X_I2C_Driver.h"
diff --git a/docs/Sensor/Grove/Grove_Sensors/Temperature/One-Wire-Temperature-Sensor-DS18B20.md b/docs/Sensor/Grove/Grove_Sensors/Temperature/One-Wire-Temperature-Sensor-DS18B20.md
index 6ff69f1defc7..ffe82636b1f1 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Temperature/One-Wire-Temperature-Sensor-DS18B20.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Temperature/One-Wire-Temperature-Sensor-DS18B20.md
@@ -108,7 +108,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
**Software Code**
-```C++
+```cpp
// Include the libraries we need
#include
#include
diff --git a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12-Channel-Capacitive-Touch-Keypad-ATtiny1616-.md b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12-Channel-Capacitive-Touch-Keypad-ATtiny1616-.md
index d47e9dc1e033..08e0f3867f1a 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12-Channel-Capacitive-Touch-Keypad-ATtiny1616-.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12-Channel-Capacitive-Touch-Keypad-ATtiny1616-.md
@@ -111,7 +111,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 2**. Then open `12_Channel_Keypad.ino`, or you can just copy the following code into a new Arduino sketch.
-```c++
+```cpp
#include "SoftwareSerial.h"
#if defined(ARDUINO_ARCH_AVR)
@@ -279,7 +279,7 @@ For more detial, please check the official [Raspberry Pi UART Config](https://ww
After the system environment is successfully configured, you can see a prompt like this:
-```C++
+```cpp
Running setup.py install for grove.py ... done
Successfully installed grove.py-0.6
#######################################################
@@ -290,7 +290,7 @@ Successfully installed grove.py-0.6
Now, tap 'ls', you can find the **grove.py** folder under the root directory.
-```c++
+```cpp
pi@raspberrypi:~ $ ls
01_HelloRPi Desktop MagPi rpi_apa102driver
01_HelloRPi.cpp Documents Music Templates
diff --git a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12_Key_Capacitive_I2C_Touch_Sensor_V2-MPR121.md b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12_Key_Capacitive_I2C_Touch_Sensor_V2-MPR121.md
index baa59903557f..809356ba2ff6 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12_Key_Capacitive_I2C_Touch_Sensor_V2-MPR121.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-12_Key_Capacitive_I2C_Touch_Sensor_V2-MPR121.md
@@ -192,7 +192,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Seeed_MPR121_driver.h"
Mpr121 mpr121;
@@ -257,7 +257,7 @@ void loop()
If everything goes well, you will get the result. When you touch the CH0 ~ CH11 pads, it will trigger **key ?pressed** and **key ?release**
:::
-```C++
+```cpp
mpr121 inmpr121 init OK!
key 11pressed
key 11release
@@ -413,7 +413,7 @@ if __name__ == '__main__':
If everything goes well, you will get the result. When you touch the CH0 ~ CH11 pads, it will trigger **channel # pressed** and **Channel # released** with corresponding pressure values.
:::
-```C++
+```cpp
>>> %Run grove_12_chan_touch_sensor_MPR121.py
Channel 8 is pressed, value is 308
Channel 8 is released, value is 0
diff --git a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-2_Channel_Inductive_Sensor-LDC1612.md b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-2_Channel_Inductive_Sensor-LDC1612.md
index 4f8d9c098e98..9e82cbb59e0b 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-2_Channel_Inductive_Sensor-LDC1612.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-2_Channel_Inductive_Sensor-LDC1612.md
@@ -132,7 +132,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
**Coin demo**
This program allows user to detect the distance from the coin to the copper trace.
-```C++
+```cpp
#include "Seeed_LDC1612.h"
@@ -230,7 +230,7 @@ The library file may be updated. This code may not be applicable to the updated
If everything goes well, you will see the following result
:::
-```C++
+```cpp
The distance between the COIN is 5~10mm
The distance between the COIN is 5~10mm
@@ -247,7 +247,7 @@ The distance between the COIN is 5~10mm
Code for basic_demo.ino
-```C++
+```cpp
#include "Seeed_LDC1612.h"
@@ -302,7 +302,7 @@ void loop()
If everything goes well, you will see the following result
:::
-```C++
+```cpp
start!
17:06:16.418 -> fsensor =3.74
@@ -327,7 +327,7 @@ You may connect coil 1 as shown below:
Code for muti_channel_demo.ino
-```C++
+```cpp
#include "Seeed_LDC1612.h"
#include "math.h"
@@ -387,7 +387,7 @@ void loop()
If everything goes well, you will see the following result
:::
-```C++
+```cpp
start!
17:04:34.063 -> fsensor =3.74
diff --git a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Capacitive_Touch_Slide_Sensor-CY8C4014LQI.md b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Capacitive_Touch_Slide_Sensor-CY8C4014LQI.md
index f8ac0113cbf8..18291a9fd612 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Capacitive_Touch_Slide_Sensor-CY8C4014LQI.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Capacitive_Touch_Slide_Sensor-CY8C4014LQI.md
@@ -149,7 +149,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
3. Or, you can just click the icon ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/copy.jpg) in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.
-```C++
+```cpp
#include "Seeed_CY8C401XX.h"
@@ -201,7 +201,7 @@ The library file may be updated. This code may not be applicable to the updated
If every thing goes well, when you open the Serial Monitor and touch the slide touch sensor, you will see the LED light up, and the Serial Monitor is shown below:
:::
-```C++
+```cpp
button value is1
button 1 is pressed
slider value is0
diff --git a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Rotary_Angle_Sensor.md b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Rotary_Angle_Sensor.md
index 40ca51358daf..e3bc789c4b2c 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Rotary_Angle_Sensor.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Rotary_Angle_Sensor.md
@@ -107,7 +107,7 @@ If we don't have Grove Base Shield, We also can directly connect Grove-Rotary An
- **Step 1.** Please copy below code to Arduio IDE and upload to arduino. If you do not know how to upload the code, please check [how to upload code](https://wiki.seeedstudio.com/Upload_Code/).
-```c++
+```cpp
/*macro definitions of Rotary angle sensor and LED pin*/
#define ROTARY_ANGLE_SENSOR A0
diff --git a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Round_Force_Sensor_FSR402.md b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Round_Force_Sensor_FSR402.md
index b9cf389be3d1..01785ceb0eb6 100644
--- a/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Round_Force_Sensor_FSR402.md
+++ b/docs/Sensor/Grove/Grove_Sensors/Touch/Grove-Round_Force_Sensor_FSR402.md
@@ -163,7 +163,7 @@ If this is the first time you work with Arduino, we strongly recommend you to se
- **Step 1.** Open the Arduino IDE and create a new file, then copy the following code into the new file.
-```C++
+```cpp
/* How to use a Force sensitive resistor to fade an LED with Arduino
More info: http://www.ardumotive.com/how-to-use-a-force-sensitive-resistor-en.html
Dev: Michalis Vasilakis // Date: 22/9/2015 // www.ardumotive.com */
diff --git a/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md b/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md
index e6ae6a97ada2..546260d030e9 100644
--- a/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md
+++ b/docs/Sensor/Grove/Grove_Sensors_Network/Grove_network_module_intro.md
@@ -10,71 +10,495 @@ last_update:
author: Matthew
---
+# Grove Network Module Guide
+
+The Grove Network Modules are modular electronic components introduced by Seeed Studio, forming part of their Grove series. The Grove series modules are designed to simplify the prototyping process, making the construction of electronic projects more intuitive and faster. The network modules primarily provide networking capabilities, allowing devices to connect to the network through wired or wireless means.
+
+
+
+Overall, Grove network modules significantly lower the barrier to electronic project development by simplifying the connection and configuration process, allowing you to focus on functionality implementation and application innovation.
+
+## Features
+
+- Modular Design: Grove modules connect through standardized interfaces (usually 4-pin connectors), making integration with various main control boards (such as Arduino, Raspberry Pi, etc.) convenient.
+
+- Plug and Play: Most Grove modules come with detailed documentation and sample code, allowing users to quickly start developing.
+
+- Diversity: The Grove series includes a variety of sensors, actuators, and communication modules, suitable for multiple application scenarios.
+
+
## Different types of Grove network modules
-- We have different kinds of Grove network modules as you can see on the left side.
-- Here is a small part of entire Grove network ecosystem:
-
-
-
-
Grove Network Modules
-
This is the introduction of Grove Sensor Network, the transmittion methods offered to sensors.
+ Grove Wio-E5 is a wireless RF module supporting LoRa® and LoRaWAN® protocols on EU868 and US915 frequencies. With onboard Grove connectors for easy plug-and-play integration, it provides your development board with powerful capabilities for ultra-long-range transmission.
+
+
+
+### Bluetooth
+
+#### Grove - BLE (dual model) v1.0
+
+
+
+
+
+
+ Grove - BLE (dual model) v1.0 uses CSR dual mode Bluetooth chip. The chip is based on ARM architecture and supports AT instructions. Users can develop flexibly according to the serial baud rate, equipment name, pairing password.
+
+ Grove - Serial Bluetooth is an easy to use module compatible with the existing Grove Base Shield, and designed for transparent wireless serial connection setup. The serial port Bluetooth module is fully qualified Bluetooth V2.0+EDR(Enhanced Data Rate) 2Mbps Modulation with complete 2.4GHz radio transceiver and baseband.Hope it will simplify your overall design/development cycle.
+
+ Grove - BLE v1 (Grove - Bluetooth Low Energy v1) uses a Low Energy Bluetooth module -- HM-11, based on TI CC2540 chip, which has AT command support. As a Grove product it's convenient to use Grove - BLE with Arduino board via Base Shield.
+
+ Grove - UART Wifi V2 is a serial transceiver module featuring the ubiquitous ESP8266 IoT SoC. With integrated TCP/IP protocol stack, this module lets your micro-controller interact with WiFi networks with only a few lines of code.You can use it for scenarios like home automation, network cameras, Wearable electronics, and similar applications.
+
+ Grove - NFC (ST25DV64) is an innovative and versatile NFC/RFID tag board based on the advanced ST25DV64K chip from STMicroelectronics. Designed for makers, DIY enthusiasts, and anyone interested in experimenting with NFC technology, the Grove - NFC (ST25DV64) offers a simple, cost-effective solution for adding NFC functionality to your projects.
+
+ Near Field Communication (NFC) is a set of short-range wireless technologies. It is behind daily applications such as access control system and mobile payment system.Grove NFC is designed to use I2C or UART communication protocols, and UART is the default mode.
+
+ Grove - NFC Tag is a highly integrated Near Field Communication Tag module,this module is I2C interface. Grove - NFC Tag attach an independent PCB antenna which can easily stretch out of any enclosure you use, leaving more room for you to design the exterior of your project.
+
+ This Grove - GPS module is a cost-efficient and field-programmable gadget armed with a SIM28 (u-blox 6 is the old version) and serial communication configuration. It can be considered an excellent choice for personal navigation projects and location services.
+
+ Grove - GPS (Air530) is a high-performance, highly integrated multi-mode statelite positioning and navigation module. It supports GPS / Beidou / Glonass / Galileo / QZSS / SBAS, which makes it suitable for GNSS positioning applications such as car navigation, smart wear and drone.
+
+
+
+
+
+### RF
+
+#### Grove - 125KHz RFID Reader
+
+
+
+
+
+
+ This Grove-125KHz RFID Reader is a module used to read uem4100 RFID card information with two output formats: Uart and Wiegand. It has a sensitivity with maximum 7cm sensing distance. There is also the electronic brick version of this module. It can help you with project like internet of thing and access control system.
+
+ This kit is used for one way wireless communication at a frequency of 315MHz and includes a transmitter module and a receiver module. The twig configuration of this kit allows for around 40 meters of transmitting distance indoors, or around 100 meters outside. The 315 MHz frequency is suitable for use without a license in the United States.
+
+ This kit is used for one way wireless communication at a frequency of 433MHz and includes a transmitter module and a receiver module. The twig configuration of this kit allows for around 40 meters of transmitting distance indoors, or around 100 meters outside.
+
+
+#### Grove - Long Range
+
+Grove is a very powerful platform developed by Seeed Studio to simplify your IoT projects.We have integrated the grove connector to most boards produced by Seeed to make them become a system. This time, we combined Grove with LoRa to provide an ultra-long-range wireless module for you.
+
+
+
+ Grove-Serial RF Pro is a low cost, high performance transparent FSK transceiver. It is flexible for the users to set the UART baud rate, frequency, output power, data rate, frequency deviation, receiving bandwidth etc parameters. It is your ideal choice for designing wireless data transmission products which can be widely used on wireless data transmission field.
+
+
+
+### Other Standard Protocol
+
+#### Grove - DMX512
+
+
+
+
+
+ The Grove – DMX512 is a adapter from Grove interface to DMX512 interface ( industry standard EIA-485 interface ). It is convenience to control stage lighting and DMX512 console for Arduino.
+
+ Grove - I2C ADC is a 12-bit precision ADC module based on ADC121C021. It helps you increase the accuracy of value collected from analog sensor by providing a constant reference voltage.
+
+
+#### Grove - I2C FM Receiver
+
+Grove - I2C FM Receiver is a wideband FM receiver module, this module is based on RDA5807M. It has a headset jack, so it can connect to earphones or audio.
+
+
+ This Grove allows you to add your own circuitry or components to your Grove system prototypes. It gives you access to all four lines from the grove connector cable – S0, S1, VCC and GND. There is also a reserved space for a normally-open button.
+
+ The Grove-RJ45 Adapter is a module which can convert a standard Grove connector to a RJ45 connector. Through two RJ45 adapter and a cable, It is able to achieve communication between Arduino and Grove module. This help solve the problem that Arduino and Grove are not convenient to connect because of the distance issue.
+
+
+
+
+
+## Co-Create Grvoe sensors with Seeed Studio Fusion
+
+Seeed Studio Fusion has launched a Grove Sensor Co-brand Campaign to help engineers turn their Grove designs into real products. Participants can have their designs manufactured and sold on Seeed Studio Bazaar (Product purchase page).
+
+
+
+
> LoRaWAN® is a mark used under license from the LoRa Alliance®.
The LoRa® Mark is a trademark of Semtech Corporation or its subsidiaries.
@@ -55,17 +71,58 @@ By connecting Grove - Wio-E5 to your development boards, your devices are able t
5. LED Indicators
-## Platform Supported
-
-| Arduino | Raspberry Pi | | | |
-|-----------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
-| | | ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/bbg_logo_n.jpg) | ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/wio_logo_n.jpg) | ![](https://files.seeedstudio.com/wiki/wiki_english/docs/images/linkit_logo_n.jpg) |
+
+
## Specification
-
+
+
+
+
+
Part List:
+
+
+
+
Grove - Wio-E5 PCBA *1
+
+
+
Grove Universal Cable*1
+
+
+
+
+
+
+
General Parameters
@@ -108,117 +165,106 @@ By connecting Grove - Wio-E5 to your development boards, your devices are able t
+
-
-
-
Part List:
-
-
-
-
Grove - Wio-E5 PCBA *1
-
-
-
Grove Universal Cable*1
-
-
-
## Application
- Works for LoRaWAN® sensor nodes and any wireless communication application
-
- IoT device testing and development
![](https://files.seeedstudio.com/products/317990687/image/application.png)
-## ✨ Contributor Project
-
-- Thanks for one of Seeed Studio's friend Andres to build the [Grove - Wio-e5 library, providing multiple examples](https://github.com/andresoliva/LoRa-E5), suitable for Arduino boards like Arduino Nano 33 BLE Sense, and more importantly [compatible with the XIAO ESP32S3 Sense](https://github.com/andresoliva/LoRa-E5).
-- This will allow the user an easy, clear and safe interaction with the SeedStudio LoRa module Grove - Wio-E5 and hopefully be used as both an educational tool for those **who are doing their first steps into LoRa** as well as **prepared for the ones looking for using this module in low-power projects**.
## Application Notes
-**1. Factroy AT Firmare**
+#### Note 1. Factroy AT Firmare
-Wio-E5 series has a built-in AT command firmware, which supports LoRaWAN® Class A/B/C protocol and a wide frequency plan: EU868/US915/AU915/AS923/KR920/IN865. With this AT command firmware, developers can easily and quickly build their prototype or application.
+Wio-E5 series has a **built-in AT command firmware**, which supports LoRaWAN® *Class A/B/C* protocol and a wide frequency plan: *EU868/US915/AU915/AS923/KR920/IN865*. With this AT command firmware, developers can easily and quickly build their prototype or application.
The AT command firmware contains a bootloader for DFU and the AT application. The "PB13/SPI_SCK/BOOT" pin is used to control Wio-E5 to stay in the bootloader or jump to the AT application. When PB13 is HIGH, the module will jump to AT application after reset, with a default baud rate of 9600. When PB13 is LOW (press the "Boot" button on Wio-E5 Dev Board or Wio-E5 mini), the module will stay in the bootloader, and keep transmitting "C" character every 1S at baud rate 115200.
-:::cautionattention
+:::caution attention
- Factory AT Firmware is programmed with RDP(Read Protection) Level 1, developers need to remove RDP first with STM32Cube Programmer. Note that regression RDP to level 0 will cause a flash memory mass to erase and the Factory AT Firmware can't be restored again.
- The "PB13/SPI_SCK/BOOT" pin on the Wio-E5 module is just a normal GPIO, not the "BOOT0" pin of the MCU. This "PB13/SPI_SCK/BOOT" pin is used in the bootloader of the Factory AT firmware, to decide to jump to APP or stay in bootloader(for DFU). The real "BOOT0" pin doesn't pinout to the module, so users need to be careful when developing the low-power applications.
:::
-**2. Clock Configuration**
+#### Note 2. Clock Configuration
2.1 HSE
- 32MHz TCXO
-
- TCXO power supply: PB0-VDD_TCXO
2.2 LSE
- 32.768KHz crystal oscillator
-**3. RF Switch**
+#### Note 3. RF Switch
**Wio-E5 module ONLY transmits through RFO_HP:**
- Receive: PA4=1, PA5=0
-
- Transmit(high output power, SMPS mode): PA4=0, PA5=1
-## Examples and Demo.
+#### Note 4. General workflow guide - Grove LoRa E5 Configuration and Usage
-1. [Grove - Wio-E5 P2P Example](https://wiki.seeedstudio.com/Grove_Wio_E5_P2P/)
-2. [Grove - Wio-E5 TTN Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_TTN_Demo/)
-3. [Grove - Wio-E5 Helium Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_Helium_Demo/)
-4. [Grove - Wio-E5 Used with Arduino Uno R4 Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_SenseCAP_Cloud_Demo/)
-5. [Grove - Wio-E5 Used with XIAO ESP32S3 Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_SenseCAP_XIAO_ESP32S3/)
-
-## Resources
+Grove LoRa E5 comes with built-in LoRaWAN firmware that provides an AT server (check the [LoRa-E5 AT Command Specification](https://files.seeedstudio.com/products/317990687/res/LoRa-E5%20AT%20Command%20Specification_V1.0%20.pdf)).
-Datasheet:
+Like any non-hardcoded device, you can define every EUI and API key as needed. Refer to this workflow for more details: [SenseCAP Indicator Application LoRaWAN](https://wiki.seeedstudio.com/SenseCAP_Indicator_Application_LoRaWAN/#HEAD_register_device).
--
+1. Register the device on the LoRaWAN Network Server to get credentials: EUI and key.
+2. Configure your LoRa E5 device to set the EUI and other parameters.
+3. Enjoy it: send and receive messages. Note: You must be covered by an accessible LoRaWAN Gateway.
--
+For your Arduino project, we recommend this library(repository) to configure your device: [andresoliva/LoRa-E5](https://github.com/andresoliva/LoRa-E5).
--
+1. [Grove - Wio-E5 P2P Example](https://wiki.seeedstudio.com/Grove_Wio_E5_P2P/) Using Pure UART function to communicate between two wio-e5 devices
+2. [Grove - Wio-E5 TTN Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_TTN_Demo/) Access TTN LoRaWAN network via Wio-E5
+3. [Grove - Wio-E5 Helium Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_Helium_Demo/) Connecting to the Helium IoT network using the Grove - Wio-E5 module and Seeeduino XIAO module
+4. [Grove - Wio-E5 Used with Arduino Uno R4 Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_SenseCAP_Cloud_Demo/)
+5. [Grove - Wio-E5 Used with XIAO ESP32S3 Demo](https://wiki.seeedstudio.com/Grove_Wio_E5_SenseCAP_XIAO_ESP32S3/)
+6. [Using Wio-E5 and XIAO ESP32S3 on PlatformIO(Arduino) to access LoRaWAN network](/platformio_wio_e5/) A practical guide. It details the integration of Wio-E5 with Arduino-compatible boards using PlatformIO for efficient LoRaWAN connectivity.
-Certifications:
+## Resources
--
+- Thanks for one of Seeed Studio's friend Andres to build the [Grove - Wio-e5 library, providing multiple examples](https://github.com/andresoliva/LoRa-E5), suitable for Arduino boards like Arduino Nano 33 BLE Sense, and more importantly [compatible with the XIAO ESP32S3 Sense](https://github.com/andresoliva/LoRa-E5).
+- This will allow the user an easy, clear and safe interaction with the SeedStudio LoRa module Grove - Wio-E5 and hopefully be used as both an educational tool for those **who are doing their first steps into LoRa** as well as **prepared for the ones looking for using this module in low-power projects**.
## Tech Support & Product Discussion
-
Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
diff --git a/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver.md b/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver.md
index 6add41f3e822..aca058209d99 100644
--- a/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver.md
+++ b/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver.md
@@ -121,7 +121,7 @@ Grove - I2C FM Receiver v1.1 | Change some components to make the board more st
- **Step 3.** Copy the following code into you Arduino IDE, then save and compile.
-```c++
+```cpp
/*
* I2C_FM.ino
diff --git a/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver_v1.1.md b/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver_v1.1.md
index c2e0a83aff45..896272c632a7 100644
--- a/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver_v1.1.md
+++ b/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-I2C_FM_Receiver_v1.1.md
@@ -126,7 +126,7 @@ Grove - I2C FM Receiver v1.1 | Change some components to make the board more st
- **Step 3.** Copy the following code into you Arduino IDE, then save and compile.
-```c++
+```cpp
/*
* I2C_FM.ino
diff --git a/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-Protoshield.md b/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-Protoshield.md
index 5324cc7a5bc5..76567bc70e3d 100644
--- a/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-Protoshield.md
+++ b/docs/Sensor/Grove/Grove_Sensors_Network/Standard_Protocol/Grove-Protoshield.md
@@ -1,5 +1,5 @@
---
-title: Grove - Protoshield.md
+title: Grove - Protoshield
nointro:
keywords:
- docs
diff --git a/docs/Sensor/ReSpeaker_Lite/Application/reSpeaker_ha.md b/docs/Sensor/ReSpeaker_Lite/Application/respeaker_lite_ha.md
similarity index 70%
rename from docs/Sensor/ReSpeaker_Lite/Application/reSpeaker_ha.md
rename to docs/Sensor/ReSpeaker_Lite/Application/respeaker_lite_ha.md
index d59ab8106547..fb7892ae4cb5 100644
--- a/docs/Sensor/ReSpeaker_Lite/Application/reSpeaker_ha.md
+++ b/docs/Sensor/ReSpeaker_Lite/Application/respeaker_lite_ha.md
@@ -1,21 +1,35 @@
---
-description: Voice Assistant System with ReSpeaker Lite and XIAO ESP32S3
-title: Voice Assistant System with ReSpeaker Lite and XIAO ESP32S3
+description: Voice Assistant System for Home Assitant
+title: Voice Assistant System for Home Assitant
keywords:
- ESP32S3
- XIAO
- reSpeaker
- Home Assistant
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /reSpeaker_v3_HA
+slug: /respeaker_lite_ha
last_update:
date: 4/2/2024
author: Jessie
---
Say 'hello' to effortless control and 'goodbye' to tapping on screens with our voice assistant system.
-Picture this: you're cozied up on your couch, and with just a simple shout-out to the [ReSpeaker Lite](https://www.seeedstudio.com/XIAO-ESP32S3-p-5627.html), you can switch up the lights, crank up the tunes, or even ask about the weather – all without lifting a finger. Thanks to a nifty little [Seeed XIAO ESP32S3](https://www.seeedstudio.com/XIAO-ESP32S3-p-5627.html) chip, you've got a mini-but-mighty brain that hooks up your voice to Home Assistant, making your smart home smarter and your life a whole lot easier. So, if you're ready to make your home listen and respond to your voice as if it's just another member of the family, let's get started on this voice-activated adventure!
+Picture this: you're cozied up on your couch, and with just a simple shout-out to the ReSpeaker Lite, you can switch up the lights, crank up the tunes, or even ask about the weather – all without lifting a finger. Thanks to a nifty little [Seeed XIAO ESP32S3](https://www.seeedstudio.com/XIAO-ESP32S3-p-5627.html) chip, you've got a mini-but-mighty brain that hooks up your voice to Home Assistant, making your smart home smarter and your life a whole lot easier.
+
+This chapter we will use the [ReSpeaker Lite Voice Assistant Kit](https://www.seeedstudio.com/ReSpeaker-Lite-Voice-Assistant-Kit-p-5929.html) to connect the Sonoff smart switch to realize voice control of the light switch.
+
+
+
+
+
+
+## Hardware Required
+
+
+* ReSpeaker Lite Voice Assistant Kit
+* [Home Assistant Device](https://wiki.seeedstudio.com/home_assistant_topic/)
+* [Sonoff BASICR2](https://sonoff.tech/product/diy-smart-switches/basicr2/)
## Getting Started
@@ -35,9 +49,11 @@ Go to [Settings > Add-ons](https://my.home-assistant.io/redirect/supervisor).
-Under the Official `add-ons` section, you will find the `ESPHome`, `Whisper`, `Piper`, `openWakeWord` add-on, and click `Install`.
-
-
+Under the Official `add-ons` section, search and install the following add-ons:
+* `ESPHome`
+* `Whisper`
+* `Piper`
+* `openWakeWord`
Enable `Start on boot` and `Watchdog`, and click `Start`.
@@ -63,32 +79,85 @@ Click `CONFIGURE` and `SUBMIT`.
-
-
+There should be 3 entities in your `Wyoming Protocol`.
-### Add Seeed Studio XIAO ESP32S3 to ESPHome
+### Add your smart device
+
+Here we use [BASICR2](https://sonoff.tech/product/diy-smart-switches/basicr2/) as a reference example.
+
+Setup the device according to the manual.
+
+Search and install `Sonoff LAN` in `HACS`.
+
+
+Navigate to `Settings` -> `Devices & services`, click `ADD INTEGRATION`, add `Sonoff`.
+
+
+
+Enter your `eWeLink` account credentials.
+
+
+
+When it connected, you will see an entity.
+
+
+
+
+### Add Voice Asssitant
+
+Navigate to `Settings` -> `Voice Assistant`.
+
+
+
+
+Enter a name and select:
+
+**Speech to text**: `Whisper`
+
+**Text to speech**: `Piper`
+
+**Wake word engine**: `openwakeword`
+
+
+
+
+Choose a wakeword you preferred.
+
+
+
+
+
+
+### Add XIAO ESP32S3 to ESPHome
-* Step 1: Navigate to `ESPHome`, and click `+ NEW DEVICE`.
+Navigate to `ESPHome`, and click `+ NEW DEVICE`.
-* Step 2. Enter a Name for your device, then click `NEXT`.
+Enter a Name for your device, then click `NEXT`.
-* Step 4. Select `ESP32-S3`.
+Select `ESP32-S3`.
-* Step 5. Click `SKIP`, we will configure this file manually.
-
+Click `SKIP`, we will configure this file manually.
+
-* Step 6. Click `EDIT` and copy the following code:
+Click `EDIT` and copy the following code:
+Remember to replace the Wi-Fi info:
+```
+wifi:
+ ssid: "Wi-Fi name"
+ password: "Wi-Fi password"
+```
+
.yaml
@@ -240,25 +309,6 @@ light:
min_brightness: 50%
max_brightness: 100%
-# light:
-# - platform: monochromatic
-# id: led
-# name: "Desk Lamp"
-# output: light_output
-# effects:
-# - pulse:
-# name: "Slow Breathing Light"
-# transition_length: 5s # 缓慢呼吸灯,渐变时间较长
-# - pulse:
-# name: "Fast Breathing Light"
-# transition_length: 1s # 快速呼吸灯,渐变时间较短
-# - pulse:
-# name: "Fast Pulse"
-# transition_length: 0.5s
-# update_interval: 0.5s
-# min_brightness: 0%
-# max_brightness: 100%
-
output:
- platform: ledc
id: light_output
@@ -316,24 +366,23 @@ switch:
-* Step 7: Click `SAVE` and then `INSTALL`.
+Click `SAVE` and then `INSTALL`.
-
-* Step 8: Choose `Manual Download` -> `Modern-format`.
+Choose `Manual Download` -> `Modern-format`.
-* Step 9: Connect the XIAO ESP32S3 to your PC via a USB Type-C cable.
+Connect the XIAO ESP32S3 to your PC via a USB Type-C cable.
-* Step 10: Navigate to [Web-ESPHome](https://web.esphome.io/), click `CONNECT`, then choose the port and connect it.
+Navigate to [Web-ESPHome](https://web.esphome.io/), click `CONNECT`, then choose the port and connect it.
-* Step 11: Select the `.bin` file we just downloaded, and click `INSTALL`.
+Select the `.bin` file we just downloaded, and click `INSTALL`.
@@ -342,33 +391,22 @@ Wait for a few minutes for the installation. After the installation is successfu
+Navigate to `Settings` and select `Devices & Services`.
+
-### Add Voice Asssitant
+You will see `ESPHome` as a discovered integration. Click `CONFIGURE`.
-Navigate to `Settings` -> `Voice Assistant`.
-
-
-
-
-Enter a name and select:
-
-**Speech to text**: `Whisper`
-
-**Text to speech**: `Piper`
+
-**Wake word engine**: `openwakeword`
-
+Click `SUBMIT`.
+
-Choose a wakeword you preferred.
+
-
-
-
-
-
+Now you are all set, try waking it up with `hey jarvis` and talking to it!
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/i2s_rgb.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_i2s_rgb.md
similarity index 99%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/i2s_rgb.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_i2s_rgb.md
index 0af99749eb01..0135c30a388c 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/i2s_rgb.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_i2s_rgb.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /reSpeaker_i2s_rgb
+slug: /respeaker_i2s_rgb
last_update:
date: 7/1/2024
author: Jessie
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/i2s_test.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_i2s_test.md
similarity index 94%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/i2s_test.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_i2s_test.md
index 2fbb9e4fcc3b..bfd06188acf9 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/i2s_test.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_i2s_test.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /reSpeaker_i2s_test
+slug: /respeaker_i2s_test
last_update:
date: 7/1/2024
author: Jessie
@@ -19,9 +19,9 @@ This project is a test sketch for verifying the functionality of the I2S interfa
### Functionality
-The sketch starts by initializing the serial communication and configuring the I2S pins, it generates a square wave audio signal based on the specified frequency and amplitude. The generated audio samples are written to the I2S interface using the I2S.write() function.
+The sketch starts by initializing the serial communication and configuring the I2S pins, it generates a square wave audio signal based on the specified frequency and amplitude. The generated audio samples are written to the I2S interface using the `I2S.write()` function.
-The sketch then reads back the samples from the microphone array through the I2S interface using the I2S.read() function and counts the number of non-zero samples received.
+The sketch then reads back the samples from the microphone array through the I2S interface using the `I2S.read()` function and counts the number of non-zero samples received.
### Code
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/player_spiffs.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_player_spiffs.md
similarity index 98%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/player_spiffs.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_player_spiffs.md
index d07409b3a7e0..ea81608b0ade 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/player_spiffs.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_player_spiffs.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /player_spiffs
+slug: /respeaker_player_spiffs
last_update:
date: 7/1/2024
author: Jessie
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_record_and_play.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_record_and_play.md
new file mode 100644
index 000000000000..184d59a45622
--- /dev/null
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_record_and_play.md
@@ -0,0 +1,104 @@
+---
+description: Recording and playback
+title: Recording and playback
+keywords:
+- ESP32S3
+- XIAO
+- ReSpeaker
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /respeaker_record_and_play
+last_update:
+ date: 7/1/2024
+ author: Jessie
+---
+
+
+### Functionality
+
+
+
+This project demonstrates a basic loopback mechanism using the I2S interface, to test the reading and writing functions of I2S audio data. By switching I2S mode, the audio data is read from the microphone and then written to the speaker.
+
+
+
+### Code
+
+```cpp
+
+#include "AudioTools.h"
+
+AudioInfo info(16000, 2, 32);
+// SineWaveGenerator sineWave(32000); // subclass of SoundGenerator with max amplitude of 32000
+// GeneratedSoundStream sound(sineWave); // Stream generated from sine wave
+I2SStream out;
+I2SConfig config;
+// StreamCopy copier(out, sound); // copies sound into i2s
+
+uint8_t buffer[128000];
+size_t bytes_read = 0;
+size_t bytes_write = 0;
+
+// Arduino Setup
+void setup(void) {
+ // Open Serial
+ Serial.begin(115200);
+ while(!Serial);
+ AudioLogger::instance().begin(Serial, AudioLogger::Info);
+
+ // start I2S
+ Serial.println("starting I2S...");
+ config = out.defaultConfig(TX_MODE);
+ config.copyFrom(info);
+ // Custom I2S output pins
+ config.pin_bck = 8;
+ config.pin_ws = 7;
+ config.pin_data = 43;
+ config.pin_data_rx = 44;
+ config.is_master = false;
+ out.begin(config);
+
+ // Setup sine wave
+ // sineWave.begin(info, N_B4);
+ Serial.println("started...");
+}
+
+// Arduino loop - copy sound to out
+void loop() {
+ // copier.copy();
+ out.end();
+ config.rx_tx_mode = RX_MODE;
+ out.begin(config);
+ bytes_read = out.readBytes(buffer, 128000);
+ out.end();
+ config.rx_tx_mode = TX_MODE;
+ out.begin(config);
+ bytes_write= out.write(buffer, 128000);
+}
+```
+
+
+### Customization
+
+
+**Modifying the Read and Write Duration**
+
+You can control the duration of audio read and write operations by adjusting the size of the buffer and the number of bytes in out.readBytes and out.write.
+
+**Example**: 0.5 seconds of audio:
+
+```cpp
+uint8_t buffer[64000];
+bytes_read = out.readBytes(buffer, 64000);
+bytes_write = out.write(buffer, 64000);
+```
+
+
+:::tip
+Make sure you have enough dynamic memory to accommodate the buffer, especially when reading longer durations of audio data. If your ESP32-S3 device has insufficient memory, you may need to optimize memory usage or consider alternative solutions.
+:::
+
+
+
+
+
+
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_generator.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_generator.md
similarity index 98%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_generator.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_generator.md
index 5df933b435b6..2f0760392e40 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_generator.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_generator.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /streams_generator
+slug: /respeaker_streams_generator
last_update:
date: 7/1/2024
author: Jessie
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_i2s_tflite.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_i2s_tflite.md
similarity index 98%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_i2s_tflite.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_i2s_tflite.md
index 5944bcc45b97..76a2bbe00cb9 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_i2s_tflite.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_i2s_tflite.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /streams_i2s_tflite
+slug: /respeaker_streams_i2s_tflite
last_update:
date: 7/1/2024
author: Jessie
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_memory.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_memory.md
similarity index 98%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_memory.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_memory.md
index cb058d68b6db..3058a3e966dc 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_memory.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_memory.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /streams_memory
+slug: /respeaker_streams_memory
last_update:
date: 7/1/2024
author: Jessie
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_mqtt.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_mqtt.md
similarity index 99%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_mqtt.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_mqtt.md
index e6322c919f4e..3f2824ab990d 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_mqtt.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_mqtt.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /steams_mqtt
+slug: /respeaker_steams_mqtt
last_update:
date: 7/1/2024
author: Jessie
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_print.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_print.md
similarity index 95%
rename from docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_print.md
rename to docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_print.md
index 021e8541f325..3cd47c378213 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/streams_print.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/respeaker_streams_print.md
@@ -6,7 +6,7 @@ keywords:
- XIAO
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /streams_print
+slug: /respeaker_streams_print
last_update:
date: 7/1/2024
author: Jessie
@@ -48,7 +48,7 @@ void setup(void) {
auto cfg = i2sStream.defaultConfig(RX_MODE);
cfg.copyFrom(info);
cfg.i2s_format = I2S_STD_FORMAT; // or try with I2S_LSB_FORMAT
- cfg.is_master = true; // this module nees a master clock if the ESP32 is master
+ cfg.is_master = false; // this module nees a master clock if the ESP32 is master
cfg.use_apll = false; // try with yes
i2sStream.begin(cfg);
diff --git a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/xiao_respeaker.md b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/xiao_respeaker.md
index 39d3206232f4..0b519bfa0164 100644
--- a/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/xiao_respeaker.md
+++ b/docs/Sensor/ReSpeaker_Lite/XIAO_ESP32_S3/xiao_respeaker.md
@@ -1,6 +1,6 @@
---
description: Integrating ReSpeaker Lite with XIAO ESP32S3
-title: Integrated with XIAO ESP32S3
+title: ReSpeaker Lite Voice Assistant Kit
keywords:
- ESP32S3
- XIAO
@@ -12,13 +12,61 @@ last_update:
author: Jessie
---
-[Seeed Studio XIAO ESP32S3](https://www.seeedstudio.com/XIAO-ESP32S3-p-5627.html) leverages 240MHz Xtensa 32-bit LX7 dual-core processor, supporting both WiFi and BLE 5.0 wireless connectivities, a 2.4GHz Rod antenna, allows for deep sleep mode with power consumption as low as 14μA while supporting lithium battery charging management.
-This chapter will guide users on how to play ReSpeaker Lite with XIAO ESP32S3.
+
+Powered by XMOS XU316 AI Sound and Audio chipset, it is a high-performance open source voice assistant development kit. The kit integrates the ReSpeaker Lite dual-microphone array and a powerful [XIAO ESP32S3](https://www.seeedstudio.com/XIAO-ESP32S3-p-5627.html) processor, offering exceptional voice recognition, noise reduction, and voice processing capabilities. This kit provides firmware integration with Home Assistant via ESPHome, making it ideal for smart voice assistants and home automation applications.
+
+
+
+### Features
+
+* **Pre-Soldered ESP32 Controller**: A powerful XIAO ESP32S3 is pre-soldered via the I2S pins, offering a solderless experience for further development and integration.
+* **Dual Microphone Array for Far-Field Voice Capture**: The 2 high performance digital microphones capture and extract far-field speech and voice (up to 3 meters) even in noisy environments as it cancells point noise using two microphone input.
+* **Onboard AI NLU Algorithms**: Powered by XMOS XU-316 AI sound and audio chip, the kit includes Natural Language Understanding algorithms for Interference Cancellation (IC), Acoustic Echo Cancellation, Noise Suppression, and Automatic Gain Control (AGC), enabling high quality voice capture.
+* **Embracing Open Source**: As an open source hardware, it's compatible with Arduino, PlatformIO, MicroPython, CircuitPython for furthur developement.
+* **Compatible with Popular Voice Assistants**: This kit allows you to build your own natural language processor and connect it to Home Assitant via ESPHome, Amazon Alexa Voice Service, Google Assistant, or Cloud Speech-to-Text service, enabling you to ask questions and issue voice commands to your programs.
+* **Onboard RGB LED**: The kit features a programmable WS2812 RGB LED, supporting custom effects and offering a visual interface for your applications.
+
+
+### Specification
+
+|**Dual Microphone Array**|Provides high-quality audio input.|
+| :- | :- |
+|**Power Indicator Light**|Illuminates when powered on.|
+|**RGB Light**|Programmable WS2812, provides visual feedback.|
+|**Mute Indicator Light**|Lights up red when the mute button is pressed.|
+|**USR Button**|User-defined button.|
+|**Mute Button**|Mutes audio input when pressed.|
+|[**XIAO ESP32S3**](https://www.seeedstudio.com/XIAO-ESP32S3-p-5627.html)|For further development and integration.|
+|**XU316 Core Processor**|Responsible for audio processing and transmission.|
+|**External Power Supply Solder Pad**|Supports external 5V power supply.|
+|**USB Type-C Port**|Used for power and data transmission.|
+|**Speaker Connector**|For audio output. Supports 5W amplifier speakers.|
+|**3.5mm Headphone jack**|Output audio, We can plug active speakers or Headphones into this port.|
+|**External power pad 1** |Unused IO pins on the XU316.|
+|**External power pad 2**|Unused IO pins on the XIAO ESP32.|
+|**JTAG**|For debugging and programming the XU316.|
+
+
+
+### Hardware Overview
+
+
+
+
+
+### Hardware Flowchart
+
+
+
### Flash the I2S firmware
diff --git a/docs/Sensor/ReSpeaker_Lite/reSpeaker_lite_introduction.md b/docs/Sensor/ReSpeaker_Lite/reSpeaker_lite_introduction.md
index ac7f7385984c..a61f41ee3d83 100644
--- a/docs/Sensor/ReSpeaker_Lite/reSpeaker_lite_introduction.md
+++ b/docs/Sensor/ReSpeaker_Lite/reSpeaker_lite_introduction.md
@@ -4,7 +4,7 @@ title: Getting Started with ReSpeaker Lite
keywords:
- ReSpeaker
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
-slug: /reSpeaker_lite_introduction
+slug: /reSpeaker_usb_v3
last_update:
date: 6/28/2024
author: Jessie
@@ -14,38 +14,81 @@ last_update:
-ReSpeaker Lite is a plug-and-play modular voice interface to hack things around you. Let you interact with your home appliances, your plant, your office, your internet-equipped devices, or any other things in your daily life, all by your voice. The ReSpeaker project provides hardware components and software libraries to build voice-enabled device.
-## Features
+
+
+
-* **USB Plug-and-Play Convenience**: Support UAC 2.0
+Powered by XMOS XU316 AI Sound and Audio chipset, this dev board excels in audio processing with its integrated dual microphone array, ideal for speech recognition and voice control. Featuring advanced onboard NLU algorithms, the XU316 chip provides interference cancellation, echo cancellation, and noise suppression. It supports I2S and USB connections and is compatible with Seeed Studio XIAO ESP32S3 (Sense), Adafruit QT Py, Raspberry Pi, and PC.
-* **Audio Versatility**: Supports both 5W speaker and 3.5mm audio jack
-* **Intuitive Privacy Controls**: Take control of your privacy with the accessible MUTE and USER buttons
-* **Smart Home Ready**: Fully compatible with Home Assistant through the XIAO controller
+## Features
-* **Built-in audio processing algorithms**:
- Speech algorithms and features
- Voice Activity Detection
- Noise Suppression
- De-reverberation
- Acoustic Echo Cancellation
+* **Dual Microphone Array for Far-Field Voice Capture**: The 2 high performance digital microphones capture and extract far-field speech and voice (up to 3 meters) even in noisy environments as it cancels point noise using two microphone input.
+* **Onboard AI NLU Algorithms**: Powered by XMOS XU-316 AI sound and audio chip, the kit includes Natural Language Understanding algorithms for Interference Cancellation (IC) , Acoustic Echo Cancellation, Noise Suppression, Voice-to-Noise Ratio (VNR), and Automatic Gain Control (AGC), enabling high quality voice capture.
+* **Embracing Open Source**:This board is compatible with popular hardware platforms (XIAO ESP32S3 (Sense), Adafruit QT Py) via I2S, and compatible with Raspberry Pi, PC via USB (Audio Class 2.0 (UAC2)).
+* **Onboard RGB LED**: the board features a programmable WS2812 RGB LED, supporting custom effects and offering a visual interface for your applications.
+* **External Power Supply Support**: this board supports external 5V power supply, which can be flexibly applied in different scenarios.
+* **DFU for Custom Development**: the board supports custom firmware update via DFU-Util.
## Specification
+|**Core Chip**|XMOS XU316|
+| :- | :- |
+|**Digital Microphones**|High-Performance Digital Microphones \* 2|
+|**Sensitivity**|-26 dBFS|
+|**Acoustic Overload Point**|120 dBL|
+|**SNR**|64 dBA|
+|**Power Supply**|USB 5V, External 5V|
+|**Dimensions**|35\*86 mm|
+|**Audio Output**|Speaker Connector / 3.5mm Headphone Jack|
+|**Maximum Sampling Rate**|16Khz|
+|**Speaker**|Supports 5W Amplifier Speakers.|
+
+
## Hardware Overview
-
+
+
+
+
+|**1**|**Dual Microphone Array**|Provides high-quality audio input.|
+| :- | :- | :- |
+|**2**|**Power Indicator Light**|Illuminates when powered on.|
+|**3**|**RGB Light**|Programmable WS2812, provides visual interface|
+|**4**|**Mute Indicator Light**|Lights up red when the mute button is pressed.|
+|**5**|**USR Button**|User-defined button.|
+|**6**|**Mute Button**|Mutes audio input when pressed.|
+|**7**|[XIAO ESP32S3](https://www.seeedstudio.com/XIAO-ESP32S3-p-5627.html) **(optional)**|For further development and integration.|
+|**8**|**XU316 Core Processor**|Responsible for audio processing and transmission.|
+|**9**|**External Power Supply Solder Pad**|Supports external 5V power supply.|
+|**10**|**USB Type-C Port**|Used for power and data transmission.|
+|**11**|**Speaker Connector**|For audio output. Supports 5W amplifier speakers.|
+|**12**|**3.5mm Headphone jack**|Output audio, We can plug active speakers or Headphones into this port.|
+|**13**|**External power pad 1**|Unused IO pins on the XIAO ESP32.|
+|**14**|**External power pad 2**|Unused IO pins on the XU316.|
+|**15**|**JTAG**|For debugging and programming the XU316.|
+
## Get Started
### Update firmware
-* [Firmware Download](https://files.seeedstudio.com/wiki/SenseCAP/respeaker/ffva_ua_v2.0.3.bin)
+
+* [Firmware Download](https://files.seeedstudio.com/wiki/SenseCAP/respeaker/ffva_ua_v2.0.5.bin)
+
+#### Wiring
+
+Connect the ReSpeaker Lite Board to your PC via the USB cable.
+
+
#### Install DFU Util
@@ -77,7 +120,9 @@ Use "brew" to install or follow the instructions from [the official website](htt
* Install [brew](http://brew.sh/) or start the Terminal to install it directly:
+```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+```
* In the Teminal, type this command to install the dfu-util:
@@ -127,7 +172,7 @@ If it prompts "Cannot open DFU device", just reboot to try again.
* Run the following command:
```
-dfu-util -e -a 1 -D ffva_ua_v2.0.3.bin
+dfu-util -e -a 1 -D ffva_ua_v2.0.5.bin
```
@@ -136,8 +181,28 @@ After flashing is completed, please restart the board.
:::
+### Out of Box Usage
+
+
+ReSpeaker Lite is a plug-and-play modular voice interface, no driver required, just plug it to your PC, you will see a voice device named 'ReSpeaker Lite'.
+
+
+
+## Comparison
+||[ReSpeaker Lite](https://www.seeedstudio.com/ReSpeaker-Lite-p-5928.html)|[ReSpeaker Mic Array v2.0](https://www.seeedstudio.com/ReSpeaker-Mic-Array-v2-0.html)|[reSpeaker 2-Mics Pi HAT](https://www.seeedstudio.com/ReSpeaker-2-Mics-Pi-HAT.html)|
+|--|--|--|--|
+|||||
+|
Core Chip
|
XMOS XU316
|
XMOS XVF-3000
|
-
|
+|
Microphones
|
PDM MEMS Microphones x2
|
PDM MEMS Microphones x4
|
Analog MEMS Microphones x2
+|
Voice Capture Distance
|
3m
|
5m
|
3m
|
+|
Sensitivity
|
-26 dBFS
|
-26 dBFS
|
-
|
+|
Acoustic Overload Point
|
120 dBSPL
|
120 dBSPL
|
-
|
+|
SNR
|
64 dB
|
63 dB
|
-
|
+|
Onboard Audio Processing Algorithms
|
Acoustic Echo Cancellation (AEC)
Automatic Gain Control (AGC)
Noise Suppression (NS)
Interference Cancellation (IC)
Voice-to-Noise Ratio (VNR)
|
Acoustic Echo Cancellation (AEC)
Automatic Gain Control (AGC)
Noise Suppression (NS)
Beamforming
Direction of Arrival (DoA)
De-Reverberation
Voice Activity Detection (VAD)
|
-
|
+|
Compatible Hardware
|
XIAO ESP32S3(Sense)
Adafruit QT Py via I2S
Raspberry Pi
Any computer or SBC running Linux, macOS, and Windows via USB
|
Raspberry Pi
Any computer or SBC running Linux, macOS, and Windows via USB
|Raspberry Pi ONLY|
+|
Perfect for
|Directional sound capture, ideal for linear or elongated setups|Omnidirectional sound capture and localization, best placed in the center of open and multi-directional environments|Directional sound capture, ideal for linear or elongated setups|
\ No newline at end of file
diff --git a/docs/Sensor/ReSpeaker_Lite/respeaker_enclosure.md b/docs/Sensor/ReSpeaker_Lite/respeaker_enclosure.md
new file mode 100644
index 000000000000..f7aa6a8f7dfb
--- /dev/null
+++ b/docs/Sensor/ReSpeaker_Lite/respeaker_enclosure.md
@@ -0,0 +1,15 @@
+---
+description: How to assemble the enclosure
+title: Enclosure assembly
+keywords:
+- ESP32S3
+- XIAO
+- ReSpeaker
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /respeaker_enclosure
+last_update:
+ date: 7/1/2024
+ author: Jessie
+---
+
+
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Getting_Started.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Getting_Started.md
index 9fe2507d0355..423039b2fe3f 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Getting_Started.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Getting_Started.md
@@ -207,7 +207,7 @@ In addition, during communication in particular, spike-like errors occurred, whi
The following is the procedure to test the battery voltage.
-```c++
+```cpp
void setup() {
Serial.begin(115200);
pinMode(A0, INPUT); // ADC
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Pin_Multiplexing.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Pin_Multiplexing.md
index ced521ddb8bd..d2668e80c6fc 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Pin_Multiplexing.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_Pin_Multiplexing.md
@@ -6,8 +6,8 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /XIAO_ESP32C3_Pin_Multiplexing
last_update:
- date: 03/03/2023
- author: Citric
+ date: 07/25/2024
+ author: Spencer
---
# Pin Multiplexing
@@ -108,7 +108,7 @@ void loop() {
}
```
-## Serial
+## Serial - UART
### Regular method - choose one of USB serial or UART0 serial to use
@@ -117,6 +117,15 @@ There are 2 serial interfaces on this board:
- USB Serial
- UART0 Serial
+:::note
+There is no `Serial2` for XIAO ESP32 C3.
+Also If you need to use `Serial1`, you must define the pins; otherwise, it may not receive data. For XIAO ESP32 series, use `Serial1` as follows:
+
+```cpp
+Serial1.begin(115200, SERIAL_8N1, D7, D6); // RX, TX
+```
+:::
+
By default, USB serial is enabled, which means you can connect the board to a PC via USB Type-C and open serial monitor on Arduino IDE to view data sent via serial.
However, if you want to use UART0 as the serial, you need to connect pin D6 as the TX pin and pin D7 as RX pin with a USB-Serial adapter.
@@ -305,6 +314,46 @@ If all goes well, you will see data messages on the serial monitor.
+### Serial1 Usage
+
+According to the above XIAO ESP32C3 Pin diagrams for specific parameters,we can observe that there are TX pin and RX pin,This is different from serial communication, but the usage is also very similar, except that a few parameters need to be added,So nex,we will use the pins led out by the chip for serial communication
+
+Core Function that need to be include:
+
+- `Serial1.begin(BAUD,SERIAL_8N1,RX_PIN,TX_PIN);` -- enalbe Serial1,the function prototype : `.begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin);`
+ - `baud` :badu rate
+ - `config`:Configuration bit
+ - `rxPin` :Receive Pin
+ - `txPin` :Send Pin
+
+It is worth nothing that if we use digital pin port to define,this place should be`#define RX_PIN D7`、`#define TX_PIN D6`,please refer to the pin diagrams of different XIAO Series for specific parameters.
+
+Here is an example program:
+
+```c
+#define RX_PIN D7
+#define TX_PIN D6
+#define BAUD 115200
+
+void setup() {
+ Serial1.begin(BAUD,SERIAL_8N1,RX_PIN,TX_PIN);
+}
+
+void loop() {
+ if(Serial1.available() > 0)
+ {
+ char incominByte = Serial1.read();
+ Serial1.print("I received : ");
+ Serial1.println(incominByte);
+ }
+ delay(1000);
+}
+```
+
+After uploading the program, open the Serial Monitor in Arduino IDE and set the baud rate to 115200.then,you can send content you want in the XIAO ESP32C3 through the serial monitor Serial ,and XIAO will print out each byte of the content you send.,In here,the content i entered is "Hello Everyone",my result chart is as follows
+
+
+
## I2C
### Hardware connection
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_WiFi_Usage.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_WiFi_Usage.md
index cd39a9832618..e3aecf11a898 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_WiFi_Usage.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/XIAO_ESP32C3_WiFi_Usage.md
@@ -6,15 +6,20 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /XIAO_ESP32C3_WiFi_Usage
last_update:
- date: 1/11/2023
- author: shuxu hu
+ date: 07/26/2024
+ author: Spencer
---
-# WiFi Usage
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+## Start
Seeed Studio XIAO ESP32C3 supports WiFi connectivity with IEEE 802.11b/g/n. This wiki will introduce the basics of WiFi usage on this board.
-> ⚠️ Please be careful when you try to use the board as a hotspot(access point). There may be a overheat problem and cause burns.
+:::caution attention
+⚠️ Please be careful when you try to use the board as a hotspot(access point). There may be a overheat problem and cause burns.
+:::
## Hardware set up
@@ -26,108 +31,255 @@ Seeed Studio XIAO ESP32C3 supports WiFi connectivity with IEEE 802.11b/g/n. This
-## Scan WiFi networks (Station Mode)
+## Mode 1: STA Mode (Station Mode) - Scan WiFi networks
+
+### Scan Wi-Fi access points
In this example, we are going to use XIAO ESP32C3 to scan available WiFi networks around it. Here the board will be configured in Station (STA) Mode.
- **Step 1.** Copy and paste the code below into Arduino IDE
+
+
+
```cpp
#include "WiFi.h"
-void setup()
-{
- Serial.begin(115200);
+void setup() {
+ Serial.begin(115200);
+
+ // Set WiFi to station mode and disconnect from an AP if it was previously connected
+ WiFi.mode(WIFI_STA);
+ WiFi.disconnect();
+ delay(100);
- // Set WiFi to station mode and disconnect from an AP if it was previously connected
- WiFi.mode(WIFI_STA);
- WiFi.disconnect();
- delay(100);
+ Serial.println("Setup done");
+}
+
+void loop() {
+ Serial.println("scan start");
+
+ // WiFi.scanNetworks will return the number of networks found
+ int n = WiFi.scanNetworks();
+ Serial.println("scan done");
+ if (n == 0) {
+ Serial.println("no networks found");
+ } else {
+ Serial.print(n);
+ Serial.println(" networks found");
+ for (int i = 0; i < n; ++i) {
+ // Print SSID and RSSI for each network found
+ Serial.print(i + 1);
+ Serial.print(": ");
+ Serial.print(WiFi.SSID(i));
+ Serial.print(" (");
+ Serial.print(WiFi.RSSI(i));
+ Serial.print(")");
+ Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
+ delay(10);
+ }
+ }
+ Serial.println("");
- Serial.println("Setup done");
+ // Wait a bit before scanning again
+ delay(5000);
}
+```
-void loop()
-{
- Serial.println("scan start");
+
+
- // WiFi.scanNetworks will return the number of networks found
- int n = WiFi.scanNetworks();
- Serial.println("scan done");
- if (n == 0) {
- Serial.println("no networks found");
- } else {
- Serial.print(n);
- Serial.println(" networks found");
- for (int i = 0; i < n; ++i) {
- // Print SSID and RSSI for each network found
- Serial.print(i + 1);
- Serial.print(": ");
- Serial.print(WiFi.SSID(i));
- Serial.print(" (");
- Serial.print(WiFi.RSSI(i));
- Serial.print(")");
- Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
- delay(10);
- }
+```cpp title="https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiScan/WiFiScan.ino"
+/*
+ * This sketch demonstrates how to scan WiFi networks.
+ * The API is based on the Arduino WiFi Shield library, but has significant changes as newer WiFi functions are supported.
+ * E.g. the return value of `encryptionType()` different because more modern encryption is supported.
+ */
+#include "WiFi.h"
+
+void setup() {
+ Serial.begin(115200);
+
+ // Set WiFi to station mode and disconnect from an AP if it was previously connected.
+ WiFi.mode(WIFI_STA);
+ WiFi.disconnect();
+ delay(100);
+
+ Serial.println("Setup done");
+}
+
+void loop() {
+ Serial.println("Scan start");
+
+ // WiFi.scanNetworks will return the number of networks found.
+ int n = WiFi.scanNetworks();
+ Serial.println("Scan done");
+ if (n == 0) {
+ Serial.println("no networks found");
+ } else {
+ Serial.print(n);
+ Serial.println(" networks found");
+ Serial.println("Nr | SSID | RSSI | CH | Encryption");
+ for (int i = 0; i < n; ++i) {
+ // Print SSID and RSSI for each network found
+ Serial.printf("%2d", i + 1);
+ Serial.print(" | ");
+ Serial.printf("%-32.32s", WiFi.SSID(i).c_str());
+ Serial.print(" | ");
+ Serial.printf("%4ld", WiFi.RSSI(i));
+ Serial.print(" | ");
+ Serial.printf("%2ld", WiFi.channel(i));
+ Serial.print(" | ");
+ switch (WiFi.encryptionType(i)) {
+ case WIFI_AUTH_OPEN: Serial.print("open"); break;
+ case WIFI_AUTH_WEP: Serial.print("WEP"); break;
+ case WIFI_AUTH_WPA_PSK: Serial.print("WPA"); break;
+ case WIFI_AUTH_WPA2_PSK: Serial.print("WPA2"); break;
+ case WIFI_AUTH_WPA_WPA2_PSK: Serial.print("WPA+WPA2"); break;
+ case WIFI_AUTH_WPA2_ENTERPRISE: Serial.print("WPA2-EAP"); break;
+ case WIFI_AUTH_WPA3_PSK: Serial.print("WPA3"); break;
+ case WIFI_AUTH_WPA2_WPA3_PSK: Serial.print("WPA2+WPA3"); break;
+ case WIFI_AUTH_WAPI_PSK: Serial.print("WAPI"); break;
+ default: Serial.print("unknown");
+ }
+ Serial.println();
+ delay(10);
}
- Serial.println("");
+ }
+ Serial.println("");
+
+ // Delete the scan result to free memory for code below.
+ WiFi.scanDelete();
- // Wait a bit before scanning again
- delay(5000);
+ // Wait a bit before scanning again.
+ delay(5000);
}
```
+
+
**Step 2.** Upload the codes and open the Serial Monitor to start scanning for WiFi networks
-## Connect to a WiFi network
+### Connect to a WiFi network
In this example, we are going to use XIAO ESP32C3 to connect to a WiFI network.
- **Step 1.** Copy and paste the code below into Arduino IDE
+
+
+
```cpp
#include
-const char* ssid = "your-ssid";
-const char* password = "your-password";
+const char* ssid = "your-ssid";
+const char* password = "your-password";
-void setup()
-{
- Serial.begin(115200);
- delay(10);
+void setup() {
+ Serial.begin(115200);
+ delay(10);
- // We start by connecting to a WiFi network
+ // We start by connecting to a WiFi network
+ Serial.println();
+ Serial.println();
+ Serial.print("Connecting to ");
+ Serial.println(ssid);
- Serial.println();
- Serial.println();
- Serial.print("Connecting to ");
- Serial.println(ssid);
+ WiFi.begin(ssid, password);
- WiFi.begin(ssid, password);
+ while (WiFi.status() != WL_CONNECTED) {
+ delay(500);
+ Serial.print(".");
+ }
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
+ Serial.println("");
+ Serial.println("WiFi connected");
+ Serial.println("IP address: ");
+ Serial.println(WiFi.localIP());
+}
+void loop() {}
+```
+
+
+
+
+```cpp title="https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiClientConnect/WiFiClientConnect.ino"
+#include
+
+const char *ssid = "your-ssid";
+const char *password = "your-password";
+
+void setup() {
+ Serial.begin(115200);
+ delay(10);
+
+ // We start by connecting to a WiFi network
+ Serial.println();
+ Serial.println();
+ Serial.print("Connecting to ");
+ Serial.println(ssid);
+
+ WiFi.begin(ssid, password);
+
+ // Will try for about 10 seconds (20x 500ms)
+ int tryDelay = 500;
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
-}
-void loop()
-{
+ while (WiFi.status() != WL_CONNECTED) {
+ delay(500);
+ Serial.print(".");
}
+
+ while (true) {
+ switch (WiFi.status()) {
+ case WL_NO_SSID_AVAIL: Serial.println("[WiFi] SSID not found"); break;
+ case WL_CONNECT_FAILED:
+ Serial.print("[WiFi] Failed - WiFi not connected! Reason: ");
+ return;
+ break;
+ case WL_CONNECTION_LOST: Serial.println("[WiFi] Connection was lost"); break;
+ case WL_SCAN_COMPLETED: Serial.println("[WiFi] Scan is completed"); break;
+ case WL_DISCONNECTED: Serial.println("[WiFi] WiFi is disconnected"); break;
+ case WL_CONNECTED:
+ Serial.println("[WiFi] WiFi is connected!");
+ Serial.print("[WiFi] IP address: ");
+ Serial.println(WiFi.localIP());
+ return;
+ break;
+ default:
+ Serial.print("[WiFi] WiFi Status: ");
+ Serial.println(WiFi.status());
+ break;
+ }
+ delay(tryDelay);
+
+ if (numberOfTries <= 0) {
+ Serial.print("[WiFi] Failed to connect to WiFi!");
+ // Use disconnect function to force stop trying to connect
+ WiFi.disconnect();
+ return;
+ } else {
+ numberOfTries--;
+ }
+ }
+
+ Serial.println("");
+ Serial.println("WiFi connected");
+ Serial.println("IP address: ");
+ Serial.println(WiFi.localIP());
+}
+void loop() {}
```
+
+
+
**Step 2.** Upload the codes and open the Serial Monitor to check that the board is connected to the WiFI network
-## Use as an Access Point
+## Mode 2: Soft-AP mode (Working as STA) - Use as an Access Point
In this example, we are going to use XIAO ESP32C3 as a WiFi access point where other devices can be connected to it. This is similar to WiFi hotspot feature on mobile phones.
@@ -135,20 +287,22 @@ In this example, we are going to use XIAO ESP32C3 as a WiFi access point where o
```cpp
#include "WiFi.h"
-void setup()
-{
+void setup() {
Serial.begin(115200);
WiFi.softAP("ESP_AP", "123456789");
}
-void loop()
-{
+void loop() {
Serial.print("Host Name:");
Serial.println(WiFi.softAPgetHostname());
Serial.print("Host IP:");
Serial.println(WiFi.softAPIP());
Serial.print("Host IPV6:");
+#if ESP_ARDUINO_VERSION_MAJOR < 3
Serial.println(WiFi.softAPIPv6());
+#else
+ Serial.println(WiFi.softAPlinkLocalIPv6());
+#endif
Serial.print("Host SSID:");
Serial.println(WiFi.SSID());
Serial.print("Host Broadcast IP:");
@@ -164,7 +318,8 @@ void loop()
delay(1000);
}
```
-:::tip
+
+:::caution note
If your ESP32 development board version already update to 3.0.0, you need to change the code from ```softAPIPv6()``` to ```softAPlinkLocalIPv6()```.
:::
@@ -189,6 +344,10 @@ For more information on this section, please refer to the relevant tutorials.
- [Connect Grove Modules to Home Assistant using ESPHome](https://wiki.seeedstudio.com/Connect-Grove-to-Home-Assistant-ESPHome/)
- [LinkStar Home Assistant](https://wiki.seeedstudio.com/h68k-ha-esphome/)
+## Reference
+
+- [Wi-Fi API - esp-arduino](https://docs.espressif.com/projects/arduino-esp32/en/latest/api/wifi.html)
+
## Tech Support & Product Discussion
Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
@@ -201,4 +360,4 @@ Thank you for choosing our products! We are here to provide you with different s
-
+
\ No newline at end of file
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Bluetooth_Usage.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Bluetooth_Usage.md
index adccd4be669a..0a4cca4132a2 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Bluetooth_Usage.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Bluetooth_Usage.md
@@ -325,9 +325,9 @@ bool connectToServer() {
// Read the value of the characteristic.
if(pRemoteCharacteristic->canRead()) {
- std::string value = pRemoteCharacteristic->readValue();
+ String value = pRemoteCharacteristic->readValue();
Serial.print("The characteristic value was: ");
- Serial.println(value.c_str());
+ Serial.println(value);
}
if(pRemoteCharacteristic->canNotify())
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Embedded_Swift.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Embedded_Swift.md
index 5b4e953d2789..3795c5aba11f 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Embedded_Swift.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Embedded_Swift.md
@@ -1,14 +1,16 @@
---
description: utilize Embedded swift to work with XIAO ESP32C6
title: XIAO ESP32C6 with (Embedded) Swift
-image: https://files.seeedstudio.com/wiki/seeed_logo/logo_2023.png
+image: https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/img/swift-xiao-esp32.png
slug: /xiao-esp32-swift
last_update:
- date: 2024-07-05T01:50:59.810Z
- author: Spencer
+ date: 2024-07-12T02:50:00.462Z
+ author: Spencer
---
# Guide to Embedded Swift with Seeed Studio XIAO-C6
+
+
## Introduction
The Seeed Studio XIAO ESP32C6 is a powerful and versatile development board built around the ESP32-C6 SoC, featuring dual 32-bit **RISC-V** processors. The high-performance processor operates up to 160 MHz, while the low-power processor runs up to 20 MHz. With 512KB SRAM and 4MB Flash, the XIAO ESP32C6 offers significant programming space, making it ideal for various IoT applications. This board excels in wireless connectivity, supporting 2.4 GHz Wi-Fi 6, Bluetooth® 5.3, Zigbee, and Thread (802.15.4), and is Matter-native, which is crucial for smart-home interoperability.
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Getting_Started.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Getting_Started.md
index c11a2a21d513..6b83075fb6af 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Getting_Started.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Getting_Started.md
@@ -10,7 +10,7 @@ slug: /xiao_esp32c6_getting_started
toc_max_heading_level: 4
sidebar_position: 1
last_update:
- date: 04/02/2024
+ date: 07/16/2024
author: Spencer
---
@@ -181,11 +181,14 @@ export const Highlight = ({children, color}) => (
:::tip
-There's an IO port 14 used to select between using the built-in antenna or an external antenna. If port 14 is at a low level, it uses the built-in antenna; if it's at a high level, it uses the external antenna. The default is low level. If you want to set it high, you can refer the code below.
+GPIO14 is used to select between using the built-in antenna or an external antenna. Before that, you need to set GPIO3 low level to turn on this function. If GPIO14 is set low level, it uses the built-in antenna; if it set to high level, it uses the external antenna. Default is low level. If you want to set it high, you can refer the code below.
```cpp
void setup() {
+ pinMode(3, OUTPUT);
+ digitalWrite(3, LOW);//turn on this function
+ delay(100);
pinMode(14, OUTPUT);
- digitalWrite(14, HIGH);
+ digitalWrite(14, HIGH);//use external antenna
}
```
:::
@@ -291,7 +294,7 @@ Additionally, the latest development release version (`3.0.0-rc1`) was released
- **Step 2.** Navigate to **File > Examples > 01.Basics > Blink**, open the program.
-
+
- **Step 3.** Select the board model to **XIAO ESP32C6**, and select the correct port number to upload the program.
@@ -316,6 +319,21 @@ If you want to connect the battery for XIAO, we recommend you to purchase qualif
When you use battery power, there will be no voltage on the 5V pin.
:::
+:::tip red indicator light
+
+At the same time, we have the red indicator light for battery charging as [XIAO ESP32S3](/xiao_esp32s3_getting_started/#battery-usage):
+
+The red light behavior for the XIAO ESP32 C6 is as follows:
+
+- When the XIAO ESP32 C6 is not connected to a battery:
+ - The red light comes on when the Type-C cable is connected and goes off after 30 seconds.
+- When the battery is connected and the Type-C cable is connected for charging:
+ - The red light flashes.
+- When the battery is fully charged via the Type-C connection:
+ - The red light turns off.
+
+:::
+
## Deep sleep mode and wake-up
The XIAO ESP32C6 has a complete deep sleep mode and wake-up function. Here we will show two of the more common examples offered by the ESP.
@@ -505,10 +523,16 @@ If you want to learn to use more of the deep sleep mode and wake-up functions, y
## Resources
+- **[PDF]** [ESP32C6 datasheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/res/esp32-c6_datasheet_en.pdf)
+
- **[ZIP]** [Seeed Studio XIAO ESP32C6 KiCAD Libraries](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/XIAO-ESP32-C6_v1.0_SCH&PCB_24028.zip)
- **[PDF]** [Seeed Studio XIAO ESP32C6 Schematic](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/XIAO-ESP32-C6_v1.0_SCH_PDF_24028.pdf)
+- **[XLSX]** [Seeed Studio XIAO ESP32C6 pinout sheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/res/XIAO_ESP32C6_Pinout.xlsx)
+
+- **[ZIP]** [Seeed Studio XIAO ESP32C6 Certification files](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/res/SeeedStudio_XIAO_ESP32C6_Certification.zip)
+
## Course Resources
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Pin_Multiplexing.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Pin_Multiplexing.md
index 640c36adcda7..48308761cd92 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Pin_Multiplexing.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_Pin_Multiplexing.md
@@ -139,6 +139,46 @@ This code demonstrates using the hardware serial port UART0 (referred to as Seri
In the loop() function, it checks for incoming data on both serial ports. If data is available on the USB serial port (Serial), it reads the data and prints a message indicating it was received on USB. If data is available on the UART0 serial port (`mySerial`), it reads the data and prints a message indicating it was received on UART0.
+#### Serial1 Usage
+
+According to the above XIAO ESP32C6 Pin diagrams for specific parameters,we can observe that there are TX pin and RX pin,This is different from serial communication, but the usage is also very similar, except that a few parameters need to be added,So nex,we will use the pins led out by the chip for serial communication
+
+Core Function that need to be include:
+
+- `Serial1.begin(BAUD,SERIAL_8N1,RX_PIN,TX_PIN);` -- enalbe Serial1,the function prototype : `.begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin);`
+ - `baud` :badu rate
+ - `config`:Configuration bit
+ - `rxPin` :Receive Pin
+ - `txPin` :Send Pin
+
+It is worth nothing that if we use digital pin port to define,this place should be`#define RX_PIN D7`、`#define TX_PIN D6`,please refer to the pin diagrams of different XIAO Series for specific parameters.
+
+Here is an example program:
+
+```c
+#define RX_PIN D7
+#define TX_PIN D6
+#define BAUD 115200
+
+void setup() {
+ Serial1.begin(BAUD,SERIAL_8N1,RX_PIN,TX_PIN);
+}
+
+void loop() {
+ if(Serial1.available() > 0)
+ {
+ char incominByte = Serial1.read();
+ Serial1.print("I received : ");
+ Serial1.println(incominByte);
+ }
+ delay(1000);
+}
+```
+
+After uploading the program, open the Serial Monitor in Arduino IDE and set the baud rate to 115200.then,you can send content you want in the XIAO ESP32C6 through the serial monitor Serial ,and XIAO will print out each byte of the content you send.,In here,the content i entered is "Hello Everyone",my result chart is as follows
+
+
+
## Digital I/O
The XIAO ESP32C6 has 12 GPIO pins that you can configure as input or output.
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_WiFi_Usage.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_WiFi_Usage.md
index 21e033a9a584..ab1d98a5e503 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_WiFi_Usage.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C6/XIAO_ESP32C6_WiFi_Usage.md
@@ -36,11 +36,14 @@ last_update:
The Seeed Studio XIAO ESP32C6 is an embedded development board that boasts outstanding RF performance, thanks to its support for both 2.4GHz Wifi - 802.11b/g/n and Bluetooth Low Energy (BLE) 5.0 dual wireless communication. This capability enables the XIAO ESP32C6 to provide reliable and high-speed wireless connectivity for a wide range of Internet of Things (IoT) applications. The board features an onboard ceramic antenna, which eliminates the need for an external antenna and simplifies the design process. The ESP32C6 chip also offers low power consumption, making it suitable for battery-powered IoT devices. In this tutorial, we will explore how to leverage the XIAO ESP32C6's Wi-Fi capabilities to connect to a Wi-Fi network and perform basic networking tasks.
:::tip
-There's an IO port 14 used to select between using the built-in antenna or an external antenna. If port 14 is at a low level, it uses the built-in antenna; if it's at a high level, it uses the external antenna. The default is low level. If you want to set it high, you can refer the code below.
+GPIO14 is used to select between using the built-in antenna or an external antenna. Before that, you need to set GPIO3 low level to turn on this function. If GPIO14 is set low level, it uses the built-in antenna; if it set to high level, it uses the external antenna. Default is low level. If you want to set it high, you can refer the code below.
```cpp
void setup() {
+ pinMode(3, OUTPUT);
+ digitalWrite(3, LOW);//turn on this function
+ delay(100);
pinMode(14, OUTPUT);
- digitalWrite(14, HIGH);
+ digitalWrite(14, HIGH);//use external antenna
}
```
:::
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Getting_Started.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Getting_Started.md
index 3cbb2501d121..1ef456e1989f 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Getting_Started.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Getting_Started.md
@@ -695,9 +695,9 @@ XIAO ESP32S3 is the most complex one in all XIAO because of its high integration
- **[XLSX]** [Seeed Studio XIAO ESP32S3 pinout sheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_Sense_Pinout.xlsx)
-- **[STEP]** [Seeed Studio XIAO ESP32S3 3D Model](https://grabcad.com/library/seeed-studio-xiao-esp32s3-1)
+- **[STEP]** [Seeed Studio XIAO ESP32S3 3D Model](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/seeed-studio-xiao-esp32s3-3d_model.zip)
-
+- **[ZIP]** [Seeed Studio XIAO ESP32S3 Certification files](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_Certification.zip)
### For Seeed Studio XIAO ESP32S3 Sense
@@ -718,9 +718,7 @@ XIAO ESP32S3 is the most complex one in all XIAO because of its high integration
- **[XLSX]** [Seeed Studio XIAO ESP32S3 Sense pinout sheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_Sense_Pinout.xlsx)
-- **[STEP]** [Seeed Studio XIAO ESP32S3 Sense 3D Model](https://grabcad.com/library/seeed-studio-xiao-esp32s3-sense-1)
-
-
+- **[STEP]** [Seeed Studio XIAO ESP32S3 Sense 3D Model](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/seeed-studio-xiao-esp32s3-sense-3d_model.zip)
## Course Resources
@@ -735,6 +733,8 @@ XIAO ESP32S3 is the most complex one in all XIAO because of its high integration
- **[STP]** [XIAO ESP32S3 Sense housing design (bottom)](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO-ESP32S3-Sense-housing-design(bottom).stp)
+
+
*The remaining open source material is being compiled, so stay tuned!*
## Tech Support & Product Discussion
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Pin_Multiplexing.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Pin_Multiplexing.md
index 4c85ad58cb8e..9f96d31dbf6c 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Pin_Multiplexing.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32S3/XIAO_ESP32S3_Pin_Multiplexing.md
@@ -505,6 +505,46 @@ After uploading the program, open the Serial Monitor in Arduino IDE and set the
+### Serial1 Usage
+
+According to the above XIAO ESP32S3 Pin diagrams for specific parameters,we can observe that there are TX pin and RX pin,This is different from serial communication, but the usage is also very similar, except that a few parameters need to be added,So nex,we will use the pins led out by the chip for serial communication
+
+Core Function that need to be include:
+
+- `Serial1.begin(BAUD,SERIAL_8N1,RX_PIN,TX_PIN);` -- enalbe Serial1,the function prototype : `.begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin);`
+ - `baud` :badu rate
+ - `config`:Configuration bit
+ - `rxPin` :Receive Pin
+ - `txPin` :Send Pin
+
+It is worth nothing that if we use digital pin port to define,this place should be`#define RX_PIN D7`、`#define TX_PIN D6`,if we use GPIO pin port to define,this place should be `#define RX_PIN 44`、`#define TX_PIN 43`,please refer to the pin diagrams of different XIAO Series for specific parameters
+
+Here is an example program:
+
+```c
+#define RX_PIN D7
+#define TX_PIN D6
+#define BAUD 115200
+
+void setup() {
+ Serial1.begin(BAUD,SERIAL_8N1,RX_PIN,TX_PIN);
+}
+
+void loop() {
+ if(Serial1.available() > 0)
+ {
+ char incominByte = Serial1.read();
+ Serial1.print("I received : ");
+ Serial1.println(incominByte);
+ }
+ delay(1000);
+}
+```
+
+After uploading the program, open the Serial Monitor in Arduino IDE and set the baud rate to 115200.then,you can send content you want in the XIAO ESP32S3 through the serial monitor Serial ,and XIAO will print out each byte of the content you send.,In here,the content i entered is "Hello Everyone",my result chart is as follows
+
+
+
### Usage of Software Serial
If you feel that one hardware serial port is not enough, you can also use the ESP32's software serial function to set some pins as software serial to expand the number of serial ports.
@@ -597,7 +637,7 @@ void setup()
MySerial0.print("MySerial0");
// And configure MySerial1 on pins RX=D9, TX=D10
- MySerial1.begin(115200, SERIAL_8N1, 8, 9);
+ MySerial1.begin(115200, SERIAL_8N1, 9, 10);
MySerial1.print("MySerial1");
}
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/GPS_Module_For_XIAO/L76K_GNSS_Module.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/GPS_Module_For_XIAO/L76K_GNSS_Module.md
index 9464ac2fc98e..d55b321c945c 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/GPS_Module_For_XIAO/L76K_GNSS_Module.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/GPS_Module_For_XIAO/L76K_GNSS_Module.md
@@ -9,7 +9,7 @@ image: https://files.seeedstudio.com/wiki/Seeeduino-XIAO-Expansion-Board/GPS_Mod
slug: /get_start_l76k_gnss
sidebar_position: 0
last_update:
- date: 2024-01-16T11:25:12.268Z
+ date: 2024-07-25T09:03:13.513Z
author: Spencer
---
@@ -40,6 +40,7 @@ The module comes with a high-performance active GNSS antenna intended to cover G
- **Ceramic Antenna:** Enhanced signal reception, superior to traditional antennas.
### Specification
+
@@ -184,8 +185,9 @@ First, you need to search and download the latest version **TinyGPSPlus** librar
+## Application Demo
-## L76K GNSS Module Example
+### Example 1: Reading and Displaying GNSS Data
Once the hardware and software are ready, we start uploading our first example program. The L76K GNSS Module prints the GNSS information via the serial port every 1 second after powering up. In this example, we will use **TinyGPSPlus** library to parse the NMEA sentences received from the module and print the results including atitude, longitude and time to the Arduino IDE's Serial Monitor.
@@ -278,15 +280,19 @@ Make sure that the L76K GNSS Module is placed outdoor where good GNSS signals ca
+This code uses the TinyGPSPlus library to read data from the L76K GNSS module via a serial connection and displays valid location information and date/time on the serial monitor.
+
+## Configuration
-##### Change the behaviour of LED
+### Example 1: Change the behaviour of LED
-This section demonstrates how to control a green LED using Arduino by sending specific hexadecimal commands through serial communication. The example provided below will show you how to turn off the LED and then return it to its normal blinking state.
+This section demonstrates how to control a green LED using Arduino by sending specific hexadecimal commands through serial communication. The example provided below shows how to turn off the LED and then return it to its normal blinking state.
```cpp
static const int RXPin = D7, TXPin = D6;
static const uint32_t GPSBaud = 9600;
SoftwareSerial SerialGNSS(RXPin, TXPin);
+
void setup() {
SerialGNSS.begin(GPSBaud);
@@ -322,11 +328,29 @@ void setup() {
SerialGNSS.write(RecoverState, sizeof(RecoverState));
}
-void loop() {
- // Do nothing.
-}
+void loop() {}
+```
+:::info
+For details to see CASIC Protocol Messages of Quectel_L76K_GNSS.
+
+```c
+struct CASIC_Messages {
+ uint16_t header; // 0xBA, 0xCE
+ uint16_t len; // 0x10, 0x00
+ uint8_t class; // 0x06
+ uint8_t id; // 0x03
+ uint8_t* payload; // 0x40, 0x42, 0x0F, 0x00, 0xA0, 0x86, 0x01, 0x00, ->8
+ // 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, ->8
+ uint8_t checksum; // 0xF0,0xC8, 0x17, 0x08
+} L76KStruct;
```
+:::
+
+## Resources
+
+- **PDF**: [Quectel_L76K_GNSS_协议规范_V1.0](https://raw.githubusercontent.com/Seeed-Projects/Seeed_L76K-GNSS_for_XIAO/fb74b715224e0ac153c3884e578ee8e024ed8946/docs/Quectel_L76K_GNSS_协议规范_V1.0.pdf)
+- **PDF**: [Quectel_L76K_GNSS_Protocol_Specification_V1.1](https://raw.githubusercontent.com/Seeed-Projects/Seeed_L76K-GNSS_for_XIAO/fb74b715224e0ac153c3884e578ee8e024ed8946/docs/Quectel_L76K_GNSS_Protocol_Specification_V1.1.pdf)
## Troubleshooting
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Round-display-for-XIAO/SeeedStudio_Round_Display_for_XIAO.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Round-display-for-XIAO/SeeedStudio_Round_Display_for_XIAO.md
index 4edf9713809a..582aaebeca25 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Round-display-for-XIAO/SeeedStudio_Round_Display_for_XIAO.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Round-display-for-XIAO/SeeedStudio_Round_Display_for_XIAO.md
@@ -7,8 +7,8 @@ keywords:
image: https://files.seeedstudio.com/wiki/seeed_logo/logo_2023.png
slug: /get_start_round_display
last_update:
- date: 03/017/2023
- author: Citric
+ date: 07/11/2024
+ author: Spencer
---
# Getting Started with Seeed Studio Round Display for XIAO
@@ -329,6 +329,7 @@ Updates to the TFT library and the LVGL library may cause the procedures in the
- **[PDF]** [Seeed Studio Round Display for XIAO SCH](https://files.seeedstudio.com/wiki/round_display_for_xiao/SeeedStudio_Round_Display_for_XIAO_v1.0_SCH_230308.pdf)
- **[PDF]** [GJX0128A4-15HY Datasheet](https://files.seeedstudio.com/wiki/round_display_for_xiao/GJX0128A4-15HY_Datasheet.pdf)
- **[ZIP]** [Seeed Studio Round Display for XIAO SCH&PCB](https://files.seeedstudio.com/wiki/round_display_for_xiao/SeeedStudio_Round_Display_for_XIAO_v1.0_SCH&PCB_230308.zip)
+- **[3DM]** [The 3D model of the Round Display for XIAO](https://files.seeedstudio.com/wiki/round_display_for_xiao/Round-Display-shell-3D-Model.stl)
- **[STL]** [The 3D model diagram of the shell for Round Display](https://files.seeedstudio.com/wiki/round_display_for_xiao/Round-Display-shell-3D-Model.stl)
- **[STL]** [Seeed Studio XIAO ESP32 S3 Sense Case With Round Screen](https://files.seeedstudio.com/wiki/round_display_for_xiao/Seeed_Studio-XIAO-ESP32-S3-Sense-Case-With-Round-Screen.stl)
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Seeeduino-XIAO-Expansion-Board.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Seeeduino-XIAO-Expansion-Board.md
index d43781ede324..d238d9454f7e 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Seeeduino-XIAO-Expansion-Board.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/Seeeduino-XIAO-Expansion-Board.md
@@ -6,10 +6,11 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /Seeeduino-XIAO-Expansion-Board
last_update:
- date: 1/10/2023
- author: shuxu hu
+ date: 07/18/2024
+ author: Spencer
---
+## Overview
@@ -25,40 +26,66 @@ Seeed Studio XIAO SAMD21 , Seeed Studio XIAO RP2040, and Seeed Studio XIAO nRF52
-## **Features**
+## Features
- **Quick Prototyping:** Easy debug and Reset with RESET button and SWD pin led out to male header.
-
- **Rich peripherals:** OLED display, RTC, expandable memory space, passive buzzer, user button, on board battery management chip.
-
- **No Soldering Needed:** All pin led out. Convenient plug and play Grove connectors support multiple data protocols, including IIC, UART, Analog/Digital.
-
- **Circuit Python Supported:** Well supports circuit python. MicroSD card slot enables memory space expand, making it possible to allocate more libraries needed in prototyping and project building.
-
- **Mini Size:** Compact and elegant with only half Raspberry Pi 4 size, especially suitable for projects require mini size.
-## **Specification**
-
-|Item|Value|
-|---|---|
-|Operating voltage|5V / 3.7V Lithium Battery|
-|Charging current| 460mA (Max)|
-|RTC timer precision|± 1.5S/DAY(25°C)|
-|RTC battery|CR1220|
-|Display|0.96" OLED display|
-|Expandable memory|MicroSD card|
-|Grove Interface|Grove IIC*2, Grove UART*1, A0/D0 Grove*1|
-|Other External Equipment|Passive buzzer, user button, 5V servo connector|
+## Specification
+
+
+
+
+
Item
+
Value
+
+
+
Operating voltage
+
5V / 3.7V Lithium Battery
+
+
+
Charging current
+
460mA (Max)
+
+
+
RTC timer precision
+
± 1.5S/DAY(25°C)
+
+
+
RTC battery
+
CR1220
+
+
+
Display
+
0.96" OLED display
+
+
+
Expandable memory
+
MicroSD card
+
+
+
Grove Interface
+
Grove IIC*2, Grove UART*1, A0/D0 Grove*1
+
+
+
Other External Equipment
+
Passive buzzer, user button, 5V servo connector
+
+
+
-## **Applications**
+## Applications
- SWD debug
- Rapid prototyping
- Data display
- Mini Size Project
-## **Part List**
+## Part List
|Item|Value|
|---|---|
@@ -71,16 +98,16 @@ This product does not include Seeed Studio XIAO and battery, Seeed Studio XIAO i
:::
-## **Getting Started**
+## Getting Started
-### **Materials Required**
+### Materials Required
| Seeed Studio XIAO SAMD21 (Pre-solder) | Seeed Studio Expansion Base for XIAO|
|--------------|--------------|
||
|[**Get ONE Now**](https://www.seeedstudio.com/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html)|[**Get ONE Now**](https://www.seeedstudio.com/Seeeduino-XIAO-Expansion-board-p-4746.html)|
-### **Hardware Overview**
+### Hardware Overview
@@ -90,15 +117,15 @@ There are an external MicroSD card slot and RTC Battery Holder, the MicroSD card
-### **Pinout Diagram**
+### Pinout Diagram
External headers-pin description for Grove-Shield for Seeed Studio XIAO .
-## **Expansion Board Usage**
+## Expansion Board Usage
-### **Connection**
+### Connection
Put the Seeed Studio XIAO SAMD21 on the expansion board, the Seeed Studio XIAO SAMD21 green LED should light up.
@@ -107,7 +134,7 @@ Put the Seeed Studio XIAO SAMD21 on the expansion board, the Seeed Studio XIAO S
Please plug the Seeed Studio XIAO on the expansion board first, then plug Type-C, Remember pluing Seeed Studio XIAO into the **middle of the two female header connectors**, otherwise you will damage the Seeed Studio XIAO and the expansion board.
:::
-## **Battery usage**
+## Battery usage
The Seeed Studio Expansion Base for XIAO can be powered by a battery, so if you do some demo that needs to be moved, that battery will help you to solve the power supply issue. when you plug the battery please watch out for the positive and negative anodes, follow the picture to connect the battery in case of damage the board.
@@ -119,7 +146,7 @@ As the below picture, if the LED flashing which means the battery does not charg
-## **Modules on the expansion board**
+## Modules on the expansion board
Rich peripherals on board including:
@@ -145,7 +172,7 @@ Rich peripherals on board including:
-### **OLED Display**
+### OLED Display
This example introduces how to use the OLED display on the Seeed Studio Expansion Base for XIAO.
@@ -159,7 +186,7 @@ This example introduces how to use the OLED display on the Seeed Studio Expansio
**OLED Code**
-```CPP
+```cpp
#include
#include
#include
@@ -178,7 +205,7 @@ void loop(void) {
}
```
-### **LED control by User Button**
+### LED control by User Button
This example introduces how to use the button on the Seeed Studio Expansion Base for XIAO to control the LED on the Seeed Studio XIAO SAMD21.
@@ -190,7 +217,7 @@ This example introduces how to use the button on the Seeed Studio Expansion Base
**Code**
-```CPP
+```cpp
const int buttonPin = 1; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
@@ -218,7 +245,7 @@ void loop() {
}
```
-### **Buzzer**
+### Buzzer
The Buzzer is default connected to the Pin A3, if you want to remove the buzzer function, just follow the below picture, cut off the line.
@@ -234,7 +261,7 @@ This example uses Buzzer on the Seeed Studio Expansion Base for XIAO to play Hap
**Code**
-```CPP
+```cpp
int speakerPin = D3;
int length = 28; // the number of notes
char notes[] = "GGAGcB GGAGdc GGxecBA yyecdc";
@@ -287,7 +314,7 @@ void loop() {
}
```
-### **Servo Control by Rotary Angle Sensor**
+### Servo Control by Rotary Angle Sensor
This example uses a rotary angle sensor to control servo via integration ports on the Seeed Studio Expansion Base for XIAO.
@@ -303,7 +330,7 @@ This example uses a rotary angle sensor to control servo via integration ports o
If your Development Board is **XIAO ESP32 Series**. Before you run the following code, you need to install ESP32Servo library first in **Arduino Library Manager** and change the following code from ```#include ``` to ```#include ```.
:::
-```CPP
+```cpp
#include
#include
#include
@@ -337,7 +364,7 @@ void loop() {
}
```
-### **RTC clock display**
+### RTC clock display
This example uses RTC to display the clock on the OLED.
@@ -349,7 +376,7 @@ This example uses RTC to display the clock on the OLED.
**Step 3**. Copy the code and stick on the Ardiono IDE then upload it.
-```CPP
+```cpp
#include
#include
#include
@@ -395,7 +422,7 @@ void loop() {
}
```
-### **SD card Function**
+### SD card Function
For the XIAO SAMD21, XIAO RP2040, XIAO ESP32C3 and XIAO ESP32S3, you do not need to install a separate SD card library to use a third party. This procedure below is applicable to these XIAOs.
@@ -528,7 +555,7 @@ void loop() {
}
```
-## **Acrylic Case for Seeed Studio Seeed Studio Expansion Base for XIAO**
+## Acrylic Case for Seeed Studio Seeed Studio Expansion Base for XIAO
@@ -546,13 +573,13 @@ This Acrylic case easy to build it up and it also can dress the case look neater
-## **Circuitpython on Seeed Studio XIAO SAMD21 with expansion board**
+## Circuitpython on Seeed Studio XIAO SAMD21 with expansion board
This wiki introduce how to install and run the official [**CircuitPython**](https://circuitpython.org/) by Adafruit Industries on the [**Seeed Studio XIAO SAMD21 development board**](https://www.seeedstudio.com/Seeeduino-XIAO-Pre-Soldered-p-4747.html) !
CircuitPython is a programming language designed to simplify experimenting and learning to program on low-cost microcontroller boards. It makes getting started easier than ever with no upfront desktop downloads needed. Once you get your board set up, open any text editor, and get started editing code. For more info, please refer to [**here**](https://learn.adafruit.com/welcome-to-circuitpython/what-is-circuitpython).
-## **Installing CircuitPython**
+## Installing CircuitPython
**Step 1.** Install the Seeed Studio XIAO SAMD21 on the Expansion board then conect the Type-C cable.
@@ -576,7 +603,7 @@ CircuitPython is a programming language designed to simplify experimenting and l
**Step 6.** Now, CircuitPython is loaded on Seeed Studio XIAO SAMD21 ! All you need to do it's to write you python program and name it `main.py` and drag it onto the `CIRCUITPY` drive.
-### **CircuitPyhton Blink example**
+### CircuitPyhton Blink example
There is a simple example introduce how to use the CirsuitPython on the Seeed Studio XIAO .
@@ -620,7 +647,7 @@ while True:
time.sleep(1)
```
-### **MicroSD card for circuitpython**
+### MicroSD card for circuitpython
The Seeed Studio XIAO SAMD21 build-in about 40 KB flash, but it may have not enough space to store the large size python code file, fortunately, Seeed Studio XIAO SAMD21 Expansion board built-in an MicroSD card slot for extending the store space, so you can follow this instruction to learn how to run the circuitpython on the MicroSD card.
@@ -639,7 +666,7 @@ The MicroSD card system format is FAT or exFAT. If you use other MicroSD card sy
**The `main.py` code**
-```CPP
+```cpp
import sd
f = open("/sd/hello.txt", "r") ## read the file from SD card
print(f.read())
@@ -649,7 +676,7 @@ print(f.read())
**The `sd.py` code**
-```CPP
+```cpp
import os
import adafruit_sdcard
import board
@@ -689,9 +716,9 @@ When you finish all the step, the buzzer will work. If you to run other python f
If you want back to Arduino mode, you just need to upload any programme on the Arduino IDE.
:::
-## **Demo**
+## Demo
-### **Project 1 - Remote control fan**
+### Project 1 - Remote control fan
**Overview**
@@ -731,7 +758,7 @@ Please follow the same color line to connect each sensor on the board. Please co
**Code**
-```CPP
+```cpp
#include
#include
@@ -809,7 +836,7 @@ void loop() {
}
```
-### **Project 2 - Remote control car**
+### Project 2 - Remote control car
**Overview**
@@ -849,7 +876,7 @@ Please follow the same color line to connect each sensor on the board. Please co
**Code**
-```CPP
+```cpp
#include
#include
#include
@@ -926,7 +953,7 @@ void delayUntil(unsigned long elapsedTime) {
}
```
-### **Project 3 - Fingerprint unlocks treasure box -Seeed Studio XIAO**
+### Project 3 - Fingerprint unlocks treasure box -Seeed Studio XIAO
**Overview**
@@ -995,7 +1022,7 @@ If other people put their finger on it, the LED ring will turn to red colour and
**Code**
-```C
+```cpp
#include
#include
#include
@@ -1147,7 +1174,7 @@ void colorWipe(uint32_t c, uint8_t wait) {
}
```
-### **Project 4 - Seeed Studio Expansion Base for XIAO - mjolnir**
+### Project 4 - Seeed Studio Expansion Base for XIAO - mjolnir
**Overview**
@@ -1183,7 +1210,7 @@ Please connect the expansion board and the required modules with Grove wire, con
**Code**
-```C
+```cpp
#include
#include "ATSerial.h"
#include "Protocol.h"
@@ -1272,7 +1299,7 @@ void setup() {
}
```
-### **Project 5 - Air Quality Sensor Hub - Seeed Studio Expansion Base for XIAO**
+### Project 5 - Air Quality Sensor Hub - Seeed Studio Expansion Base for XIAO
**Overview**
@@ -1310,7 +1337,7 @@ Please connect each sensor as shown in the diagram. Connect the CO2 sensor and P
**Code**
-```C
+```cpp
#include
#include
#include
@@ -1501,7 +1528,7 @@ void loop() {
}
```
-### **Project 6 - Seeed Studio Expansion Base for XIAO - Heart Rate**
+### Project 6 - Seeed Studio Expansion Base for XIAO - Heart Rate
**Overview**
@@ -1536,7 +1563,7 @@ As shown in the figure below, connect the heart rate sensor to the I2C interface
**Code**
-```C
+```cpp
#include
#include
@@ -1584,6 +1611,12 @@ void loop() {
- **[SCH]**[**Seeed Studio Expansion Base for XIAO_v1.0_200824**](https://files.seeedstudio.com/wiki/Seeeduino-XIAO-Expansion-Board/document/Seeeduino%20XIAO%20Expansion%20board_v1.0_200824.sch)
- **[BRD]**[**Seeed Studio Expansion Base for XIAO_v1.0_200824**](https://files.seeedstudio.com/wiki/Seeeduino-XIAO-Expansion-Board/document/Seeeduino%20XIAO%20Expansion%20board_v1.0_200824.brd)
+## FAQ
+
+### Q1: Does the PMIC on the XIAO Expansion board output power on the 5V pins?
+
+The PMIC does not output power; the 5V is directly sourced from the USB. The current provided on the 5V pin is equivalent to the current available from the USB connection.
+
## Tech Support & Product Discussion
Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/XIAO-RP2040-EI.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/XIAO-RP2040-EI.md
index cb1ed7cc3ac3..c820e4f1858e 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/XIAO-RP2040-EI.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/XIAO-RP2040-EI.md
@@ -48,7 +48,7 @@ Open the Arduino IDE, navigate to Sketch -> Include Library -> Manage Libraries.
After the installation, copy the following code run it.
-```c++
+```cpp
#include
#include "MMA7660.h"
MMA7660 accelemeter;
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-Arduino.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-Arduino.md
index 598457f6c55f..9eee9e902253 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-Arduino.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-Arduino.md
@@ -108,7 +108,7 @@ Connect a pushbutton to Pin D0 and an LED to Pin 25. Then upload the following c
Please note that the operating voltage of the Seeed Studio XIAO RP2040 is 3.3V, if you connect the sensor to 5V incorrectly, the motherboard may not work properly.
:::
-```c++
+```cpp
const int buttonPin = D0; // the number of the pushbutton pin
const int ledPin = 25; // the number of the LED pin
@@ -140,7 +140,7 @@ void loop() {
Connect a potentiometer to Pin A0 and an LED to Pin 25. Then upload the following code to control the blinking interval of the LED by rotating the potentiometer knob.
-```c++
+```cpp
const int sensorPin = A0;
const int ledPin = 25;
void setup() {
@@ -167,7 +167,7 @@ int sensorValue = analogRead(sensorPin);
Use pin D6 as the TX pin of UART and pin D7 as RX pin of UART to send the "Hello World!" message
-```c++
+```cpp
void setup() {
Serial.begin(115200);
while (!Serial);
@@ -193,7 +193,7 @@ Type the keyword "Adafruit_NeoPixel" library in Ardunio library Manager and inst
- **Step 2.** Copy the codes to Arduino and click the **Upload** button to upload.
-```c++
+```cpp
#include
int Power = 11;
@@ -257,7 +257,7 @@ Type the keyword "U8G2" library in Ardunio library Manager and install the laste
- **Step 2.** Copy the codes to Arduino and click the **Upload** button to upload.
-```c++
+```cpp
#include
#include
@@ -314,7 +314,7 @@ Type the keyword "Adafruit_SSD1306" library in Ardunio library Manager and insta
- **Step 2.** Copy the codes to Arduino and click the **Upload** button to upload.
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-CircuitPython.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-CircuitPython.md
index bc52375f3cc2..d3782e2bdac6 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-CircuitPython.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-CircuitPython.md
@@ -58,7 +58,7 @@ Now you have successfully installed the CircuitPython to the Seeed Studio XIAO R
**Step 3** Copy and upload the following codes:
-```c++
+```cpp
"""Example for Pico. Blinks the built-in LED."""
import time
import board
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-MicroPython.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-MicroPython.md
index a848885763f4..93ddb6bf2d03 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-MicroPython.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/XIAO-RP2040-with-MicroPython.md
@@ -64,7 +64,7 @@ Click on the Install button and close this page when the installation status say
- **Step 3**. Copy the following codes to Thonny.
-```c++
+```cpp
from machine import Pin, Timer
led = Pin(25, Pin.OUT)
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md
index 3ec2a496823e..eb79da2b34f0 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md
@@ -55,7 +55,7 @@ enable_uart=1
- **Step 2.** Copy the following code to Arduino IDE and upload the code into Seeed Studio XIAO SAMD21.
-```c++
+```cpp
uint32_t baud;
uint32_t old_baud;
void setup() {
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Introduction.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Introduction.md
index 8319b09e17b5..9f0e8dd54394 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Introduction.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Introduction.md
@@ -692,6 +692,10 @@ easily integrate XIAO into their own boards for rapid mass production.
- **[PDF]** [Seeed Studio XIAO nRF52840 Schematic](https://files.seeedstudio.com/wiki/XIAO-BLE/Seeed-Studio-XIAO-nRF52840-Sense-v1.1.pdf)
+- **[ZIP]** [Seeed Studio XIAO nRF52840 KiCAD file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_SCH&PCB.zip)
+
+- **[ZIP]** [Seeed Studio XIAO nRF52840 Eagle file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_KiCAD.zip)
+
- **[DXF]** [Seeed Studio XIAO nRF52840 Dimension in DXF](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-DXF.zip)
- **[LBR]** [Seeed Studio XIAO nRF52840 Eagle footprint](https://files.seeedstudio.com/wiki/XIAO-BLE/Seeed-Studio-XIAO-nRF52840-footprint-eagle.lbr)
@@ -706,12 +710,18 @@ easily integrate XIAO into their own boards for rapid mass production.
- **[PDF]** [Seeed Studio XIAO nRF52840 Sense Schematic](https://files.seeedstudio.com/wiki/XIAO-BLE/Seeed-Studio-XIAO-nRF52840-Sense-v1.1.pdf)
+- **[ZIP]** [Seeed Studio XIAO nRF52840 KiCAD file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_SCH&PCB.zip)
+
+- **[ZIP]** [Seeed Studio XIAO nRF52840 Eagle file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_KiCAD.zip)
+
- **[DXF]** [Seeed Studio XIAO nRF52840 Sense Dimension in DXF](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-Sense-DXF.zip)
- **[LBR]** [Seeed Studio XIAO nRF52840 Sense Eagle footprint](https://files.seeedstudio.com/wiki/XIAO-BLE/Seeed-Studio-XIAO-nRF52840-Sense-footprint-eagle.lbr)
- **[XLSX]** [Seeed Studio XIAO nRF52840 Sense pinout sheet](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-Senese-pinout_sheet.xlsx)
+- **[STEP]** [Seeed Studio XIAO nRF52840 Sense 3D Model](https://files.seeedstudio.com/wiki/XIAO-BLE/seeed-studio-xiao-nrf52840-3d-model.zip)
+
- **[ZIP]** [Seeed Studio XIAO nRF52840 Sense Certification files](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-Sense-Certification.zip)
### Seeed Studio XIAO ESP32C3 Open-Source Materials
@@ -740,10 +750,16 @@ easily integrate XIAO into their own boards for rapid mass production.
### Seeed Studio XIAO ESP32C6 Open-Source Materials
+- **[PDF]** [ESP32C6 datasheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/res/esp32-c6_datasheet_en.pdf)
+
- **[ZIP]** [Seeed Studio XIAO ESP32C6 KiCAD Libraries](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/XIAO-ESP32-C6_v1.0_SCH&PCB_24028.zip)
- **[PDF]** [Seeed Studio XIAO ESP32C6 Schematic](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/XIAO-ESP32-C6_v1.0_SCH_PDF_24028.pdf)
+- **[XLSX]** [Seeed Studio XIAO ESP32C6 pinout sheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/res/XIAO_ESP32C6_Pinout.xlsx)
+
+- **[ZIP]** [Seeed Studio XIAO ESP32C6 Certification files](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32C6/res/SeeedStudio_XIAO_ESP32C6_Certification.zip)
+
### Seeed Studio XIAO ESP32S3 Open-Source Materials
- **[PDF]** [Seeed Studio XIAO ESP32S3 Schematic](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_SCH_v1.1.pdf)
@@ -758,6 +774,10 @@ easily integrate XIAO into their own boards for rapid mass production.
- **[XLSX]** [Seeed Studio XIAO ESP32S3 pinout sheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_Sense_Pinout.xlsx)
+- **[STEP]** [Seeed Studio XIAO ESP32S3 3D Model](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/seeed-studio-xiao-esp32s3-3d_model.zip)
+
+- **[ZIP]** [Seeed Studio XIAO ESP32S3 Certification files](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_Certification.zip)
+
### Seeed Studio XIAO ESP32S3 Sense Open-Source Materials
- **[PDF]** [Seeed Studio XIAO ESP32S3 Sense Schematic](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_ExpBoard_v1.0_SCH.pdf)
@@ -778,6 +798,10 @@ easily integrate XIAO into their own boards for rapid mass production.
- **[STP]** [XIAO ESP32S3 Sense housing design (bottom)](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO-ESP32S3-Sense-housing-design(bottom).stp)
+- **[STEP]** [Seeed Studio XIAO ESP32S3 Sense 3D Model](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/seeed-studio-xiao-esp32s3-sense-3d_model.zip)
+
+- **[ZIP]** [Seeed Studio XIAO ESP32S3 Certification files](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/XIAO_ESP32S3_Certification.zip)
+
## Tech Support & Product Discussion
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Projects.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Projects.md
index 5de00177bf59..b708662518d2 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Projects.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Series_Projects.md
@@ -53,14 +53,17 @@ Here is a collection of hands-on preparation content for each XIAO, where you ca
@@ -322,6 +328,53 @@ This section aims to list the tutorials in the Wiki on some of the function poin
+#### Seeed Studio XIAO ESP32C6
+
+
+
+
+
Seeed Studio XIAO ESP32C6
+
+
+
XIAO ESP32C6 WiFi Usage
+
XIAO ESP32C6 BLE Usage
+
XIAO ESP32C6 & AWS IoT
+
+
+
+
+
+
+
+
In this tutorial, we will explore how to leverage the XIAO ESP32C6's Wi-Fi capabilities to connect to a Wi-Fi network and perform basic networking tasks
+
In this tutorial, we will focus on the basic features of the XIAO ESP32C6's Bluetooth capabilities, such as how to scan for nearby Bluetooth devices, how to establish a Bluetooth connection, and how to transmit and receive data over a Bluetooth connection.
+
This Wiki serves as a comprehensive guide to deploying an advanced IoT system that harnesses the power of AWS services and the XIAO ESP32C6 microcontroller to monitor and analyze environmental data.
+
+
### Platform Support for XIAO Series
This section will list the major platforms supported by XIAO, including PlatformIO, MicroPython, CircuitPython. support is updated in real time.
@@ -467,12 +520,84 @@ This section will list the major platforms supported by XIAO, including Platform
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/XIAO-BLE-Sense-Bluetooth-Usage.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/XIAO-BLE-Sense-Bluetooth-Usage.md
index 92a603c34c80..c0c5b7d7e6d4 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/XIAO-BLE-Sense-Bluetooth-Usage.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/XIAO-BLE-Sense-Bluetooth-Usage.md
@@ -88,7 +88,7 @@ In this example, we are going to connect the Seeed Studio XIAO nF52840 (Sense) a
Please paste this code below into the Arduino IDE and upload it to the Seeed Studio XIAO nRF52840.
-```c++
+```cpp
#include
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy LED Service
@@ -163,7 +163,7 @@ void loop() {
The key to the implementation of this example is the following paragraph.
-```c++
+```cpp
while (central.connected()) {
if (switchCharacteristic.written()) {
if (switchCharacteristic.value()) {
@@ -228,7 +228,7 @@ Please open the example code in the library and upload it to Seeed Studio XIAO n
-```c++
+```cpp
//Radar_with_XIAOBLE_example
#include
@@ -307,7 +307,7 @@ void loop() {
In this example, the function that sends data to the mobile device is `setValue()`. If you want to get a real time display of the data you need to add `BLENotify` to this code below. The last parameter, 20, indicates the maximum length of data you can send.
-```c++
+```cpp
BLEStringCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify, 20);
```
@@ -361,7 +361,7 @@ Before you start, please be prepared to do the following.
Please select one of the XIAO nRF52840, which does not require any device to be connected, and upload the program below directly.
-```c++
+```cpp
#include
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy LED Service
@@ -448,7 +448,7 @@ Put the Seeed Studio XIAO nRF52840 on the expansion board.
And for this purpose the XIAO with the extension board connected uploads the following procedure.
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/XIAO-BLE-PDM-EI.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/XIAO-BLE-PDM-EI.md
index eb18da76e0b2..fef4e01354ec 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/XIAO-BLE-PDM-EI.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/XIAO-BLE-PDM-EI.md
@@ -293,7 +293,7 @@ First, we need to define a threshold. We know that the predictions go from 0.0 t
First, define some variables. I've define these right after the included libraries:
-```C
+```cpp
/* threshold for predictions */
float threshold = 0.7;
@@ -320,7 +320,7 @@ int oldLED;
Next, in the loop() function, inside the for loop instruction, where we loop thought the CLASSIFIER_LABEL_COUNT (around line 129 - already with the lines above):
-```C
+```cpp
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
```
@@ -328,7 +328,7 @@ We use a if instruction to check for the classification value . If it's above t
The complete for loop, with our additions, is:
-```C
+```cpp
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(" %s: %.5f\n", result.classification[ix].label, result.classification[ix].value);
//lets light up some LEDS
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE-Sense-Pin-Multiplexing.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE-Sense-Pin-Multiplexing.md
index b9f76a6f8189..45dd192cd5a3 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE-Sense-Pin-Multiplexing.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE-Sense-Pin-Multiplexing.md
@@ -20,7 +20,7 @@ Seeed Studio XIAO nRF52840 (Sense) has rich interfaces. There are **11 digital I
Connect a pushbutton to Pin D6 and an LED to Pin D10. Then upload the following code to control the ON/OFF of LED using the pushbutton.
-```c++
+```cpp
const int buttonPin = 6; // pushbutton connected to digital pin 6
const int ledPin = 10; // LED connected to digital pin 10
@@ -82,7 +82,7 @@ void loop() {
Connect a potentiometer to Pin A5 and an LED to Pin D10. Then upload the following code to control the blinking interval of the LED by rotating the potentiometer knob.
-```c++
+```cpp
const int sensorPin = 5;
const int ledPin = 10;
void setup() {
@@ -109,7 +109,7 @@ void loop() {
Use Serial1 to use the UART via GPIO instead of USB. You can use both concurrently as well.
Use pin D6 as the TX pin of UART and pin D7 as RX pin of UART to send the "Hello World!" message.
-```c++
+```cpp
void setup() {
Serial1.begin(115200);
while (!Serial1);
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE_CircutPython.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE_CircutPython.md
index 820f9ec10efb..c84f58400fae 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE_CircutPython.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO-BLE_CircutPython.md
@@ -54,7 +54,7 @@ Now you have successfully install the CircuitPython to the Seeed Studio XIAO nRF
**Step 3** Copy and upload the following codes:
-```c++
+```cpp
"""Example for Seeed Studio XIAO nRF52840. Blinks the built-in LED."""
import time
import board
diff --git a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO_BLE.md b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO_BLE.md
index 96028424831e..e7b437bf4ccb 100644
--- a/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO_BLE.md
+++ b/docs/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/XIAO_BLE.md
@@ -2,12 +2,12 @@
description: Getting Started with Seeed Studio XIAO nRF52840 (Sense)
title: Getting Started with XIAO nRF52840
keywords:
-- xiao
+ - xiao
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /XIAO_BLE
last_update:
- date: 1/11/2023
- author: shuxu hu
+ date: 2024-07-16T06:09:39.067Z
+ author: Spencer
---
# Getting Started with Seeed Studio XIAO nRF52840 (Sense)
@@ -270,16 +270,32 @@ Currently for this issue, we recommend that users do not turn off the ADC functi
+### Q4: How does the red light behave when powered on?
+
+
+
+The `P0.17` pin is used to control the red indicator light behavior, indicating the charging status:
+
+- Low level: when **charging** is in progress.
+- High level: when the battery is either **not charging** or **fully charged**.
+
+When it is at a low level, the `RED_CHG` LED will light up.
+
+For more details, check the PMIC datasheet: [BQ25100](https://www.ti.com/lit/ds/symlink/bq25100a.pdf) and [XIAO nRF52840 datasheet](https://files.seeedstudio.com/wiki/XIAO-BLE/nRF52840_PS_v1.5.pdf).
+
## Resources
### Seeed Studio XIAO nRF52840
+- **[Ebook]** [XIAO: Big Power, Small Board Mastering Arduino and TinyML](https://mjrovai.github.io/XIAO_Big_Power_Small_Board-ebook/)
+
- **[PDF]** [nRF52840 datasheet](https://files.seeedstudio.com/wiki/XIAO-BLE/nRF52840_PS_v1.5.pdf)
- **[PDF]** [Seeed Studio XIAO nRF52840 Schematic](https://files.seeedstudio.com/wiki/XIAO-BLE/Seeed-Studio-XIAO-nRF52840-Sense-v1.1.pdf)
-
-- **[Ebook]** [XIAO: Big Power, Small Board Mastering Arduino and TinyML](https://mjrovai.github.io/XIAO_Big_Power_Small_Board-ebook/)
+- **[ZIP]** [Seeed Studio XIAO nRF52840 KiCAD file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_SCH&PCB.zip)
+
+- **[ZIP]** [Seeed Studio XIAO nRF52840 Eagle file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_KiCAD.zip)
- **[DXF]** [Seeed Studio XIAO nRF52840 Dimension in DXF](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-DXF.zip)
@@ -295,8 +311,9 @@ Currently for this issue, we recommend that users do not turn off the ADC functi
- **[PDF]** [Seeed Studio XIAO nRF52840 Sense Schematic](https://files.seeedstudio.com/wiki/XIAO-BLE/Seeed-Studio-XIAO-nRF52840-Sense-v1.1.pdf)
-
-- **[Ebook]** [XIAO: Big Power, Small Board Mastering Arduino and TinyML](https://mjrovai.github.io/XIAO_Big_Power_Small_Board-ebook/)
+- **[ZIP]** [Seeed Studio XIAO nRF52840 KiCAD file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_SCH&PCB.zip)
+
+- **[ZIP]** [Seeed Studio XIAO nRF52840 Eagle file](https://files.seeedstudio.com/wiki/XIAO-BLE/SeeedStudio_XIAO_nRF52840_v1.1_KiCAD.zip)
- **[DXF]** [Seeed Studio XIAO nRF52840 Sense Dimension in DXF](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-Sense-DXF.zip)
@@ -304,9 +321,9 @@ Currently for this issue, we recommend that users do not turn off the ADC functi
- **[XLSX]** [Seeed Studio XIAO nRF52840 Sense pinout sheet](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-Senese-pinout_sheet.xlsx)
-- **[ZIP]** [Seeed Studio XIAO nRF52840 Sense Certification files](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-Sense-Certification.zip)
+- **[STEP]** [Seeed Studio XIAO nRF52840 Sense 3D Model](https://files.seeedstudio.com/wiki/XIAO-BLE/seeed-studio-xiao-nrf52840-3d-model.zip)
-- **[STEP]** [Seeed Studio XIAO nRF52840 Sense 3D Model](https://grabcad.com/library/seeed-studio-xiao-nrf52840-sense-1)
+- **[ZIP]** [Seeed Studio XIAO nRF52840 Sense Certification files](https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO-nRF52840-Sense-Certification.zip)
## Course Resources
diff --git a/docs/Sensor/Seeeduino Series/Seeeduino/Seeeduino_v4.0.md b/docs/Sensor/Seeeduino Series/Seeeduino/Seeeduino_v4.0.md
index 1592765f493f..e490883441b1 100644
--- a/docs/Sensor/Seeeduino Series/Seeeduino/Seeeduino_v4.0.md
+++ b/docs/Sensor/Seeeduino Series/Seeeduino/Seeeduino_v4.0.md
@@ -265,7 +265,7 @@ Connect your ESP8266 WiFi module to the Seeeduino board as follows (See the phot
**2.** Open the Arduino IDE
**3.** Upload a blank program to your board, or make sure that the program it has does not user any Serial functions.
-```C++
+```cpp
void setup()
{
diff --git a/docs/Sensor/Seeeduino Series/Seeeduino_LoRAWAN.md b/docs/Sensor/Seeeduino Series/Seeeduino_LoRAWAN.md
index 314e5b43a755..159528ddfafd 100644
--- a/docs/Sensor/Seeeduino Series/Seeeduino_LoRAWAN.md
+++ b/docs/Sensor/Seeeduino Series/Seeeduino_LoRAWAN.md
@@ -237,7 +237,7 @@ Charge status pin and positive pin of the battery had beed connect to A4 and A5,
Copy and upload the below code to detect the battery status.
-```c++
+```cpp
// battey of Seeeduino LoRaWAN
const int pin_battery_status = A5;
@@ -356,7 +356,7 @@ After both of the sketch is well uploaded, open the serial monitor of the receiv
* Step 4. Download [DHT Library](https://files.seeedstudio.com/wiki/Seeeduino_LoRa/res/DHT.zip) and unzip to arduino library folder.
* Step 5. Copy below code to arduino IDE and upload.
-```c++
+```cpp
#include
#include "DHT.h"
@@ -450,7 +450,7 @@ void loop(void)
* Step 1. Please refer to [User Manual](https://files.seeedstudio.com/wiki/LoRaWAN_Gateway-868MHz_Kit_with_Raspberry_Pi_3/res/RHF-UM01649-IoT-Discovery-User-Manual-seeed-v2.1.pdf) Session 3.2.3 to setup the gateway.
* Step 2. For seeeduino Lorawan, Please open your Arduino IDE and click on **File > Examples > LoRaWAN > OTAA** and refer the code.
-```c++
+```cpp
#include
@@ -537,7 +537,7 @@ void loop(void)
* Step 1. Copy below code you Seeeduino LoRaWAN W/GPS.
-```c++
+```cpp
void setup()
{
Serial2.begin(9600);
@@ -565,7 +565,7 @@ void loop()
Thanks for **Todd Krein** for sharing the example in Github. Please download the [TinyGPS++ library](https://files.seeedstudio.com/wiki/Seeeduino_LoRa/res/TinyGPSPlus-master.zip) and then copy below code to Seeeduino Lorawan.
-```c++
+```cpp
#define USE_GPS 1
#include "LoRaWan.h"
@@ -746,7 +746,7 @@ void dummy(void)
If you want to check version of you board, please upload below code to your board.
-```c++
+```cpp
void setup()
{
Serial1.begin(9600);
diff --git a/docs/Sensor/SenseCAP/Industrial-IoT-SenseCAP-Introduction.md b/docs/Sensor/SenseCAP/Industrial-IoT-SenseCAP-Introduction.md
index b79c8055c716..fff6dcbf6c83 100644
--- a/docs/Sensor/SenseCAP/Industrial-IoT-SenseCAP-Introduction.md
+++ b/docs/Sensor/SenseCAP/Industrial-IoT-SenseCAP-Introduction.md
@@ -6,8 +6,8 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /SenseCAP_introduction
last_update:
- date: 9/11/2023
- author: Jessie
+ date: 7/23/2024
+ author: Frank
---
@@ -21,77 +21,87 @@ In addition, SenseCAP product line also provides an array of software, cloud ser
enables users to quickly respond to changes in their environment and make data-driven decisions.
-## Hardware Products
-
-
-
-
-### LoRaWAN® Devices
-
-LoRaWAN® series comprise sensors and gateways which support LoRaWAN® protocol and are LoRaWAN® certified. The sensors collect environmental data and then transmit the data to the LoRaWAN® network servers through the gateway.
-These products are suitable for applications that need the wireless transmission of data across ultra-wide distance – 9.6 km in line of sight scene and 2 km in urban scenes, according to our testing. As well, the low power consumption features support a battery lifespan of an average of 3 years, some sensor nodes can last more than 8 years depending on the sensors’ power consumption.
-
-
-
-
-
-
+## Wild IoT
+Wild IoT refers to the technology of deploying sensor networks in natural environments to monitor and collect various environmental data in real-time. This data includes temperature, humidity, air pressure, light intensity, soil moisture, etc., which aid in scientific research, ecological conservation, and resource management.
-#### LoRaWAN® Gateway
+### Why Are Industrial Sensors Needed?
-SenseCAP offers two types of gateways suitable for indoor and outdoor use, and users can choose cellular LTE or Ethernet to transmit data.
+1. **Durability and Reliability**: The outdoor environment is complex and variable. Industrial sensors, with their high temperature, humidity, and corrosion resistance, can operate stably in harsh conditions for extended periods.
+2. **High-Precision Data Collection**: Scientific research and environmental monitoring require high-precision data. Industrial sensors' high accuracy and stability meet these demands.
+3. **Low Power Consumption and Long Battery Life**: Power supply can be challenging in the wild. Industrial sensors are typically designed as low-power devices, allowing for prolonged operation and reducing the frequency of maintenance and battery replacement.
-
-
-
-
+### How Do They Work?
+1. **Data Collection**: Industrial sensors are installed in outdoor environments to collect real-time data on temperature, humidity, air pressure, etc.
+2. **Data Transmission**: The collected data is transmitted to gateways using low-power wide-area network (LPWAN) technologies like LoRaWAN.
+3. **Data Processing and Storage**: Gateways send the data to the cloud platform for processing, storage, and analysis.
+4. **Data Visualization and Application**: Users can view the data in real-time through applications or dashboards on the cloud platform, aiding in analysis and decision-making.
+## Hardware Products
+### SenseCAP T1000 Tracker
+
-#### LoRaWAN® Sensors
+[**SenseCAP T1000**](https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-A-p-5697.html) is a compact LoRaWAN® tracker that utilizes GNSS/Wi-Fi/Bluetooth for precise indoor & outdoor location tracking. It boasts self-geo-adaptive capabilities, local data storage, and an impressive months of battery life. Additionally, it is equipped with temperature, light, and motion sensors, making it ideal for a variety of location-based applications.
+
-SenseCAP S210X is a series of wireless LoRaWAN® sensors. It can cover a transmission range of 2km in urban scenes and 10km in line-of-sight scenes while keeping lower power consumption during the transmission process. Together with a replaceable battery that supports up to 10 years of usage and an industrial IP66 enclosure. It supports -40 ~ 85℃ operating temperature and can be deployed in harsh environments. SenseCAP S210X is compatible with LoRaWAN® V1.0.3 protocol and can work with LoRaWAN® gateway.
+### LoRaWAN Sensor
+#### SenseCAP S210x Series Sensors
+SenseCAP S210X is a series of wireless LoRaWAN® sensors. It can cover a transmission range of 2km in urban scenes and 10km in line-of-sight scenes while keeping lower power consumption during the transmission process. Together with a replaceable battery that supports up to 10 years of usage and an industrial IP66 enclosure. It supports -40 ~ 85℃ operating temperature and can be deployed in harsh environments. SenseCAP S210X is compatible with LoRaWAN® V1.0.3 protocol and can work with LoRaWAN® gateway.
|Air Temp & Humidity|Light|Air TH & CO2|Soil Moisture & Temp|
|------------------|--------------------------|-----------------------|-----------------------|
|||||
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2101-LoRaWAN-Air-Temperature-and-Humidity-Sensor-p-5354.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2102-LoRaWAN-Light-Intensity-Sensor-p-5355.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2103-LoRaWAN-CO2-Temperature-and-Humidity-Sensor-p-5356.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2106-p-5647.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2104-LoRaWAN-Soil-Temperature-and-Moisture-Sensor-p-5357.html)
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2105-LoRaWAN-Soil-Temperature-Moisture-and-EC-Sensor-p-5358.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2106-p-5647.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2107-Temperature-Sensor-p-5807.html)
|
[Get One Now!](https://www.seeedstudio.com/sensecap-s2120-lorawan-8-in-1-weather-sensor-p-5436.html)
|
-
-
-
-[SenseCAP A1101](https://www.seeedstudio.com/SenseCAP-A1101-LoRaWAN-Vision-AI-Sensor-p-5367.html) - LoRaWAN Vision AI Sensor is a TinyML Edge AI enabled smart image sensor. It supports a variety of AI models such as image recognition, people counting, target detection, meter recoignition etc. It also supports training models with TensorFlow Lite.
-
+|Soil Moisture & Temperature & Pore & EC|Soil Moisture & Temp & EC|PH|PT1000 Temperature|
+|------------------|--------------------------|-----------------------|--------------------------|
+||||||
+|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2108-Soil-Moisture-Temperature-and-Pore-EC-Sensor-p-5825.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2105-LoRaWAN-Soil-Temperature-Moisture-and-EC-Sensor-p-5358.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2106-p-5647.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2107-Temperature-Sensor-p-5807.html)
+#### SenseCAP S2120 8-in-1 Weather Sensor
-### Data Logger/Sensor Hub
+
+[SenseCAP LoRaWAN S2120 Weather Station](https://www.seeedstudio.com/sensecap-s2120-lorawan-8-in-1-weather-sensor-p-5436.html) collects and uploads air temperature, humidity, wind speed/direction, Rainfall Intensity, light intensity, UV index, and barometric pressure data supported by worldwide LoRaWAN networks. The S2120 weather station is suitable for applications in gardens, agriculture, meteorology, urban environmental monitoring, and other scenarios. It also enables low maintenance cost for its ultra-low power consumption, reliable performance, built-in Bluetooth for OTA configuration and remote device management.
-Data Logger serves as the bridge to up to 200+ sensors covering industrial-level sensors, Grove sensors and Analog/RS485/GPIO sensors.
+
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2100-LoRaWAN-Data-Logger-p-5361.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-Sensor-Hub-4G-Data-Logger-with-builtin-battery-p-4852.html)
|
+[The SenseCAP A1101](https://www.seeedstudio.com/SenseCAP-A1101-LoRaWAN-Vision-AI-Sensor-p-5367.html) - LoRaWAN Vision AI Sensor is a TinyML Edge AI enabled smart image sensor. It supports a variety of AI models such as image recognition, people counting, target detection, meter recoignition etc. It also supports training models with TensorFlow Lite.
+
-## ✨ Contributor Project
+### Sensor Builder
-- We have a task list for updating this page, which is categorized under our [contributor project](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=30957479), as we are dedicated to enhancing the user experience and providing better support through the development of our wiki platform.
-- [Your contribution to this page](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=33960915) is essential to us! We really value your input and would greatly appreciate your assistance in generating ideas.
+#### SenseCAP S2110 Sensor Builder
+
+
+
+SenseCAP S2110 Sensor Builder a groundbreaking solution that enables the fusion of industrial-grade modules and maker-level modules. It is an open-source tool which has the ability to build RS485 functional modules with 500+ Grove modules.
+
+
+
+### Data Logger
+
+Data Logger serves as the bridge to up to 200+ sensors covering industrial-level sensors, Grove sensors and Analog/RS485/GPIO sensors.
+
+
+
+SenseCAP offers two types of Data logger:
+
+|||
+|------------------|--------------------------|
+|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2100-LoRaWAN-Data-Logger-p-5361.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-Sensor-Hub-4G-Data-Logger-with-builtin-battery-p-4852.html)
|
+
+
+### SenseCAP Decoder
+
+SenseCAP decoder is used for decoding the LoRaWAN messages sent from the SenseCAP LoRaWAN® devices. After decoding, users' applications will get more friendly and readable messages.
+
## Software Services
### SenseCAP Portal
-
SenseCAP Portal is designed for customers to manage devices, data, and Access Key. After creating an account for your own, you are able to bind all devices you have on this portal. To learn about the quickstart and guide of the portal, check out the [SenseCAP document center – Portal](https://wiki.seeedstudio.com/Cloud_Chain/SenseCAP_Portal/QuickStart/).
-
-
### SenseCAP Mate APP
[SenseCAP Mate APP](https://wiki.seeedstudio.com/Cloud_Chain/SenseCAP_Mate_APP/SenseCAP_APP) is a powerful APP for data visualization and remote device management.
@@ -163,8 +209,15 @@ SenseCAP Portal is designed for customers to manage devices, data, and Access Ke
* Set threshold values: focus on the data you need to take action for - coming soon
* Send alarms if data is out of the safe range - coming soon
+
+
+### SenseCAP AI
-
+[SenseCAP AI](https://wiki.seeedstudio.com/How_to_Use_SenseCAP_AI_on_SenseCAP_Portal_and_SenseCAP_Mate_APP/) is the AI-powered solution that helps you make the most of your sensor data and unlock the full potential of your sensor data. By connecting your SenseCAP sensors to the SenseCAP platform, you can easily collect and analyze data on environmental factors such as temperature, humidity, light, and air quality. Meanwhile, our powerful AI algorithms then use this data to provide you with actionable insights and recommendations that can help you optimize your operations, reduce costs, and improve efficiency.
+
+
+
+Whether you're looking to monitor air quality, optimize crop growth, or improve efficiency, SenseCAP AI has the tools you need to succeed. SenseCAP AI is currently released on [SenseCAP Portal](https://sensecap.seeed.cc/portal/#/login) and [SenseCAP Mate App](https://sensecap-mate-download.seeed.cc/), where users can use it at any time. With our easy-to-use platform and App, you can quickly connect your sensors and start receiving valuable insights in just minutes.
### SenseCAP API
@@ -173,9 +226,49 @@ With the use of the SenseCAP Application Programming Interface, you are able to
* With HTTP API, you can manage LoRa and NB-IoT devices, to get RAW data or historical data.
* With MQTT API, you can subscribe to the sensor’s real-time measurement data through the MQTT protocol.
* With WebSocket API, you can get real-time measurement data of sensors through Websocket protocol.
+
To learn more about the guide and references of SenseCAP API, kindly visit [SenseCAP Document Center – API](https://sensecap-docs.seeed.cc/introduction.html).
+## Applications
+
+### 5 Minutes to Develop an Industrial LoRaWAN Sensor
+
+Let's quickly build an industrial-grade LoRaWAN wireless sensor for direct commercial use in 5 minutes.
+
+
+
+
+When prototyping for a commercial data acquisition project, it takes a lot of time and cost to prototype. For example, we need to make a wireless pH sensor for an agricultural project. We need to 1) Find the development board and sensor probe. 2) Write code. 3) 3D print the shell. 4) Final assembly test. By the time we complete the prototype, it can take days or even weeks.
+
+Today, we can use a wireless LoRa collector, set up sensors to connect to an app via Bluetooth and build a product in five minutes, directly into a commercial project.
+
+
+
+### Tango with Home Assistant and SenseCAP Sensors
+
+
+
+
+In this series of articles, I will share how I build a decent smart home in Home Assistant and use sensors from Seeed Studio SenseCAP products. And this is the first milestone.
+
+
+
+
+## ✨ Contributor Project
+
+- We have a task list for updating this page, which is categorized under our [contributor project](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=30957479), as we are dedicated to enhancing the user experience and providing better support through the development of our wiki platform.
+- [Your contribution to this page](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=33960915) is essential to us! We really value your input and would greatly appreciate your assistance in generating ideas.
+
+
+
+
## SenseCAP Tech Support
Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Indicator/Development_Tutorial/SenseCAP_Indicator_Arduino.md b/docs/Sensor/SenseCAP/SenseCAP_Indicator/Development_Tutorial/SenseCAP_Indicator_Arduino.md
index 9c6f3756bcf4..b0a09112eefd 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Indicator/Development_Tutorial/SenseCAP_Indicator_Arduino.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Indicator/Development_Tutorial/SenseCAP_Indicator_Arduino.md
@@ -2,14 +2,19 @@
description: Develop SenseCAP Indicator both chips with Arduino
title: Develop both chips with Arduino
keywords:
-- SenseCAP Indicator
+ - SenseCAP Indicator
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /SenseCAP_Indicator_ESP32_Arduino
last_update:
date: 9/24/2023
author: Hendra
+craft: true
---
+:::danger
+There are some issues while you running this wiki. We are still looking for someone who can help us improve this firmare, under our [Contributor Program](https://github.com/orgs/Seeed-Studio/projects/6/views/1?pane=issue&itemId=70900433)
+:::
+
# Develop SenseCAP Indicator both chips with Arduino
The SenseCAP Indicator is a 4-inch touch screen device that is powered by the ESP32 and RP2040 dual MCUs. ESP32 and RP2040 are both highly capable microcontrollers that offer a range of features and functions.
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Indicator/Introduction.md b/docs/Sensor/SenseCAP/SenseCAP_Indicator/Introduction.md
index 997396dc0d37..367696ac689e 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Indicator/Introduction.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Indicator/Introduction.md
@@ -1,17 +1,17 @@
---
-description: Get Started with SenseCAP Indicator Introduction
-title: Introduction
+description: Get Started with SenseCAP Indicator
+title: Get Started with SenseCAP Indicator
keywords:
- Get Started SenseCAP Indicator
-image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+image: https://files.seeedstudio.com/wiki/SenseCAP/SenseCAP_Indicator/SenseCAP_Indicator_1.png
slug: /Sensor/SenseCAP/SenseCAP_Indicator/Get_started_with_SenseCAP_Indicator
sidebar_position: 1
last_update:
- date: 11/17/2023
+ date: 7/11/2024
author: Spencer
---
-# **Overview**
+## Overview
@@ -32,7 +32,7 @@ SenseCAP Indicator is a fully open source powerful IoT development platform for
-## **Features**
+## Features
- **Dual MCUs and Rich GPIOs**
Equipped with powerful ESP32S3 and RP2040 dual MCUs and over 400 Grove-compatible GPIOs for flexible expansion options.
@@ -46,23 +46,23 @@ Leverage the extensive ESP32 and Raspberry Pi open source ecosystem for infinite
Seeed Studio also provides one-stop ODM service for quick customization and scale-up to meet various needs.(please contact iot@seeed.cc)
-## **Hardware Overview**
+## Hardware Overview
-### **System Diagram**
+### System Diagram
-### **Button Function**
+### Button Function
- **Short Press:** Turn off /Wake up the screen.
- **Long Press for 3s:** Switch on/Wwitch off the device.
- **Long Press for 10s:** Factory firmware reset.
-### **Grove**
+### Grove
There are two Grove interfaces for connecting Grove modules, providing more possibilities for developers.
@@ -72,13 +72,13 @@ Grove is a modular, standardized connector prototyping system and a strong open
-### **LoRa®**
+### LoRa®
The embedded Semtech SX1262 LoRa® module enables you to build the LoRa® application and connect your local LoRa sensors to the Cloud via Wi-Fi. For example, you could build a LoRa hub device to connect your LoRa sensors to your smart home ecosystem to implement Matter over Wi-Fi. In this way, the LoRa devices could be connected to the Matter ecosystem via Wi-Fi, without the need to buy a new Matter-compatible device.
-## **Specification**
+## Specification
|Screen|3\.95 Inch, Capacitive RGB Touch Screen|
| :- | :- |
@@ -93,7 +93,12 @@ The embedded Semtech SX1262 LoRa® module enables you to build the LoRa® applic
|**LoRa(SX1262**)|
|
-# **Tech Support**
+## Resources
+
+- [**PDF**]: [RP2040 Datasheet](https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf)
+- [**PDF**]: [ESP32-S3 Datasheet](https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/res/esp32-s3_datasheet.pdf)
+
+## Tech Support
**Need help with your SenseCAP Indicator? We're here to assist you!**
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Data_Logger_Intro.md b/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Data_Logger_Intro.md
index 5d119b17ed90..0905386fef53 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Data_Logger_Intro.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Data_Logger_Intro.md
@@ -6,20 +6,46 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /SenseCAP_Data_Logger_Intro
last_update:
- date: 02/28/204
- author: Jessie
+ date: 07/24/2024
+ author: Frank
---
Data Logger serves as the bridge to up to 200+ sensors covering industrial-level sensors, Grove sensors and Analog/RS485/GPIO sensors.
-SenseCAP offers two types of Data logger:
-|||
-|------------------|--------------------------|
-|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2100-LoRaWAN-Data-Logger-p-5361.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-Sensor-Hub-4G-Data-Logger-with-builtin-battery-p-4852.html)
|
+## Hardware Products
+### SenseCAP Sensor Hub Data Logger
+
+SenseCAP Sensor Hub is a compact solution for remote environmental monitoring. It consists of a powerful data logger that can connect a maximum of 40 RS-485 sensors and a wide range of sensor selection, you can use it for applications like weather station, air quality monitoring. With IP66 and solar power supply, you can count on it to provide a reliable and nonvolatile data collection service. Two versions of the SenseCAP Sensor Hub Data Logger: 2G and 4G, both are available.
+
+
+
+
+
+[SesneCAP Mobile APP](https://solution.seeedstudio.com/product/software-cloud-sensecap-app/),[SenseCAP web-based portal](https://solution.seeedstudio.com/product/software-cloud-sensecap-portal/), [SenseCAP API](https://sensecap-docs.seeed.cc/introduction.html), and [SenseCAP Dashboard](https://solution.seeedstudio.com/product/software-cloud-sensecap-dashboard/) are also available for quick configuration and devices + data management.
+
+
+### SenseCAP S2100 LoRaWAN Data Logger
+
+
+
+
+The SenseCAP S2100 Data Logger is a versatile device that can connect to MODBUS-RTU RS485/Analog/GPIO sensors, allowing for easy transmission of data to the LoRaWAN network. With its LoRa and IP66 design, this device boasts impressive stability and reliability, and can cover a long transmission range while keeping ultra-low power consumption. It is perfect for outdoor use, and can be powered by battery or connected to a 12V external power supply for even greater flexibility. When connected to the 12V power supply, the replaceable built-in battery acts as a backup power source. Additionally, the S2100 Data Logger is optimized for OTA with built-in Bluetooth, making setup and updates quick and simple. To top it off, the S2110 converter enables the S2100 Data Logger to connect to Grove Sensors, making it an excellent choice for DIY industrial-level LoRaWAN sensors and small-scale deployment.
+
+
## ✨ Contributor Project
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Sensor_Intro.md b/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Sensor_Intro.md
index 613ecaed87f6..48d9175a9532 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Sensor_Intro.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Intro/SenseCAP_Sensor_Intro.md
@@ -6,8 +6,8 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /SenseCAP_Sensor_Intro
last_update:
- date: 02/27/2024
- author: Jessie
+ date: 7/24/2024
+ author: Frank
---
@@ -18,39 +18,37 @@ last_update:
### SenseCAP S210x Series Sensors
-SenseCAP S210X is a series of wireless LoRaWAN® sensors. It can cover a transmission range of 2km in urban scenes and 10km in line-of-sight scenes while keeping lower power consumption during the transmission process. Together with a replaceable battery that supports up to 10 years of usage and an industrial IP66 enclosure. It supports -40 ~ 85℃ operating temperature and can be deployed in harsh environments. SenseCAP S210X is compatible with LoRaWAN® V1.0.3 protocol and can work with LoRaWAN® gateway.
-
-
+SenseCAP S210X is a series of wireless LoRaWAN® sensors. It can cover a transmission range of 2km in urban scenes and 10km in line-of-sight scenes while keeping lower power consumption during the transmission process. Together with a replaceable battery that supports up to 10 years of usage and an industrial IP66 enclosure. It supports -40 ~ 85℃ operating temperature and can be deployed in harsh environments. SenseCAP S210X is compatible with LoRaWAN® V1.0.3 protocol and can work with LoRaWAN® gateway.
+
|Air Temp & Humidity|Light|Air TH & CO2|Soil Moisture & Temp|
|------------------|--------------------------|-----------------------|-----------------------|
|||||
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2101-LoRaWAN-Air-Temperature-and-Humidity-Sensor-p-5354.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2102-LoRaWAN-Light-Intensity-Sensor-p-5355.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2103-LoRaWAN-CO2-Temperature-and-Humidity-Sensor-p-5356.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2106-p-5647.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2104-LoRaWAN-Soil-Temperature-and-Moisture-Sensor-p-5357.html)
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2108-Soil-Moisture-Temperature-and-Pore-EC-Sensor-p-5825.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2105-LoRaWAN-Soil-Temperature-Moisture-and-EC-Sensor-p-5358.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2106-p-5647.html)
|
[Get One Now!](https://www.seeedstudio.com/SenseCAP-S2107-Temperature-Sensor-p-5807.html)
### SenseCAP S2120 8-in-1 Weather Sensor
-[SenseCAP LoRaWAN S2120 Weather Station](https://www.seeedstudio.com/sensecap-s2120-lorawan-8-in-1-weather-sensor-p-5436.htm) collects and uploads air temperature, humidity, wind speed/direction, Rainfall Intensity, light intensity, UV index, and barometric pressure data supported by worldwide LoRaWAN networks. The S2120 weather station is suitable for applications in gardens, agriculture, meteorology, urban environmental monitoring, and other scenarios. It also enables low maintenance cost for its ultra-low power consumption, reliable performance, built-in Bluetooth for OTA configuration and remote device management.
-
-### SenseCAP A1101 Vision AI Sensor
+[SenseCAP LoRaWAN S2120 Weather Station](https://www.seeedstudio.com/sensecap-s2120-lorawan-8-in-1-weather-sensor-p-5436.html) collects and uploads air temperature, humidity, wind speed/direction, Rainfall Intensity, light intensity, UV index, and barometric pressure data supported by worldwide LoRaWAN networks. The S2120 weather station is suitable for applications in gardens, agriculture, meteorology, urban environmental monitoring, and other scenarios. It also enables low maintenance cost for its ultra-low power consumption, reliable performance, built-in Bluetooth for OTA configuration and remote device management.
-[The SenseCAP A1101](https://www.seeedstudio.com/SenseCAP-A1101-LoRaWAN-Vision-AI-Sensor-p-5367.html) - LoRaWAN Vision AI Sensor combines TinyML AI technology and LoRaWAN long-range transmission to create a low-power, high-performance AI device solution for both indoor and outdoor use. This sensor features Himax's high-performance, low-power AI vision solution, which supports training with Google TensorFlow Lite, Edge Impulse, and multiple TinyML AI platforms.
+
+### SenseCAP A1101 Vision AI Sensor
+[The SenseCAP A1101](https://www.seeedstudio.com/SenseCAP-A1101-LoRaWAN-Vision-AI-Sensor-p-5367.html) - LoRaWAN Vision AI Sensor combines TinyML AI technology and LoRaWAN long-range transmission to create a low-power, high-performance AI device solution for both indoor and outdoor use. This sensor features Himax's high-performance, low-power AI vision solution, which supports training with Google TensorFlow Lite, Edge Impulse, and multiple TinyML AI platforms.
-## SenseCAP Weather Sensors
+## SenseCAP ONE Weather Sensor
Today, data on localized weather, known as microclimates, is the new frontier for more precise and accurate weather forecasting. As a result, the collection of weather data is becoming increasingly smaller and gridded. In light of this, weather stations, which are the most convenient means of collecting weather data, are seeing a rise in demand. SenseCAP offers all-in-one weather sensors to help you collect and monitor environmental data for various scenarios.
@@ -66,9 +64,13 @@ SenseCAP ONE is a series of all-in-one compact weather sensors, that integrate m
|
## ✨ Contributor Project
diff --git a/docs/Sensor/SenseCAP/SenseCAP_ONE_Weather_Station/ONE_intro.md b/docs/Sensor/SenseCAP/SenseCAP_ONE_Weather_Station/ONE_intro.md
index 82a1fc181231..706d89e5de97 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_ONE_Weather_Station/ONE_intro.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_ONE_Weather_Station/ONE_intro.md
@@ -25,5 +25,5 @@ SenseCAP ONE is a series of all-in-one compact weather sensors, that integrate m
|
||
\ No newline at end of file
diff --git a/docs/Sensor/SenseCAP/SenseCAP_T1000-P/get_started_with_t1000_p.md b/docs/Sensor/SenseCAP/SenseCAP_T1000-P/get_started_with_t1000_p.md
new file mode 100644
index 000000000000..e62a58c00aad
--- /dev/null
+++ b/docs/Sensor/SenseCAP/SenseCAP_T1000-P/get_started_with_t1000_p.md
@@ -0,0 +1,20 @@
+---
+description: SenseCAP T1000-P Pet Tracker
+title: Get Started with SenseCAP T1000-P Pet Tracker
+keywords:
+- Tracker
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /get_started_with_t1000_p
+last_update:
+ date: 7/24/2024
+ author: Jessie
+---
+
+
+
+
+
+
+
+
+
diff --git a/docs/Sensor/SenseCAP/SenseCAP_T1000-P/t1000-p_intro.md b/docs/Sensor/SenseCAP/SenseCAP_T1000-P/t1000-p_intro.md
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/Jack_of_all_trades/_category_.yml b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/Jack_of_all_trades/_category_.yml
deleted file mode 100644
index 92f204728b58..000000000000
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/Jack_of_all_trades/_category_.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-position: 1 # float position is supported
-label: 'Jack of all trades'
-collapsible: true # make the category collapsible
-collapsed: true # keep the category open by default
-className: watcher_jack_of_all_trades
-link:
- type: generated-index
- slug: watcher_jack_of_all_trades_main_page
- title: Watcher Jack of all trades
- description: The "Jack-of-all-trades Part" delves into more advanced topics, such as streaming Watcher data to Apache Kafka and Node-RED for data processing and integration with other systems.
\ No newline at end of file
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/_category_.yml b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/_category_.yml
deleted file mode 100644
index 8caeabe6b334..000000000000
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/_category_.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-position: 2 # float position is supported
-label: 'SNS Integration'
-collapsible: true # make the category collapsible
-collapsed: true # keep the category open by default
-className: sns_integration_with_watcher
-link:
- type: generated-index
- slug: sns_with_watcher_main_page
- title: Watcher to SNS Integration
- description: The "SNS Integration" of the SenseCAP Watcher wiki focuses on integrating Watcher with various messaging platforms and services to enable alerts and notifications. This part is particularly useful for users who want to stay informed about the status of their Watcher devices or receive important updates from their monitoring tasks.
\ No newline at end of file
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/_category_.yml b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/_category_.yml
new file mode 100644
index 000000000000..f27b0dae180f
--- /dev/null
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/_category_.yml
@@ -0,0 +1,10 @@
+position: 2 # float position is supported
+label: 'Node-RED Integration'
+collapsible: true # make the category collapsible
+collapsed: true # keep the category open by default
+className: node_red_integration_with_watcher
+link:
+ type: generated-index
+ slug: node_red_integration_main_page
+ title: Watcher to Node-RED Integration
+ description: The "Node-RED Integration" of the SenseCAP Watcher wiki focuses on integrating Watcher with various messaging platforms and services to enable alerts and notifications. This part is particularly useful for users who want to stay informed about the status of their Watcher devices or receive important updates from their monitoring tasks.
\ No newline at end of file
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/Jack_of_all_trades/watcher_to_node_red.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red.md
similarity index 99%
rename from docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/Jack_of_all_trades/watcher_to_node_red.md
rename to docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red.md
index 82242969bcae..4a6dd2901876 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/Jack_of_all_trades/watcher_to_node_red.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red.md
@@ -1,11 +1,12 @@
---
description: Send message from Watcher to Node-Red
-title: Watcher to Node-Red
+title: Watcher to Node-RED
keywords:
- watcher
- Node-Red
image: https://files.seeedstudio.com/wiki/watcher_getting_started/cover.png
-slug: /watcher_to_node_red
+slug: /watcher_node_red
+sidebar_position: 1
last_update:
date: 06/28/2024
author: Allen
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_ifttt.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_ifttt.md
similarity index 95%
rename from docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_ifttt.md
rename to docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_ifttt.md
index 7a4c50436f2d..98ee62163ad4 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_ifttt.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_ifttt.md
@@ -1,11 +1,11 @@
---
-description: Send message from Watcher to IFTTT
-title: Watcher to IFTTT
+description: Send message from Watcher & Node-RED to IFTTT
+title: Watcher & Node-RED to IFTTT
keywords:
- watcher
- IFTTT
image: https://files.seeedstudio.com/wiki/watcher_to_ifttt_image/ifttthead.png
-slug: /watcher_to_ifttt
+slug: /watcher_node_red_to_ifttt
last_update:
date: 06/28/2024
author: Allen
@@ -13,7 +13,9 @@ last_update:
# Watcher To IFTTT Quick Start
-
+
+
+
## Part 1. What is IFTTT
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_kafka.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_kafka.md
new file mode 100644
index 000000000000..328f9acac180
--- /dev/null
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_kafka.md
@@ -0,0 +1,205 @@
+---
+description: Send message from Watcher & Node-RED to kafka
+title: Watcher & Node-RED to kafka
+keywords:
+- watcher
+- kafka
+image: https://files.seeedstudio.com/wiki/watcher_to_kafka_image/head_image.png
+slug: /watcher_node_red_to_kafka
+last_update:
+ date: 07/24/2024
+ author: Allen
+---
+
+# Watcher & Node-RED To Kafka Quick Start
+
+
+
+## Part 1.What is Kafka
+
+Apache Kafka is a distributed event streaming platform designed for high-throughput, fault-tolerant data processing. It enables real-time data feeds by allowing producers to publish messages to topics, while consumers can subscribe to these topics to process the data. Kafka is widely used for building data pipelines, real-time analytics, and integrating various data sources. Its robust architecture ensures scalability and durability, making it a popular choice for modern data-driven applications.
+
+## Part 2.Build Kafka cluster in Docker
+
+Why use Docker? Because Docker can simulate the environment of multiple computers on a single machine and deploy applications with great ease. Therefore, in this project, we will use Docker to set up the environment and improve efficiency.
+
+### Step 1. Download Docker
+
+According to your computer to download different types of installer. Click [here](https://www.docker.com/products/docker-desktop/) to jump.
+
+
+
+:::tip
+If your computer is **Windows**, please don't install docker until you finish **Step 2**.
+:::
+
+### Step 2. Install WSL(Windows Subsystem for Linux)
+
+:::tip
+This step is for **Windows**. You can skip this step if you computer is Mac or Linux.
+:::
+
+1. Run the following code as an administrator.
+
+
+
+```bash
+dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
+dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
+```
+
+2. Download this tool from [here](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi) and double click to install it.
+
+3. Go to your **Microsoft Store** to search and download linux version you like, here I installed Ubuntu.
+
+
+
+4. After installing Linux, you need to open it and set your username and password, and then need to wait a minute to initialize.
+
+
+
+5. Run the following instructions to use **WSL**.
+
+
+
+6. After installing WSL, now you can double click you docker installer to install it. When you see the following image that means it work.
+
+
+
+### Step 3.Build Kafka image and run
+
+1. Find a place to create **docker-compose.yml** file and copy the following codes into it.
+
+
+
+
+```yml
+services:
+ zookeeper:
+ image: wurstmeister/zookeeper ## image
+ container_name: zookeeper
+ ports:
+ - "2181:2181" ## Externally exposed port number
+ kafka:
+ image: wurstmeister/kafka ## image
+ container_name: kafka
+ volumes:
+ - ./volume:/volume ## Mounting location
+ ports:
+ - "9092:9092"
+ environment:
+ KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 ## Host machine IP
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ## Running Kafka is base to zookeeper
+ KAFKA_ADVERTISED_PORT: 9092
+ KAFKA_LOG_RETENTION_HOURS: 120
+ KAFKA_MESSAGE_MAX_BYTES: 10000000
+ KAFKA_REPLICA_FETCH_MAX_BYTES: 10000000
+ KAFKA_GROUP_MAX_SESSION_TIMEOUT_MS: 60000
+ KAFKA_NUM_PARTITIONS: 3
+ KAFKA_DELETE_RETENTION_MS: 1000
+ kafka-manager:
+ image: sheepkiller/kafka-manager ## image: open source web manage interface about kafka cluster
+ container_name: kafka-manager
+ environment:
+ ZK_HOSTS: 127.0.0.1 ## host machine IP
+ ports:
+ - "9009:9000" ## exposed port
+```
+
+2. Run Kafka in container and get into it
+```
+docker-compose up -d
+
+docker exec -it kafka /bin/bash
+```
+
+
+
+3. Create a new topic, produce something and comsume something. To test if Kafka works well.
+```
+kafka-topics.sh --create --topic watcher --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1
+
+kafka-console-producer.sh --topic=watcher --broker-list kafka:9092
+
+kafka-console-consumer.sh --bootstrap-server kafka:9092 --from-beginning --topic watcher
+```
+
+
+
+## Part 3.Run Kafka message module in Node-RED
+
+### Step 4. Install Kafka message module
+
+1. Click **Manage palette**. If you don't install Node_RED yet, [please click here](https://wiki.seeedstudio.com/watcher_to_node_red/).
+
+
+
+2. Search **kafka-manager** and install it
+
+
+
+### Step 5. Configure Kafka message module
+
+1. Drag those modules(**inject, kafka producer, kafka consumer, debug**) into workspace
+
+
+
+2. Double click **Kafka Producer** to configure it. When you do step 3, you should **add a new broker**.
+
+
+
+3. Double click **Kafka Consumer** to configure it as below.
+
+
+
+
+
+4. When finish Configuration, click the **Deploy** botton to deploy it.
+
+
+
+:::tip
+Any change, you should click the **Deploy** button.
+:::
+
+5. Click the **square button** to send a timestamp to test if the whole process works. If it works well, you should receive timestamp in **kafka consumer** end.
+
+
+
+## Part 4.Run a task in Watcher
+
+1. Run a task in Watcher, if you don't know how to run a task, [please refer here.](https://wiki.seeedstudio.com/getting_started_with_watcher_task)
+
+2. When you finish running a task in watcher, you should [refer this link](https://wiki.seeedstudio.com/watcher_to_node_red/) to send watcher message to Node-RED.
+
+## Part 5.Receive data in Kafka
+
+1. Replace **timestamp** module to **OpenStream** and **function** module and double click to configure them. Remember to Deploy it.
+
+```javascript
+node.send({ payload: msg.payload.value[0].content });
+
+node.send({ payload: msg.payload.value[0].image_url });
+```
+
+
+
+2. I run a **People Detection** model in Watcher. So when Watcher will send message to Kafka when it detects people and you will see the photo when open the link.
+
+
+
+Congratulations on completing the watcher to Kafka application! There's a wealth of useful features in Kafka waiting for you to explore. Keep up the great work and dive into the exciting possibilities ahead!
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_telegram.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_telegram.md
similarity index 94%
rename from docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_telegram.md
rename to docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_telegram.md
index 99dbfcb0436a..2c1bbb917bff 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_telegram.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_telegram.md
@@ -1,11 +1,11 @@
---
-description: Send message from Watcher to Telegram
-title: Watcher to Telegram
+description: Send message from Watcher & Node-RED to Telegram
+title: Watcher & Node-RED to Telegram
keywords:
- watcher
- Telegram
image: https://files.seeedstudio.com/wiki/watcher_to_telegram_image/telhead.png
-slug: /watcher_to_telegram
+slug: /watcher_node_red_to_telegram
last_update:
date: 06/07/2024
author: Allen
@@ -13,7 +13,9 @@ last_update:
# Watcher To Telegram Quick Start
-
+
+
+
## What is Telegram
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_twilio.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_twilio.md
similarity index 95%
rename from docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_twilio.md
rename to docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_twilio.md
index 1c724d7432f9..18be825c126e 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/SNS Integration/watcher_to_twilio.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_node_red_to_twilio.md
@@ -1,11 +1,11 @@
---
-description: Send message from Watcher to twilio
-title: Watcher to Twilio
+description: Send message from Watcher & Node-RED to twilio
+title: Watcher & Node-RED to Twilio
keywords:
- watcher
- twilio
image: https://files.seeedstudio.com/wiki/watcher_to_twilio_image/tw1.png
-slug: /watcher_to_twilio
+slug: /watcher_node_red_to_twilio
last_update:
date: 07/03/2024
author: Allen
@@ -13,7 +13,9 @@ last_update:
# Watcher To Twilio Quick Start
-
+
+
+
## Part 1. What is Twilio
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_to_mongodb.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_to_mongodb.md
new file mode 100644
index 000000000000..dfda3675d9a9
--- /dev/null
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_to_mongodb.md
@@ -0,0 +1,200 @@
+---
+description: Send data from Watcher & Node-RED to MongoDB
+title: Watcher & Node-RED to MongoDB
+keywords:
+- Watcher
+- MongoDB
+- Node-RED
+image: https://files.seeedstudio.com/wiki/watcher_to_mongo_db_image/Watcher_MongoDB_Cover.jpg
+slug: /watcher_node_red_to_mongodb
+last_update:
+ date: 07/18/2024
+ author: Vincent
+---
+
+# Watcher To MongoDB Quick Start
+
+
+
+**MongoDB** is a powerful, cross-platform document database that excels in handling both structured and unstructured data. Its flexible, schema-less data model is based on JSON-like documents, making it an excellent choice for dynamic applications requiring ad hoc queries and indexing.
+
+Using MongoDB provides a straightforward method to **store and utilize data from the Watcher for further processing or other project applications.**
+
+This tutorial will guide you through using the Watcher API and Node-RED to seamlessly send data to MongoDB, a setup perfect for projects that demand real-time data handling and persistence.
+
+## Part 1. Set up Watcher in Node-RED
+
+### Step 1. Install Node-RED
+Node-RED is required for this setup, along with the Watcher API. If you haven't installed Node-RED or connected it with the Watcher API, start here: [**Watcher to Node-RED Quick Start**](https://wiki.seeedstudio.com/watcher_to_node_red).
+
+### Step 2. Prepare data for MongoDB
+
+After integrating the Watcher with Node-RED, the next step is to prepare the data from the Watcher for MongoDB. Use a function node in Node-RED to format the data appropriately.
+
+
+
+For the purpose of this tutorial, we will simply return all the Watcher data. However, you are encouraged to transform the data as needed for your application.
+
+
+
+#### Example Node-RED Function to Format Data
+
+```sh
+msg.payload = {
+ "tlid": msg.payload.value[0].tlid,
+ "tn": msg.payload.value[0].tn,
+ "content": msg.payload.value[0].content,
+ "image_url": msg.payload.value[0].image_url,
+ "timestamp": msg.payload.timestamp,
+ "orgId": msg.payload.orgId,
+ "eui": msg.payload.eui,
+ "channel": msg.payload.channel,
+ "measurementID": msg.payload.value[0].measurementID
+};
+return msg;
+```
+## Part 2. Set up MongoDB
+
+### Step 3. Create an account
+Next, create a MongoDB account or log in if you already have one. If you are new to MongoDB, start by visiting [**mongodb.com**](https://www.mongodb.com) and signing up for a free account.
+
+
+
+### Step 4. Deploy a new Cluster
+
+Once logged in, proceed to deploy a new cluster:
+
+
+
+1. **Choose the Cluster Configuration**: For development, we recommend using the M0 configuration because it is free and sufficient for small-scale testing. However, you are welcome to select a different configuration if it better aligns with your project's requirements.
+2. **Select a Cloud Provider**: We chose AWS due to its widespread availability and reliability, but other providers like Google Cloud or Azure are equally viable depending on your geographical or technical requirements.
+3. **Select a Region**: This should be the region closest to your primary user base to minimize latency and enhance performance.
+
+
+
+### Step 5. Configure your Database Security
+
+Once your node is created, navigate to the **Quickstart** menu in the left-hand sidebar under **Security**. Here, you will create a database user by specifying a username and password.
+
+
+
+:::note
+By default, users are granted the *read and write* privileges to any database. You have the option to update these permissions and/or create additional users at a later time.
+:::
+
+After setting up your user, stay on the **Quickstart** page and scroll down to add your current IP address to your IP Access List.
+
+
+
+### Step 6. Create a Database and Collection
+
+On the left-hand sidebar, click on the **Databases** menu under the **Deployment** category. Then, click on **Browse Collections** to open the database management page. This is where all your databases and collections are managed.
+
+
+
+Inside the database manager, click on **Add My Own Data** to start the process of creating a new database and collection.
+
+
+
+A prompt will appear asking you to enter the names for your new database and collection. Fill in the desired names for each.
+
+After entering the names, click on the **Create** button to finalize the creation of your new database and collection.
+
+
+
+### Step 7. Get your Hostname
+
+Start by logging into your MongoDB Atlas dashboard. From here, navigate to the **Database** menu on the left sidebar to find your cluster. Locate your desired cluster and click the **Connect** button associated with it. This will open a series of connection options.
+
+
+
+In the connection options presented, click on **Shell**.
+
+
+
+After selecting the MongoDB Shell option, you will be guided to a section titled **Run your connection string in your command line.** Here, you'll find your full connection string presented.
+
+In the connection string, look for the portion that starts after `mongodb+srv://` and continues until you reach a `/` character. This part is your hostname. It typically contains your cluster name followed by `.mongodb.net`.
+
+For example, if your connection string is:
+```sh
+mongosh "mongodb+srv://my-cluster123.mongodb.net" --apiVersion 1 --username my-username
+```
+The hostname would be:
+```sh
+my-cluster123.mongodb.net
+```
+
+
+
+## Part 3. Connect MongoDB Database to Node-RED
+
+### Step 8. Install MongoDB module
+
+Click the three bars icon and then click **Manage palette** option. This opens a new window where you can add or remove nodes.
+
+
+
+Switch to the **Install** tab within the palette management window. In the search bar, type `mongodb-aleph` to find the module. Then, click the **install** button next to the **node-red-contrib-mongodb-aleph** entry.
+
+
+
+:::note
+The **node-red-contrib-mongodb-aleph** module is recommended for its current compatibility and reliability at the time of writing this tutorial (July 2024). However, the availability and functionality of Node-RED modules can vary over time. It's advisable to review the most recent user feedback and compatibility notes in the Node-RED library or GitHub repositories. If you encounter issues with this module, consider exploring other MongoDB modules listed in the Node-RED library for a more suitable option.
+:::
+
+### Step 9. Configure MongoDB node
+
+Once you installed the MongoDB module, drag the **mongodb - aleph - out** node to your Node-RED flow and connect it to the function node.
+
+
+
+Double-click the MongoDB node to configure it. Then, click the plus icon next to the server field to add a new server configuration.
+
+
+
+1. Enter the hostname you retrieved earlier.
+2. Change the Connection topology to **DNS Cluster \(mongodb+srv://\)** from the dropdown.
+3. Enter the name of your MongoDB database.
+4. Input the username you configured in the security settings.
+5. Input the corresponding password.
+6. Provide a descriptive name for your MongoDB connection that will be used within Node-RED.
+
+Then, click **Add** or **Update** to save the server configuration.
+
+
+
+With the server configured, you can now specify the details for the data insertion:
+
+1. Enter the name of the MongoDB collection where you want to insert the data.
+2. Set the operation to **Insert**, which will add new documents to the collection.
+
+Click **Done** to complete the setup.
+
+
+
+### Step 10. Deploy
+
+Finally, deploy your flow by clicking the Deploy button at the top right of the Node-RED interface. This action activates your configured nodes, allowing data to flow from your function node to MongoDB.
+
+
+
+Now, you will see the data populate in MongoDB.
+
+
+
+Congratulations on successfully integrating Watcher with MongoDB! You've opened the door to a vast array of exciting opportunities in your development endeavors. Prepare to dive into creating innovative applications that harness the robust capabilities of MongoDB. We look forward to seeing the remarkable solutions you'll develop next!
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_to_whatsapp.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_to_whatsapp.md
new file mode 100644
index 000000000000..877b2556ac6b
--- /dev/null
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Applications/node_red_integration/watcher_to_whatsapp.md
@@ -0,0 +1,170 @@
+---
+description: Send data from Watcher & Node-RED to WhatsApp
+title: Watcher & Node-RED to WhatsApp
+keywords:
+- Watcher
+- WhatsApp
+- Node-RED
+image: https://files.seeedstudio.com/wiki/Watcher_WhatsApp/watcher_whatsapp.png
+slug: /watcher_node_red_to_whatsapp
+last_update:
+ date: 07/25/2024
+ author: Vincent
+---
+
+# Watcher To WhatsApp Quick Start
+
+
+
+**WhatsApp** is an instant messaging and voice-over-IP service owned by Meta. It enables users to send text, voice, and video messages, make voice and video calls, and share images, documents, locations, and other content.
+
+This tutorial will guide you through integrating the Watcher API with Node-RED to seamlessly send data from the Watcher to WhatsApp. This integration provides a simple and efficient method to **receive notifications and opens the door for further applications and integrations**.
+
+## Part 1. Set up Watcher in Node-RED
+
+### Step 1. Set up Node-RED
+Node-RED is required for this setup, along with the Watcher API. If you haven't installed Node-RED or connected it with the Watcher API, start here: [**Watcher to Node-RED Quick Start**](https://wiki.seeedstudio.com/watcher_to_node_red).
+
+### Step 2. Get data from Watcher
+
+After setting up the Watcher to work with Node-RED, the next step is to prepare the data from the Watcher for WhatsApp. Double click the function node to format the data appropriately.
+
+
+
+For the purpose of this tutorial, we will be sending the content as well as the the image URL. However, you are encouraged to transform the data as needed for your application.
+
+
+
+#### Example Node-RED Function to Format Data
+
+```sh
+node.send({ payload: msg.payload.value[0].content });
+
+node.send({ payload: msg.payload.value[0].image_url });
+```
+## Part 2. Set up WhatsApp API
+
+### Step 3. Sign up for WhatsApp
+
+A WhatsApp account is required to proceed. If you do not already have an account, please [**click here**](https://www.whatsapp.com) and complete the steps to create an account.
+
+If you already have an account, please proceed to [**Step 4**](#step-4-get-callmebot-api-key).
+
+### Step 4. Get CallMeBot API Key
+
+Once you have your WhatsApp account set up and logged in, now it is time to set up the CallMeBot API. This is the API that will link between Node-RED and WhatsApp.
+
+To get your CallMeBot API key, follow these steps (taken from [**this Github repo**](https://github.com/PfisterDaniel/node-red-contrib-whatsapp-cmb/blob/main/README.md#create-api-key)):
+
+1. Add the phone number +34 644 66 32 62 into your Phone Contacts. (Name it it as you wish)
+2. Send this message "I allow callmebot to send me messages" to the new Contact created (using WhatsApp of course)
+3. Wait until you receive the message "API Activated for your phone number. Your APIKEY is 123123" from the bot. As this is still in beta testing, the activation can take up to 2 minutes.
+4. The WhatsApp message from the bot will contain the apikey needed to send messages using the API.
+
+
+
+:::note
+There is a possibility that the phone number provided in this tutorial for the CallMeBot API might be full and unable to accept more requests. If this occurs, CallMeBot will send you a WhatsApp message with an alternative phone number to use.
+
+In case you do not receive such a message and all provided phone numbers are full, you may need to find an alternative API to link Node-RED to WhatsApp. Make sure to check the latest updates and documentation on the CallMeBot website or explore other WhatsApp messaging APIs compatible with Node-RED.
+
+:::
+
+## Part 3. Integrate WhatsApp with Node-RED
+
+### Step 5. Install WhatsApp module
+
+Click the three bars icon and then click **Manage palette** option. This opens a new window where you can add or remove nodes.
+
+
+
+Switch to the **Install** tab within the palette management window. In the search bar, type `whatsapp` to find the module. Then, click the **install** button next to the **node-red-contrib-whatsapp-cmb** entry.
+
+We also recommend reviewing the [**node's documentation**](https://github.com/PfisterDaniel/node-red-contrib-whatsapp-cmb/blob/main/README.md) and the associated [**Github repository**](https://github.com/PfisterDaniel/node-red-contrib-whatsapp-cmb) if you want a more in-depth understanding of how the module works and how to maximize its potential.
+
+
+
+:::note
+The **node-red-contrib-whatsapp-cmb** module is recommended for its current compatibility and reliability at the time of writing this tutorial (July 2024). However, the availability and functionality of Node-RED modules can vary over time. It's advisable to review the most recent user feedback and compatibility notes in the Node-RED library or GitHub repositories. If you encounter issues with this module, consider exploring other WhatsApp modules listed in the Node-RED library for a more suitable option.
+:::
+
+### Step 6. Configure WhatsApp node
+
+Once you installed the WhatsApp module, drag the **Send Message** node to your Node-RED flow and connect it to the function node.
+
+Double-click the **Send Message** node to configure it. Then, click the plus icon next to the Account field to add a new Account configuration.
+
+
+
+1. Enter the name you would like to use for this account.
+2. Enter the phone number associated with your WhatsApp account.
+3. Enter your API key.
+
+Then, click **Add** or **Update** to save the Account configuration.
+
+
+
+With the account configured, change the dropdown next to the Message field to **msg.**, and type `payload` into the text field. Finally, click **Done** to complete the configuration of the WhatsApp node.
+
+
+
+### Step 7. Deploy
+
+Finally, deploy your flow by clicking the Deploy button at the top right of the Node-RED interface. This action activates your configured nodes, allowing data to flow from your function node to the CallMeBot API.
+
+
+
+Now, you will receive a notification from WhatsApp whenever your Watcher is triggered.
+
+
+
+## Debugging: Node-RED Errors
+
+When trying to integrate Node-RED with WhatsApp, it is possible you will encounter an error like this. If this does occur, you can follow these steps to fix it.
+
+
+
+To resolve this issue, you could try the following steps:
+
+1. Install the missing `aws4` module by running in your Node-RED user directory:
+
+ ```sh
+ npm install aws4
+ ```
+
+2. If that doesn't work, you might need to reinstall the `request` package:
+
+ ```sh
+ npm install request
+ ```
+
+3. If the problem persists, you may need to reinstall the WhatsApp node:
+
+ ```sh
+ npm install node-red-contrib-whatsapp-cmb
+ ```
+
+4. As a last resort, you could try clearing your npm cache and reinstalling all dependencies:
+
+ ```sh
+ npm cache clean --force
+ npm install
+ ```
+
+After trying these steps, restart Node-RED and see if the error is resolved. If you're still encountering issues, you may need to check for compatibility between your Node.js version, Node-RED version, and the versions of the packages you're using.
+
+Congratulations on successfully integrating Watcher with WhatsApp! You've opened the door to a vast array of exciting opportunities in your development endeavors. Prepare to dive into creating innovative applications that harness the robust capabilities of WhatsApp. We look forward to seeing the remarkable solutions you'll develop next!
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_as_grove.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_as_grove.md
new file mode 100644
index 000000000000..46012e061570
--- /dev/null
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_as_grove.md
@@ -0,0 +1,749 @@
+---
+description: User will learn how to integrate Watcher with the Grove system, enabling them to expand its capabilities and connect with a wide range of sensors and peripherals.
+title: 3# As a Grove Sensor
+image: https://files.seeedstudio.com/wiki/watcher_getting_started/45.png
+slug: /watcher_as_grove
+sidebar_position: 4
+last_update:
+ date: 07/10/2024
+ author: Citric
+---
+
+# As a Grove sensor
+
+
+
+In this wiki, we will explore the exciting possibilities that arise when Watcher, acting as a Grove sensor, leverages its UART (Universal Asynchronous Receiver/Transmitter) functionality. By enabling UART communication, Watcher can transmit valuable data such as captured images and recognition results through its UART interface, located on the back of the device. This opens up a world of opportunities for integrating Watcher with various hardware platforms and creating innovative applications.
+
+Throughout this wiki, we will dive into the details of reading and interpreting the data output from Watcher's UART interface. Additionally, we will provide comprehensive tutorials on how to parse and utilize this data using popular development boards and platforms, including XIAO, Arduino, Raspberry Pi, and Jetson.
+
+## Watcher UART wiring
+
+When you are ready to use the UART for message alarms, please connect the Watcher to your MCU as follows.
+
+
+
+:::note
+Note that if your Watcher and MCU are powered separately, then you **do not need to** connect the **3.3V or 5V** pins of the Watcher and MCU.
+
+If you are planning to use the Watcher to power the MCU, then you can use **3.3V** to power the MCU on top of the wiring in the picture. (Do not use the 5V pins, they are for input only)
+
+If you are planning to use the MCU to power the Watcher, then you can need to use the **5V** input. (3.3V may not be enough for the Watcher to work properly)
+:::
+
+
+## Enabling UART Functionality in Watcher
+
+To unlock the full potential of Watcher's UART capabilities, we first need to enable the UART functionality within the device. This is particularly useful in scenarios where Watcher is employed as an alarm system. When an alarm is triggered, Watcher can activate its UART communication, allowing it to transmit critical information such as captured images and recognition results to external devices for further processing and analysis.
+
+To enable the UART alarm function, you have two options:
+
+1. Explicitly request Watcher to notify you via UART when assigning tasks using the SenseCraft APP.
+
+
+
+2. Manually enable the UART alarm function in the task's detailed settings:
+
+ - Access the **Detail Config** of the task you want to configure.
+ - Locate the **Action** section.
+ - Check the box to enable the Serial Port / UART.
+
+
+
+Once you have enabled the UART alarm function using either of the above methods, Watcher will output the necessary alarm information via UART whenever it detects the specified alarm content. Ensure that Watcher is connected to the appropriate receiving device, such as a microcontroller or a computer with a serial terminal, to capture and process the alarm information transmitted through UART.
+
+## Reading UART Output from Watcher
+
+Once UART functionality is enabled, Watcher will begin transmitting data through its UART interface. In this section, we will provide a detailed guide on how to read and interpret the data received from Watcher's UART output. We will cover the necessary hardware connections, communication protocols, and data formats to ensure a smooth and successful data retrieval process.
+
+By default, Watcher uses the following UART configuration: baud rate of **115200**, **8 data bits**, **no parity**, **1 stop bit**, and **no hardware flow control**. When connecting to Watcher's UART interface, ensure that your receiving device is configured with the same settings to ensure proper communication.
+
+When Watcher sends alarm information via UART, it follows a specific protocol and format based on the `tf_module_uart_alarm_t` structure defined in the `tf_module_uart_alarm.h` header file. The UART protocol and format for Watcher's UART alarm module are as follows:
+
+### Output Format
+
+The format of the UART output is controlled by the `output_format` field.
+
+- When `output_format` is set to 0, the output is in binary format.
+- When `output_format` is set to 1, the output is in JSON format.
+
+:::note
+`output_format` is set to 1 by default to output in JSON.
+:::
+
+### Binary Output Format
+
+When `output_format` is set to 0, the structure of the UART output packet is as follows:
+
+
+
+- `PKT_MAGIC_HEADER`: The magic header of the packet, fixed as "SEEED" (5 bytes).
+- `Prompt Str Len`: The length of the prompt string, 4-byte unsigned integer in little-endian.
+- `Prompt Str`: The prompt string, used to briefly explain the task that Watcher is performing. If the `text` parameter is set, its value is used.
+- `Big Image Len`: The length of the big image, 4-byte unsigned integer in little-endian. Only included when `include_big_image` is `true`.
+- `Big Image`: 640*480 JPG image, base64 encoded, without boxes of detected objects. Only included when `include_big_image` is `true`.
+- `Small Image Len`: The length of the small image, 4-byte unsigned integer in little-endian. Only included when `include_small_image` is `true`.
+- `Small Image`: 240*240 JPG image, base64 encoded, with boxes drawn for detected objects. Only included when `include_small_image` is `true`.
+- `Boxes Count`: The number of detected object boxes, 4-byte unsigned integer in little-endian. Only included when `include_boxes` is `true`.
+- `Box Structure`: The structure of a detected object box, each box occupies 10 bytes, including coordinates, score, and target class ID. Only included when `include_boxes` is `true`.
+
+### JSON Output Format
+
+When `output_format` is set to 1, the structure of the UART output packet is as follows:
+
+```json
+{
+ "prompt": "monitor a cat",
+ "big_image": "base64 encoded JPG image, if include_big_image is enabled, otherwise this field is omitted",
+ "small_image": "base64 encoded JPG image, if include_small_image is enabled, otherwise this field is omitted",
+ "boxes": [
+ {
+ "x": 100,
+ "y": 100,
+ "w": 50,
+ "h": 60,
+ "score": 0.8,
+ "target_cls_id": 1
+ }
+ ]
+}
+```
+
+The JSON packet is separated by `\r\n`.
+
+### Configuration Options
+
+- `output_format`: Controls the format of the UART output, default is 1 (JSON format).
+- `text`: Used to fill the `prompt` field of the output packet.
+- `include_big_image`: Boolean (true | false), controls whether the big image is included in the output, default is `true`.
+- `include_small_image`: Boolean (true | false), controls whether the small image is included in the output, default is `true`.
+- `include_boxes`: Boolean (true | false), controls whether the boxes are included in the output, default is `true`.
+
+Note: If any configuration field is omitted, the default value will be implied.
+
+## XIAO ESP32 Series & Watcher
+
+Learn how to connect Watcher to the XIAO ESP32 Series board and parse the UART data using the Arduino. This section will guide you on how to connect Watcher to the XIAO ESP32 Series board and parse the UART data using Arduino.
+
+### Wiring
+
+This tutorial supports the series XIAO:
+
+
+
+:::tip
+This does not mean that other XIAO series are not supported. Mainly because the message data reported by Watcher takes up about **100k** (at least 70k) of memory, we would recommend you to use the ESP32 series of XIAO for the UART part of the Watcher development. If you don't need to parse image data, then the other XIAO's memory is perfectly adequate.
+:::
+
+
+
+- Connect the TX pin of the Watcher to the RX pin of the XIAO's UART interface.
+
+- Connect the RX pin of the Watcher to the TX pin of the XIAO's UART interface.
+
+- Connect the GND pin of the Watcher to a GND pin on the XIAO.
+
+### Code Explanation
+
+You can use any XIAO ESP32 series development board, or any other ESP32 series board to use the following program to read the UART data stream of the Watcher.
+
+:::note
+Currently, only JSON data streams can be output, so only programs that parse JSON data streams are provided.
+
+Other XIAOs are not always supported, mainly because parsing a JSON stream requires at least 70k of memory.
+:::
+
+```cpp
+#include
+
+long int count = 0; // Number of alarms
+
+void setup() {
+ Serial.begin(115200);
+ Serial1.begin(115200, SERIAL_8N1, D7, D6); // RX, TX
+ while(!Serial);
+ delay(100);
+
+ Serial.println("Device Ready. Waiting for Watcher's JSON data...");
+}
+
+void loop() {
+ if (Serial1.available()) {
+ // Set up enough space to store the parsed JSON objects
+ const size_t capacity = 1024 * 100 + 512; // At least 70k, insurance 100k
+ DynamicJsonDocument doc(capacity);
+
+ // Streaming parsing from Serial1
+ DeserializationError error = deserializeJson(doc, Serial1);
+
+ if (error) {
+ Serial.print("deserializeJson() failed: ");
+ Serial.println(error.c_str());
+ return;
+ }
+
+ // Print the parsed key-value pairs
+ if (doc.containsKey("prompt")) {
+ Serial.print("prompt: ");
+ Serial.println(doc["prompt"].as());
+ }
+
+ if (doc.containsKey("big_image")) {
+ Serial.print("big_image: ");
+ String big_imageData = doc["big_image"].as();
+ // Print only the first 100 characters of the image data for example
+ Serial.println(big_imageData.substring(0, 100) + "...");
+ }
+
+ if (doc.containsKey("small_image")) {
+ Serial.print("small_image: ");
+ String small_imageData = doc["small_image"].as();
+ // Print only the first 100 characters of the image data for example
+ Serial.println(small_imageData.substring(0, 100) + "...");
+ }
+
+ // Watcher has not yet been developed and will not output this message at this time
+// if (doc.containsKey("boxes")) {
+// JsonArray boxes = doc["boxes"].as();
+// for (JsonObject box : boxes) {
+// Serial.print("Box - ");
+// Serial.print("x: ");
+// Serial.print(box["x"].as());
+// Serial.print(", y: ");
+// Serial.print(box["y"].as());
+// Serial.print(", widths: ");
+// Serial.print(box["w"].as());
+// Serial.print(", height: ");
+// Serial.print(box["h"].as());
+// Serial.print(", score: ");
+// Serial.print(box["score"].as());
+// Serial.print(", target_cls_id: ");
+// Serial.println(box["target_cls_id"].as());
+// }
+// }
+
+ count++;
+ if(count > 2147483646){ // Spillage prevention
+ count = 0;
+ }
+ Serial.print("The ");
+ Serial.print(count);
+ Serial.println(" alarm message reception is complete. Wait for the next message...");
+ Serial.println("------------------------------------------------------------------");
+ }
+}
+```
+
+The provided code demonstrates how to receive and parse JSON data from Watcher using the Arduino IDE and the ArduinoJson library. Here's a brief explanation of the code:
+
+1. The necessary library, **ArduinoJson**, is included to handle JSON parsing. You can search for and install it in Arduino's library manager.
+
+
+
+2. In the `setup()` function, the serial communication is initialized for both the USB serial (for debugging) and the UART serial (for receiving data from Watcher).
+
+3. In the `loop()` function, the code checks if there is available data on the UART serial.
+
+4. If data is available, a `DynamicJsonDocument` is created with a specified capacity to store the parsed JSON objects.
+
+5. The JSON data is parsed using the `deserializeJson()` function, and any parsing errors are handled.
+
+6. The code then checks for the presence of specific keys in the parsed JSON object, such as "prompt", "big_image", and "small_image".
+
+:::note
+The parsing of information about recognised boxes (boxes) is not available at the moment, because the corresponding function of Watcher is still under development, and this information is not yet reported in the latest v1.0.1 version.
+:::
+
+7. If a key is found, its corresponding value is printed to the USB serial for debugging purposes.
+
+8. The code also keeps track of the number of received alarm messages using the `count` variable.
+
+9. Finally, a message is printed to indicate the completion of each alarm message reception, and the code waits for the next message.
+
+### Uploading the Code to XIAO ESP32 Series
+
+To upload the code to your XIAO ESP32 Series board, follow these steps:
+
+1. Connect your XIAO ESP32 Series board to your computer using a USB cable.
+
+2. Open the Arduino IDE and ensure that you have the necessary board support package installed for the XIAO ESP32 Series.
+
+ - If you want to use **Seeed Studio XIAO ESP32C3** for the routines, please refer to **[this tutorial](https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started#software-setup)** to finish adding.
+
+ - If you want to use **Seeed Studio XIAO ESP32S3** for the routines, please refer to **[this tutorial](http://wiki.seeedstudio.com/xiao_esp32s3_getting_started#software-preparation)** to finish adding.
+
+ - If you want to use **Seeed Studio XIAO ESP32C6** for the routines, please refer to **[this tutorial](https://wiki.seeedstudio.com/xiao_esp32c6_getting_started/)** to finish adding.
+
+3. Select the appropriate board and port from the Tools menu in the Arduino IDE.
+
+4. Open the provided code in the Arduino IDE.
+
+5. Click the **Upload** button to compile and upload the code to your XIAO ESP32 Series board.
+
+### Expected Results
+
+Once the code is uploaded and running on your XIAO ESP32 Series board, after Watcher identifies the target alarm, you should see the following behavior:
+
+
+
+You can also try using another Arduino development board, but make sure it has enough memory.
+
+## Raspberry Pi & Watcher
+
+Explore the process of connecting Watcher to a Raspberry Pi and utilizing Python scripts to parse and analyze the UART data.
+
+### Wiring
+
+This section will explain the Raspberry Pi 5 as an example, if you need it, you can place an order for it through the link below.
+
+
+
+If you are using another Raspberry Pi series, the code and tutorials on how to use it are essentially the same.
+
+
+
+- Connect the TX pin of the Watcher to the RX pin (GPIO 15) of the Raspberry Pi.
+
+- Connect the RX pin of the Watcher to the TX pin (GPIO 14) of the Raspberry Pi.
+
+- Connect the GND pin of the Watcher to a GND pin on the Raspberry Pi.
+
+### Code Explanation
+
+Before running the Python scripts, make sure to install the required dependencies:
+
+```
+sudo apt update
+sudo apt install python3-pip
+pip3 install pyserial pillow
+```
+
+Check the device name of the UART interface on the Raspberry Pi:
+
+```
+ls /dev/ttyAMA*
+```
+
+
+
+The first Python script reads the JSON data from the Watcher over UART and prints it:
+
+```python
+import serial
+
+# Set up the serial port
+ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=1)
+
+def read_json_from_serial():
+ while True:
+ if ser.in_waiting > 0:
+ data = ser.readline()
+ print(data.decode().strip())
+
+if __name__ == "__main__":
+ print("Starting serial JSON reader on Raspberry Pi...")
+ read_json_from_serial()
+```
+
+
+
+:::note
+1. My UART interface corresponds to `/dev/ttyAMA0`, if yours doesn't, please modify it yourself.
+
+2. This is a test script that you can use to check if the Raspberry Pi/Watcher's UART is working properly.
+:::
+
+
+The second Python script builds upon the first one and adds JSON parsing and saving of image data:
+
+```python
+import json
+import serial
+import base64
+from PIL import Image
+import io
+
+# Set up the serial port
+ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=1)
+
+# Initialize image counters
+big_image_counter = 1
+small_image_counter = 1
+
+def read_json_from_serial():
+ buffer = ""
+ try:
+ while True:
+ if ser.in_waiting > 0:
+ data = ser.read(ser.in_waiting).decode()
+ buffer += data
+
+ if '}' in buffer:
+ end = buffer.rfind('}')
+ json_data = buffer[:end+1]
+ buffer = buffer[end+1:]
+
+ try:
+ data = json.loads(json_data)
+ print("Received JSON data, processing...")
+ process_json_data(data)
+ except json.JSONDecodeError:
+ print("Error decoding JSON")
+ buffer = json_data + buffer
+ except Exception as e:
+ print(f"An error occurred: {e}")
+
+def process_json_data(data):
+ global big_image_counter, small_image_counter # Declare global variables
+
+ # Process prompt info
+ if "prompt" in data:
+ print(f"Prompt: {data['prompt']}")
+
+ # Process boxes info
+ #if "boxes" in data:
+ #for index, box in enumerate(data['boxes']):
+ #print(f"Box {index + 1} - x: {box['x']}, y: {box['y']}, w: {box['w']}, h: {box['h']}, score: {box['score']}, target_cls_id: {box['target_cls_id']}")
+
+ if "big_image" in data:
+ filename = f'big_image_{big_image_counter}.png'
+ decode_and_save_image(data['big_image'], filename)
+ print(f"Big image processed and saved as {filename}.")
+ big_image_counter += 1 # Update global variable
+
+ if "small_image" in data:
+ filename = f'small_image_{small_image_counter}.png'
+ decode_and_save_image(data['small_image'], filename)
+ print(f"Small image processed and saved as {filename}.")
+ small_image_counter += 1 # Update global variable
+
+def decode_and_save_image(base64_data, filename):
+ image_bytes = base64.b64decode(base64_data)
+ image = Image.open(io.BytesIO(image_bytes))
+ image.save(filename) # Save as PNG file
+ return image
+
+if __name__ == "__main__":
+ print("Starting serial JSON reader on Raspberry Pi...")
+ read_json_from_serial()
+```
+
+:::note
+Currently, only JSON data streams can be output, so only programs that parse JSON data streams are provided.
+:::
+
+This script does the following:
+
+- Reads JSON data from UART in a loop
+
+- Decodes the JSON data and calls `process_json_data` to handle it
+
+- Extracts prompt info and image data from the JSON
+
+:::note
+The parsing of information about recognised boxes (boxes) is not available at the moment, because the corresponding function of Watcher is still under development, and this information is not yet reported in the latest v1.0.1 version.
+:::
+
+- Decodes the base64 encoded image data and saves as PNG files using `decode_and_save_image`
+
+- Prints the extracted info and filenames of saved images
+
+### Running the Code to Raspberry Pi
+
+1. Create a new Python file on the Raspberry Pi, e.g. watcher_uart.py:
+
+```
+nano watcher_uart.py
+```
+
+2. Copy and paste the complete Python code into the file.
+
+3. Press Ctrl+X, then Y and Enter to save and exit the editor.
+
+4. Run the Python script:
+
+```
+python watcher_uart.py
+```
+
+### Expected Results
+
+
+
+After running the script:
+
+- The parsed JSON data received from the Watcher will be printed in the terminal in real-time.
+
+- The received big image and small image will be automatically saved as big_image_x.png and small_image_x.png files.
+
+That's it! You have now learned how to connect the Watcher to a Raspberry Pi, read the UART data with Python, parse the JSON, and save the transmitted images. Feel free to experiment further, such as trying to display the received data on a screen connected to the Raspberry Pi in real-time.
+
+## reComputer Jetson & Watch
+
+Explore the process of connecting Watcher to a reComputer (an NVIDIA Jetson-based device) and utilizing Python scripts to parse and analyze the UART data.
+
+### Wiring
+
+This tutorial will explain the J401 reComputer carrier board suitable for developers as an example, and if you want to buy the reComputer, you can pick it up at the link below.
+
+
+
+In theory, the content and code in this section applies to all NVIDIA Jetson series products.
+
+
+
+- Connect the TX pin of the Watcher to the RX pin of the reComputer's UART interface.
+
+- Connect the RX pin of the Watcher to the TX pin of the reComputer's UART interface.
+
+- Connect the GND pin of the Watcher to a GND pin on the reComputer.
+
+### Code Explanation
+
+Before running the Python scripts, make sure to install the required dependencies:
+
+```
+sudo apt-get update
+sudo apt-get install python3-serial
+sudo apt-get install python3-pillow
+```
+
+If you do not intend to use the Serial Console on the UART, you should disable the Serial Console:
+
+```
+systemctl stop nvgetty
+systemctl disable nvgetty
+udevadm trigger
+```
+
+You may need to reboot your reComputer at this point for the changes to take effect.
+
+Check the device name of the UART interface on the reComputer:
+
+```
+ls /dev/ttyTHS*
+```
+
+
+
+
+The first Python script reads the JSON data from the Watcher over UART and prints it:
+
+```python
+import serial
+
+# Set up the serial port
+ser = serial.Serial('/dev/ttyTHS0', 115200, timeout=1)
+
+def read_json_from_serial():
+ while True:
+ if ser.in_waiting > 0:
+ data = ser.readline()
+ print(data.decode().strip())
+
+if __name__ == "__main__":
+ print("Starting serial JSON reader on reComputer...")
+ read_json_from_serial()
+```
+
+
+
+:::note
+1. My UART interface corresponds to `/dev/ttyTHS0`, if yours doesn't, please modify it yourself.
+
+2. This is a test script that you can use to check if the reComputer/Watcher's UART is working properly.
+:::
+
+The second Python script builds upon the first one and adds JSON parsing and saving of image data:
+
+```python
+import json
+import serial
+import base64
+from PIL import Image
+import io
+
+# Set up the serial port
+ser = serial.Serial('/dev/ttyTHS0', 115200, timeout=1)
+
+# Initialize image counters
+big_image_counter = 1
+small_image_counter = 1
+
+def read_json_from_serial():
+ buffer = ""
+ try:
+ while True:
+ if ser.in_waiting > 0:
+ data = ser.read(ser.in_waiting).decode()
+ buffer += data
+
+ if '}' in buffer:
+ end = buffer.rfind('}')
+ json_data = buffer[:end+1]
+ buffer = buffer[end+1:]
+
+ try:
+ data = json.loads(json_data)
+ print("Received JSON data, processing...")
+ process_json_data(data)
+ except json.JSONDecodeError:
+ print("Error decoding JSON")
+ buffer = json_data + buffer
+ except Exception as e:
+ print(f"An error occurred: {e}")
+
+def process_json_data(data):
+ global big_image_counter, small_image_counter # Declare global variables
+
+ # Process prompt info
+ if "prompt" in data:
+ print(f"Prompt: {data['prompt']}")
+
+ # Process boxes info
+ #if "boxes" in data:
+ #for index, box in enumerate(data['boxes']):
+ #print(f"Box {index + 1} - x: {box['x']}, y: {box['y']}, w: {box['w']}, h: {box['h']}, score: {box['score']}, target_cls_id: {box['target_cls_id']}")
+
+ if "big_image" in data:
+ filename = f'big_image_{big_image_counter}.png'
+ decode_and_save_image(data['big_image'], filename)
+ print(f"Big image processed and saved as {filename}.")
+ big_image_counter += 1 # Update global variable
+
+ if "small_image" in data:
+ filename = f'small_image_{small_image_counter}.png'
+ decode_and_save_image(data['small_image'], filename)
+ print(f"Small image processed and saved as {filename}.")
+ small_image_counter += 1 # Update global variable
+
+def decode_and_save_image(base64_data, filename):
+ image_bytes = base64.b64decode(base64_data)
+ image = Image.open(io.BytesIO(image_bytes))
+ image.save(filename) # Save as PNG file
+ return image
+
+if __name__ == "__main__":
+ print("Starting serial JSON reader on reComputer...")
+ read_json_from_serial()
+```
+
+:::note
+Currently, only JSON data streams can be output, so only programs that parse JSON data streams are provided.
+:::
+
+This script does the following:
+
+- Reads JSON data from UART in a loop
+
+- Decodes the JSON data and calls process_json_data to handle it
+
+- Extracts prompt info and image data from the JSON
+
+- Decodes the base64 encoded image data and saves as PNG files using `decode_and_save_image`
+
+:::note
+The parsing of information about recognised boxes (boxes) is not available at the moment, because the corresponding function of Watcher is still under development, and this information is not yet reported in the latest v1.0.1 version.
+:::
+
+- Prints the extracted info and filenames of saved images
+
+### Uploading the Code to reComputer
+
+Create a new Python file on the reComputer, e.g. `watcher_uart.py`:
+
+```
+nano watcher_uart.py
+```
+
+Copy and paste the complete Python code into the file. Press Ctrl+X, then Y and Enter to save and exit the editor. Run the Python script:
+
+```
+sudo python watcher_uart.py
+```
+
+### Expected Results
+
+
+
+After running the script:
+
+- The parsed JSON data received from the Watcher will be printed in the terminal in real-time, including the prompt information.
+
+- The received big image and small image will be automatically saved as big_image_x.png and small_image_x.png files.
+
+That's it! You have now learned how to connect the Watcher to a reComputer, read the UART data with Python, parse the JSON, and save the transmitted images. Feel free to experiment further and adapt the code to your specific use case on the reComputer platform.
+
+
+## Resources
+
+**[Getting Started with SenseCAP Watcher](https://wiki.seeedstudio.com/getting_started_with_watcher/)**
+
+**[Watcher Quick Start Series 1# : How to assign tasks to Watcher](https://wiki.seeedstudio.com/getting_started_with_watcher_task/)**
+
+**[Watcher Quick Start Series 2# : Watcher Looks & SenseCraft Tools](https://wiki.seeedstudio.com/getting_started_with_watcher_look_tool)**
+
+**[Watcher Quick Start Series 3# : As a Grove sensor](https://wiki.seeedstudio.com/watcher_as_grove)**
+
+**Watcher Quick Start Series 4# : Training a model for Watcher**
+
+**[Watcher Quick Start Series 5# : What does Watcher do](https://wiki.seeedstudio.com/what_does_watcher_do)**
+
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_getting_started.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_getting_started.md
index 026a3e7bdf0f..511826f63969 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_getting_started.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_getting_started.md
@@ -132,15 +132,15 @@ Before everything starts, it is quite essential to have some basic parameters of
### Front View
-
+
### Back View
-
+
### Inside
-
+
### Mounting Interface
@@ -477,7 +477,7 @@ By familiarizing yourself with these settings options, you can customize and opt
**[Watcher Quick Start Series 2# : Watcher Looks & SenseCraft Tools](https://wiki.seeedstudio.com/getting_started_with_watcher_look_tool)**
-**Watcher Quick Start Series 3# : As a Grove sensor**
+**[Watcher Quick Start Series 3# : As a Grove sensor](https://wiki.seeedstudio.com/watcher_as_grove)**
**Watcher Quick Start Series 4# : Training a model for Watcher**
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_looks_tool.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_looks_tool.md
index 619336f4017c..b44792d79ec4 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_looks_tool.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_looks_tool.md
@@ -92,11 +92,12 @@ The Check Update feature ensures that your Watcher is always running the latest
To check for updates, simply navigate to the Check Update menu on your Watcher device or within the SenseCraft APP. If an update is available, you will be prompted to download and install it. It is recommended to keep your Watcher updated to ensure optimal performance, stability, and security.
+
+
:::tip
Some OTA versions may require Watcher users to force an update to continue using it. This may be due to fixing a major software bug or a service upgrade in the background.
:::
-
### Delete Detected History
The Delete Detected History feature allows you to clear the historical alert data stored within the SenseCraft APP. This can be useful when you want to declutter your alert history or maintain a more focused view of recent events.
@@ -187,7 +188,7 @@ Discover a world of creativity and inspiration in our Watcher Animation Showcase
**[Watcher Quick Start Series 2# : Watcher Looks & SenseCraft Tools](https://wiki.seeedstudio.com/getting_started_with_watcher_look_tool)**
-**Watcher Quick Start Series 3# : As a Grove sensor**
+**[Watcher Quick Start Series 3# : As a Grove sensor](https://wiki.seeedstudio.com/watcher_as_grove)**
**Watcher Quick Start Series 4# : Training a model for Watcher**
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_tasks.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_tasks.md
index 2ad3c5bfefbf..471710ada4f7 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_tasks.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/Getting_Started/sensecap_watcher_tasks.md
@@ -347,7 +347,7 @@ Both methods provide a simple and intuitive way to stop the task execution when
**[Watcher Quick Start Series 2# : Watcher Looks & SenseCraft Tools](https://wiki.seeedstudio.com/getting_started_with_watcher_look_tool)**
-**Watcher Quick Start Series 3# : As a Grove sensor**
+**[Watcher Quick Start Series 3# : As a Grove sensor](https://wiki.seeedstudio.com/watcher_as_grove)**
**Watcher Quick Start Series 4# : Training a model for Watcher**
diff --git a/docs/Sensor/SenseCAP/SenseCAP_Watcher/watcher_main_page.md b/docs/Sensor/SenseCAP/SenseCAP_Watcher/watcher_main_page.md
index 5536b28ab1fc..a4fe88f58e40 100644
--- a/docs/Sensor/SenseCAP/SenseCAP_Watcher/watcher_main_page.md
+++ b/docs/Sensor/SenseCAP/SenseCAP_Watcher/watcher_main_page.md
@@ -33,7 +33,7 @@ Introducing the Watcher Product Catalogue, your comprehensive guide to setting u
- [Watcher Quick Start Series 2# : Watcher Looks & SenseCraft Tools](https://wiki.seeedstudio.com/getting_started_with_watcher_look_tool)
-- Watcher Quick Start Series 3# : As a Grove sensor *(Coming Soon)*
+- [Watcher Quick Start Series 3# : As a Grove sensor](https://wiki.seeedstudio.com/watcher_as_grove)
- Watcher Quick Start Series 4# : Training a model for Watcher *(Planning)*
@@ -115,11 +115,19 @@ Introducing the Watcher Product Catalogue, your comprehensive guide to setting u
- Developing Watcher with Wokwi *(Maybe)*
-#### Jack-of-all-trades Part
+#### Node-RED Integration Part
-- Watcher Data Streaming to Apache Kafka *(Planning)*
+- [Watcher Data Streaming to Node-RED](https://wiki.seeedstudio.com/watcher_node_red/)
-- Watcher Data Streaming to Node-RED *(Planning)*
+- [Watcher & Node-RED to MongoDB](https://wiki.seeedstudio.com/watcher_node_red_to_mongodb)
+
+- [Watcher & Node-RED to Twillio Message Alerts](https://wiki.seeedstudio.com/watcher_node_red_to_twilio/)
+
+- [Watcher & Node-RED to Telegram Message Alerts](https://wiki.seeedstudio.com/watcher_node_red_to_telegram/)
+
+- [Watcher & Node-RED to IFTTT Gmail Message Alerts](https://wiki.seeedstudio.com/watcher_node_red_to_ifttt/)
+
+- [Watcher & Node-RED Data Streaming to Apache Kafka](https://wiki.seeedstudio.com/watcher_node_red_to_kafka/)
### Open Source Material
diff --git a/docs/Sensor/Wio_Series/LPWAN_Dev_Kit_for_Sidewalk/Switch_to_Wio_Tracker.md b/docs/Sensor/Wio_Series/LPWAN_Dev_Kit_for_Sidewalk/Switch_to_Wio_Tracker.md
index e76fb22cc088..b7a72fbfd242 100644
--- a/docs/Sensor/Wio_Series/LPWAN_Dev_Kit_for_Sidewalk/Switch_to_Wio_Tracker.md
+++ b/docs/Sensor/Wio_Series/LPWAN_Dev_Kit_for_Sidewalk/Switch_to_Wio_Tracker.md
@@ -26,7 +26,9 @@ This tutorial will guide users to flash the LPWAN Dev Board for Amazon Sidewalk
* J-Link Debug Programmer x 1
-* [Bootloader file](https://github.com/Seeed-Studio/Adafruit_nRF52_Arduino/tree/master/bootloader/Seeed_Wio_Tracker_1110) x 1
+* [Bootloader file](https://github.com/Seeed-Studio/Adafruit_nRF52_Arduino/tree/master/bootloader/Seeed_Wio_Tracker_1110)
+
+* [Application Firmware](https://files.seeedstudio.com/wiki/SenseCAP/Sidewalk_Kit/wio_tracker_app_release_sw_0.5_2024-06-06.uf2)
diff --git a/docs/Sensor/Wio_Series/Wio-E5/LoRa-E5_STM32WLE5JC_Module.md b/docs/Sensor/Wio_Series/Wio-E5/LoRa-E5_STM32WLE5JC_Module.md
index 111524a79d98..a4e16fb78fb2 100644
--- a/docs/Sensor/Wio_Series/Wio-E5/LoRa-E5_STM32WLE5JC_Module.md
+++ b/docs/Sensor/Wio_Series/Wio-E5/LoRa-E5_STM32WLE5JC_Module.md
@@ -558,7 +558,7 @@ Now we will modify our **Device EUI**, **Application EUI**, **Application KEY**
* **Step 7.** Please follow the [guide](https://wiki.seeedstudio.com/LoRa_E5_mini/#13-connect-and-send-data-to-the-things-network) here to setup your TTN application, get your **Application EUI** and copy it to the macro definition `LORAWAN_JOIN_EUI` in `LoRaWAN/App/se-identity.h` , for example, the Application EUI here is `80 00 00 00 00 00 00 0x07` :
-```C
+```cpp
// LoRaWAN/App/se-identity.h
/*!
@@ -569,7 +569,7 @@ Now we will modify our **Device EUI**, **Application EUI**, **Application KEY**
* **Step 8.** Also, you can modify your **Device EUI** and **Application Key**, by setting the macro definition `LORAWAN_DEVICE_EUI` and `LORAWAN_NWK_KEY` in `LoRaWAN/App/se-identity.h`. Make sure `LORAWAN_DEVICE_EUI` and `LORAWAN_NWK_KEY` are the same as the `Device EUI` and `App Key` in TTN console.
-```C
+```cpp
// LoRaWAN/App/se-identity.h
/*!
diff --git a/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_Dev_Board.md b/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_Dev_Board.md
index c0432a97a8c2..30c63f021918 100644
--- a/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_Dev_Board.md
+++ b/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_Dev_Board.md
@@ -441,7 +441,7 @@ Now we will modify our **Device EUI**, **Application EUI**, **Application KEY**
- **Step 7.** Please follow the [guide](https://wiki.seeedstudio.com/LoRa_E5_mini/#13-connect-and-send-data-to-the-things-network) here to setup your TTN application, get your **Application EUI** and copy it to the macro definition `LORAWAN_JOIN_EUI` in `LoRaWAN/App/se-identity.h` , for example, the Application EUI here is `80 00 00 00 00 00 00 0x07` :
-```C
+```cpp
// LoRaWAN/App/se-identity.h
/*!
@@ -452,7 +452,7 @@ Now we will modify our **Device EUI**, **Application EUI**, **Application KEY**
- **Step 8.** Also, you can modify your **Device EUI** and **Application Key**, by setting the macro definition `LORAWAN_DEVICE_EUI` and `LORAWAN_NWK_KEY` in `LoRaWAN/App/se-identity.h`. Make sure `LORAWAN_DEVICE_EUI` and `LORAWAN_NWK_KEY` are the same as the `Device EUI` and `App Key` in TTN console.
-```C
+```cpp
// LoRaWAN/App/se-identity.h
/*!
diff --git a/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_mini.md b/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_mini.md
index a71957c7f6bf..4a9880d49e77 100644
--- a/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_mini.md
+++ b/docs/Sensor/Wio_Series/Wio-E5/LoRa_E5_mini.md
@@ -446,7 +446,7 @@ Now we will modify our **Device EUI**, **Application EUI**, **Application KEY**
- **Step 7.** Please follow the [guide](https://wiki.seeedstudio.com/LoRa_E5_mini/#13-connect-and-send-data-to-the-things-network) here to setup your TTN application, get your **Application EUI** and copy it to the macro definition `LORAWAN_JOIN_EUI` in `LoRaWAN/App/se-identity.h` , for example, the Application EUI here is `80 00 00 00 00 00 00 0x07` :
-```C
+```cpp
// LoRaWAN/App/se-identity.h
/*!
@@ -457,7 +457,7 @@ Now we will modify our **Device EUI**, **Application EUI**, **Application KEY**
- **Step 8.** Also, you can modify your **Device EUI** and **Application Key**, by setting the macro definition `LORAWAN_DEVICE_EUI` and `LORAWAN_NWK_KEY` in `LoRaWAN/App/se-identity.h`. Make sure `LORAWAN_DEVICE_EUI` and `LORAWAN_NWK_KEY` are the same as the `Device EUI` and `App Key` in TTN console.
-```C
+```cpp
// LoRaWAN/App/se-identity.h
/*!
diff --git a/docs/Sensor/Wio_Series/Wio_Tracker/Wio-Extension-RTC.md b/docs/Sensor/Wio_Series/Wio_Tracker/Wio-Extension-RTC.md
index 1ff7a72afbed..a6712ad8ceb9 100644
--- a/docs/Sensor/Wio_Series/Wio_Tracker/Wio-Extension-RTC.md
+++ b/docs/Sensor/Wio_Series/Wio_Tracker/Wio-Extension-RTC.md
@@ -165,7 +165,7 @@ Unzip the [sample sketch](https://github.com/Seeed-Studio/Wio_Extension_RTC/raw/
6. Use Serial monitor to print the serial message.
-```c++
+```cpp
#include
#include "WioRTC.h"
diff --git a/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat.1.md b/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat.1.md
index 09a9589c887d..0d826c216487 100644
--- a/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat.1.md
+++ b/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat.1.md
@@ -375,7 +375,7 @@ Hi, the board of "Wio LTE Cat.1" is stored in "Seeed SAMD Boards" package like "
- Step 8. Select Sketch-->Upload to upload the code to Wio_LTE.
- Step 9. Press **RST** button to enable the COM port.
-```c++
+```cpp
#include "wio_tracker.h"
char message[128] = "Hello from Wio Traker!";
@@ -413,7 +413,7 @@ void loop() {
- Step 10.Use COM monitor tools to print the serial message. **Please do not use Arduino IDE COM monitor! That may cause the next time downloading fail, but reopen Arduino IDE can recover that issue**.
- Step 11. The phone number owner will receive the message.
-```C++
+```cpp
Power On!
@@ -435,7 +435,7 @@ Send OK!
- Step 7. Select Sketch-->Upload to upload the code to Wio_LTE.
- Step 8. Press **RST** button to enable the COM port.
-```C++
+```cpp
#include "wio_tracker.h"
uint16_t newSMSNumber = -1;
@@ -485,7 +485,7 @@ void loop() {
- Step 9.Use COM monitor tools to print the serial message. **Please do not use Arduino IDE COM monitor! That may cause the next time downloading fail, but reopen Arduino IDE can recover that issue**.
- Step 10. Open serial monitor, when seeing **Waitting for new SMS!**, send message to the board, the new message will display soon with phone number, time, content.
-```C
+```cpp
Power On!
Wait for network registered...
@@ -517,7 +517,7 @@ Waiting for new SMS!
- Step 7. Select Sketch-->Upload to upload the code to Wio_LTE.
- Step 8. Press **RST** button to enable the COM port.
-```c++
+```cpp
#include "gnss.h"
@@ -566,7 +566,7 @@ void loop() {
- Step 9.Use COM monitor tools to print the serial message. **Please do not use Arduino IDE COM monitor! That may cause the next time downloading fail, but reopen Arduino IDE can recover that issue**.
- Step 10. We will see lat, lon info printed on screen.
-```C
+```cpp
Waitting for module to alvie...
Waitting for module to alvie...
Waitting for module to alvie...
@@ -610,7 +610,7 @@ Data type in string: 113.966248,22.583819
- Step 7. Select Sketch-->Upload to upload the code to Wio_LTE.
- Step 8. Press **RST** button to enable the COM port.
-```C
+```cpp
#include "gnss.h"
@@ -664,7 +664,7 @@ void loop() {
- Step 9.Use COM monitor tools to print the serial message. **Please do not use Arduino IDE COM monitor! That may cause the next time downloading fail, but reopen Arduino IDE can recover that issue**.
- Step 10. We will see below logs.
-```C
+```cpp
Waitting for module to alvie...
Waitting for module to alvie...
Waitting for module to alvie...
@@ -741,7 +741,7 @@ $GPVTG,,T,2.3,M,0.0,N,0.0,K,A*0C
- Step 10.Use COM monitor tools to print the serial message. **Please do not use Arduino IDE COM monitor! That may cause the next time downloading fail, but reopen Arduino IDE can recover that issue**.
- Step 11. The phone number owner will receive the call.
-```c++
+```cpp
#include "wio_tracker.h"
WioTracker wio = WioTracker();
@@ -788,7 +788,7 @@ void loop() {
- Step 7. Keep COM Port blank.
- Step 8. Select Sketch-->Upload to upload the code to Wio_LTE.
-```C
+```cpp
#include "ethernet.h"
Ethernet eth = Ethernet();
@@ -898,7 +898,7 @@ Hello world!
- Step 8. Select Sketch-->Upload to upload the code to Wio_LTE.
-```C
+```cpp
// include the SD library:
#include
@@ -985,7 +985,7 @@ void loop(void) {
-```C
+```cpp
Initializing SD card...
Card type: SDHC
diff --git a/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat_M1_NB-IoT_Tracker.md b/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat_M1_NB-IoT_Tracker.md
index a1edbc2b1166..c2a525551678 100644
--- a/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat_M1_NB-IoT_Tracker.md
+++ b/docs/Sensor/Wio_Series/Wio_Tracker/Wio_LTE_Cat_M1_NB-IoT_Tracker.md
@@ -153,7 +153,7 @@ running up to 168MHZ
- Step 6. Select Sketch-->Upload to upload the code to Wio_LTE.
-```c++
+```cpp
#include
#include
@@ -191,7 +191,7 @@ void loop() {
- Step 7. Select Sketch-->Upload to upload the code to Wio LTE Cat NB1.
- Step 8. Press **RST** button to enable the COM port.
-```c++
+```cpp
#include
@@ -214,7 +214,7 @@ void loop() {
- Step 9. Use COM monitor tools to print the serial message. **Please do not use Arduino IDE COM monitor! That may cause the next time downloading fail, but reopen Arduino IDE can recover that issue**.
- Step 10. We will see lat, lon info printed on screen.
-```C++
+```cpp
$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0,00,99.99,,,,,,*56
@@ -253,7 +253,7 @@ $GNGLL,,,,,,V,N*7A
- Step 7. Select Sketch-->Upload to upload the code to Wio_LTE.
-```C++
+```cpp
// include the SD library:
#include
@@ -354,7 +354,7 @@ void loop(void) {
- Step 9.Use COM monitor tools to print the serial message. **Please do not use Arduino IDE COM monitor! That may cause the next time downloading fail, but reopen Arduino IDE can recover that issue**.
- Step 10. Open serial monitor, we will see below info on screen.
-```C++
+```cpp
Initializing SD card...
Card type: SDHC
@@ -377,7 +377,7 @@ Files found on the card (name, date and size in bytes):
- Step 6. Select Sketch-->Upload to upload the code to Wio_LTE.
-```c++
+```cpp
#include
#include
@@ -415,7 +415,7 @@ void loop() {
- Step 7. Press **RST**, then you can see below info on screen.
-```c++
+```cpp
AT+CSQ
+CSQ: 99,99
@@ -449,7 +449,7 @@ AT+CSQ
- Step 5. Keep COM Port blank.
- Step 6. Select Sketch-->Upload to upload the code to Wio_LTE.
-```c++
+```cpp
#include
Ublox_sara_r4 ublox = Ublox_sara_r4();
@@ -521,7 +521,7 @@ void loop() {
- Step 7. Press **RST**, then you can see below info on screen.
-```c++
+```cpp
[INFO] Begin...
[INFO] Waitting for module to alvie...
...
@@ -549,7 +549,7 @@ void loop() {
- Step 5. Keep COM Port blank.
- Step 6. Select Sketch-->Upload to upload the code to Wio_LTE.
-```c++
+```cpp
#include
Ublox_sara_r4 ublox = Ublox_sara_r4();
@@ -648,7 +648,7 @@ void loop() {
- Step 5. Keep COM Port blank.
- Step 6. Select Sketch-->Upload to upload the code to Wio_LTE.
-```c++
+```cpp
#include
#include
@@ -745,7 +745,7 @@ void loop()
- Step 5. Keep COM Port blank.
- Step 6. Select Sketch-->Upload to upload the code to Wio_LTE.
-```c++
+```cpp
#include
#include
diff --git a/docs/Sensor/Wio_Series/Wio_Tracker/wio_gps_board.md b/docs/Sensor/Wio_Series/Wio_Tracker/wio_gps_board.md
index 03f0a7e2b3fc..99c8ce7606f8 100644
--- a/docs/Sensor/Wio_Series/Wio_Tracker/wio_gps_board.md
+++ b/docs/Sensor/Wio_Series/Wio_Tracker/wio_gps_board.md
@@ -484,7 +484,7 @@ void loop() {
- **Step 5.** Upload code to Wio GPS board, it shows how to read a file from the SD card using the SD library and send it over the serial port.
-```c++
+```cpp
/*
SD card file dump
diff --git a/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Development_Tutorial/Setup_toolchain.md b/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Development_Tutorial/Setup_toolchain.md
index a5d0752329bc..802963dedf9a 100644
--- a/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Development_Tutorial/Setup_toolchain.md
+++ b/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Development_Tutorial/Setup_toolchain.md
@@ -100,4 +100,3 @@ To install it *offline*, you can **download the repo zip** from GitHub, navigate
[Sensirion I2C SHT4X Arduino Library](https://github.com/Sensirion/arduino-i2c-sht4x)
[Sensirion Gas Index Algorithm Arduino Library](https://github.com/Sensirion/arduino-gas-index-algorithm)
:::
-
diff --git a/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Get_Started.md b/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Get_Started.md
index f6ef8a12e2ab..d48e5c75b9d2 100644
--- a/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Get_Started.md
+++ b/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/Get_Started.md
@@ -237,6 +237,17 @@ You can also use a [Grove-I2C Hub](https://www.seeedstudio.com/Grove-I2C-Hub.htm
+## Flash Firmware
+
+* [Latest Firmware](https://files.seeedstudio.com/wiki/SenseCAP/wio_tracker/wio_tracker_app_release_sw_0.5_2024-06-06.uf2)
+
+Double click the `Reset` button, there should be a `WM1110_BOOT` driver on your PC.
+
+
+
+Drag the `.uf2` file to the driver. The download will run automatically, then the driver will log out.
+
+
## SenseCAP API
SenseCAP API is for users to manage IoT devices and data. It includes 3 types of API methods: HTTP protocol, MQTT protocol, and Websocket protocol.
diff --git a/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/dual-version.md b/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/dual-version.md
index 033e097e084d..5cb6d4a0a976 100644
--- a/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/dual-version.md
+++ b/docs/Sensor/Wio_Series/Wio_Tracker_1110_Dev_Board/dual-version.md
@@ -615,7 +615,7 @@ To register your Sidewalk endpoint, either use automatic touchless registration
### Network Switch
- The default is LoRaWAN network, click the `BUTTON` to switch network.
+ The default is LoRaWAN network, click the `User Button` to switch network.
@@ -1067,7 +1067,9 @@ As a first step you will need to create a new Amazon Location Service Map resour
* Then expand the navigation bar on the left side of the screen, and select `Route calculators`.
-
+
+
+
@@ -1075,7 +1077,7 @@ Continue by selecting `HERE` as Data Provider, click on the `Create route calcul
-
+
### Creating Tracker
@@ -1087,18 +1089,21 @@ Navigate to `Trackers` -> `Create tracker`:
Input the name of the tracker and select `Time-based filtering` under position filtering.
-
+
Then scroll down and mark the `Enable EventBridge events` setting under EventBridge configuration, then click `Create tracker`.
-
+
### Creating Geofence Collection
-
+
+Navigate to `Geofence collections`, and click `create geofence collection`.
+
+
@@ -1118,10 +1123,10 @@ Then scroll down and mark the `Enable EventBridge events` setting under EventBri
npm run frontend:publish
```
-* Once it's completed, you will receive the website URL
+* Once it's completed, you will receive the website URL.
-
+
* Navigate to this URL in your browser to view your tracking application.
diff --git a/docs/Sensor/Wio_Terminal/Application/Easy_IoT/Connect-Wio-Terminal-to-Google-Cloud-IoT-Core.md b/docs/Sensor/Wio_Terminal/Application/Easy_IoT/Connect-Wio-Terminal-to-Google-Cloud-IoT-Core.md
index f08f9b01d120..c9b3d9a566ce 100644
--- a/docs/Sensor/Wio_Terminal/Application/Easy_IoT/Connect-Wio-Terminal-to-Google-Cloud-IoT-Core.md
+++ b/docs/Sensor/Wio_Terminal/Application/Easy_IoT/Connect-Wio-Terminal-to-Google-Cloud-IoT-Core.md
@@ -201,14 +201,14 @@ Now we need to set the Wi-Fi credentials and Google Cloud IoT Core information i
- **STEP 3:** Change the **Wifi network details**
-```c++
+```cpp
const char *ssid = "Enter_SSID";
const char *password = "Enter_Password";
```
- **STEP 4:** Change the **Google Cloud IoT details**
-```c++
+```cpp
const char *project_id = "Enter_Project_ID";
const char *location = "Enter_location";
const char *registry_id = "Enter_Registry_ID";
@@ -217,7 +217,7 @@ const char *device_id = "Enter_Device_ID";
- **STEP 5:** Copy the private key bytes that we obtained from **ec_private.pem** and saved into notepad before
-```c++
+```cpp
const char *private_key_str =
"6e:b8:17:35:c7:fc:6b:d7:a9:cb:cb:49:7f:a0:67:"
"63:38:b0:90:57:57:e0:c0:9a:e8:6f:06:0c:d9:ee:"
@@ -230,7 +230,7 @@ const char *private_key_str =
Open **esp32-mqtt.h** and replace the entire file with the following codes. Here we have replaced configTime function with the implementation of obtaining NTP time via UDP.
-```c++
+```cpp
#include
#include
#include
@@ -437,7 +437,7 @@ void setupCloudIoT(){
Add Wio Terminal board to macro definitions inside **Esp32-lwmqtt.ino**
-```c++
+```cpp
#if defined(ESP32) || defined(WIO_TERMINAL)
#define __ESP32_MQTT_H__
#endif
@@ -506,7 +506,7 @@ Navigate to **Esp32-lwmqtt.ino** and add the following
- **STEP 1:** After the loop, add the following for the built-in light sensor
-```c++
+```cpp
void loop() {
int light = analogRead(WIO_LIGHT); //assign variable to store light sensor values
light = map(light,0,1023,0,100); //Map sensor values
@@ -514,7 +514,7 @@ void loop() {
- **STEP 2:** Add the topic with the Subfolder name
-```c++
+```cpp
publishTelemetry(getDefaultSensor());
publishTelemetry("/light",String(light));
```
@@ -550,7 +550,7 @@ Navigate to the previously used **Esp32-lwmqtt.ino** and add the following:
- **STEP 1:** Add the following after **#include "esp32-mqtt.h"**
-```c++
+```cpp
#include "DHT.h" //DHT library
#define DHTPIN 0 //Define Signal Pin of DHT
@@ -560,13 +560,13 @@ DHT dht(DHTPIN, DHTTYPE); //Initializing DHT sensor
- **STEP 2:** Add the following inside the **setup** to start the DHT sensor
-```c++
+```cpp
dht.begin();
```
- **STEP 3:** Add the following inside the **if loop** within **void loop()**
-```c++
+```cpp
int temperature = dht.readTemperature(); //Assign variable to store temperature
int humidity = dht.readHumidity(); //Assign variable to store humidity
diff --git a/docs/Sensor/Wio_Terminal/Extension_Board/Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915.md b/docs/Sensor/Wio_Terminal/Extension_Board/Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915.md
index 612764a60a63..91979cc72fff 100644
--- a/docs/Sensor/Wio_Terminal/Extension_Board/Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915.md
+++ b/docs/Sensor/Wio_Terminal/Extension_Board/Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915.md
@@ -193,7 +193,7 @@ Step 5: Add the code for decode the data:
-```CPP
+```cpp
function Decoder(bytes, port) {
var decoded = {};
@@ -339,7 +339,7 @@ Step 5: Add the code for decode the data:
-```CPP
+```cpp
function Decoder(bytes, port) {
var decoded = {};
diff --git a/docs/Sensor/Wio_Terminal/Hardware_Overview/Bluetooth/BLE-ibeacon-using-Wio-terminal.md b/docs/Sensor/Wio_Terminal/Hardware_Overview/Bluetooth/BLE-ibeacon-using-Wio-terminal.md
index daa7cc118a51..67faf7f65e95 100644
--- a/docs/Sensor/Wio_Terminal/Hardware_Overview/Bluetooth/BLE-ibeacon-using-Wio-terminal.md
+++ b/docs/Sensor/Wio_Terminal/Hardware_Overview/Bluetooth/BLE-ibeacon-using-Wio-terminal.md
@@ -59,7 +59,7 @@ This is a simple test for scan the Wio terminal iBeacon device and presents the
**Test code**
-```CPP
+```cpp
#include "sys/time.h"
#include "rpcBLEDevice.h"
@@ -146,7 +146,7 @@ we can see, after people enter the door, they will see about A or B more detail,
## Code
-```CPP
+```cpp
#include "sys/time.h"
#include "BLEDevice.h"
#include "BLEBeacon.h"
diff --git a/docs/Sensor/Wio_Terminal/Tutorial/Blynk_for_Wio_Terminal/Blynk-wireless-OTA-functionality-to-Wio-Terminal.md b/docs/Sensor/Wio_Terminal/Tutorial/Blynk_for_Wio_Terminal/Blynk-wireless-OTA-functionality-to-Wio-Terminal.md
index 1fda68d5b6de..5d5082d98c89 100644
--- a/docs/Sensor/Wio_Terminal/Tutorial/Blynk_for_Wio_Terminal/Blynk-wireless-OTA-functionality-to-Wio-Terminal.md
+++ b/docs/Sensor/Wio_Terminal/Tutorial/Blynk_for_Wio_Terminal/Blynk-wireless-OTA-functionality-to-Wio-Terminal.md
@@ -37,7 +37,7 @@ Then edit the name and select the device and connection mode, in this case "Seee
Make a note of BLYNK_TEMPLATE_ID and BLYNK_DEVICE_NAME.
In the example, they are:
-```C++
+```cpp
#define BLYNK_TEMPLATE_ID "TMPLCc16MxA1"
#define BLYNK_DEVICE_NAME "WioTerminal"
```
diff --git a/docs/Sensor/mmWave_radar_sensor/Radar_MR24BSD1.md b/docs/Sensor/mmWave_radar_sensor/Radar_MR24BSD1.md
index 8a2a7e80cead..3456cf0e8371 100644
--- a/docs/Sensor/mmWave_radar_sensor/Radar_MR24BSD1.md
+++ b/docs/Sensor/mmWave_radar_sensor/Radar_MR24BSD1.md
@@ -278,7 +278,7 @@ The code in this example is as follows.
-```c++
+```cpp
//Human_State_Data_Decoding_Example.ino
#include
@@ -347,7 +347,7 @@ The code in this example is as follows.
-```c++
+```cpp
//Physical_Parameters_Example.ino
#include
@@ -403,7 +403,7 @@ The code in this example is as follows.
-```c++
+```cpp
//Sleep_Breathing_Data_Decoding.ino
#include
diff --git a/docs/Sensor/mmWave_radar_sensor/Radar_MR24FDB1.md b/docs/Sensor/mmWave_radar_sensor/Radar_MR24FDB1.md
index 17dcfe75c69f..e6a6d272bb14 100644
--- a/docs/Sensor/mmWave_radar_sensor/Radar_MR24FDB1.md
+++ b/docs/Sensor/mmWave_radar_sensor/Radar_MR24FDB1.md
@@ -207,7 +207,7 @@ The radar has a complete set of built-in algorithms that can directly output the
The code in this example is as follows.
-```c++
+```cpp
#include
FallDetectionRadar radar;
@@ -262,7 +262,7 @@ The code in this example is as follows.
-```c++
+```cpp
//Physical_Parameters_Example.ino
#include
diff --git a/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md b/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md
index 65dc9e549f55..ecd1747c68ac 100644
--- a/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md
+++ b/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPB1.md
@@ -205,7 +205,7 @@ The code in this example is as follows.
-```c++
+```cpp
//Physical_Parameters_Example.ino
#include
diff --git a/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPC1.md b/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPC1.md
index ba53fbbedbc1..312a20941975 100644
--- a/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPC1.md
+++ b/docs/Sensor/mmWave_radar_sensor/Radar_MR24HPC1.md
@@ -1063,6 +1063,36 @@ void loop() {
> XIAO ESP32C3 serial port function is not quite consistent with the general Arduino hardware, and using Serial1 directly may cause the USB serial port not to work. For related application cases, please go to the [Serial chapter of XIAO ESP32C3](https://wiki.seeedstudio.com/XIAO_ESP32C3_Pin_Multiplexing/#serial) for details.
+### FAQ 3: Is is avaliable to use other chip instead of XIAO ESP32-C3 to use the library? {#faq3}
+
+Yes, it is indeed possible to use other chips instead of XIAO ESP32-C3 with the library. Just make sure you connect the correct RX/TX pins or two GPIO pins and set the baud rate to `115200`.
+Confirm which method to use, software or hardware, for example if you have an `Arduino Uno R3` which has only one serial port, you can implement as below:
+
+```cpp
+#include "Arduino.h"
+#include
+
+#include
+// Choose any two pins that can be used with SoftwareSerial to RX & TX
+#define RX_Pin A2
+#define TX_Pin A3
+
+SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);
+
+// we'll be using software serial
+HumanStaticLite radar = HumanStaticLite(&mySerial);
+
+void setup() {
+ // put your setup code here, to run once:
+ Serial.begin(115200);
+ mySerial.begin(115200);
+}
+void loop() {
+ // Your code here
+}
+```
+
+
## Resources
- **[PDF]** [Quick Setup Template](https://files.seeedstudio.com/wiki/mmWave-radar/MR24HPC1_Quick_Setup_Template-V1.0.pdf)
diff --git a/docs/Sensor/mmWave_radar_sensor/mmwave_radar_Intro.md b/docs/Sensor/mmWave_radar_sensor/mmwave_radar_Intro.md
index 137e0ef5ac89..95360ecfcd36 100644
--- a/docs/Sensor/mmWave_radar_sensor/mmwave_radar_Intro.md
+++ b/docs/Sensor/mmWave_radar_sensor/mmwave_radar_Intro.md
@@ -8,36 +8,201 @@ keywords:
image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
slug: /mmwave_radar_Intro
last_update:
- date: 05/29/2024
- author: Yaohao
+ date: 07/25/2024
+ author: Frank
---
+## mmWave Radar Principle
+
+Millimeter Wave (mmWave) radar uses Frequency Modulated Continuous Wave (FMCW) radar techniques to detect objects and their velocity, range, and angle. The FMCW radar continuously transmits a frequency-modulated signal and receives the reflected signals from objects. By analyzing the difference between the transmitted and received frequencies, the radar can determine the distance (range) and relative speed (velocity) of objects. This principle allows mmWave radar to detect fine movements, provide high accuracy, and function effectively in various environmental conditions such as rain, fog, or dust.
+
## Different types of mmWave Radar Sensors
Millimeter-wave (mmWave) radar sensors are capable of detecting objects, measuring their distance, speed, and angle, and can penetrate various materials such as plastic, clothing, and drywall, making them suitable for a wide range of applications.
In Seeed, We have leveraged the power of mmWave to come up with various sensors that can perform a variety of actions, such as fall detection and sleep breathing monitoring.
-Our range of mmWave Radar Sensors are shown below, each with different features and functions. Click on any of the products below to find out more about them!
-
-
+ 24GHz mmWave Sensor - Human Static Presence Module Lite is an antenna-integrated, health-friendly mmwave radar sensor that applies FMCW ranging technology, with operation in 24GHz, for implementation of human static presence, independently of environmental influences. This is also a personalized radar that users can configure underlying parameters of it to determine detected functions.
+
+ The Human Static Presence Radar Sensor is a self-contained, privacy-protectively, safety mmWave module operating at 24GHz. With the enhanced Infineon Doppler radar and the standard algorithm, the module is an ideal solution for individual applications like smart home, smart hotel and danger alarm.
+
+ The MR24BSD1 24GHz radar module applies Dopplor detected theory to implement human sleep quality monitoring providing a fully total private and secure sensing environment, independently from other noisy influences. It is a useful privacy-protected, secure sensor radar systems in smart home applications like sleep safety alarm, sleep respiratory detection.
+
+ The MR60BHA1 60GHz radar module applies FMCW detected theory to implement simultaneous personal breathing rate and heart rate detention in high accuracy, providing a fully total private and secure environment, independently from other noisy influences. It is a standard biotic radar system in consumer electronics, healthcare as well as industrial applications.
+
+
+
+### 60GHz mmWave Sensor - Fall Detection Module Pro (MR60FDA1)
+
+
+
+
+
+
+ The 60GHz mmWave Radar Sensor - Fall Detection Module Pro uses FMCW detection to accurately monitor human activities, including movement, falls, and stationary states, ensuring privacy and security without interference from noise. It is a standard biotic radar system for private property surveillance, fall prevention, and elderly healthcare, performing well in homes, hotels, and hospitals.
+
+ 24GHz mmWave Sensor for XIAO - Human Static Presence is a expansion board for Seeed Studio XIAO series. It is an antenna-integrated, high-sensitivity mmwave radar sensor that is based on the FMCW principle. Combined with radar signal processing and accurate human body sensing algorithms, it can identify human bodies in motion and stationary states.
+
+ Powered by Seeed Studio's XIAO ESP32C3, it supports WiFi/BLE connectivity and precise human detection via mmWave sensors. Connect Grove modules for added features and set up Home Assistant in 1-2 minutes with OTA updates. Its replaceable mmWave sensors enable versatile use, ideal for smart home automation, intrusion detection, and elderly monitoring.
+
-```c++
+```cpp
//文件名
代码段
@@ -269,7 +269,7 @@ Opening your serial monitor to a baud rate of 9600 should show the distance betw
-```c++
+```cpp
//文件名
代码段
@@ -419,7 +419,7 @@ Now that we have our library installed and we understand the basic functions, le
-```c++
+```cpp
//文件名
代码段
@@ -465,7 +465,7 @@ Now that we have our library installed and we understand the basic functions, le
-```c++
+```cpp
//文件名
代码段
diff --git a/docs/weekly_wiki.md b/docs/weekly_wiki.md
index f43f255b0d05..8029e40c31cf 100644
--- a/docs/weekly_wiki.md
+++ b/docs/weekly_wiki.md
@@ -5,135 +5,124 @@ keywords:
- weeely wiki
image: https://files.seeedstudio.com/wiki/IndexWiki/logo_image.jpg
last_update:
- date: 07/08/2024
- author: Seraphina
+ date: 07/29/2024
+ author: Frank
---
## Greetings
-This is Seraphina in Seeed Studio and welcome to the Seeed Studio weekly wiki! Each Monday, I will introduce you our latest wiki, including the ones related to our new products, the interesting projects published by Seeed Studio, and the tutorials, introductions, etc... You name it.
+This is Frank in Seeed Studio and welcome to the Seeed Studio weekly wiki! Each Monday, I will introduce you our latest wiki, including the ones related to our new products, the interesting projects published by Seeed Studio, and the tutorials, introductions, etc... You name it.
✨ For each week, when a collaborator contributes a project or fixes something important, we put the stars at the end of title of "Weekly Wiki" for more people be able to see their efforts👍.
-Today is July 8th and a brand new week has begun! Check out what Seeed Studio did last week!
+Today is July 29th and a brand new week has begun! Check out what Seeed Studio did last week!
## Latest Wiki Launched
+### [SenseCAP Watcher as a Grove sensor](https://wiki.seeedstudio.com/watcher_as_grove/)
-### [Watcher to Node-RED Quick Start](https://wiki.seeedstudio.com/watcher_to_node_red/)
+
-**Node-RED** is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.
+In this wiki, we will explore the exciting possibilities that arise when Watcher, acting as a Grove sensor, leverages its UART (Universal Asynchronous Receiver/Transmitter) functionality. By enabling UART communication, Watcher can transmit valuable data such as captured images and recognition results through its UART interface, located on the back of the device. This opens up a world of opportunities for integrating Watcher with various hardware platforms and creating innovative applications.
-It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.
+### [Watcher & Node-RED To Kafka Quick Start](https://wiki.seeedstudio.com/watcher_node_red_to_kafka/)
-
+
-To make it easier for our users to **connect data from the Watcher to various other Paas platforms for more in-depth data processing**. For example. from Watcher to IFTTT, Telegram, Twilio etc. We will do a series of tutorials for **Watcher & Node-RED**.
+Apache Kafka is a distributed event streaming platform designed for high-throughput, fault-tolerant data processing. It enables real-time data feeds by allowing producers to publish messages to topics, while consumers can subscribe to these topics to process the data. Kafka is widely used for building data pipelines, real-time analytics, and integrating various data sources. Its robust architecture ensures scalability and durability, making it a popular choice for modern data-driven applications.
-This tutorial, the first in a series, will walk you through installing and using Node-red and calling the Watcher API to connect to Node-RED.
+Why use Docker? Because Docker can simulate the environment of multiple computers on a single machine and deploy applications with great ease. Therefore, in this project, we will use Docker to set up the environment and improve efficiency.
+### [T1000-E Tracker for Meshtastic](https://wiki.seeedstudio.com/sensecap_t1000_e/)
-### [reComputer R1000 Walk Through](https://wiki.seeedstudio.com/recomputer_r1000_intro/)
+
-The reComputer R1000 edge IoT controller, powered by Raspberry Pi CM4, features a quad-core A72 processor, dual Ethernet, and multiple RS485 channels supporting BACnet, Modbus RTU, and Modbus TCP/IP. With versatile wireless options including 4G, LoRa®, and Wi-Fi/BLE, it ensures robust IoT network communication. Ideal for remote device and energy management, the R1000 is perfect for smart building applications.
-
-
-
-
-### [reComputer R1000 with Node Red and MQTT](https://wiki.seeedstudio.com/recomputer_r1000_nodered_mqtt/)
-
-**MQTT (Message Queuing Telemetry Transport)** is a lightweight messaging protocol ideal for IoT (Internet of Things) applications due to its efficiency and low bandwidth requirements. It facilitates communication between devices in a publish-subscribe model, allowing for real-time data exchange over unreliable networks. With Node-RED, integrating MQTT enables seamless connectivity between edge devices and central servers or other devices, fostering efficient data transmission and processing reComputer R1000 Edge Controller, by supporting MQTT natively, eliminates the need for additional hardware gateways by allowing the installation of an MQTT broker directly on the reComputer R1000 itself. This reduces complexity, minimizes latency, and enhances reliability, as data can be processed and acted upon at the edge without relying on external intermediaries, thus optimizing IoT system architecture.
-
-
+
-### [reCoputer R1000 with Node Red and InfluxDB](https://wiki.seeedstudio.com/recomputer_r1000_node_red_influxdb/)
-Deploying [InfluxDB](https://www.influxdata.com/) on an reComputer R1000 , a Raspberry Pi-powered edge controller, enables robust time-series data collection and analysis at the edge of your network. This setup is ideal for IoT applications, providing real-time insights and monitoring capabilities. By leveraging the lightweight yet powerful InfluxDB database, you can efficiently manage and analyze sensor data directly on the reComputer R1000. The following guide outlines the steps to install, configure, and use InfluxDB on your reComputer R1000 , ensuring a seamless integration into your data infrastructure.
+It is a high-performance tracker designed for Meshtastic, as small as a credit card, effortlessly fitting in your pocket or attaching to your assets. It embeds Semtech's LR1110, Nordic's nRF52840, and Mediatek's AG3335 GPS module, providing Meshtastic users with a high-precision, low-power positioning and communication solution.
+
+
+
-### [reComputer R1000 with Grafana](https://wiki.seeedstudio.com/recomputer_r1000_grafana/)
+This wiki provides a tutorial on how to use NVStreamer for RTSP video streaming on [reComputer J4012](https://www.seeedstudio.com/reComputer-J4012-p-5586.html).
-[Grafana](https://grafana.com/oss/grafana/) is an open-source visualization and analytics software that enables you to query, visualize, alert on, and explore your metrics, logs, and traces from any storage location. It offers tools to transform your time-series database (TSDB) data into insightful graphs and visualizations. As a powerful monitoring solution, Grafana helps in making informed decisions, enhancing system performance, and streamlining troubleshooting. In this wiki, we will guide you through the installation of Grafana on a Raspberry Pi-powered reComputer R1000 , connect it to an existing InfluxDB database, and create an illustrative dashboard.
+### [How to Run VLM on reComputer with Jetson Platform Services](https://wiki.seeedstudio.com/run_vlm_on_recomputer/)
-
+VLMs are multi modal models supporting images, video and text and using a combination of large language models and vision transformers. Based on this capability, they are able to support text prompts to query videos and images thereby enabling capabilities such as chatting with the video, and defining natural language based alerts. The [VLM AI service](https://docs.nvidia.com/jetson/jps/inference-services/vlm.html), enables quick deployment of VLMs with Jetson Platform Services for video insight applications. The VLM service exposes REST API endpoints to configure the video stream input, set alerts and ask questions in natural language about the input video stream.
+
+
+
-### [reComputer R1000 with fuxa to achieve SCADA](https://wiki.seeedstudio.com/reComputer_r1000_fuxa_achieve_scada/)
+This wiki provides a tutorial on how to run VLM on [reComputer J4012](https://www.seeedstudio.com/reComputer-J4012-p-5586.html).
-FUXA is a web-based Process Visualization (SCADA/HMI/Dashboard) software. With FUXA you can create modern process visualizations with individual designs for your machines and real-time data display.It supports Modbus RTU/TCP, Siemens S7 Protocol, OPC-UA, BACnet IP, MQTT, and other protocols.
+### [How to Run Zero-Shot Detection on reComputer with Jetson Platform Services](https://wiki.seeedstudio.com/run_zero_shot_detection_on_recomputer/)
-This article mainly introduces how to use fuxa to achieve SCADA. In the article, fuxa receives data from `node-red` and `OPC UA Simulator`, and displays it using `chart` and `Circular Gauge`; at the same time, it draws a series of patterns to simulate industrial processes.
+Generative AI vision transformers such as CLIP have made it possible to build zero shot detection models capable of open vocabulary object detection. Meaning, the model is not bounded by a set of pre-defined classes to detect. The objects to detect are configured at runtime by the user. The Zero Shot Detection AI service, enables quick deployment of generative AI with Jetson Services for open vocabulary detection on video live stream input. The Zero Shot Detection AI service exposes REST API endpoints to control stream input and objects to detect.
+
+
+
-### [SenseCAP Watcher - 1# Concepts and Classification of Tasks](https://wiki.seeedstudio.com/recomputer_r1000_node_red_modbus_tcp/)
+This wiki provides a tutorial on how to run Zero-Shot Detection on [reComputer J4012](https://www.seeedstudio.com/reComputer-J4012-p-5586.html).
-Watcher is a powerful tool that relies on user-issued commands to perform various monitoring and analysis tasks. By sending precise instructions to Watcher, you can direct it to focus on specific targets, collect data, and provide valuable insights.
+### [Pose-Based Light Control with Node-Red and Raspberry Pi with AIkit](https://wiki.seeedstudio.com/pose_based_light_control_with_nodered_and_rpi_with_aikit/)
-In the following sections, we will dive into the details of task categorization, model selection, and pricing information. Our goal is to equip you with the knowledge and skills necessary to efficiently assign tasks to Watcher and make the most of its functionalities. We will explore the different types of tasks available, guide you in selecting the appropriate models for your requirements, and provide clarity on the associated costs.
+
-
+This wiki will guide you on how to run YOLOv8 using an AI kit, use YOLOv8 to monitor your posture, and ultimately control your lights based on your posture. In this project, a USB camera captures your pose, and yolov8n run on [AI kit](https://www.seeedstudio.com/Raspberry-Pi-AI-Kit-p-5900.html) with [reComputer R1000](https://www.seeedstudio.com/reComputer-R1000-Series-Optional-Accessories.html) to detect your pose. The processed video, displaying the detected pose, is then streamed in real-time to [reTerminal DM](https://www.seeedstudio.com/reTerminal-DM-CM4104032-p-5898.html) using [gstreamer](https://gstreamer.freedesktop.org/). Meanwhile, the joint coordinates are sent using [mqtt](https://mqtt.org/) to [Node-RED](https://nodered.org/) which deploy on the reComputer R1000. At last, the Node-RED flow controls the smart lights based on the joint coordinates.
-### [reComputer R1000 install fin](https://wiki.seeedstudio.com/reComputer_r1000_install_fin/)
+### [reComputer R1000 with FIN to create a Equip Graphic](https://wiki.seeedstudio.com/reComputer_r1000_fin_floor_gaphic/)
FIN Framework (FIN) is a software framework with application suites that can integrate, control, manage, analyze, visualize and connect. Its capabilities can be integrated by OEMs into a range of products and services.
-
-
-
-This article mainly introduces how to install Fin on reComputer R1000.
+This article will show you how to use the `Graphics Builder` of FIN Framwork, and to create a `Equip Graphic` using the `Graphics Builder`.
+### [Convert Model to Edge TPU TFlite Format for Google Coral](https://wiki.seeedstudio.com/convert_model_to_edge_tpu_tflite_format_for_google_coral/)
-### [Finetune with Llama-Factory](https://wiki.seeedstudio.com/Finetune_LLM_on_Jetson/)
+The [Coral M.2 Accelerator](https://www.seeedstudio.com/Coral-M2-Accelerator-with-Dual-Edge-TPU-p-4681.html) with Dual Edge TPU is an M.2 module that brings two Edge TPU coprocessors to existing systems and products with an available M.2 E-key slot.[Tensorflow](https://www.tensorflow.org/) and [Pytorch](https://pytorch.org/) is the most popular deep learning frameworks. So in order to use the Edge TPU, we need to compile the model to Edge TPU format.
-🚀Finetune LLM by Llama-Factory on Jetson! Now you can tailor a custom private local LLM to meet your requirements.
-
-
-
-
+This wiki article will guide you through the process of compiling a model and running it on the Google Coral TPU, enabling you to leverage its capabilities for high-performance machine learning applications.
-Llama-Factory provides a highly convenient large language model fine-tuning tool that supports common large language models, datasets, and fine-tuning methods. With this platform, we can easily customize private large language models.
+### [How to Use Multiple CSI Cameras on reComputer with ROS](https://wiki.seeedstudio.com/csi_camera_on_ros/)
-In this wiki, we will learn how to deploy Llama-Factory on Nvidia Jetson and use Llama-Factory to train a large language model that supports Chinese Q&A.
+This tutorial provides a step-by-step guide on how to read multiple CSI camera image data through ROS on [reComputer J30/J40](https://www.seeedstudio.com/reComputer-J4012-p-5586.html) series devices and publish image topics to be displayed in the RVIZ visualization interface.
-### [reComputer R1000 with N3uron](https://wiki.seeedstudio.com/recomputer_r1000_n3uron/)
+### [Recording and playback for Respeaker Lite](https://wiki.seeedstudio.com/respeaker_record_and_play/)
-N3uron is a complete Industrial Edge Platform for IIoT & DataOps that enables seamless integration between the industrial plant floor and third-party applications, whether on-premise or in the cloud.
-With N3uron, you can easily create bidirectional data pipelines between OT and IT systems and decouple devices from applications by consolidating, modeling, processing and visualizing all your operational data in a single source of truth and ultimately making all this data available across the entire organization.
+This project demonstrates a basic loopback mechanism using the I2S interface, to test the reading and writing functions of I2S audio data. By switching I2S mode, the audio data is read from the microphone and then written to the speaker.
-
+### [How to Use NVStreamer for RTSP Streaming on reComputer with Jetson Platform Services](https://wiki.seeedstudio.com/getting_started_with_nvstreamer/)
-### [reComputer R1000 use bacnet MS/TP](https://wiki.seeedstudio.com/reComputer_r1000_use_bacnet_mstp/)
+[NVStreamer](https://docs.nvidia.com/moj/nvstreamer/moj-nvstreamer.html) is a software developed by NVIDIA that can store and serve video files, which can then be streamed using the RTSP protocol. It is particularly useful for testing with VST, as it provides an alternative method to cameras for creating video sources as input for VST. Specifically, it offers a mechanism to use specific video files as input for VST testing. VST can be configured to receive RTSP streams as if they were coming from ONVIF-S cameras.
-This article mainly introduces how to perform functional testing of bacnet MS/TP protocol on reComputer R1000.We simulated a bacnet MS/TP server on reComputer R1000, and then used YABE on the W10 PC to check whether the device is present. If the device we simulated can be found normally, it means that the bacnet MS/TP communication is normal.
## Existed Wiki Updated
-### [reTerminal && reTerminal DM-FAQ - How to solve screen refresh rate is too low](https://wiki.seeedstudio.com/screen_refresh_rate_low/)
-
-Screen has noticeable refresh stutter stripes. If your situation is the same, you can follow this wiki to solve it.
-
-
-
-### recomputer J401 and industrial JetPack 6 Compatibility
-
-We've now updated the method for flashing Jetpack 6 on recomputer J401 and industrial.
+### [XIAO ESP32C3 WiFi Usage](https://wiki.seeedstudio.com/XIAO_ESP32C3_WiFi_Usage/)
-[recomputer J401](https://wiki.seeedstudio.com/reComputer_J4012_Flash_Jetpack)
+We've added examples of [WiFi Usage](https://wiki.seeedstudio.com/XIAO_ESP32C3_WiFi_Usage/#scan-wi-fi-access-points).
-[recomputer J401 industrial](https://wiki.seeedstudio.com/reComputer_Industrial_Getting_Started)
+### [XIAO Pin Multiplexing](https://wiki.seeedstudio.com/XIAO_ESP32C3_Pin_Multiplexing/)
-### [Installation to reTerminal DM Lorawan Module](https://wiki.seeedstudio.com/reterminal-dm/#lorawan--module)
-
-We have updated packages installation to reterminal dm lorawan module.
+We've added examples of [XIAO ESP32C3 Serial1 Usage](https://wiki.seeedstudio.com/XIAO_ESP32C3_Pin_Multiplexing/#serial1-usage).
+We've added examples of [XIAO ESP32C6 Serial1 Usage](https://wiki.seeedstudio.com/xiao_pin_multiplexing_esp33c6/#serial1-usage).
+We've added examples of [XIAO ESP32S3 Serial1 Usage](https://wiki.seeedstudio.com/xiao_esp32s3_pin_multiplexing/#serial1-usage).
-### [Using Grove Vision AI V2 with AT Commands - Compatibility of different XIAO](https://wiki.seeedstudio.com/grove_vision_ai_v2_at/)
-We've added a table of how the Grove Vision AI V2 pairs with the XIAO
+
+
+
+## Table of Contents
+
+- [**What is the Grove Ecosystem?**](#jump1)
+- [**What is in the Grove Ecosystem?**](#jump2)
+ - [**Grove Sensors**](#jump3)
+ - [**Grove Network Modules**](#jump4)
+ - [**Grove Accessories**](#jump5)
+ - [**Boards supported by the Grove interface**](#jump6)
+ - [**Kits with Grove Modules and Courses**](#jump7)
+ - [**Co-Create Program - Grove Modules**](#jump8)
+ - [**Grove Cables**](#jump9)
+- [**Grove Projects**](#jump10)
+- [**More Knowledge about Grove Ecosystm**](#jump11)
+- [**Resourcesfor Grove**](#jump12)
+- [**Tech Support & Product Discussion**](#jump13)
+
+## What is the Grove Ecosystem?
+
+Grove is a modular, standardized connector prototyping system. Compared to systems using jumpers or solder, Grove's modular building-block approach makes assembling real electronics easy. The Grove system consists of a base unit and various modules with standardized connectors. These were originally called "stems" and "twigs", but the names have been phased out.
+
+The Base unit, generally a microprocessor, allows for easy connection of any input or output from the Grove modules. Each Grove module typically addresses a single function, such as a simple button or a more complex heart rate sensor. You don't need a Base unit to connect to others Grove modules. You can use a cable (Grove to Pin Header Converter) to run from the pins on the Raspberry Pi or Arduino to the Grove connectors.
+
+
+
+## What is in the Grove Ecosystem?
+
+The Grove ecosystem provides a convenient and user-friendly approach to prototyping and building electronic systems. Its modular nature, standardized connectors, and wide range of modules make it easy for both beginners and experienced makers to assemble and experiment with real electronics quickly.
+
+### Grove Sensors
+
+The Grove ecosystem offers a wide range of sensors that can be easily integrated into your electronics projects. These sensors are designed to address specific functions and can provide various types of input data.
+
+
+
+
+
+### Grove Network Modules
+
+The Grove system also includes network modules that enable communication and connectivity in your projects. These modules allow you to connect your electronics to different networks, such as Wi-Fi, Bluetooth, LoRa, NFC, or other Standard Protocol.
+
+With Grove network modules, you can easily add wireless capabilities to your projects, enabling data transmission, remote control, or interaction with other devices and the internet.
+
+
+
+### Grove Accessories
+
+In addition to sensors and network modules, the Grove ecosystem offers a variety of accessories that complement and enhance your electronics projects. These accessories include components such as LCD displays, LED matrices, motor drivers, relay modules, and more.
+
+
+
+
+
+
+
+### The Boards supported by the Grove interface
+
+The Grove interface is designed to be compatible with a wide range of development boards and microcontrollers.
+
+#### Published by Seeed Studio
+
+
+
+:::tip
+For more acknowledged boards supporting Grove interfaces, like Raspberry Pi, Pi Zero, or other boards, launched by Seeed Studio, you can check [here(extensions and kits)](https://www.seeedstudio.com/shopby/grove.html).
+:::
+
+#### Published by Arduino
+
+
+
+
+
+### The Kits come with the Grove Modules and Courses
+
+#### Arduino Board-based
+
+Grove Beginner Kit for Arduino is one of the best Arduino Beginner Kit for beginners. It includes one Arduino compatible Board with 10 additional Arduino sensors and an all-in-one-piece PCB design. All the modules have been connected to the Seeeduino through the PCB stamp holes so Grove cables are not needed for connection. However, you can also take the modules out and use Grove cables to connect the modules. You can build any Arduino project you like with this Grove Beginner Kit For Arduino!
+
+
+
+
+:::tip
+For more kits about Ardunio, please click [here](https://www.seeedstudio.com/shopby/grove.html).
+:::
+
+#### Raspberry Pi Board-based
+
+In Seeed, we designed 8 tutorials for you to start tinkering with some basic Grove modules and the Raspberry Pi 4 board. This section provides guides on how modules can be combined and applied in real-life applications.
+
+
+
+:::tip
+For more kits about Raspberry Pi, please check [here](https://www.seeedstudio.com/shopby/grove.html).
+:::
+
+#### SeeedStudio XIAO Board-based
+
+The primary audience for “XIAO: Big Power, Small Board” encompasses hobbyists, students, educators, and professionals in electronics and machine learning who wish to explore and maximize the potential of compact hardware platforms. Typically, these readers may hold positions as electronics enthusiasts, DIY project creators, electronics educators, or even junior embedded system developers. As they advance in their careers, they might be preparing for roles such as electronics design engineers, IoT developers, or machine learning hardware integrators.
+
+
+
+:::tip
+For more kits about Seeed Studio XIAO Series, please check [here](https://www.seeedstudio.com/shopby/grove.html).
+:::
+
+#### Wio Terminal Board-based
+
+This kit comes with Wio Terminal and a course in the box. This book is designed specifically for educators to be able to adopt the Wio Terminal into the classroom or workshops to show learners the power of TinyML. It provides the basic underpinnings that one would have to cover to teach the very basics of ML while keeping the concepts grounded in hands-on exercises.
+
+
+
+:::tip
+For more kits about Wio Terminal, please check [here](https://www.seeedstudio.com/shopby/grove.html).
+:::
+
+
+### Co-Create Program - Grove Modules
+
+Seeed Studio Fusion has launched a Grove Sensor Co-brand Campaign to help engineers turn their Grove designs into real products. Participants can have their designs manufactured and sold on Seeed Studio Bazaar (Product purchase page).
+
+
+
+
+
+### Grove Cables
+
+
+
+
+#### Normal Grove Cable
+
+There are 5 types of Grove cables available for your projects and the lengths are 5cm, 20cm, 30cm, 40cm and 50 cm, shown below.
+
+| 5cm | 20 cm | 30 cm | 40 cm | 50 cm |
+|-----|-------|-------|-------|-------|
+|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/cable_5.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/cable_20.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/cable_30.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/cable_40.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/cable_50.jpg)|
+|[Get One Now](https://www.seeedstudio.com/Grove-Universal-4-Pin-Buckled-5cm-Cable-5-PCs-Pack.html)|[Get One Now](https://www.seeedstudio.com/Grove-Universal-4-Pin-20cm-Unbuckled-Cable-5-PCs-Pack-p-749.html)|[Get One Now](https://www.seeedstudio.com/Grove-Universal-4-Pin-Buckled-30cm-Cable-5-PCs-Pack.html)|[Get One Now](https://www.seeedstudio.com/Grove-Universal-4-Pin-Buckled-40cm-Cable-5-PCs-Pack.html)|[Get One Now](https://www.seeedstudio.com/Grove-Universal-4-Pin-Buckled-50cm-Cable-5-PCs-Pack.html)|
+
+#### Grove - Branch Cable
+
+Use this cable to connect two I2C Grove modules to one I2C Stem connector. This cable is compatible to all I2C Grove modules. It will be very useful when you need to connect more than one I2C device to your Grove System.
+
+
+
+
+
+:::tip
+You can check it out on the [Bazaar Purchase Page](https://www.seeedstudio.com/Grove-Branch-Cable-5PCs-pack.html). We have launched [Grove - I2C Hub (6 Port)](https://www.seeedstudio.com/Grove-I2C-Hub-6-Port-p-4349.html) for this function.
+:::
+
+
+
+
+
+#### Grove - Branch Cable for Servo
+
+Grove Branch Cable for Servos is used to connect one or two servos to a project, with power and ground shared between the connectors and individual PWM signals for each servo connected to the Arduino's PWM-capable pins. The cable's four-pin keyed connector is typically connected to a Grove Shield digital socket, and the wire color (yellow or white) indicates the corresponding digital pin for the servo input.
+
+
+
+:::tip
+You can check it out on the [Bazaar Purchase Page](https://www.seeedstudio.com/Grove-Branch-Cable-for-Servo-5PCs-pack.html).
+:::
+
+#### Grove & Qwiic/STEMMA QT Interface to Male/Female Jumper Cables
+
+This cable helps you to connect multiple Grove, Qwiic, and STEMMA QT modules to your development boards using a single cable.
+
+You can connect one Grove Module and one Qwiic Module or STEMMA QT Module to [Seeeduino Lotus](https://www.seeedstudio.com/Seeeduino-V4-2-p-2517.html) or [Arduino UNO](https://www.seeedstudio.com/Arduino-Uno-Rev3-p-2995.html).
+
+
+
+
+
+:::tip
+You can check it out on the [Bazaar Purchase Page](https://www.seeedstudio.com/Grove-Qwiic-STEMMA-QT-Interface-to-Male-Female-Jumper-Cables-p-4467.html).
+:::
+
+#### Grove - 4 pin Female Jumper to Grove 4 pin Conversion Cable (5 PCs per PAck)
+
+4 pin Female Jumper to Grove 4 pin Conversion Cable is being made available based on requests from customers to use Grove modules directly with Arduino. The female jumper on this cable is compatible with 2.54 pitch pin headers. With this cable, you can easily connect all of Seeed’s Grove modules to any 2.54mm pitch connector.
+
+
+
+:::tip
+You can check it out on the [Bazaar Purchase Page](https://www.seeedstudio.com/Grove-4-pin-Female-Jumper-to-Grove-4-pin-Conversion-Cable-5-PCs-per-PAck.html).
+:::
+
+#### Grove - 4 pin Male Jumper to Grove 4 pin Conversion Cable (5 PCs per Pack)
+
+Grove is a convenient plug-and-play system with specialized interface, but that doesn't mean it couldn't be used in open ecosystem like breadboard. The male jumper on this cable is compatible with 2.54 pitch pin headers. With this cable, you can easily connect all of Seeed’s Grove modules to any 2.54mm pitch connector.
+
+
+
+:::tip
+You can check it out on the [Bazaar Purchase Page](https://www.seeedstudio.com/Grove-4-pin-Male-Jumper-to-Grove-4-pin-Conversion-Cable-5-PCs-per-Pack.html).
+:::
+
+#### Grove Female Header - DIP-4P-2.0mm-90-Degree
+
+This is a 4-pin, 2.0mm pitch, 90-Degree version, DIP Grove Female Header pack with 10pcs, which is suitable to perform wire transfers and get your board to connect to components.
+
+
+
+:::tip
+You can check it out on the [Bazaar Purchase Page](https://www.seeedstudio.com/Grove-Universal-4-pin-connector-90-10-PCs.html).
+:::
+
+#### Grove Female Header - DIP-4P-2.0mm-10 Pcs
+
+This is a 4-pin, 2.0mm pitch, DIP Grove Female Header pack with 10pcs, which is suitable to perform wire transfers and get your board to connect to components.
+
+
+
+:::tip
+You can check it on the [Bazaar Purchase Page](https://www.seeedstudio.com/Grove-Universal-4-pin-connector.html).
+:::
+
+## ✨ Contributor Project
+
+- This page is updated by the [Seeed Studio Contributor Project](https://github.com/orgs/Seeed-Studio/projects/6).
+- Much thanks to [Elizabeth's efforts](https://github.com/orgs/Seeed-Studio/projects/6?pane=issue&itemId=33931997) for your contribution and your work will be exhibited as a token of our appreciation!
+
+## Grove Projects
+
+Here are some project made with Grove for your reference. For more projects please refer to [Recipe](https://community.seeedstudio.com/discover.html?t=Grove) or [Instructables](https://www.instructables.com/howto/Grove/).
+
+|Automated Watering|IoT Jar Notifier|Magic Mirror|
+|------------------|--------------------------|-----------------------|
+|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/planting.png)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/notifier.png)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/Magic_mirror.png)|
+|[MAKE IT NOW!](https://www.instructables.com/id/Automated-Watering-of-Potted-Plants-with-Intel-Edi/)|[MAKE IT NOW!](https://www.instructables.com/id/IoT-Jar-Chandelier-Physical-Gmail-Twitter-Facebook/)|[MAKE IT NOW!](https://www.instructables.com/id/Magic-Mirror-Mini-Android-Powered/)|
+
+
+| Crazy Caterpillar|Voice-Control IR Remote Controller| Plant Watering Device |
+|------------------|--------------------------|-----------------------|
+|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/Crazy_Caterpiller.png)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/Learnable_IR_Remote.png)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/6.jpg)|
+|[MAKE IT NOW!](https://www.instructables.com/id/Crazy-Caterpillar-an-Arduino-Robot/)|[MAKE IT NOW!](https://www.instructables.com/id/Make-a-Voice-Control-IR-Remote-Controller-by-Ardui/)|[MAKE IT NOW!](https://www.instructables.com/id/DIY-an-Automatic-Plant-Watering-Device/)|
+
+| Wi-Fi Speaker | DIY a toy car |Temperature-controlled USB Fan|
+|------------------|--------------------------|-----------------------|
+|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/7.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/8.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/Temperature_controlled_fan.png)|
+|[MAKE IT NOW!](https://www.instructables.com/id/DIY-a-Wi-Fi-Speaker/)|[MAKE IT NOW!](https://www.instructables.com/id/Make-a-mini-toy-car-with-Arduino/)|[MAKE IT NOW!](https://www.instructables.com/id/Temperature-controlled-USB-fan-MilCandy/)|
+
+| Pokemon Go SAFETY BADGE |LED Clay Ornament| Quality of Life Meter |
+|------------------|--------------------------|-----------------------|
+|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/10.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/LED_Clay_Ornament.png)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/12.jpg)|
+|[MAKE IT NOW!](https://www.instructables.com/id/5-Minutes-to-DIY-Your-Own-Pokemon-Go-SAFETY-BADGE/)|[MAKE IT NOW!](https://www.instructables.com/id/LED-Clay-Ornament/)|[MAKE IT NOW!](https://www.instructables.com/id/Quality-of-Life-Meter-Mk2-Smarter-and-Connected/)|
+
+
+|Grove Minimal Thermometer|More Humane Moisture Sensor| PI Game Box |
+|------------------|--------------------------|-----------------------|
+|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/Grove_Minimal_Thermometer.png)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/More_Humane_Moisture_Sensor.png)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/project_images/15.jpg)|
+|[MAKE IT NOW!](https://www.instructables.com/id/Grove-Minimal-Thermometer/)|[MAKE IT NOW!](https://www.instructables.com/id/More-Humane-Moisture-sensor/)|[MAKE IT NOW!](https://www.instructables.com/id/DIY-a-Raspberry-Game-2048/)|
+
+## More Knowledge about Grove Ecosystm
+
+The following information is presented by the Seeed Studio and may be outdated. We welcome updates from the community to renew the content here if needed!
+
+For more information on how to contribute please click here!
+
+### Interface of Grove modules
+
+You may notice that Grove cables come in 4 different colours.
+
+* **Pin 1** - Yellow (for example, SCL on I2C Grove Connectors)
+* **Pin 2** - White (for example, SDA on I2C Grove Connectors)
+* **Pin 3** - Red - VCC on all Grove Connectors
+* **Pin 4** - Black - GND on all Grove Connectors
+
+There're mainly 4 type of Interface of Grove modules.
+
+#### Grove Digital
+
+A digital Grove connector consists of the standard four lines coming into the Grove plug. The two signal lines are generically called D0 and D1. Most modules only use D0, but some do (like the LED Bar Grove display) use both. Often base units will have the first connector called D0 and the second called D1 and they will be wired D0/D1 and then D1/D2, etc.
+
+Examples of Grove Digital modules are: **Switch Modules**, the **Fan Module**, and the **LED Module**. In Figure 8, you can see what the Grove connector looks like on the schematic for the LED Grove module. They can range from simple to very complex.
+
+|pin|Function | Note |
+|--------|------|-----|
+|pin1 | Dn | Primary Digital Input/Output |
+|pin2 | Dn+1 | Secondary Digital Input/Output|
+|pin3 | VCC | Power for Grove Module, 5V/3.3V|
+|pin4 | GND | Ground |
+
+
+#### Grove Analog
+
+A Grove Analog connector consists of the standard four lines coming into the Grove plug. The two signal lines are generically called A0 and A1. Most modules only use A0. Often base units will have the first connector called A0 and the second called A1 and they will be wired A0/A1 and then A1/A2, etc.
+
+|pin|Function | Note |
+|--------|------|-----|
+|pin1 | An | Primary Analog Input |
+|pin2 | An+1| Secondary Analog Input|
+|pin3 | VCC | Power for Grove Module, 5V/3.3V|
+|pin4 | GND | Ground |
+
+#### Grove UART
+
+The Grove UART module is a specialized version of a Grove Digital Module. It uses both Pin 1 and Pin 2 for the serial input and transmit. The Grove UART plug is labeled from the base unit point of view. In other words, Pin 1 is the RX line (which the base unit uses to receive data, so it is an input) where Pin 2 is the TX line (which the base unit uses to transmit data to the Grove module).
+
+|pin|Function | Note |
+|--------|------|-----|
+|pin1 | RX | Serial Receive |
+|pin2 | TX| Serial Transmit|
+|pin3 | VCC | Power for Grove Module, 5V/3.3V|
+|pin4 | GND | Ground |
+
+#### Grove I2C
+
+Those long term readers of this blog know that our favourite devices are I2C sensors. There are many types of I2C Grove sensors available. Most are 5V/3.3V devices, but there are a few that are only 3.3V or 5.0V. You need to check the specifications.
+
+The Grove I2C connector has the standard layout. Pin 1 is the SCL signal and Pin 2 is the SDA signal. Power and Ground are the same as the other connectors. This is another special version of the Grove Digital Connector. In fact, often the I2C bus on a controller (like the ESP8266, Raspberry Pi and the Arduino) just uses Digital I/O pins to implement the I2C bus. The pins on the Raspberry Pi and Arduino are special with hardware support for the I2C bus.
+
+|pin|Function | Note |
+|--------|------|-----|
+|pin1 | SCL | I2C Clock |
+|pin2 | SDA| I2C Data|
+|pin3 | VCC | Power for Grove Module, 5V/3.3V|
+|pin4 | GND | Ground |
+
+
+### Size of Grove
+
+There are 5 sizes of Grove boards available.
+
+| 1X1 | 1X2 | 1X3 | 2X2 | 2X3 |
+|---|-----|------|-----|----|
+|20x20mm|20x40mm|20x60mm|40x40mm|40x60mm|
+|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/size1x1.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/size1x2.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/size1x3.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/size2x2.jpg)|![enter image description here](https://files.seeedstudio.com/wiki/GroveSystem/images/size2x3.jpg)|
+
+
+Here are the dimensions.
+
+- Grove 20X20 DIP:
+
+![](https://files.seeedstudio.com/wiki/GroveSystem/images/20_20dip.png)
+
+- Grove 20X20 SMD Horizontal:
+
+![](https://files.seeedstudio.com/wiki/GroveSystem/images/20_20smd_horizontal.png)
+
+- Grove 20X20 SMD Vertical:
+
+![](https://files.seeedstudio.com/wiki/GroveSystem/images/20_20smd_vertical.png)
+
+- Grove 20X40 DIP:
+
+![](https://files.seeedstudio.com/wiki/GroveSystem/images/40_40dip.png)
+
+- Grove 20X40 SMD Horizontal:
+
+![](https://files.seeedstudio.com/wiki/GroveSystem/images/40_40smd_horizontal.png)
+
+- Grove 20X40 SMD Vertical:
+
+![](https://files.seeedstudio.com/wiki/GroveSystem/images/40_40smd_vertical.png)
+
+For the detail mechnical drawing, please refer to [Grove Mechnical Drawing](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove_Mechnical_Drawing.zip).
+
+
+
+## Resource for Grove
+
+【**ZIP**】[Grove Mechnical Drawing](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove_Mechnical_Drawing.zip)
+
+【**ZIP**】[Dimension of Grove 20X20 DIP](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove-20x20-Plug-vertical.zip)
+
+【**ZIP**】[Dimension of Grove 20X40 DIP](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove-20x40-Plug-vertical.zip)
+
+【**ZIP**】[Dimension of Grove 20X20 SMD Vertical](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove-20x20-SMD-vertical.zip)
+
+【**ZIP**】[Dimension of Grove 20X40 SMD Vertical](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove-20x40-SMD-vertical.zip)
+
+【**ZIP**】[Dimension of Grove 20X20 SMD Horizontal](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove20x20-SMD-horizontal.zip)
+
+【**ZIP**】[Dimension of Grove 20X40 SMD Horizontal](https://files.seeedstudio.com/wiki/GroveSystem/res/Grove-20x40-SMD-horizontal.zip)
+
+## Tech Support & Product Discussion
+
+Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/CN_XIAO_ESP32C3_Getting_Started.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/CN_XIAO_ESP32C3_Getting_Started.md
index 91e996b41016..7b1178aac1a5 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/CN_XIAO_ESP32C3_Getting_Started.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_ESP32C3/CN_XIAO_ESP32C3_Getting_Started.md
@@ -201,7 +201,7 @@ AD转换结果与万用表测得的电压一致,误差在5 mV左右,在实
以下是测试电池电压的程序。
-```c++
+```cpp
void setup() {
Serial.begin(115200);
pinMode(A0, INPUT); // ADC
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Grove-Shield-for-Seeeduino-XIAO-embedded-battery-management-chip.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Grove-Shield-for-Seeeduino-XIAO-embedded-battery-management-chip.md
index 1e0b958141ca..735e8ed9e88a 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Grove-Shield-for-Seeeduino-XIAO-embedded-battery-management-chip.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Grove-Shield-for-Seeeduino-XIAO-embedded-battery-management-chip.md
@@ -138,7 +138,7 @@ Seeed Studio Grove Base for XIAO是适用于 **[Seeed Studio XIAO](https://wiki.
#### 软件代码
-```C++
+```cpp
#include "GBT24LTR11.h"
#ifdef __AVR__
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Seeeduino-XIAO-Expansion-Board.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Seeeduino-XIAO-Expansion-Board.md
index 1970742e4468..dccca93aecfc 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Seeeduino-XIAO-Expansion-Board.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_Expansion_board/CN_Seeeduino-XIAO-Expansion-Board.md
@@ -159,7 +159,7 @@ Seeed Studio XIAO的扩展底板可以通过电池供电,因此如果您进行
**OLED代码**
-```CPP
+```cpp
#include
#include
#include
@@ -190,7 +190,7 @@ void loop(void) {
**代码**
-```CPP
+```cpp
const int buttonPin = 1; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
@@ -234,7 +234,7 @@ void loop() {
**代码**
-```CPP
+```cpp
int speakerPin = A3;
int length = 28; // the number of notes
char notes[] = "GGAGcB GGAGdc GGxecBA yyecdc";
@@ -299,7 +299,7 @@ void loop() {
**第三步**. 打开Arduino IDE,将代码复制并粘贴到Arduino IDE中,然后上传它。
-```CPP
+```cpp
#include
#include
#include
@@ -347,7 +347,7 @@ void loop() {
-```CPP
+```cpp
#include
#include
#include
@@ -637,7 +637,7 @@ MicroSD卡的系统格式可以是FAT或exFAT。如果您使用其他MicroSD卡
** `main.py` 代码**
-```CPP
+```cpp
import sd
f = open("/sd/hello.txt", "r") ## read the file from SD card
print(f.read())
@@ -647,7 +647,7 @@ print(f.read())
** `sd.py` 代码**
-```CPP
+```cpp
import os
import adafruit_sdcard
import board
@@ -729,7 +729,7 @@ sys.path.append("/sd/lib") ## switch to the path to SD card
**代码**
-```CPP
+```cpp
#include
#include
@@ -847,7 +847,7 @@ void loop() {
**代码**
-```CPP
+```cpp
#include
#include
#include
@@ -993,7 +993,7 @@ void delayUntil(unsigned long elapsedTime) {
**代码**
-```C
+```cpp
#include
#include
#include
@@ -1181,7 +1181,7 @@ void colorWipe(uint32_t c, uint8_t wait) {
**代码**
-```C
+```cpp
#include
#include "ATSerial.h"
#include "Protocol.h"
@@ -1308,7 +1308,7 @@ void setup() {
**代码**
-```C
+```cpp
#include
#include
#include
@@ -1533,7 +1533,7 @@ void loop() {
**代码**
-```C
+```cpp
#include
#include
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-Arduino.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-Arduino.md
index ca89d568d842..667d3aca2b53 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-Arduino.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-Arduino.md
@@ -105,7 +105,7 @@ Seeed Studio XIAO RP2040板上有11个数字引脚,4个模拟引脚,11个PWM
请注意,Seeed Studio XIAO RP2040的工作电压是3.3V,如果将传感器错误地连接到5V上,主板可能无法正常工作。
:::
-```c++
+```cpp
const int buttonPin = D0; // the number of the pushbutton pin
const int ledPin = 25; // the number of the LED pin
@@ -137,7 +137,7 @@ void loop() {
将一个电位计连接到引脚A0,并将一个LED连接到引脚25。然后上传以下代码,通过旋转电位计旋钮来控制LED的闪烁间隔。
-```c++
+```cpp
const int sensorPin = A0;
const int ledPin = 25;
void setup() {
@@ -164,7 +164,7 @@ int sensorValue = analogRead(sensorPin);
使用引脚D6作为UART的TX引脚,引脚D7作为UART的RX引脚,发送消息 "Hello World!"。
-```c++
+```cpp
void setup() {
Serial.begin(115200);
while (!Serial);
@@ -190,7 +190,7 @@ void loop() {
- **步骤二.** 将代码复制到Arduino并点击 **上传** 按钮进行上传。RGB LED将显示彩虹色。
-```c++
+```cpp
#include
int Power = 11;
@@ -254,7 +254,7 @@ RGB LED将显示彩虹颜色。
- **步骤二.** 将代码复制到Arduino并点击 **Upload** 按钮进行上传。
-```c++
+```cpp
#include
#include
@@ -311,7 +311,7 @@ void loop(void) {
- **步骤二.** 将代码复制到Arduino并点击 **上传** 按钮进行上传。
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-CircuitPython.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-CircuitPython.md
index 9f60bf780ec0..274e05b17ae3 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-CircuitPython.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-CircuitPython.md
@@ -57,7 +57,7 @@ CircuitPython是一种专为低成本微控制器板实验和学习编程而设
**步骤三** 复制并上传以下代码:
-```c++
+```cpp
"""Example for Pico. Blinks the built-in LED."""
import time
import board
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-MicroPython.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-MicroPython.md
index 8760b8e5d09b..5d1b4e648545 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-MicroPython.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/CN_XIAO-RP2040-with-MicroPython.md
@@ -64,7 +64,7 @@ last_update:
- **步骤三**. 将以下代码复制到Thonny中。
-```c++
+```cpp
from machine import Pin, Timer
led = Pin(25, Pin.OUT)
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/CN_XIAO-RP2040-EI.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/CN_XIAO-RP2040-EI.md
index 8a55a7c5a59c..6ba6a004e58c 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/CN_XIAO-RP2040-EI.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_RP2040/Embedded ML/CN_XIAO-RP2040-EI.md
@@ -48,7 +48,7 @@ last_update:
安装完成后,复制以下代码并运行它。
-```c++
+```cpp
#include
#include "MMA7660.h"
MMA7660 accelemeter;
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/CN_How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/CN_How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md
index e2803a0d1d5e..718280b7aae3 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/CN_How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_SAMD21/TuTorial/CN_How-to-use-Seeeduino-XIAO-to-log-in-to-your-Raspberry-PI.md
@@ -55,7 +55,7 @@ enable_uart=1
- **第二步.** 将以下代码复制到Arduino IDE中,并将代码上传到Seeed Studio XIAO SAMD21。
-```c++
+```cpp
uint32_t baud;
uint32_t old_baud;
void setup() {
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/CN_XIAO-BLE-Sense-Bluetooth-Usage.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/CN_XIAO-BLE-Sense-Bluetooth-Usage.md
index c9e667d7b6fa..b1a6c97033e8 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/CN_XIAO-BLE-Sense-Bluetooth-Usage.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Bluetooth Libraries/CN_XIAO-BLE-Sense-Bluetooth-Usage.md
@@ -88,7 +88,7 @@ last_update:
请将下面的代码粘贴到Arduino IDE中,并将其上传到Seeed Studio XIAO nRF52840。
-```c++
+```cpp
#include
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy LED Service
@@ -163,7 +163,7 @@ void loop() {
这个例子实现的关键是下面的段落。
-```c++
+```cpp
while (central.connected()) {
if (switchCharacteristic.written()) {
if (switchCharacteristic.value()) {
@@ -229,7 +229,7 @@ void loop() {
-```c++
+```cpp
//Radar_with_XIAOBLE_example
#include
@@ -308,7 +308,7 @@ void loop() {
在这个例子中,向移动设备发送数据的函数是`setValue()`。如果你想实时显示数据,你需要将`BLENotify`添加到下面的代码中。最后一个参数20表示可以发送的数据的最大长度。
-```c++
+```cpp
BLEStringCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify, 20);
```
@@ -363,7 +363,7 @@ BLEStringCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A12
请选择一个不需要连接任何设备的XIAO nRF52840,直接上传下面的程序。
-```c++
+```cpp
#include
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // Bluetooth® Low Energy LED Service
@@ -450,7 +450,7 @@ void loop() {
为此目的,与扩展板连接的XIAO上传以下程序。
-```c++
+```cpp
#include
#include
#include
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE-Sense-Pin-Multiplexing.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE-Sense-Pin-Multiplexing.md
index 3539a96c2588..1e3fd55bd51b 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE-Sense-Pin-Multiplexing.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE-Sense-Pin-Multiplexing.md
@@ -20,7 +20,7 @@ Seeed Studio XIAO nRF52840 (Sense) 具有丰富的接口。 有 **11 个数字 I
将按钮连接到引脚 D6,将 LED 连接到引脚 D10。然后上传以下代码以使用按钮控制 LED 的开/关。
-```c++
+```cpp
const int buttonPin = 6; // pushbutton connected to digital pin 6
const int ledPin = 10; // LED connected to digital pin 10
@@ -82,7 +82,7 @@ void loop() {
将电位计连接到引脚 A5,将 LED 连接到引脚 D10。然后上传以下代码,通过旋转电位器旋钮来控制LED的闪烁间隔。
-```c++
+```cpp
const int sensorPin = 5;
const int ledPin = 10;
void setup() {
@@ -108,7 +108,7 @@ void loop() {
## 串行
使用 Serial1 通过 GPIO 而不是 USB 使用 UART。您也可以同时使用两者。 使用引脚 D6 作为 UART 的 TX 引脚,使用引脚 D7 作为 UART 的 RX 引脚来发送“Hello World!”消息。
-```c++
+```cpp
void setup() {
Serial1.begin(115200);
while (!Serial1);
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE_CircutPython.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE_CircutPython.md
index f6f1a0e334e0..0f4e274133a6 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE_CircutPython.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/CN_XIAO-BLE_CircutPython.md
@@ -55,7 +55,7 @@ CircuitPython 是一种编程语言,旨在简化在低成本微控制器板上
**步骤 3** 复制并上传以下代码:
-```c++
+```cpp
"""Example for Seeed Studio XIAO nRF52840. Blinks the built-in LED."""
import time
import board
diff --git a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/CN_XIAO-BLE-PDM-EI.md b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/CN_XIAO-BLE-PDM-EI.md
index 6fd64b7aed6e..f51f5d551f97 100644
--- a/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/CN_XIAO-BLE-PDM-EI.md
+++ b/docs/zh-CN/Sensor/SeeedStudio_XIAO/SeeedStudio_XIAO_nRF52840-Sense/Embedded ML/CN_XIAO-BLE-PDM-EI.md
@@ -293,7 +293,7 @@ XIAO nRF52840 Sense内置LED,有3种颜色:
先定义一些变量。我在包含的库之后定义了这些库:
-```C
+```cpp
/* threshold for predictions */
float threshold = 0.7;
@@ -319,7 +319,7 @@ int oldLED;
int LED 是我们将要打开的电流LED。
接下来,在loop( )函数中,在for循环指令内部,我们循环使用CLASSIFIER_LABEL_COUNT(大约在第129行左右——上面的行已经有了):
-```C
+```cpp
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
```
@@ -327,7 +327,7 @@ for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
完整的for循环加上新增的代码如下所示:
-```C
+```cpp
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(" %s: %.5f\n", result.classification[ix].label, result.classification[ix].value);
//lets light up some LEDS
diff --git a/docs/zh-CN/Sensor/Wio_Terminal/Application b/docs/zh-CN/Sensor/Wio_Terminal/Application
deleted file mode 100644
index d00491fd7e5b..000000000000
--- a/docs/zh-CN/Sensor/Wio_Terminal/Application
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/docs/zh-CN/Sensor/Wio_Terminal/Application/Easy_IoT/CN-Connect-Wio-Terminal-to-Google-Cloud-IoT-Core.md b/docs/zh-CN/Sensor/Wio_Terminal/Application/Easy_IoT/CN-Connect-Wio-Terminal-to-Google-Cloud-IoT-Core.md
new file mode 100644
index 000000000000..efdad159969f
--- /dev/null
+++ b/docs/zh-CN/Sensor/Wio_Terminal/Application/Easy_IoT/CN-Connect-Wio-Terminal-to-Google-Cloud-IoT-Core.md
@@ -0,0 +1,770 @@
+---
+title: 将Wio Terminal连接到Google Cloud IoT Core
+nointro:
+keywords:
+ - docs
+ - docusaurus
+image: https://wiki.seeedstudio.com/Connect-Wio-Terminal-to-Google-Cloud-IoT-Core/
+slug: /cn/Connect-Wio-Terminal-to-Google-Cloud-IoT-Core
+last_update:
+ date: 3/01/2024
+ author: 金菊
+---
+# 将Wio Terminal连接到Google Cloud IoT Core
+
+![](https://files.seeedstudio.com/wiki/Google_Cloud_IoT/thumb.png)
+
+## 引言
+在本教程中,我们将带您逐步了解如何将Wio Terminal连接到Google Cloud IoT Core,并将来自Wio Terminal的遥测数据发送到Google Cloud IoT Core。这将分为两个部分,第一部分将介绍如何使用已预配置在代码中的令人兴奋的库发送遥测数据,而第二部分将介绍如何将自己的传感器添加到Wio Terminal,并将遥测数据发送到Google Cloud IoT Core。Google Cloud IoT Core支持HTTP和MQTT协议进行通信,但在本教程中,我们将使用MQTT协议。
+
+
+### 什么是Google Cloud?
+[Google Cloud](https://cloud.google.com/) 由一系列物理资产(如计算机和硬盘驱动器)和虚拟资源(如虚拟机)组成,这些资源位于全球各地的Google数据中心中。资源的分布提供了多个优势,包括在故障发生时的冗余备份和通过将资源靠近客户端来减少延迟。
+
+在云计算中,您可能习惯将软件和硬件产品视为服务。这些服务提供对底层资源的访问。[Google Cloud提供的服务种类](https://cloud.google.com/products) 繁多,而且不断增长。当您在Google Cloud上开发您的网站或应用程序时,您可以将这些服务进行组合,以创建满足您需求的基础设施,并添加您的代码来实现您想要构建的场景。
+
+### 什么是Google Cloud平台?
+[Google Cloud 平台 (GCP)](https://console.cloud.google.com/)是一组云计算服务的集合。通过一系列管理工具,它提供了一系列模块化的云服务,包括计算、数据存储、数据分析和机器学习等。GCP提供基础设施即服务(IaaS)、平台即服务(PaaS)和无服务器计算环境。
+
+### 什么是Google Cloud IoT Core?
+[Google Cloud Internet of Things (IoT) Core](https://cloud.google.com/iot/docs) 是一个全面托管的服务,用于安全地连接和管理物联网设备,无论是几个还是数百万个设备。它可以接收来自连接设备的数据,并构建与Google Cloud Platform的其他大数据服务集成的丰富应用程序。
+
+### 什么是Google Cloud Console?
+
+[Google Cloud Console](https://console.cloud.google.com/) 提供了一个基于Web的图形用户界面,您可以使用它来管理Google Cloud Platform资源。当您使用Cloud Console时,您可以创建一个新项目或选择一个现有项目,并在该项目的上下文中使用您创建的资源。您可以创建多个项目,因此可以根据自己的需求将工作分隔开来。例如,如果您希望只有特定团队成员可以访问该项目中的资源,而所有团队成员仍可以访问另一个项目中的资源,那么您可以启动一个新项目。
+
+## 将Wio Terminal通过MQTT连接到Google Cloud IoT Core
+
+正如之前所解释的,我们将使用可用的MQTT桥来实现Wio Terminal与Google Cloud IoT Core之间的通信。然而,如果您有特定的要求,也可以使用HTTP桥接。
+
+![](https://files.seeedstudio.com/wiki/Google_Cloud_IoT/5555555.png)
+
+### Google Cloud Console 设置
+
+首先,我们需要访问Google Cloud Console,创建一个Cloud IoT Core设备注册表并注册设备。
+
+#### 初始设置
+
+- **步骤 1:** 访问 [此处](https://console.cloud.google.com/) 创建一个新项目
+
+**注:** 如有提示,请使用您的Google账户登录
+
+- **步骤 2:** 点击 **Select a project** 菜单
+
+- **步骤 3:** 点击 **NEW PROJECT** 并输入一个 **项目名**
+
+- **步骤 4:** 点击 **CREATE**
+
+- **步骤 5:** 为您的云项目启用计费。这是为了确保您不是机器人,并且不会产生费用。在导航菜单中选择"计费",并按照设置进行操作。
+
+
+
+
+- **步骤 6:** 访问 [此处](https://console.cloud.google.com/flows/enableapi?apiid=cloudiot.googleapis.com%2Cpubsub&authuser=3&_ga=2.254170561.853675115.1607885458-878786893.1606048800)启用Cloud IoT Core和Cloud Pub/Sub API
+
+**注:** 从下拉菜单中选择您之前创建的项目
+
+#### 创建设备注册表
+
+- **步骤 1:** 在Cloud控制台中访问 [Google Cloud IoT Core页面](https://console.cloud.google.com/iot/registries)
+
+- **步骤 2:** 点击 **Create Registry**
+
+- **步骤 3:** 输入一个 **registry ID**
+
+**注:** 这是您注册表的名称
+
+- **步骤 4:** 选择一个 **Region**
+
+**注:** 如果您在美国,请选择us-central1作为区域。如果您在美国以外,请选择您首选的区域。
+
+- **步骤 5:** 在 **Select a Cloud Pub/Sub topic** 的下拉列表中, 选择 **Create a topic** 并输入您首选的 **Topic ID**
+
+- **步骤 6:** 点击 **CREATE TOPIC**
+
+- **步骤 7:** 点击 **SHOW ADVANCED OPTIONS**
+
+- **步骤 8:** **Device state topic** 和 **Certificate value** 字段是可选的,所以留空即可
+
+- **步骤 9:** 选择 **MQTT** 作为 **Protocol**
+
+- **步骤 10:** 在Cloud IoT Core页面上点击 **Create**
+
+现在我们已经创建了一个带有Cloud Pub/Sub主题的设备注册表,用于发布设备遥测事件。
+
+#### 生成设备密钥对 (EC Keys)
+
+Cloud IoT Core使用公钥(或非对称)身份验证:
+
+- 设备使用私钥对 [JSON Web Token (JWT)](https://cloud.google.com/iot/docs/how-tos/credentials/jwts)进行签名。该令牌作为设备身份的证明传递给Cloud IoT Core。
+- 服务使用设备的公钥(在发送JWT之前上传)来验证设备的身份。
+
+Cloud IoT Core支持RSA和椭圆曲线算法,本教程将使用椭圆曲线密钥。
+
+- **步骤 1:** 在您的计算机上创建一个新文件夹。
+
+- **步骤 2:** 从终端窗口导航到该文件夹,并输入以下命令生成P-256椭圆曲线密钥对:
+
+```sh
+openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem
+openssl ec -in ec_private.pem -pubout -out ec_public.pem
+```
+
+**注:** 确保按照 [此链接](https://slproweb.com/products/Win32OpenSSL.html) 安装**openssl** 并将其目录位置添加到PATH中。
+
+上述命令将生成以下公钥/私钥对:
+
+- **ec_private.pem**: 私钥,必须安全存储在设备上,并用于对身份验证JWT进行签名。
+- **ec_public.pem**: 公钥,必须存储在Cloud IoT Core中,并用于验证身份验证JWT的签名。
+
+#### 提取私钥
+
+我们需要提取私钥的字节并将其复制到稍后在本教程中创建的Arduino项目的私钥字符串中。暂时保存这些密钥以备后用。
+
+- **步骤 1:** 打开一个终端窗口,并导航到包含我们之前生成的椭圆曲线密钥对的文件夹。
+
+- **步骤 2:** 输入以下命令
+
+```sh
+openssl ec -in ec_private.pem -noout -text
+```
+
+- **步骤 3:** 将生成的私钥字节(在 **priv:** 下方)复制并粘贴到记事本中,并保存以备后用。
+
+#### 将设备添加到注册表
+
+- **步骤 1:** 访问 [Registries page](https://console.cloud.google.com/iot/registries) 并选择之前创建的注册表
+
+- **步骤 2:** 选择 **Devices** 设备选项卡,然后点击 **CREATE A DEVICE**
+
+- **步骤 3:** 输入一个 **Device ID**
+
+- **步骤 4:** **Device metadata** 字段是可选的,所以留空即可
+
+- **步骤 5:** 点击 **COMMUNICATION, CLOUD LOGGING, AUTHENTICATION** 下拉菜单
+
+- **步骤 6:** 为 **Device communication**选择**Allow**
+
+- **步骤 7:** 在 **Authentication** 身份验证字段中,在 **Input method**输入方法下拉菜单中, 选择 **Upload**
+
+- **步骤 8:** 在**Public key format**公钥格式下拉菜单中选择 **ES256**
+
+- **步骤 9:** 在**Public key value**公钥值下方,点击 **BROWSE** 浏览按钮,导航到我们之前创建的**Elliptic Curve key pair** 并选择 **ec_public.pem**
+
+- **步骤 10:** 点击 **Create**
+
+现在您已将设备添加到注册表中。ES256密钥将显示在设备详细信息页面上。
+
+#### 设置订阅者
+
+现在我们已经创建了设备注册表、创建了一个主题并将设备添加到该注册表中,接下来让我们继续创建一个订阅者,以订阅我们创建的主题,以便从Wio Terminal获取遥测数据。
+
+- **步骤 1:** 在Google Cloud控制台的搜索栏中输入 **Pub** 然后从结果中选择 **Pub/Sub** 。
+
+
+
+- **步骤 2:** 在导航栏点击 **Subscriptions**
+
+- **步骤 3:** 点击 **CREATE SUBSCRIPTION**
+
+- **步骤 4:** 输入您选择的 **Subscription ID**
+
+- **步骤 5:** 从**Select a Cloud Pub/Sub topic**下拉菜单中选择我们之前创建的 **Pub/Sub topic**
+
+- **步骤 6:** 将传递方式设置为 **Pull**
+
+- **步骤 7:** 点击 **Create**
+
+现在我们已经完成了Google Cloud IoT Core的设置。接下来,我们将继续设置Wio Terminal和Arduino IDE。
+
+### 使用Arduino设置Wio Terminal
+
+#### 所需库
+
+我们需要两个库来完成本教程。
+1. lwMQTT MQTT Arduino 库
+2. Google Cloud IoT Arduino 库
+
+下载这些库:
+
+- **步骤 1:** 打开 Arduino IDE
+- **步骤 2:** 导航到 `Sketch > Include Library > Manage Libraries`
+- **步骤 3:** 在搜索框中键入 **lwMQTT** 和 **Google Cloud IoT** 然后安装这些库
+
+#### 配置凭据和帐户信息
+
+现在我们需要在 **ciotc_config.h**文件中设置Wi-Fi凭据和Google Cloud IoT Core信息。
+
+- **步骤 1:** 在Arduino IDE中,选择 `File > Examples > Google Cloud IoT JWT > Esp32-lwmqtt`
+
+- **步骤 2:** 导航到 **ciotc_config.h**
+
+- **步骤 3:** 更改 **Wifi network details**
+
+```c++
+const char *ssid = "Enter_SSID";
+const char *password = "Enter_Password";
+```
+
+- **步骤 4:** 更改 **Google Cloud IoT details**
+
+```c++
+const char *project_id = "Enter_Project_ID";
+const char *location = "Enter_location";
+const char *registry_id = "Enter_Registry_ID";
+const char *device_id = "Enter_Device_ID";
+```
+
+- **步骤 5:** 将我们从 **ec_private.pem** 中获取的私钥字节复制到记事本中保存的位置
+
+```c++
+const char *private_key_str =
+ "6e:b8:17:35:c7:fc:6b:d7:a9:cb:cb:49:7f:a0:67:"
+ "63:38:b0:90:57:57:e0:c0:9a:e8:6f:06:0c:d9:ee:"
+ "31:41";
+```
+
+**注:** 密钥长度应为32对十六进制数字
+
+#### 更改NTP时间方法
+
+打开 **esp32-mqtt.h** 文件,并用以下代码替换整个文件。这里我们使用通过UDP获取NTP时间的实现替换了configTime函数。
+
+```c++
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+#include "ciotc_config.h" // Update this file with your configuration
+
+// !!REPLACEME!!
+// The MQTT callback function for commands and configuration updates
+// Place your message handler code here.
+void messageReceived(String &topic, String &payload){
+ Serial.println("incoming: " + topic + " - " + payload);
+}
+///////////////////////////////
+
+// Initialize WiFi and MQTT for this board
+//Client *netClient;
+CloudIoTCoreDevice *device;
+CloudIoTCoreMqtt *mqtt;
+MQTTClient *mqttClient;
+unsigned long iat = 0;
+String jwt;
+WiFiUDP udp;
+
+unsigned int localPort = 2390;
+unsigned long devicetime;
+const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message
+byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
+
+// send an NTP request to the time server at the given address
+unsigned long sendNTPpacket(const char* address) {
+ // set all bytes in the buffer to 0
+ for (int i = 0; i < NTP_PACKET_SIZE; ++i) {
+ packetBuffer[i] = 0;
+ }
+ // Initialize values needed to form NTP request
+ // (see URL above for details on the packets)
+ packetBuffer[0] = 0b11100011; // LI, Version, Mode
+ packetBuffer[1] = 0; // Stratum, or type of clock
+ packetBuffer[2] = 6; // Polling Interval
+ packetBuffer[3] = 0xEC; // Peer Clock Precision
+ // 8 bytes of zero for Root Delay & Root Dispersion
+ packetBuffer[12] = 49;
+ packetBuffer[13] = 0x4E;
+ packetBuffer[14] = 49;
+ packetBuffer[15] = 52;
+
+ // all NTP fields have been given values, now
+ // you can send a packet requesting a timestamp:
+ udp.beginPacket(address, 123); //NTP requests are to port 123
+ udp.write(packetBuffer, NTP_PACKET_SIZE);
+ udp.endPacket();
+}
+
+unsigned long getNTPtime() {
+
+ // module returns a unsigned long time valus as secs since Jan 1, 1970
+ // unix time or 0 if a problem encounted
+
+ //only send data when connected
+ if (WiFi.status() == WL_CONNECTED) {
+ //initializes the UDP state
+ //This initializes the transfer buffer
+ udp.begin(WiFi.localIP(), localPort);
+ sendNTPpacket(ntp_primary); // send an NTP packet to a time server
+ // wait to see if a reply is available
+ delay(1000);
+ if (udp.parsePacket()) {
+// Serial.println("udp packet received");
+// Serial.println("");
+ // We've received a packet, read the data from it
+ udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
+
+ //the timestamp starts at byte 40 of the received packet and is four bytes,
+ // or two words, long. First, extract the two words:
+
+ unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
+ unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
+ // combine the four bytes (two words) into a long integer
+ // this is NTP time (seconds since Jan 1 1900):
+ unsigned long secsSince1900 = highWord << 16 | lowWord;
+ // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
+ const unsigned long seventyYears = 2208988800UL;
+ // subtract seventy years:
+ unsigned long epoch = secsSince1900 - seventyYears;
+
+ // adjust time for timezone offset in secs +/- from UTC
+ // WA time offset from UTC is +8 hours (28,800 secs)
+ // + East of GMT
+ // - West of GMT
+// long tzOffset = 28800UL;
+ long tzOffset = 0UL;
+
+ // WA local time
+ unsigned long adjustedTime;
+ return adjustedTime = epoch + tzOffset;
+ }
+ else {
+ // were not able to parse the udp packet successfully
+ // clear down the udp connection
+ udp.stop();
+ return 0; // zero indicates a failure
+ }
+ // not calling ntp time frequently, stop releases resources
+ udp.stop();
+ }
+ else {
+ // network not connected
+ return 0;
+ }
+
+}
+
+///////////////////////////////
+// Helpers specific to this board
+///////////////////////////////
+String getDefaultSensor(){
+ return "Wifi: " + String(WiFi.RSSI()) + "db";
+}
+
+String getJwt(){
+ Serial.println("Refreshing JWT");
+ iat = getNTPtime();
+ Serial.println(iat);
+ jwt = device->createJWT(iat, jwt_exp_secs);
+
+ Serial.println(jwt);
+ return jwt;
+}
+
+void setupWifi(){
+ Serial.println("Starting wifi");
+
+ WiFi.mode(WIFI_STA);
+ // WiFi.setSleep(false); // May help with disconnect? Seems to have been removed from WiFi
+ WiFi.begin(ssid, password);
+ Serial.println("Connecting to WiFi");
+ while (WiFi.status() != WL_CONNECTED){
+ delay(100);
+ }
+
+// configTime(0, 0, ntp_primary, ntp_secondary);
+ Serial.println("Waiting on time sync...");
+// Serial.println(getNTPtime());
+
+ while (getNTPtime() < 1510644967){
+ delay(10);
+ }
+}
+
+void connectWifi(){
+ Serial.print("checking wifi...");
+ while (WiFi.status() != WL_CONNECTED){
+ Serial.print(".");
+ delay(1000);
+ }
+}
+
+///////////////////////////////
+// Orchestrates various methods from preceeding code.
+///////////////////////////////
+bool publishTelemetry(String data){
+ return mqtt->publishTelemetry(data);
+}
+
+bool publishTelemetry(const char *data, int length){
+ return mqtt->publishTelemetry(data, length);
+}
+
+bool publishTelemetry(String subfolder, String data){
+ return mqtt->publishTelemetry(subfolder, data);
+}
+
+bool publishTelemetry(String subfolder, const char *data, int length){
+ return mqtt->publishTelemetry(subfolder, data, length);
+}
+
+void connect(){
+ connectWifi();
+ mqtt->mqttConnect();
+}
+
+
+WiFiClientSecure netClient;
+void setupCloudIoT(){
+ device = new CloudIoTCoreDevice(
+ project_id, location, registry_id, device_id,
+ private_key_str);
+
+ setupWifi();
+// netClient = new WiFiClientSecure();
+ mqttClient = new MQTTClient(512);
+ mqttClient->setOptions(180, true, 1000); // keepAlive, cleanSession, timeout
+ mqtt = new CloudIoTCoreMqtt(mqttClient, &netClient, device);
+ mqtt->setUseLts(true);
+ mqtt->startMQTT();
+}
+```
+
+#### 在Esp32-lwmqtt.ino文件中添加宏定义
+
+在**Esp32-lwmqtt.ino**文件中,将Wio Terminal板添加到宏定义中。
+
+```c++
+#if defined(ESP32) || defined(WIO_TERMINAL)
+#define __ESP32_MQTT_H__
+#endif
+```
+
+现在我们已经完成了Arduino IDE的设置。最后,您需要将此代码上传到Wio Terminal。打开串行监视器,您将看到以下内容显示。
+
+
+
+
+
+### 显示遥测数据
+
+现在我们需要显示来自Wio Terminal的传入遥测数据。在这个示例代码中,Wi-Fi信号强度将作为遥测数据发送。
+
+
+- **步骤 1:** 在Google Cloud控制台中访问 **Pub/Sub**
+
+**注:** 您可以在Google Cloud控制台的搜索栏中搜索 **Pub**
+
+- **步骤 2:** 导航到导航菜单中的 **Subscriptions**
+
+- **步骤 3:** 选择我们之前创建的订阅ID
+
+- **步骤 4:** 点击 **VIEW MESSAGES**
+
+- **步骤 5:** C点击 **PULL** 您将看到传入的遥测数据如下所示
+
+
+
+
+
+### 如何添加其他传感器?
+
+您可以向Wio Terminal添加任何传感器,并将遥测数据发送到Google Cloud IoT Core。为了简单起见,我们将使用Wio Terminal上的内置光传感器将光强度级别发送到Google Cloud IoT Core。
+
+#### Google Cloud IoT设置
+
+- **步骤 1:** 在Google Cloud控制台中访问 **IoT Core**
+
+**注:** 您可以在Google Cloud控制台的搜索栏中搜索 **IoT Core**
+
+- **步骤 2:** 选择我们之前创建的注册表
+
+- **步骤 3:** 在Cloud **Pub/Sub topics** 下选择 **Add or edit topics**
+
+- **步骤 4:** 点击 **ADD ADDITIONAL TOPIC**
+
+- **步骤 5:** 从 **Select a Cloud Pub/Sub topic**的下拉菜单中选择**CREATE A TOPIC**
+
+- **步骤 6:** 输入一个 **Topic ID** 然后点击 **CREATE TOPIC**
+
+- **步骤 7:** 在 **Subfolder** 列中输入一个**Subfolder name**
+
+**注:** 子文件夹名称将用于与Arduino代码中的主题相关联
+
+- **步骤 8:** 点击 **UPDATE**
+
+- **步骤 9:** 创建一个 **new subscription** 如前所述
+
+
+
+#### Arduino 设置
+
+打开 **Esp32-lwmqtt.ino** 文件并按照以下步骤进行操作:
+
+- **步骤 1:** 在循环结束后,添加以下代码以使用内置光传感器:
+
+```c++
+void loop() {
+ int light = analogRead(WIO_LIGHT); //assign variable to store light sensor values
+ light = map(light,0,1023,0,100); //Map sensor values
+```
+
+- **步骤 2:** 在代码中添加使用子文件夹名称的主题
+
+```c++
+ publishTelemetry(getDefaultSensor());
+ publishTelemetry("/light",String(light));
+```
+
+**注:** 如果未添加子文件夹名称,遥测数据将被发送到默认主题。在这种情况下,如前所述,Wi-Fi信号强度的遥测数据将被发送到之前创建的第一个主题,即默认主题。
+
+在将代码上传到Wio Terminal后,作为一个订阅者从新创建的主题中接收数据,您将会看到以下结果。
+
+
+
+
+### 如何将其他传感器添加到Wio Terminal并在仪表板上可视化数据?
+
+虽然Google Cloud IoT Core没有提供用于可视化传感器数据的即用仪表板,但我们可以使用InfluxDB和Grafana来实现。
+
+[InfluxDB](https://www.influxdata.com/) 是一个时间序列数据库,每个数据都与一个时间戳相关联,显示与该数据相关的日期和时间。而 [Grafana](https://grafana.com/) 则是一个用于运行数据分析、提取有意义的指标并通过可自定义的仪表板监控应用程序的开源解决方案。
+
+基本上,我们将连接一个温湿度传感器到Wio Terminal,使用Google Cloud Function将来自Pub/Sub的数据传输到位于GKE(Google Kubernetes Engine)集群中的InfluxDB,并使用交互式仪表板在Grafana上显示来自InfluxDB的数据。
+
+![](https://files.seeedstudio.com/wiki/Google_Cloud_IoT/thumb.png)
+
+#### Arduino的硬件设置
+
+将Grove - 温湿度传感器(DHT11)连接到Wio Terminal的Grove - 数字/模拟端口(D0)。
+
+#### Arduino的软件设置
+
+- **步骤 1:** 访问 [Grove - Temperature and Humidity Sensor repo](https://github.com/Seeed-Studio/Grove_Temperature_And_Humidity_Sensor) 并将其下载为zip文件
+
+- **步骤 2:** 打开 Arduino, 导航到 `Sketch > Include Library > Add .ZIP Library` 然后选择下载的库进行安装
+
+在之前使用的 **Esp32-lwmqtt.ino** Esp32-lwmqtt.ino文件中,按照以下步骤进行操作:
+
+- **步骤 1:** 在 **#include "esp32-mqtt.h"**之后添加以下代码:
+
+```c++
+#include "DHT.h" //DHT library
+
+#define DHTPIN 0 //Define Signal Pin of DHT
+#define DHTTYPE DHT11 //Define DHT Sensor Type
+DHT dht(DHTPIN, DHTTYPE); //Initializing DHT sensor
+```
+
+- **步骤 2:** 在 **setup** 函数中添加以下代码以启动DHT传感器
+
+```c++
+dht.begin();
+```
+
+- **步骤 3:** 在**void loop()**函数的**if loop**内部添加以下代码:
+
+```c++
+int temperature = dht.readTemperature(); //Assign variable to store temperature
+int humidity = dht.readHumidity(); //Assign variable to store humidity
+
+String payload = String("{\"timestamp\":") + getNTPtime() +
+ String(",\"temperature\":") temperature +
+ String(",\"humidity\":") + humidity +
+ String("}");
+publishTelemetry(payload);
+```
+**Note:** 在这里,我们将所有数据解析为字符串,并将其发送到InfluxDB。 **time** 非常重要,因为InfluxDB是一个时间序列数据库。此外, **pushTelemetry** 函数将会将数据发送到我们在本教程一开始创建的默认主题。
+
+- **步骤 4:** 将代码上传到Wio Terminal
+
+#### Google Cloud IoT 设置
+
+- **步骤 1:** 访问 [此存储库](https://github.com/lakshanthad/esp32-cloud-iot-core-k8s) 并将其下载为zip文件
+
+- **步骤 2:** 解压下载的zip文件
+
+- **步骤 3:** 打开Google Cloud控制台,并导航到 [Google Kubernetes Engine](https://console.cloud.google.com/kubernetes/list) ,等待系统初始化
+
+- **步骤 4:** 通过点击右上角的按钮启动 Cloud shell
+
+
+
+
+- **步骤 5:** 输入以下命令来设置gcloud命令行工具的默认值
+
+```sh
+export ZONE= # e.g. us-central1-a, see https://cloud.google.com/compute/docs/regions-zones/#available
+export PROJECT_ID= # project ID name
+gcloud config set project $PROJECT_ID
+gcloud config set compute/zone $ZONE
+```
+
+- **步骤 6:** 输入以下命令来创建一个包含一个n1-standard-1节点的GKE集群
+
+```sh
+gcloud container clusters create influxdb-grafana \
+ --num-nodes 1 \
+ --machine-type n1-standard-1 \
+ --zone $ZONE
+```
+
+- **步骤 7:** 输入以下命令来创建一个用于存储InfluxDB和Grafana身份验证信息的密钥
+
+```sh
+kubectl create secret generic influxdb-grafana \
+ --from-literal=influxdb-user=admin \
+ --from-literal=influxdb-password=passw0rd \
+ --from-literal=grafana-user=admin \
+ --from-literal=grafana-password=passw0rd
+```
+
+**注:** 您根据您的喜好更改InfluxDB和Grafana的用户名和密码
+
+- **步骤 8:** 在Google Shell中点击 **Open Editor**
+
+- **步骤 9:** 将之前下载并解压的文件夹拖放到 **Cloud Shell Editor**中
+
+- **步骤 10:** 点击 **Open Terminal** 返回到终端,通过输入以下命令导航到 **05-influxdb_grafana_k8s** 目录
+
+```sh
+cd esp32-cloud-iot-core-k8s-master/05-influxdb_grafana_k8s
+```
+
+- **步骤 11:** 输入以下命令将InfluxDB和Grafana部署到Kubernetes集群中
+
+```sh
+kubectl create -f k8s/
+```
+#### Grafana 设置
+
+- **步骤 1:** 输入以下命令来检查服务的外部IP地址/端口
+
+```sh
+kubectl get services
+```
+
+- **步骤 2:** 复制Grafana的外部IP地址
+
+- **步骤 3:** 在浏览器中访问 `http://:3000`
+
+**Note:** 将之前复制的Grafana外部IP粘贴到 ``中
+
+- **步骤 4:** 使用之前设置的凭据登录到Grafana
+
+- **步骤 5:** 点击齿轮图标,导航到 `Configuration > Data Sources`
+
+- **步骤 6:** 点击 **Add data source** 选择 **influxDB**
+
+- **步骤 7:** 在 **URL** 字段中输入以下内容
+
+```sh
+http://influxdb:8086
+```
+
+- **步骤 8:** 在 **Database** 字段中输入以下内容,然后点击 **Save & Test**
+
+```sh
+iot
+```
+
+**注:** 如果成功在Grafana上设置了**InfluxDB**数据源,您将看到 **Data source is working**的消息
+
+#### 创建一个Google Cloud函数
+
+现在我们需要创建一个Google Cloud函数,将Pub/Sub上的主题数据传输到InfluxDB,并使用交互式仪表板在Grafana上显示InfluxDB中的数据。
+
+- **步骤 1:** 返回到 **Google Cloud Console** 打开 **Cloud Shell**
+
+- **步骤 2:** 输入以下命令来启用 **Cloud Functions API**
+
+```sh
+gcloud services enable cloudfunctions.googleapis.com
+```
+
+- **步骤 3:** 通过输入以下命令导航到 **06-cloud_function** 目录
+
+```sh
+cd esp32-cloud-iot-core-k8s-master/06-cloud_function
+```
+
+- **步骤 4:** 使用 **vim文本编辑器** 打开 **main.py**
+
+```sh
+cd esp32-cloud-iot-core-k8s-master/06-cloud_function
+```
+
+- **步骤 5:** 在键盘上按下 **i** 进入 **编辑模式**
+
+- **步骤 6:** 修改**_get_influxdb_client function**中的 **InfluxDB variables** 主机、端口、用户名、密码)
+
+**注:** 在Cloud Shell上输入以下命令以获取InfluxDB主机的外部IP地址,并将其复制
+
+```sh
+kubectl get services
+```
+
+- **步骤 7:** 输入 **:wq**来保存文件
+
+- **步骤 8:** 输入以下命令来部署 **Cloud Function**
+
+```sh
+export PUBSUB_TOPIC="enter_topic-name>"
+export REGION="enter_region" # https://cloud.google.com/functions/docs/locations
+gcloud functions deploy iotcore_pubsub_to_influxdb --runtime python37 --trigger-topic $PUBSUB_TOPIC --region $REGION
+```
+
+#### 返回Grafana设置
+
+- **步骤 1:** 打开Grafana,导航到 `Dashboards > Manage`
+
+- **步骤 2:** 点击 **New Dashboard** 然后点击 **Add new panel**
+
+- **步骤 3:** 导航到 **Visualization** 点击 **Graph**
+
+- **步骤 4:** 在 **Query**下, 在 **FROM** 选项卡中, 点击 **select measurement** 然后从下拉菜单中选择 **temperature**
+
+- **步骤 5:** 点击 **+ Query** 并重复 **step 12** 的步骤来选择 **humidity**
+
+- **步骤 6:** 根据您的偏好更改其他设置
+
+- **步骤 7:** 点击 **Apply**
+
+- **步骤 8:** 点击 **Add panel** 然后点击 **Add new panel**
+
+- **步骤 9:** 导航到 **Visualization** 点击 **Gauge**
+
+- **步骤 10:** 在 **Query**下, 在 **FROM** 选项卡中,点击 **select measurement** 然后从下拉菜单中选择 **temperature**
+
+- **步骤 11:** 在 **Field** 选项卡中, 在 **Unit**, 下,从下拉菜单中选择 `Temperature > Celcius`
+
+- **步骤 12:** 通过在 **Min** 和 **Max**中输入值为仪表设置最小和最大值
+
+- **步骤 13:** 在 **Display name**下, 输入 `Temperature`
+
+- **步骤 14:** 通过按照 **step 15** 重复相同的步骤 ,为**humidity**设置仪表
+
+- **步骤 15:** 点击 **Apply**
+
+现在您将在Grafana上看到创建的仪表板
+
+
+
+
+
+## 技术支持 & 产品讨论
+
+ 如果您遇到任何技术问题,请将问题提交到我们的 [论坛](http://forum.seeedstudio.com/) 。
+中。感谢您选择我们的产品!我们将为您提供不同的支持,以确保您使用我们的产品的体验尽可能顺利。我们提供多种沟通渠道,以满足不同的偏好和需求。
+
+
diff --git a/docs/zh-CN/Sensor/Wio_Terminal/Extension_Board-7/CN-Wio-Terminal-Ethernet.md b/docs/zh-CN/Sensor/Wio_Terminal/Extension_Board-7/CN-Wio-Terminal-Ethernet.md
new file mode 100644
index 000000000000..8470a3262e10
--- /dev/null
+++ b/docs/zh-CN/Sensor/Wio_Terminal/Extension_Board-7/CN-Wio-Terminal-Ethernet.md
@@ -0,0 +1,613 @@
+---
+description: 以太网拓展版
+title: 以太网拓展版
+keywords:
+- Wio_terminal Extension_Board
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /cn/Wio-Terminal-Ethernet
+last_update:
+ date: 3/05/2024
+ author: jessie
+---
+
+# Wio Terminal的以太网连接
+
+这个wiki介绍了如何在Wio Terminal上使用 [**ENC28J60 OVERLAYS HAT for Raspberry Pi**](https://www.seeedstudio.com/ENC28J60-OVERLAYS-HAT-for-Raspberry-pi-p-3045.html) 来实现稳定的网络连接。这是在Wio Terminal上使用树莓派40 Pi扩展板的完美示例。
+
+
+
+## 所需硬件
+
+- [**Wio Terminal**](https://www.seeedstudio.com/Wio-Terminal-p-4509.html)
+
+- [**ENC28J60 OVERLAYS HAT for Raspberry Pi**](https://www.seeedstudio.com/ENC28J60-OVERLAYS-HAT-for-Raspberry-pi-p-3045.html)
+
+- *40 Pin Pi HAT Adapter board for Wio Terminal (尚未发布)*
+
+## 硬件连接
+
+> 目前,如果您想测试软件,您可以使用导线连接。
+
+
+
+- 将以太网电缆插入ENC28J60 Overlays Hat。
+
+## 安装UIPEthernet Arduino库
+
+1. 访问 [UIPEthernet](https://github.com/UIPEthernet/UIPEthernet) 存储库,并将整个存储库下载到本地驱动器。
+
+2. 现在,可以将库安装到Arduino IDE。打开Arduino IDE,点击 `sketch` -> `Include Library` -> `Add .ZIP Library`, 选择刚刚下载的 `UIPEthernet` UIPEthernet文件。
+
+![InstallLibrary](https://files.seeedstudio.com/wiki/Wio-Terminal/img/Xnip2019-11-21_15-50-13.jpg)
+
+## 简单的DHCP示例
+
+这个示例使用DHCP自动从网络主机获取网络配置。
+
+
+
+### 示例代码
+
+```cpp
+#include
+
+uint8_t mac[6] = {0x74,0x69,0x69,0x2D,0x30,0x31};
+
+void setup() {
+ // put your setup code here, to run once:
+ Serial.begin(9600);
+ while(!Serial);
+ Serial.println(F("[testDHCP]"));
+
+ Serial.print("MAC: ");
+ for (byte i = 0; i < 6; ++i) {
+ Serial.print(mac[i], HEX);
+ if (i < 5)
+ Serial.print(':');
+ }
+ Serial.println();
+
+ if (Ethernet.begin(mac) != 1) {
+ Serial.println("Failed to configure Ethernet using DHCP");
+ while (true) {
+ delay(1); // do nothing, no point running without Ethernet hardware
+ }
+ }
+
+ Serial.print("My IP: ");
+ Serial.println(Ethernet.localIP());
+ Serial.print("Netmask: ");
+ Serial.println(Ethernet.subnetMask());
+ Serial.print("Gateway IP: ");
+ Serial.println(Ethernet.gatewayIP());
+ Serial.print("DNS: ");
+ Serial.println(Ethernet.dnsServerIP());
+}
+
+void loop() {
+ // put your main code here, to run repeatedly:
+}
+```
+
+## 通过静态IP连接网络
+
+除了使用DHCP外,您还可以使用静态IP手动连接到网络主机以满足不同的需求。在这个例子中,您可以通过设置静态IP、子网掩码、网关和DNS来手动配置如何连接到网络。
+
+
+
+### 示例代码
+
+:::注
+当您需要将设备连接到特定的网关和DNS(例如,旁路模式路由器/网关)时,这将非常有用。
+:::
+
+```cpp
+#include
+
+// Static Set-up, change the following according to your network
+uint8_t mac[6] = {0x74,0x69,0x69,0x2D,0x30,0x31};
+IPAddress myIP = {10,0,0,111};
+IPAddress myMask = {255,255,255,0};
+IPAddress myGatewayIP = {10,0,0,127};
+IPAddress myDNS = {10,0,0,127};
+
+void setup() {
+ // put your setup code here, to run once:
+ Serial.begin(9600);
+ while(!Serial);
+ Serial.println(F("[getStaticIP]"));
+
+ Serial.print("MAC: ");
+ for (byte i = 0; i < 6; ++i) {
+ Serial.print(mac[i], HEX);
+ if (i < 5)
+ Serial.print(':');
+ }
+ Serial.println();
+
+ Ethernet.begin(mac,myIP, myDNS, myGatewayIP, myMask);
+
+ Serial.print("My IP: ");
+ Serial.println(Ethernet.localIP());
+ Serial.print("Netmask: ");
+ Serial.println(Ethernet.subnetMask());
+ Serial.print("Gateway IP: ");
+ Serial.println(Ethernet.gatewayIP());
+ Serial.print("DNS: ");
+ Serial.println(Ethernet.dnsServerIP());
+}
+
+void loop() {
+ // put your main code here, to run repeatedly:
+}
+```
+
+## 简单的Web客户端
+一旦我们通过以太网建立了网络连接,我们就可以将其用于TCP客户端。例如,从互联网获取数据(HTTP)或从同一网络中的服务器获取数据。
+
+在此示例中,它首先使用DHCP进行设置,如果失败,则使用静态IP进行分配。此示例连接到 `www.bing.com` 并将数据打印到串行监视器。
+
+
+
+### 示例代码
+
+```cpp
+#include
+
+// Enter a MAC address for your controller below.
+byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
+
+char server[] = "www.bing.com";
+
+// Set the static IP address to use if the DHCP fails to assign
+IPAddress myIP(10, 0, 0, 187);
+IPAddress myMask = {255,255,255,0};
+IPAddress myGatewayIP = {10,0,0,127};
+IPAddress dnsIP(10, 0, 0, 127);
+
+// Initialize the Ethernet client library
+// with the IP address and port of the server
+// that you want to connect to (port 80 is default for HTTP):
+EthernetClient client;
+
+// Variables to measure the speed
+unsigned long beginMicros, endMicros;
+unsigned long byteCount = 0;
+bool printWebData = true; // set to false for better speed measurement
+
+void setup() {
+ // Open serial communications and wait for port to open:
+ Serial.begin(9600);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+
+ // start the Ethernet connection:
+ Serial.println("Initialize Ethernet with DHCP:");
+ if (Ethernet.begin(mac) == 0) {
+ Serial.println("Failed to configure Ethernet using DHCP");
+ // Check for Ethernet hardware present
+ if (Ethernet.hardwareStatus() == EthernetNoHardware) {
+ Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
+ while (true) {
+ delay(1); // do nothing, no point running without Ethernet hardware
+ }
+ }
+ if (Ethernet.linkStatus() == LinkOFF) {
+ Serial.println("Ethernet cable is not connected.");
+ }
+ // try to congifure using IP address instead of DHCP:
+ Ethernet.begin(mac,myIP, dnsIP, myGatewayIP, myMask);
+ } else {
+ Serial.print(" DHCP assigned IP ");
+ Serial.println(Ethernet.localIP());
+ }
+ // give the Ethernet shield a second to initialize:
+ delay(1000);
+ Serial.print("connecting to ");
+ Serial.print(server);
+ Serial.println("...");
+
+ // if you get a connection, report back via serial:
+ if (client.connect(server, 80)) {
+ Serial.print("connected to ");
+ Serial.println(client.remoteIP());
+ // Make a HTTP request:
+ client.println("GET /search?q=WioTerminal HTTP/1.1");
+ client.println("Host: www.bing.com");
+ client.println("Connection: close");
+ client.println();
+ } else {
+ // if you didn't get a connection to the server:
+ Serial.println("connection failed");
+ }
+ beginMicros = micros();
+}
+
+void loop() {
+ // if there are incoming bytes available
+ // from the server, read them and print them:
+ int len = client.available();
+ if (len > 0) {
+ byte buffer[80];
+ if (len > 80) len = 80;
+ client.read(buffer, len);
+ if (printWebData) {
+ Serial.write(buffer, len); // show in the serial monitor (slows some boards)
+ }
+ byteCount = byteCount + len;
+ }
+
+ // if the server's disconnected, stop the client:
+ if (!client.connected()) {
+ endMicros = micros();
+ Serial.println();
+ Serial.println("disconnecting.");
+ client.stop();
+ Serial.print("Received ");
+ Serial.print(byteCount);
+ Serial.print(" bytes in ");
+ float seconds = (float)(endMicros - beginMicros) / 1000000.0;
+ Serial.print(seconds, 4);
+ float rate = (float)byteCount / seconds / 1000.0;
+ Serial.print(", rate = ");
+ Serial.print(rate);
+ Serial.print(" kbytes/second");
+ Serial.println();
+
+ // do nothing forevermore:
+ while (true) {
+ delay(1);
+ }
+ }
+}
+```
+
+## Web服务器示例
+
+另一方面,我们还可以将其设置为Web服务器,并允许同一网络中的其他设备连接到它(例如,读取Wio Terminal上观察到的传感器值)。由于以太网的稳定性要比Wi-Fi好得多,这在某些情况下非常有用。
+
+
+
+### 示例代码
+
+此示例将自身配置为Web服务器,并设置一个简单的网页,打印出从 `A0` 到 `A5` 的值读数。您可以通过在同一网络中连接的计算机上的IP地址访问它。
+
+```cpp
+#include
+
+// Enter a MAC address and IP address for your controller below.
+// The IP address will be dependent on your local network:
+byte mac[] = {
+ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
+};
+IPAddress ip(10, 0, 0, 123);
+
+// Initialize the Ethernet server library
+// with the IP address and port you want to use
+// (port 80 is default for HTTP):
+EthernetServer server(80);
+
+void setup() {
+ // Open serial communications and wait for port to open:
+ Serial.begin(9600);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+ Serial.println("Ethernet WebServer Example");
+
+ // start the Ethernet connection and the server:
+ Ethernet.begin(mac, ip);
+
+ // Check for Ethernet hardware present
+ if (Ethernet.hardwareStatus() == EthernetNoHardware) {
+ Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
+ while (true) {
+ delay(1); // do nothing, no point running without Ethernet hardware
+ }
+ }
+ if (Ethernet.linkStatus() == LinkOFF) {
+ Serial.println("Ethernet cable is not connected.");
+ }
+
+ // start the server
+ server.begin();
+ Serial.print("server is at ");
+ Serial.println(Ethernet.localIP());
+}
+
+void loop() {
+ // listen for incoming clients
+ EthernetClient client = server.available();
+ if (client) {
+ Serial.println("new client");
+ // an http request ends with a blank line
+ bool currentLineIsBlank = true;
+ while (client.connected()) {
+ if (client.available()) {
+ char c = client.read();
+ Serial.write(c);
+ // if you've gotten to the end of the line (received a newline
+ // character) and the line is blank, the http request has ended,
+ // so you can send a reply
+ if (c == '\n' && currentLineIsBlank) {
+ // send a standard http response header
+ client.println("HTTP/1.1 200 OK");
+ client.println("Content-Type: text/html");
+ client.println("Connection: close"); // the connection will be closed after completion of the response
+ client.println("Refresh: 5"); // refresh the page automatically every 5 sec
+ client.println();
+ client.println("");
+ client.println("");
+ // output the value of each analog input pin
+ for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
+ int sensorReading = analogRead(analogChannel);
+ client.print("analog input ");
+ client.print(analogChannel);
+ client.print(" is ");
+ client.print(sensorReading);
+ client.println(" ");
+ }
+ client.println("");
+ break;
+ }
+ if (c == '\n') {
+ // you're starting a new line
+ currentLineIsBlank = true;
+ } else if (c != '\r') {
+ // you've gotten a character on the current line
+ currentLineIsBlank = false;
+ }
+ }
+ }
+ // give the web browser time to receive the data
+ delay(1);
+ // close the connection:
+ client.stop();
+ Serial.println("client disconnected");
+ }
+}
+```
+
+### Web服务器测试
+
+这还提供了一个使用该设置的简单测试示例。
+
+>这是在10小时内对Web服务器进行ping测试的屏幕截图。
+
+
+
+- 在相同的网络下,使用您的计算机对服务器的IP进行ping测试:
+
+```cpp
+#include
+
+// Static IP Set-up
+uint8_t mac[6] = {0x74,0x69,0x69,0x2D,0x30,0x31};
+IPAddress myIP = {10,0,0,111};
+EthernetServer server = EthernetServer(80);
+
+void setup() {
+ Serial.begin(9600);
+ while(!Serial);
+ Ethernet.begin(mac, myIP);
+ server.begin();
+
+ Serial.print("My IP: ");
+ Serial.println(Ethernet.localIP());
+ Serial.print("Netmask: ");
+ Serial.println(Ethernet.subnetMask());
+ Serial.print("Gateway IP: ");
+ Serial.println(Ethernet.gatewayIP());
+ Serial.print("DNS: ");
+ Serial.println(Ethernet.dnsServerIP());
+}
+
+void loop() {
+ // get client
+ EthernetClient client = server.available();
+ if(client && client.connected()) {
+ // do stuff (snipped but basically parses HTTP and responds with no other processing)
+ client.stop();
+ }
+}
+```
+
+## 使用UDP进行NTP时间同步
+
+在某些情况下, UDP 被用于网络通信。 [**NTP**](https://en.wikipedia.org/wiki/Network_Time_Protocol) 就是一个很好的例子。下面的示例代码简单地从 `time.nist.gov` 服务器获取时间并打印到串行监视器上。
+
+
+
+### 示例代码
+
+```cpp
+#include
+
+// Enter a MAC address for your controller below.
+// Newer Ethernet shields have a MAC address printed on a sticker on the shield
+byte mac[] = {
+ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
+};
+
+unsigned int localPort = 8888; // local port to listen for UDP packets
+
+const char timeServer[] = "time.nist.gov"; // time.nist.gov NTP server
+
+const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message
+
+byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
+
+// A UDP instance to let us send and receive packets over UDP
+EthernetUDP Udp;
+
+void setup() {
+ // Open serial communications and wait for port to open:
+ Serial.begin(9600);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+
+ // start Ethernet and UDP
+ if (Ethernet.begin(mac) == 0) {
+ Serial.println("Failed to configure Ethernet using DHCP");
+ // Check for Ethernet hardware present
+ if (Ethernet.hardwareStatus() == EthernetNoHardware) {
+ Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
+ } else if (Ethernet.linkStatus() == LinkOFF) {
+ Serial.println("Ethernet cable is not connected.");
+ }
+ // no point in carrying on, so do nothing forevermore:
+ while (true) {
+ delay(1);
+ }
+ }
+ Udp.begin(localPort);
+}
+
+void loop() {
+ sendNTPpacket(timeServer); // send an NTP packet to a time server
+
+ // wait to see if a reply is available
+ delay(1000);
+ if (Udp.parsePacket()) {
+ // We've received a packet, read the data from it
+ Udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
+
+ // the timestamp starts at byte 40 of the received packet and is four bytes,
+ // or two words, long. First, extract the two words:
+
+ unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
+ unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
+ // combine the four bytes (two words) into a long integer
+ // this is NTP time (seconds since Jan 1 1900):
+ unsigned long secsSince1900 = highWord << 16 | lowWord;
+ Serial.print("Seconds since Jan 1 1900 = ");
+ Serial.println(secsSince1900);
+
+ // now convert NTP time into everyday time:
+ Serial.print("Unix time = ");
+ // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
+ const unsigned long seventyYears = 2208988800UL;
+ // subtract seventy years:
+ unsigned long epoch = secsSince1900 - seventyYears;
+ // print Unix time:
+ Serial.println(epoch);
+
+ // print the hour, minute and second:
+ Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
+ Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
+ Serial.print(':');
+ if (((epoch % 3600) / 60) < 10) {
+ // In the first 10 minutes of each hour, we'll want a leading '0'
+ Serial.print('0');
+ }
+ Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
+ Serial.print(':');
+ if ((epoch % 60) < 10) {
+ // In the first 10 seconds of each minute, we'll want a leading '0'
+ Serial.print('0');
+ }
+ Serial.println(epoch % 60); // print the second
+ }
+ // wait ten seconds before asking for the time again
+ delay(10000);
+ Ethernet.maintain();
+}
+
+// send an NTP request to the time server at the given address
+void sendNTPpacket(const char * address) {
+ // set all bytes in the buffer to 0
+ memset(packetBuffer, 0, NTP_PACKET_SIZE);
+ // Initialize values needed to form NTP request
+ // (see URL above for details on the packets)
+ packetBuffer[0] = 0b11100011; // LI, Version, Mode
+ packetBuffer[1] = 0; // Stratum, or type of clock
+ packetBuffer[2] = 6; // Polling Interval
+ packetBuffer[3] = 0xEC; // Peer Clock Precision
+ // 8 bytes of zero for Root Delay & Root Dispersion
+ packetBuffer[12] = 49;
+ packetBuffer[13] = 0x4E;
+ packetBuffer[14] = 49;
+ packetBuffer[15] = 52;
+
+ // all NTP fields have been given values, now
+ // you can send a packet requesting a timestamp:
+ Udp.beginPacket(address, 123); // NTP requests are to port 123
+ Udp.write(packetBuffer, NTP_PACKET_SIZE);
+ Udp.endPacket();
+}
+```
+
+## 发送 Twitter 示例
+
+这是一个有趣的示例,使用Wio Terminal发送推文。它使用了 [Tweet Library for Arduino](http://arduino-tweet.appspot.com/) 来绕过直接连接HTTPs的限制。
+
+
+
+### 安装Arduino的Tweet Library
+
+1. 访问 [Arduno-Twitter-library](https://github.com/NeoCat/Arduno-Twitter-library) 仓库,并将整个仓库下载到本地驱动器上。
+
+2. 现在,可以将库安装到Arduino IDE中。打开Arduino IDE,点击`sketch` -> `Include Library` -> `Add .ZIP Library`, 选择刚刚下载的`Arduno-Twitter-library` 文件。
+
+:::注
+这是连接到Twitter的一种解决方案,可能不安全,请自行承担风险。
+:::
+
+### 获取令牌
+
+点击[**这里**](http://arduino-tweet.appspot.com/oauth/twitter/login)获取一个使用OAuth进行消息发布的令牌。
+
+>请访问 获取更多参考信息
+
+### 示例代码
+
+- 复制上述获取的令牌,并粘贴到Arduino代码中。
+
+```cpp
+/*
+ * Check http://arduino-tweet.appspot.com/ for more reference
+ */
+
+#include
+#include
+
+uint8_t mac[6] = {0x74,0x69,0x69,0x2D,0x30,0x31};
+
+// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
+Twitter twitter("YOUR-TOKEN-HERE");
+
+// Message to post
+char msg[] = "Hello, World! I'm Arduino!";
+
+void setup()
+{
+ delay(1000);
+ Ethernet.begin(mac);
+ // or you can use DHCP for autoomatic IP address configuration.
+ // Ethernet.begin(mac);
+ Serial.begin(9600);
+ while(!Serial);
+
+ Serial.println("connecting ...");
+ if (twitter.post(msg)) {
+ // Specify &Serial to output received response to Serial.
+ // If no output is required, you can just omit the argument, e.g.
+ // int status = twitter.wait();
+ int status = twitter.wait(&Serial);
+ if (status == 200) {
+ Serial.println("OK.");
+ } else {
+ Serial.print("failed : code ");
+ Serial.println(status);
+ }
+ } else {
+ Serial.println("connection failed.");
+ }
+}
+
+void loop()
+{
+}
+```
diff --git a/docs/zh-CN/Sensor/Wio_Terminal/Extension_Board-7/CN-Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915.md b/docs/zh-CN/Sensor/Wio_Terminal/Extension_Board-7/CN-Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915.md
new file mode 100644
index 000000000000..2696b2c8c2e1
--- /dev/null
+++ b/docs/zh-CN/Sensor/Wio_Terminal/Extension_Board-7/CN-Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915.md
@@ -0,0 +1,416 @@
+---
+description: 具有内置LoRa-E5和GNSS天线的Wio Terminal LoRaWan底座, EU868/US915
+title: 具有内置LoRa-E5和GNSS天线的Wio Terminal LoRaWan底座, EU868/US915
+keywords:
+- Wio_terminal Extension_Board
+image: https://files.seeedstudio.com/wiki/wiki-platform/S-tempor.png
+slug: /cn/Wio_Terminal_LoRaWan_Chassis_with_Antenna-built-in_LoRa-E5_and_GNSS_EU868_US915
+last_update:
+ date: 3/05/2024
+ author: 金菊
+---
+
+
+
+![](https://files.seeedstudio.com/wiki/LoRa_WioTerminal/img/114992728_Feature-02.png)
+
+
diff --git a/docs/zh-CN/Sensor/Wio_Terminal/Hardware_Overview/LCD_Usage/CN-Wio-Terminal-LCD-Linecharts.md b/docs/zh-CN/Sensor/Wio_Terminal/Hardware_Overview/LCD_Usage/CN-Wio-Terminal-LCD-Linecharts.md
new file mode 100644
index 000000000000..e1d936ad2ff9
--- /dev/null
+++ b/docs/zh-CN/Sensor/Wio_Terminal/Hardware_Overview/LCD_Usage/CN-Wio-Terminal-LCD-Linecharts.md
@@ -0,0 +1,171 @@
+---
+title: 折线图
+nointro:
+keywords:
+ - docs
+ - docusaurus
+image: https://wiki.seeedstudio.com/Wio-Terminal-LCD-Linecharts/
+slug: /cn/Wio-Terminal-LCD-Linecharts
+last_update:
+ date: 3/10/2024
+ author: 金菊
+---
+
+# 折线图
+
+这个存储库描述了如何在Wio Terminal上绘制折线图。您可以使用它将原始传感器值显示在屏幕上,就像串行绘图器一样!该库非常灵活,可以根据您的需求进行调整。
+
+
+
+## 库安装
+
+### 安装Seeed_Arduino_Linechart库用于在Wio Terminal上绘制2D图形
+
+- 访问 [Seeed_Arduino_Linechart](https://files.seeedstudio.com/wiki/Wio-Terminal-LCD-Linecharts/Seeed_Arduino_Linechart-1.0.0.zip) 并将整个存储库下载到本地驱动器。
+
+- 现在,可以将Wio Terminal_graphics库安装到Arduino IDE中。打开Arduino IDE,点击 `sketch` -> `Include Library` -> `Add .ZIP Library`, 然后选择刚刚下载的 `Seeed_Arduino_Linechart` 文件。
+
+![InstallLibrary](https://files.seeedstudio.com/wiki/Wio-Terminal/img/Xnip2019-11-21_15-50-13.jpg)
+
+## 入门指南
+
+### 初始化绘制折线图
+
+首先,定义要存储的变量的最大数量,并使用双精度类型存储数据,同时使用TFT Sprite函数创建一个缓冲区。
+
+```cpp
+#define max_size 50 //maximum size of data
+doubles data; //Initilising a doubles type to store data
+TFT_eSprite spr = TFT_eSprite(&tft); // Sprite
+```
+
+### 初始化LCD屏幕
+
+```cpp
+void setup() {
+ tft.begin();
+ tft.setRotation(3);
+ spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
+}
+```
+
+### 加载变量到数据
+
+使用 `data.push(variable)` 将变量(例如传感器读数)存储在数据中,如果达到预定义的最大数量,则移除第一个变量(继续添加)。
+
+```cpp
+ spr.fillSprite(TFT_WHITE);
+ if (data.size() == max_size) {
+ data.pop(); //this is used to remove the first read variable
+ }
+ data.push(0.01 * random(1, 10)); //read variables and store in data
+```
+
+### 初始化折线图标题的设置
+
+一些设置用于配置折线图标题的显示方式。初始化一个 `text(x, y)` 结构体,其中e `(x, y)` 是标题的起始坐标。并按照下面的设置进行配置。在这个示例中, `header` 是这个结构体的名称,可以像 `header.value("test")` 等一样更改设置和配置。
+
+```cpp
+ //Settings for the line graph title
+ auto header = text(0, 0) //starting coordinates of title
+ .value("test") //actual title of the line graph
+ .align(center) //horizontal alignment of title
+ .valign(vcenter) //vertical alignment of title
+ .width(tft.width()) //width of the title
+ .thickness(3); //thickness of the font
+
+ header.height(header.font_height() * 2); //the height of title is the twice the height of the font
+ header.draw();
+```
+
+为了帮助理解这个示例代码,请参考下面的图像来了解标题的配置:
+
+
+
+### 初始化折线图的设置并在LCD屏幕上绘制
+
+一些设置用于配置折线图的显示方式。初始化一个 `line_chart(x, y)` 结构体,其中 `(x, y)` 是折线图的起始坐标。并按照下面的设置进行配置。在这个示例中, `content` 是这个结构体的名称,可以像 `content.based_on(0.0)` 等一样更改设置和配置。根据需要修改这些设置以获得所需的显示效果!
+
+```cpp
+ //Settings for the line graph
+ auto content = line_chart(20, header.height()); //(x,y) where the line graph begins
+ content
+ .height(tft.height() - header.height() * 1.5) //actual height of the line chart
+ .width(tft.width() - content.x() * 2) //actual width of the line chart
+ .based_on(0.0) //Starting point of y-axis, must be a float
+ .show_circle(false) //drawing a cirle at each point, default is on.
+ .value(data) //passing through the data to line graph
+ .color(TFT_PURPLE) //Setting the color for the line
+ .draw();
+
+ spr.pushSprite(0, 0);
+ delay(50);
+```
+
+为了帮助理解这个示例代码,请参考下面的图像来了解折线图的配置:
+
+
+
+## 完整代码
+
+```cpp
+#include"seeed_line_chart.h" //include the library
+TFT_eSPI tft;
+
+#define max_size 50 //maximum size of data
+doubles data; //Initilising a doubles type to store data
+TFT_eSprite spr = TFT_eSprite(&tft); // Sprite
+
+void setup() {
+ tft.begin();
+ tft.setRotation(3);
+ spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
+}
+
+void loop() {
+ spr.fillSprite(TFT_WHITE);
+ if (data.size() == max_size) {
+ data.pop();//this is used to remove the first read variable
+ }
+ data.push(0.01 * random(1, 10)); //read variables and store in data
+
+ //Settings for the line graph title
+ auto header = text(0, 0)
+ .value("test")
+ .align(center)
+ .valign(vcenter)
+ .width(tft.width())
+ .thickness(3);
+
+ header.height(header.font_height() * 2);
+ header.draw(); //Header height is the twice the height of the font
+
+ //Settings for the line graph
+ auto content = line_chart(20, header.height()); //(x,y) where the line graph begins
+ content
+ .height(tft.height() - header.height() * 1.5) //actual height of the line chart
+ .width(tft.width() - content.x() * 2) //actual width of the line chart
+ .based_on(0.0) //Starting point of y-axis, must be a float
+ .show_circle(false) //drawing a cirle at each point, default is on.
+ .value(data) //passing through the data to line graph
+ .color(TFT_PURPLE) //Setting the color for the line
+ .draw();
+
+ spr.pushSprite(0, 0);
+ delay(50);
+}
+```
+
+## 技术支持 & 产品讨论
+
+感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们的产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。
+
+
The following examples have updated to work with eRPC Structure Framework Firmware, please update to eRPC structure. Simply replace the AtWifi.h with rpcWiFi.h.
+
+
+
+## 配置为站点(STA)模式
+
+- 在Arduino中包含 `rpcWifi.h` 库。
+
+- 配置为STA模式:
+
+```cpp
+WiFi.mode(WIFI_STA);
+```
+
+### 扫描Wi-Fi网络示例代码
+
+该示例将配置Wio Terminal为Wi-Fi STA模式,并扫描并打印出所有可用网络到串行监视器中。
+
+```cpp
+#include "rpcWiFi.h"
+
+void setup() {
+ Serial.begin(115200);
+ while(!Serial); // Wait for Serial to be ready
+ delay(1000);
+
+ // Set WiFi to station mode and disconnect from an AP if it was previously connected
+ WiFi.mode(WIFI_STA);
+ WiFi.disconnect();
+ delay(100);
+
+ Serial.println("Setup done");
+}
+
+void loop() {
+ Serial.println("scan start");
+
+ // WiFi.scanNetworks will return the number of networks found
+ int n = WiFi.scanNetworks();
+ Serial.println("scan done");
+ if (n == 0) {
+ Serial.println("no networks found");
+ } else {
+ Serial.print(n);
+ Serial.println(" networks found");
+ for (int i = 0; i < n; ++i) {
+ // Print SSID and RSSI for each network found
+ Serial.print(i + 1);
+ Serial.print(": ");
+ Serial.print(WiFi.SSID(i));
+ Serial.print(" (");
+ Serial.print(WiFi.RSSI(i));
+ Serial.print(")");
+ Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
+ delay(10);
+ }
+ }
+ Serial.println("");
+
+ // Wait a bit before scanning again
+ delay(5000);
+}
+```
+
+### 连接到指定网络示例代码
+
+该示例连接到指定的Wi-Fi网络。将 `ssid` 和 `password` 更改为您的Wi-Fi网络。
+
+```cpp
+#include "rpcWiFi.h"
+
+const char* ssid = "yourNetworkName";
+const char* password = "yourNetworkPassword";
+
+void setup() {
+ Serial.begin(115200);
+ while(!Serial); // Wait for Serial to be ready
+
+ // Set WiFi to station mode and disconnect from an AP if it was previously connected
+ WiFi.mode(WIFI_STA);
+ WiFi.disconnect();
+
+ Serial.println("Connecting to WiFi..");
+ WiFi.begin(ssid, password);
+
+ while (WiFi.status() != WL_CONNECTED) {
+ delay(500);
+ Serial.println("Connecting to WiFi..");
+ WiFi.begin(ssid, password);
+ }
+ Serial.println("Connected to the WiFi network");
+ Serial.print("IP Address: ");
+ Serial.println (WiFi.localIP()); // prints out the device's IP address
+ }
+
+void loop() {
+
+}
+```
+
+### WiFi多连接示例代码
+
+- 在Arduino中包含 `rpcWiFi.h` 和 `WiFiMulti.h` 库。
+
+此示例调用 `WiFiMulti` 类,您可以使用。
+
+```cpp
+wifiMulti.addAP("ssid", "password");
+```
+将多个AP Wi-Fi添加到列表中, `wifiMulti.run()` 将尝试连接到信号最好的Wi-Fi。
+
+**注:** 根据您的Wi-Fi更改 `SSID` 和 `Password` 。
+
+```cpp
+#include "rpcWiFi.h"
+#include
+
+WiFiMulti wifiMulti;
+
+void setup() {
+ Serial.begin(115200);
+ while(!Serial); // Wait for Serial to be ready
+ delay(1000);
+
+ wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
+ wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
+ wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");
+
+ Serial.println("Connecting Wifi...");
+ if (wifiMulti.run() == WL_CONNECTED) {
+ Serial.println("");
+ Serial.println("WiFi connected");
+ Serial.println("IP address: ");
+ Serial.println(WiFi.localIP());
+ }
+}
+
+void loop() {
+ if (wifiMulti.run() != WL_CONNECTED) {
+ Serial.println("WiFi not connected!");
+ delay(1000);
+ }
+}
+```
+
+### Wi-Fi客户端示例代码
+
+该示例演示了Wio Terminal配置为STA模式,连接到特定AP Wi-Fi,并从同一网络上的Web服务器发送HTTP GET请求并接收HTTP响应。
+
+- 将 `ssid` 和 `password` 更改为您的Wi-Fi。
+
+- 将 `host` 更改为Web服务器的IP地址。
+
+要简单测试示例,您可以在PC上使用Python启动一个简单的Web服务器:
+
+1. 将以下内容复制并保存在本地驱动器上,命名为 `index.html` 。
+
+```html
+
+
+Hello World!
+
+
+```
+
+2. 在Powershell/Terminal中,将目录更改为刚刚保存 `index.html` 的路径,并运行以下代码以使用Python启动一个简单的Web服务器:
+
+For Pyhton 3:
+
+```py
+python3 -m http.server 80
+```
+
+For Python 2:
+
+```py
+python -m SimpleHTTPServer 80
+```
+
+3. 在Arduino代码中将 `host` 更改为此PC的IP地址。还要将Arduino代码中的 `ssid` 和 `password` 更改为与此PC连接的相同Wi-Fi。
+
+4. 将代码上传到Wio Terminal,打开串行监视器以观察结果。
+
+```cpp
+#include
+
+const char* ssid = "yourNetworkName";
+const char* password = "yourNetworkPassword";
+
+void setup() {
+ Serial.begin(115200);
+ while(!Serial); // Wait for Serial to be ready
+ delay(1000);
+
+ // Set WiFi to station mode and disconnect from an AP if it was previously connected
+ WiFi.mode(WIFI_STA);
+ WiFi.disconnect();
+ delay(2000);
+
+ WiFi.begin(ssid, password);
+
+ while (WiFi.status() != WL_CONNECTED) {
+ delay(500);
+ Serial.println("Connecting to WiFi..");
+ }
+ Serial.println("Connected to the WiFi network");
+ Serial.print("IP Address: ");
+ Serial.println (WiFi.localIP()); // prints out the device's IP address
+}
+
+
+void loop() {
+ const uint16_t port = 80; // Default port
+ const char* host = "192.168.0.10"; // Target Server IP Address
+
+ Serial.print("Connecting to ");
+ Serial.println(host);
+
+ // Use WiFiClient class to create TCP connections
+ WiFiClient client;
+
+ if (!client.connect(host, port)) {
+ Serial.println("Connection failed.");
+ Serial.println("Waiting 5 seconds before retrying...");
+ delay(5000);
+ return;
+ }
+
+ // This will send a request to the server
+ //uncomment this line to send an arbitrary string to the server
+ //client.print("Send this data to the server");
+ //uncomment this line to send a basic document request to the server
+ client.print("GET /index.html HTTP/1.1\n\n"); // sending HTTP GET request
+
+ int maxloops = 0;
+
+ //wait for the server's reply to become available
+ while (!client.available() && maxloops < 1000) {
+ maxloops++;
+ delay(1); //delay 1 msec
+ }
+ if (client.available() > 0) {
+ //read back one line from the server
+ String line = client.readString(); // Read from the server response
+ // Proceed various line-endings
+ line.replace("\r\n", "\n");
+ line.replace('\r', '\n');
+ line.replace("\n", "\r\n");
+ Serial.println(line);
+ } else {
+ Serial.println("client.available() timed out ");
+ }
+
+ Serial.println("Closing connection.");
+ client.stop();
+
+ Serial.println("Waiting 5 seconds before restarting...");
+ delay(5000);
+}
+```
+
+### Wi-Fi HTTPS连接示例代码
+
+该示例演示了使用Wio Terminal建立Https连接。通过使用此示例,您可以连接到几乎所有网站并获取所需的数据。
+
+- 将 `ssid` 和 `password` 更改为您的Wi-Fi。
+
+```cpp
+#include
+#include
+
+const char* ssid = "yourNetworkName"; // your network SSID
+const char* password = "yourNetworkPassword"; // your network password
+
+const char* server = "www.example.com"; // Server URL
+const char* test_root_ca = \
+ "-----BEGIN CERTIFICATE-----\n"
+ "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
+ "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
+ "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
+ "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
+ "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
+ "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
+ "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
+ "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
+ "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
+ "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
+ "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
+ "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
+ "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
+ "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
+ "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
+ "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
+ "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
+ "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
+ "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
+ "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
+ "-----END CERTIFICATE-----\n";
+
+// You can use x.509 client certificates if you want
+//const char* test_client_key = ""; //to verify the client
+//const char* test_client_cert = ""; //to verify the client
+
+WiFiClientSecure client;
+
+void setup() {
+ //Initialize serial and wait for port to open:
+ Serial.begin(115200);
+ while(!Serial); // Wait for Serial to be ready
+ delay(1000);
+
+ Serial.print("Attempting to connect to SSID: ");
+ Serial.println(ssid);
+ WiFi.begin(ssid, password);
+
+ // attempt to connect to Wifi network:
+ while (WiFi.status() != WL_CONNECTED) {
+ Serial.print(".");
+ // wait 1 second for re-trying
+ delay(1000);
+ }
+ Serial.print("Connected to ");
+ Serial.println(ssid);
+
+ client.setCACert(test_root_ca);
+ //client.setCertificate(test_client_key); // for client verification
+ //client.setPrivateKey(test_client_cert); // for client verification
+
+ Serial.println("\nStarting connection to server...");
+ if (!client.connect(server, 443)) {
+ Serial.println("Connection failed!");
+ } else {
+ Serial.println("Connected to server!");
+ // Make a HTTP request:
+ client.println("GET https://www.example.com HTTP/1.0");
+ client.println("Host: www.example.com");
+ client.println("Connection: close");
+ client.println();
+
+ while (client.connected()) {
+ String line = client.readStringUntil('\n');
+ if (line == "\r") {
+ Serial.println("headers received");
+ break;
+ }
+ }
+ // if there are incoming bytes available
+ // from the server, read them and print them:
+ while (client.available()) {
+ char c = client.read();
+ if (c == '\n') {
+ Serial.write('\r');
+ }
+ Serial.write(c);
+ }
+ client.stop();
+ }
+}
+
+void loop() {
+ // do nothing
+}
+```
+
+#### 获取网站的根CA
+
+要获取网站的根CA,您可以在终端中运行以下命令(Linux Bash Shell):
+
+```sh
+openssl s_client -showcerts -verify 5 -connect www.example.com:443 < /dev/null
+```
+
+将 **`www.example.com`** 替换为所需网站的根URL。
+
+**For Windows**, 您可以使用 **Windows 子系统用于Linux(WSL)** 运行相同的Linux命令。
+
+**注:** 确保您已安装依赖项:
+
+```sh
+sudo apt update
+sudo apt install openssl
+```
+
+### MQTT服务器连接示例代码
+
+这个示例演示了如何使用Wio Terminal连接到MQTT服务器。通过这个示例,你可以使用Wio Terminal订阅和发布消息到MQTT服务器。这里使用了一个免费的MQTT服务器: .
+
+- 在这里下载并安装 [**Arduino MQTT Library**](https://github.com/knolleary/pubsubclient) here.
+
+```cpp
+#include "rpcWiFi.h"
+#include
+
+// Update these with values suitable for your network.
+const char *ssid = "yourNetworkName"; // your network SSID
+const char *password = "yourNetworkPassword"; // your network password
+
+const char *ID = "Wio-Terminal-Client"; // Name of our device, must be unique
+const char *TOPIC = "WioTerminal"; // Topic to subcribe to
+const char *subTopic = "inTopic"; // Topic to subcribe to
+const char *server = "test.mosquitto.org"; // Server URL
+
+
+WiFiClient wifiClient;
+PubSubClient client(wifiClient);
+
+void callback(char* topic, byte* payload, unsigned int length) {
+ Serial.print("Message arrived [");
+ Serial.print(topic);
+ Serial.print("] ");
+ for (int i=0;i
+
+这个示例演示了如何使用Wio Terminal建立MQTTs连接。这里使用了一个免费的MQTTs服务器: 并将加速度计数据发送到一个主题。
+
+- 在这里下载并安装 [**Arduino MQTT 库**](https://github.com/knolleary/pubsubclient) 。
+
+- 根据 [**此 wiki**](https://wiki.seeedstudio.com/Wio-Terminal-IMU-Overview/) 安装Wio Terminal的加速度计库。
+
+- Wio Terminal将会发布加速度计数据到 `WioTerminal/IMU` 主题,并订阅来自 `inTopic` 主题的消息。
+
+```cpp
+#include "rpcWiFi.h"
+#include
+#include
+#include"LIS3DHTR.h"
+
+const char *ssid = "yourNetworkName"; // your network SSID
+const char *password = "yourNetworkPassword"; // your network password
+
+const char *ID = "Wio-Terminal-Client"; // Name of our device, must be unique
+const char *TOPIC = "WioTerminal/IMU"; // Topic to subcribe to
+const char *subTopic = "inTopic"; // Topic to subcribe to
+
+const char *server = "test.mosquitto.org"; // Server URL
+const char *test_root_ca =
+"-----BEGIN CERTIFICATE-----\n"
+"MIIEAzCCAuugAwIBAgIUBY1hlCGvdj4NhBXkZ/uLUZNILAwwDQYJKoZIhvcNAQEL\n"
+"BQAwgZAxCzAJBgNVBAYTAkdCMRcwFQYDVQQIDA5Vbml0ZWQgS2luZ2RvbTEOMAwG\n"
+"A1UEBwwFRGVyYnkxEjAQBgNVBAoMCU1vc3F1aXR0bzELMAkGA1UECwwCQ0ExFjAU\n"
+"BgNVBAMMDW1vc3F1aXR0by5vcmcxHzAdBgkqhkiG9w0BCQEWEHJvZ2VyQGF0Y2hv\n"
+"by5vcmcwHhcNMjAwNjA5MTEwNjM5WhcNMzAwNjA3MTEwNjM5WjCBkDELMAkGA1UE\n"
+"BhMCR0IxFzAVBgNVBAgMDlVuaXRlZCBLaW5nZG9tMQ4wDAYDVQQHDAVEZXJieTES\n"
+"MBAGA1UECgwJTW9zcXVpdHRvMQswCQYDVQQLDAJDQTEWMBQGA1UEAwwNbW9zcXVp\n"
+"dHRvLm9yZzEfMB0GCSqGSIb3DQEJARYQcm9nZXJAYXRjaG9vLm9yZzCCASIwDQYJ\n"
+"KoZIhvcNAQEBBQADggEPADCCAQoCggEBAME0HKmIzfTOwkKLT3THHe+ObdizamPg\n"
+"UZmD64Tf3zJdNeYGYn4CEXbyP6fy3tWc8S2boW6dzrH8SdFf9uo320GJA9B7U1FW\n"
+"Te3xda/Lm3JFfaHjkWw7jBwcauQZjpGINHapHRlpiCZsquAthOgxW9SgDgYlGzEA\n"
+"s06pkEFiMw+qDfLo/sxFKB6vQlFekMeCymjLCbNwPJyqyhFmPWwio/PDMruBTzPH\n"
+"3cioBnrJWKXc3OjXdLGFJOfj7pP0j/dr2LH72eSvv3PQQFl90CZPFhrCUcRHSSxo\n"
+"E6yjGOdnz7f6PveLIB574kQORwt8ePn0yidrTC1ictikED3nHYhMUOUCAwEAAaNT\n"
+"MFEwHQYDVR0OBBYEFPVV6xBUFPiGKDyo5V3+Hbh4N9YSMB8GA1UdIwQYMBaAFPVV\n"
+"6xBUFPiGKDyo5V3+Hbh4N9YSMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL\n"
+"BQADggEBAGa9kS21N70ThM6/Hj9D7mbVxKLBjVWe2TPsGfbl3rEDfZ+OKRZ2j6AC\n"
+"6r7jb4TZO3dzF2p6dgbrlU71Y/4K0TdzIjRj3cQ3KSm41JvUQ0hZ/c04iGDg/xWf\n"
+"+pp58nfPAYwuerruPNWmlStWAXf0UTqRtg4hQDWBuUFDJTuWuuBvEXudz74eh/wK\n"
+"sMwfu1HFvjy5Z0iMDU8PUDepjVolOCue9ashlS4EB5IECdSR2TItnAIiIwimx839\n"
+"LdUdRudafMu5T5Xma182OC0/u/xRlEm+tvKGGmfFcN0piqVl8OrSPBgIlb+1IKJE\n"
+"m/XriWr/Cq4h/JfB7NTsezVslgkBaoU=\n"
+"-----END CERTIFICATE-----\n";
+
+long lastMsg = 0;
+
+LIS3DHTR lis;
+WiFiClientSecure wifiClient;
+PubSubClient client(wifiClient);
+
+void callback(char *topic, byte *payload, unsigned int length)
+{
+ Serial.print("Message arrived [");
+ Serial.print(topic);
+ Serial.print("] ");
+ for (int i = 0; i < length; i++)
+ {
+ Serial.print((char)payload[i]);
+ }
+ Serial.println();
+}
+
+void reconnect()
+{
+ // Loop until we're reconnected
+ while (!client.connected())
+ {
+ Serial.print("Attempting MQTT connection...");
+ // Attempt to connect
+ if (client.connect(ID))
+ {
+ Serial.println("connected");
+ // Once connected, publish an announcement...
+ client.publish(TOPIC, "{\"message\": \"Wio Terminal is connected!\"}");
+ Serial.println("Published connection message successfully!");
+ // ... and resubscribe
+ client.subscribe(subTopic);
+ Serial.print("Subcribed to: ");
+ Serial.println(subTopic);
+ }
+ else
+ {
+ Serial.print("failed, rc=");
+ Serial.print(client.state());
+ Serial.println(" try again in 5 seconds");
+ // Wait 5 seconds before retrying
+ delay(5000);
+ }
+ }
+}
+
+void setup()
+{
+ //Initialize serial and wait for port to open:
+ Serial.begin(115200);
+ while (!Serial)
+ ; // Wait for Serial to be ready
+ delay(1000);
+
+ lis.begin(Wire1);
+
+ if (!lis) {
+ Serial.println("ERROR");
+ while(1);
+ }
+ lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); //Data output rate
+ lis.setFullScaleRange(LIS3DHTR_RANGE_2G); //Scale range set to 2g
+
+ Serial.print("Attempting to connect to SSID: ");
+ Serial.println(ssid);
+ WiFi.begin(ssid, password);
+
+ // attempt to connect to Wifi network:
+ while (WiFi.status() != WL_CONNECTED)
+ {
+ Serial.print(".");
+ WiFi.begin(ssid, password);
+ // wait 1 second for re-trying
+ delay(1000);
+ }
+ Serial.print("Connected to ");
+ Serial.println(ssid);
+
+ wifiClient.setCACert(test_root_ca);
+
+ client.setServer(server, 8883);
+ client.setCallback(callback);
+}
+
+
+void loop()
+{
+ if (!client.connected())
+ {
+ reconnect();
+ }
+
+ float x_values, y_values, z_values;
+
+ // Sending Data
+ long now = millis();
+ if (now - lastMsg > 5000) {
+ lastMsg = now;
+
+ x_values = lis.getAccelerationX();
+ y_values = lis.getAccelerationY();
+ z_values = lis.getAccelerationZ();
+ String data="{\"x-axis\": "+String(x_values)+","+"\"y-axis\": "+String(y_values)+","+"\"z-axis\": "+String(z_values)+"}";
+
+ if (!client.publish(TOPIC, data.c_str())) {
+ Serial.println("Message failed to send.");
+ }
+ Serial.printf("Message Send [%s] ", TOPIC);
+ Serial.println(data);
+ }
+
+ client.loop();
+}
+```
+
+### UDP客户端示例代码
+
+