# Educational STEM Products

We welcome you to explore various educational products. Feel free to reach out for further information.

For STEM solution for your school, please reach out at <inquiry@pakronics.com.au>

New Courses added 2026 are;

1. ## Micro:bit&#x20;
2. ## Arduino Nano 33 IoT


# Online DIY Courses for classroom


# Arduino Nano 33 IoT


# Microbit Beginner's course for year 5&6

This course aims to provide teachers with technical and content knowledge to teach the Digital Technologies curriculum to Years 5 & 6. It provides an introduction into basic coding concepts using the BBC micro:bit and Microsoft MakeCode as the platform.&#x20;

Included in this course is an introduction into micro:bit classroom where you can learn how to teach Digital Technologies through an online learning management system. This is appropriate for face-to-face and remote learning. There is no requirement to have a physical micro:bit. If you do have access to one you can take the projects and make them a physical reality.

## Activities designed for the classroom

Throughout the course you will be given activities to complete. These activities are ready to be taken straight into the classroom and have been mapped to the Australian Curriculum. Along side the activities are teaching considerations. These are intended to support the implementation of the activities through the teaching of broader concepts and other required understandings.&#x20;

Depending on the implementation strategy, it is suggested that the activities covered in this course would cover content for one term.&#x20;

This course is separated into 5 modules. Each module focuses on one activity. The modules include the information you need to complete the activities as well as strategies and resources for classroom implementation.

In this module you will create your own customised name badge.&#x20;

You will learn about loops and be introduced to the hardware and software involved in this course.&#x20;

<br>

![Lesson 1](https://files.cdn.thinkific.com/file_uploads/91791/images/2bd/79e/529/5_6_Module_1.gif)

Microsoft MakeCode - <https://makecode.microbit.org/>


# Early Primary


# Bee Bot

A programmable floor robot for early primary.

[**Bee-Bot**](https://www.pakronics.com.au/products/new-2019-bee-bot-rechargeable-pakr-et1002) is a simplified Logo turtle for the youngest students. Designed for students in kindergarten through second grade, Bee-Bot may be programmed to move forward and back and turn left and right by pressing the corresponding arrow keys on its back. Press the green GO button and watch Bee-Bot follow the steps. Children are captivated by Bee-Bot and eager to send it on its way.

{% hint style="info" %}
Youtube videos
{% endhint %}

{% embed url="<https://youtu.be/0tLrXlygbeU>" %}

| Device            | Bee Bot                                                                                                                                                                  | Blue Bot                       |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------ |
| Interface         | No digital device                                                                                                                                                        | With or without digital device |
| Connectivity      | N/A                                                                                                                                                                      | Bluetooth                      |
| Memory            | 200 steps                                                                                                                                                                | 200 steps                      |
| Step size forward | 15 cm                                                                                                                                                                    | 15 cm                          |
| Turn size         | 90°                                                                                                                                                                      | 90°                            |
| Battery           | Rechargeable                                                                                                                                                             | Rechargeable                   |
| Age suggested     | F-2                                                                                                                                                                      | F-2                            |
| Windows           | N/A                                                                                                                                                                      |                                |
| MacOs             | N/A                                                                                                                                                                      |                                |
| iOs               | N/A                                                                                                                                                                      |                                |
| Android           | N/A                                                                                                                                                                      |                                |
|                   | [User manual](https://www.tts-international.com/on/demandware.static/-/Sites-TTSGroupE-commerceMaster/default/dwab617cae/images/document/IT10077%20Bee-Bot%20Manual.pdf) |                                |

## Resources

1. <https://www.australiancurriculumlessons.com.au/2016/09/29/introduction-programming-via-bee-bots-f-12-lesson-plan/>

{% embed url="<https://www.pakronics.com.au/products/new-2019-bee-bot-rechargeable-pakr-et1002>" %}
Bee Bot single
{% endembed %}

{% embed url="<https://www.pakronics.com.au/products/new-2019-bee-bot-swarm-pakr-et1003>" %}
Six Bee bot with charging tray
{% endembed %}

The new and improved Bee-Bot is a perfect starting point for teaching control, directional language and programming. Interact with other Bee-Bot's and Blue-Bot's Record audio to play back to confirm when commands are entered Audio playback when Bee-Bot follows commands Bee-Bot Rechargeable Floor Robot Can command up to 200 The new and improved Bee-Bot is a perfect starting point for teaching control, directional language and programming. Bee-Bot can now detect another Bee-Bot or Blue-Bot and say hello.

They will play a default sound or the students can record their own. Students can also record audio to play back when each button is pressed, making it more accessible to all students, including those with auditory or visual processing needs. With a wide range of cross curricular mats and activity tins to program with, and fun accessories to personalise, Bee-Bot is the must have programming resource for any K-3 classroom. Bee-Bot can accurately move in steps of 15cm, turn in 90° turns, and remembers up to 200 steps!


# Ozobot

Cute little robot that can be coded by colour code or online program. There are two type of bots - Bit and Evo.\\

>

Video

{% embed url="<https://youtu.be/jbcDHKKWjds>" %}

## Ozobot Bit vs Evo

| Device | Bit | Evo |
| ------ | --- | --- |

| Features | The original Ozobot, always ‘round to code and learn with you | An app-connected coding robot for the next generation of creators |
| -------- | ------------------------------------------------------------- | ----------------------------------------------------------------- |

| Age | 6+ | 9+ |
| --- | -- | -- |

| Level | Beginner coding | Beginner to expert coding |
| ----- | --------------- | ------------------------- |

| Coding | Online or Screen free | Online or Screen free or App |
| ------ | --------------------- | ---------------------------- |

| Online community | - | <p>Tricks In-bot behaviors & games.</p><p>Social Friends & chat</p> |
| ---------------- | - | ------------------------------------------------------------------- |

| Programmable sensors | Optical sensor | Optical sensor |
| -------------------- | -------------- | -------------- |

|   | 1 LED light | 7 LEDs light |
| - | ----------- | ------------ |

|   | Motors | Motors |
| - | ------ | ------ |

|   |   | Proximity |
| - | - | --------- |

|   |   | Speaker |
| - | - | ------- |

{% embed url="<https://www.pakronics.com.au/products/ozobot-bit-starter-pack-blue-pakr-w7506>" %}

{% embed url="<https://www.pakronics.com.au/products/ozobot-bit-2-0-classroom-kit-pakr-et1075>" %}

{% embed url="<https://www.pakronics.com.au/products/ozobot-bit-classroom-kit-18-pk-white-pakr-w7538>" %}

{% embed url="<https://www.pakronics.com.au/products/ozobot-evo-classroom-kit-12-pack-pakr-et1144>" %}

{% embed url="<https://www.pakronics.com.au/products/ozobot-evo-classroom-kit-18-pack-pakr-et1083>" %}

## Lessons

{% embed url="<https://youtu.be/MuQHRlLP4qA>" %}

## Resources

1. Lessons -<https://portal.ozobot.com/lessons>
2. Getting started - <https://ozobot.com/stem-education/education-getting-started>
3. Colour coding - <https://ozobot.com/play/color-codes>
4. Educator’s Guide:

   <https://files.ozobot.com/stem-education/ozobot-educators-guide.pdf>
5. Colour Code Charts:

   <https://files.ozobot.com/stem-education/ozobot-color-codes.pdf>
6. Colour Code Tips:

   <https://files.ozobot.com/stem-education/color-codes-tips.pdf>
7. Calibration Tips:

   <https://files.ozobot.com/stem-education/ozobot-calibration-tips.pdf>
8. Ozoblockly Tips:

   <https://files.ozobot.com/stem-education/ozoblockly-getting-started.pdf>
9. Log sheet:

   <https://files.ozobot.com/stem-education/ozobot-log-sheet.pdf>
10. Student Certificates:

    <https://files.ozobot.com/stem-education/ozobot-certificate.pdf>
11. Driver’s ed activity:

    <http://cmase.pbworks.com/f/Ozobot%20Drivers%20Education.pdf>


# Matatalab Coding Set

A hands-on Coding Robot for kids aged 4-9 Develops Cognitive Abilities, Imagination, and Coding Skills through Hands-on Play

## Video

{% embed url="<https://youtu.be/0_xPiDLkDFc>" %}
Matatalab Coding set
{% endembed %}

{% embed url="<https://youtu.be/1CRNTPN0zUY>" %}
Matatalab lite
{% endembed %}

{% embed url="<https://www.youtube.com/watch?v=jExec8sV808&list=PLgVj19zl3RtRgUyczDWRrMnoib4odVXaa&index=8>" %}

Helps kids learn how to code by playing with a **screenless**, **words free** educational coding game. Kids will program a robot, creating music, art and many more through this kit!

We know kids naturally play and learn by using their hands, eyes, and ears. This is essential for cognitive development, so we have created a solution for kids to start coding from a young age.

Kids use their imagination to create infinite possibilities using coding blocks, by controlling a robot car through coding algorithms. Kids receive instant feedback, and quickly learn that coding is simple. Starting young and equipped with an understanding of fundamental concepts, kids at a later age will be able to grasp more abstract concepts of real programming at school and can learn without fear.

## **Get to Know**

**MatataBot**

MatataBot is a robot car that enhances the thrill of adventure, its unique attachments allow it to draw and sing too! It helps kids learn about STEAM, (Science, Technology, Engineering, Arts, and Mathematics) and develop problem-solving skills.![](https://res.cloudinary.com/hrscywv4p/image/upload/c_limit,fl_lossy,h_1440,w_720,f_auto,q_auto/v1/1216473/%E7%94%BB%E6%9D%BF_4_bqbjzh.png)

**Command Tower**

With image recognition, it tells the MatataBot where to go!\
Kids can also put their favorite Lego® Minifigures in the command room.![](https://res.cloudinary.com/hrscywv4p/image/upload/c_limit,fl_lossy,h_1440,w_720,f_auto,q_auto/v1/1216473/%E7%94%BB%E6%9D%BF_2_mperyc.png)

**Control Board**

Place the blocks on the board to conquer stages together with MatataBot. Hit the button, and the MatataBot executes your program.![](https://res.cloudinary.com/hrscywv4p/image/upload/c_limit,fl_lossy,h_1440,w_720,f_auto,q_auto/v1/1216473/blocks_xggrid.png)

**Coding Blocks**

Tangible coding blocks make coding touchable and playable, helping kids concentrate, through enjoyment. Coding becomes a hands-on experience — literally!![](https://res.cloudinary.com/hrscywv4p/image/upload/c_limit,fl_lossy,h_1440,w_720,f_auto,q_auto/v1/1216473/%E7%94%BB%E6%9D%BF_3_wgnrl9.png)

**Nature Map and Challenge Booklets**

Take little MatataBot on an adventure through the nature map. Use the step by step challenge booklets to get from beginner to intermediate coders.

## Features

* Works without screen or with iPad app
* Game based learning
* Word free
* Draw, move and play music
* Programming blocks&#x20;
  * Movements - forward, backward, left turn, right turn
  * Art - turn at an angle (30,36,45,60,72,108,120,135,144,150)
  * Music&#x20;
  * Animation
  * Sensor

## Resource

1. Guide
   1. [Teacher's guide sample](https://uploads.strikinglycdn.com/files/c8946374-44e1-4f04-b6eb-481eb2167072/Learning%20Station%20Curriculum%20%28sample%29.pdf)&#x20;
   2. [Teacher's guide extracurricular guide sample](https://uploads.strikinglycdn.com/files/c8946374-44e1-4f04-b6eb-481eb2167072/Extracurricular%20Curriculum%EF%BC%88sample%EF%BC%89.pdf)
   3. [Artist Add-on guide sample](https://uploads.strikinglycdn.com/files/c8946374-44e1-4f04-b6eb-481eb2167072/Artist%20Add-On%20Set%20Curriculum%20%28sample%29.pdf)&#x20;
   4. [Music Add-on guide sample](https://uploads.strikinglycdn.com/files/c8946374-44e1-4f04-b6eb-481eb2167072/Musician%20Add-On%20Set%20Curriculum%20%28sample%29.pdf)&#x20;
2. Activity Cards
   1. [Alphabet activity card](https://matatalab.com/download/586/)s
   2. [Number activity cards](https://matatalab.com/download/586/)
3. Maps
   1. [Forest park](https://matatalab.com/download/592/)
   2. [Ocean animals](https://matatalab.com/download/589/)
   3. [Explore space](https://matatalab.com/download/595/)
   4. [Christmas game](https://matatalab.com/download/598/)
   5. [Matata soccer map](https://matatalab.com/download/604/)

## Products

{% embed url="<https://www.pakronics.com.au/products/coding-set-coding-like-abc-by-matatalabs>" %}
Matatalab coding set
{% endembed %}

{% embed url="<https://www.pakronics.com.au/products/coding-set-pro-coding-like-abc-by-matatalabs>" %}
Matatalab Pro coding set - includes artist and music addon
{% endembed %}

{% embed url="<https://www.pakronics.com.au/products/matatalab-lite-pakr-a0261>" %}

{% embed url="<https://www.pakronics.com.au/products/matatalab-musician-add-on>" %}

{% embed url="<https://www.pakronics.com.au/products/artist-add-on-for-coding-set-by-matatalab>" %}

{% embed url="<https://www.pakronics.com.au/products/matatalab-sensor-add-on-pakr-a0262>" %}

{% embed url="<https://www.pakronics.com.au/products/matatalab-animation-add-on-pakr-a0263>" %}


# Neuron coding blocks

Neurone is a set of programmable electronics blocks enables building of electronics system. Plug and play auto recognition of the blocks on the app for the programming.

{% embed url="<https://youtu.be/FKsRr5bUrxs>" %}

{% embed url="<https://youtu.be/owLF-iBwJ20>" %}

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-m2TeKRNkmlhnj_sXp%2Fimage.png?alt=media\&token=89346a2c-8100-49e8-9ecd-5135273f97ce)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-m2_RnczFfICELIDot%2Fimage.png?alt=media\&token=d74c88dc-eb4b-4fb6-a8d5-a5be24d4bf0a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-m2fPPyO-Y8GxCVFD3%2Fimage.png?alt=media\&token=5b36c0cb-a70b-45dc-8b78-eda939a7cad0)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-m2hd5Pneee3GvWOUZ%2Fimage.png?alt=media\&token=5a735635-443b-4897-859d-bd16bb19644a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-m2kzSiPGTkd1V1wsd%2Fimage.png?alt=media\&token=d481a84a-4757-4254-a654-dd0c05708bec)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-m2oFniOlPpkUvTxq3%2Fimage.png?alt=media\&token=fca73458-da34-406c-a168-5730705d3541)

<http://education.makeblock.com/resource/?query=237&page=1>

[http://education.makeblock.com/resource/?query=238\&page=1](https://meetedison.com/content/EdBlocks-lesson-activities-complete-set.pdf)

[http://education.makeblock.com/resource/?query=239\&page=1](https://meetedison.com/content/EdBlocks-lesson-activities-complete-set.pdf)


# Osmo ios

## Real Play, Real Learning

Use tangible pieces to create a unique, hands-on learning experience.

{% embed url="<https://youtu.be/I9Qm18it47A>" %}

### Transforming how children learn

Osmo merges tactile exploration with innovative technology, actively engaging children in the learning process.

### How Osmo works

1. Put your device in a compatible Osmo Base with the red reflector over the device’s camera.
2. Play with physical game pieces — draw, code, spell, and more.
3. Osmo scans the table and your child’s creations come alive on the screen!

#### Osmo New Base for iPad - Sturdier design and usable in landscape mode

**Compatible Devices**

iPad 2iPad 3rd, 4th, 5th, 6th, 7th Generation

iPad Mini, iPad Mini 2–5iPad Air, iPad Air 2-39.7-inch, 10.5-inch iPad Pro

{% embed url="<https://www.pakronics.com.au/products/osmo-genius-starter-kit-2019-pakr-mg1108>" %}

{% embed url="<https://www.pakronics.com.au/products/osmo-classroom-kit-genius-kit-edition-pakr-mg1020>" %}

{% embed url="<https://www.pakronics.com.au/products/osmo-pizza-co-game-pakr-mg1028>" %}

{% file src="/files/-M-m9N4CbMQn1vWSpMxg" %}
OSMO Australian Curriculum Aligned Teacher Guide
{% endfile %}


# Cubetto

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-mAgpVZQrLLF3sDlxf%2Fimage.png?alt=media\&token=de5112cb-9ebb-4564-a922-fb1ae159aaa9)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-mAirgnxTKmbtIcFWh%2Fimage.png?alt=media\&token=dad63b9d-5fc4-4220-b820-181a394c2a4d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-m0U3M6jQSFahxFmC9%2F-M-mAnAsJk9iNQiEy4Bh%2Fimage.png?alt=media\&token=e18630bd-38eb-4e1e-a06c-21639ae0ea20)

## Learning Material

[**https://www.primotoys.com/wp-content/uploads/2016/09/Cubetto-Instruction-Guide.pdf**](https://www.primotoys.com/wp-content/uploads/2016/09/Cubetto-Instruction-Guide.pdf)

[**https://336-164037.shop033.com/resources/C5/164037/Other/Primo\_Beginners%20Guide%20to%20coding%20with%20Kids.pdf**](https://336-164037.shop033.com/resources/C5/164037/Other/Primo_Beginners%20Guide%20to%20coding%20with%20Kids.pdf)

[**https://336-164037.shop033.com/resources/C5/164037/Other/Teacher%20Guide.pdf**](https://336-164037.shop033.com/resources/C5/164037/Other/Teacher%20Guide.pdf)

[**https://336-164037.shop033.com/resources/C5/164037/Other/Lesson%20Plan\_Reception,%20Unit%201,%20Coding%20with%20Cubetto.pd**](https://336-164037.shop033.com/resources/C5/164037/Other/Lesson%20Plan_Reception,%20Unit%201,%20Coding%20with%20Cubetto.pdf)


# Sphero Bolt

Sphero with educational peripheral.Sphero BOLT’s eye-catching, programmable 8x8 light matrix opens up an endless array of coding and gaming capabilities. Use advanced sensors to track speed, accelerat

{% embed url="<https://youtu.be/ZluyTRFn3OY>" %}

### PRISMATIC PERFECTION

Sphero BOLT’s eye-catching, programmable 8x8 light matrix opens up an endless array of coding and gaming capabilities. Use advanced sensors to track speed, acceleration, and direction, or drive BOLT without having to aim your robot thanks to the compass. BOLT also features infrared communication, allowing your robot to “talk” with other BOLTs. Equipped with Bluetooth SMART and a strong scratch-resistant shell, this robot’s brawn matches its brilliance.

* **Advanced Sensors**

  Keep tabs on BOLT’s speed and direction with built-in sensors for programming.
* **LED Matrix**

  Sphero BOLT was built to shine with 8x8 LED Matrix that animates and displays real-time data.
* **Infrared Communication**

  BOLT to BOLT communication enables new games and advanced coding tactics.

### IRIDESCENT EXPERIENCES

Program BOLT with the Sphero Edu app from nearly any mobile or desktop device, discover awesome community-created activities, or just drive and play. Create and customize games and learn to code by drawing on your screen, using Scratch™ blocks, or writing JavaScript text.

![Create & Customize Games](https://2xkovp-p045k91rjvr9.cloudmaestro.com/7Gqp0Otqt/media/catalog/product/cache/34c4bf04edb10bb4438901ae44e078f4/b/o/abolt-createandcustomizegames.png.pagespeed.ic.3ritZWxWMV.webp)

Create & Customize Games![Draw, Block & Text Coding](https://2b9xsr-p045k91rjvr9.cloudmaestro.com/7Gqp0Otqt/media/catalog/product/cache/34c4bf04edb10bb4438901ae44e078f4/b/o/abolt-drawblockandtextcoding.png.pagespeed.ic.9shyIeV4Em.webp)

Draw, Block & Text Coding![Discover Awesome Activities](https://bk0hgy-p045k91rjvr9.cloudmaestro.com/7Gqp0Otqt/media/catalog/product/cache/34c4bf04edb10bb4438901ae44e078f4/b/o/abolt-discoverawesomeactivities.png.pagespeed.ic.fK0rtIWu6k.webp)

Discover Awesome Activities![https://www.sphero.com/media/catalog/product/cache/34c4bf04edb10bb4438901ae44e078f4/b/o/bolt-driveandplay.png](https://2xkovp-p045k91rjvr9.cloudmaestro.com/7Gqp0Otqt/media/catalog/product/cache/34c4bf04edb10bb4438901ae44e078f4/b/o/abolt-driveandplay.png.pagespeed.ic.zAAqYZ9Ict.webp)

Drive & Play

## What's in the box

* Sphero BOLT
* Inductive charging base with USB charging cable
* Protractor with heading, directions, and clock
* Quick Start guide to get you rolling
* Sticker sheet
* Sphero Play app available for download on iOS and Android
* Swift Playgrounds app available for download on iOS. Works with the Sphero Arcade and Sphero Template playgrounds
* Sphero Edu app available for download on iOS, Android, Kindle, Mac, Windows, and Chrome

## Buy&#x20;

{% embed url="<https://www.pakronics.com.au/products/sphero-bolt-education-15-pack-pakr-mg1040>" %}

{% embed url="<https://www.pakronics.com.au/products/sphero-bolt-power-pack-pakr-mg1041>" %}

{% embed url="<https://www.pakronics.com.au/products/sphero-bolt-pakr-mg1039>" %}

{% embed url="<https://www.sphero.com/csf1>" %}

{% embed url="<https://www.sphero.com/csf2>" %}

{% embed url="<https://www.sphero.com/csf3>" %}


# Primary


# Codey Rocky AI Robot


# Tutorials


# Introduction

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-03-18-14-03.png)

## Introduction <a href="#introduction" id="introduction"></a>

Codey Rocky combines the hardware and software, enabling children to learn about the basics of programming through playing and creating. Integrated with over 10 programmable electronic modules, Codey Rocky is fun to play with a few lines of code. You can use mBlock to unleash your imagination and creativity. Programming is as easy as building blocks with mBlock.You can also write Python in mBlock to have your Codey Rocky do more amazing things.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-11-22-12.png)

**Codey**: robot controller\
**Rocky**: robot chassis

### Use mBlock 5 with Codey Rocky <a href="#use-mblock-5-with-codey-rocky" id="use-mblock-5-with-codey-rocky"></a>

Connect your Codey Rocky to mBlock 5 and make it do all kinds of things as programmed. You can have Codey Rocky display LED animations, play instruments, chase lights, and more.

You can get mBlock 5 on your PC, phones and tablets, or use mBlock 5 in a web browser.

For PC, please visit [here](http://www.mblock.cc/mblock-software/). \
For Android and iOS, please search "mblock" in any application store to download\
For web browser, please visit [here](https://ide.makeblock.com/).&#x20;

***Note:*** *In this document, screenshots are generated from mBlock PC and are for references only. But all projects are available both on PC and mobile devices.*


# Get Started

In this section, a quick start guide will help you get started with Codey Rocky.

## Connect Codey Rocky to mBlock 5

### 1. Open mBlock 5. Connect Codey to your computer via the USB cable. (For mBlock App, please follow the on-screen instructions.)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-15-06-30.png)

### 2. Press the **Power** button to turn on Codey.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-15-12-48.png)

### 3. Make sure **Codey** is selected and click **Connect**. From the pop-up "Connect Device" window, click **Connect**.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-15-27-24.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-15-27-33.png)

## Create a Codey Rocky Project

Let's start with a simple project, to make Codey play the sound of "hello" when being shaken.

### 1. Drag a when Codey is shaking block from the Events category to the scripts area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-15-47-37.png)

### 2. Drag a play sound () block from the Speaker category, and add it onto the existing block.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-15-53-06.png)

### 3. Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-04-15-56-59.png)

### 4. Try shaking Codey!


# Upload Mode

The default programming mode with Codey is "Upload mode". Once Codey is connected to mBlock 5, "Upload mode" is toggled on, as shown below:

![](http://docs.makeblock.com/codeyrocky/en/tutorials/images/upload-mode-1.png)

Under "Upload mode", programming has following features:

1. All programs need to be uploaded to Codey to run. When you finish programming, click "Upload" to upload the program.\ <br>
2. The uploaded program can run offline (disconnected from mBlock 5).\ <br>
3. When powered off and on again, Codey will still run the program that is uploaded last time before it is powered off.\ <br>
4. Under "Upload mode", you are not able to combine Scratch stage programming with Codey. (Toggle off "Upload mode" if you want to use Scratch stage programming.)

   Hence, several blocks from the Events category are unavailable. These specific blocks are: when green flag clicked, when () key pressed, and broadcast () and wait.

   ![](http://docs.makeblock.com/codeyrocky/en/tutorials/images/upload-mode-4.png)

   **Note:**\
   Messages generated by the Events block work within one single project, and under "Upload Mode", Codey Rocky can only send messages to itself.<br>

### Toggle Off "Upload Mode" <a href="#toggle-off-upload-mode" id="toggle-off-upload-mode"></a>

When "Upload mode" is toggled off, programming has the following features:

1. Programs no longer need to be uploaded to run. You will find the "Upload" button taken out of the user interface.

   ![](http://docs.makeblock.com/codeyrocky/en/tutorials/images/upload-mode-2.png)

   Simply click the script to run and see how it works. Edit it and click it to run again. It is convenient for you to test and try your programs.

   **Note:**\
   Single click to run the script; double click to run a certain block.<br>
2. Programs can not run offline. Codey needs to remain connected to mBlock 5.\ <br>
3. Scratch stage programming is ready to work with Codey. The three Events blocks are now available, namely when green flag clicked, when () key pressed, and broadcast () and wait.

   Under this circumstance, one Event block is now unavailable: when Codey starts up.

   ![](http://docs.makeblock.com/codeyrocky/en/tutorials/images/upload-mode-3.png)**Note:**\
   Messages generated by the Events blocks work within one single project, and can be used in three circumstances: 1) Codey Rocky sending messages to itself; 2) between Codey Rocky and the Stage; 3) within the Stage.


# Emotion Blocks

Emotion blocks make your Codey Rocky more human-like. It can smile, get naughty, or even turn to you for care. Isn't it marvelous?

## Add Emotion Blocks

### 1. Make sure "Codey" is selected and click "+" in the blocks area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-1.png)

### 2. From the pop-up Extension Center page, click "+" to add emotion blocks.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-2.png)

### 3. Go back to Edit page. You can find emotion category added to the block palette.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-3.png)

## Have Some Fun

Let's try out the emotion blocks. We'll make a fun game. Codey Rocky bumps into a cave full of gold coins and starts collecting them.

Before coding, you need to hang up the chocolate coins, and the toy pan.

<div align="center"><img src="https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-LyWOqBr6f5SOWXvZ1KK%2F-LyWTxx1RSN_PGPup4-x%2Fcodey.gif?alt=media&amp;token=94073162-18a4-40fa-b02f-6ba563bfa3f6" alt=""></div>

### 1. Drag a when Codey starts up block from the Events category to the scripts area. Add an Action block move forward at power ()% for () secs, with 100% power for 0.5 second.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-4.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-5.png)

### 2. Add four Emotion blocks: look around, wow, look left, and look right.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-6.png)

### 3. Add another Action block move forward at power ()% for () secs, with 100% power for 0.5 second.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-7.png)

### 4. Add a Control block repeat (), and input number 4. Then add an Emotion block yes and an action block move forward at power ()% for () secs, with 100% power for 0.2 second.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-8.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-9.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-10.png)

### 5. Drag two more Emotion blocks: proud and smile.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-11.png)

### 6. Add another Action block move forward at power ()% for () secs, with 100% power for 0.6 second.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-12.png)

### 7. Last, add three more Emotion blocks: startle, dizzy, and hurt.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/emotion-blocks-13.png)

### 8. Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-09-51-28.png)

### 9. Check how Codey Rocky collect gold coins!

{% file src="/files/-LyWUhTb5XauIdhnVKQ2" %}
Download the code here.
{% endfile %}


# IoT Blocks

The Internet of Things (IoT) connects your devices together through the internet, where data can be shared and exchanged. With built-in Wi-Fi, Codey Rcoky can connect to the internet to realize its IoT functionality, such as obtaining data of the weather. Use IoT blocks to explore cutting-edge stuff with Codey Rocky.

## Add IoT Blocks

### 1. Make sure "Codey" is selected and click "+" in the Blocks area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-20-12.png)

### 2. From the pop-up Extension Center page, click "+" to add IoT blocks.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-20-24.png)

### 3. Go back to Edit Page, you can find IoT category added to the block palette.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-20-35.png)

## Have Some Fun

Let's try out the new IoT blocks. We will make Codey report weather.

### 1. Drag a when Codey starts up block from the Events category to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-21-45.png)

### 2. Drag a connect to Wi-Fi () password () block to connect Codey to your Wi-Fi. Type in the Wi-Fi name and password.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-23-33.png)

### 3. Drag a if () then () block from the Control category. Add a Wi-Fi connected? block from the IoT category to the condition. Codey Rocky needs to join a Wi-Fi network to obtain weather data.

&#x20;

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-24-37.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-25-37.png)

### 4. Drag a show () block from the Looks category, and wrap it up with the if () then () block. We want Codey to show weather data, so we need to add a weather in () block from the IoT category. Type in a city name. In this example, we type in "Shenzhen" and choose the drop-down list.

&#x20;

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-27-20.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-30-06.png)

### 5. Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-30-20.png)

### 6. Check Codey's screen to see weather report.


# Neuron Blocks

Take your imagination a step further with Neuron. The Neuron system includes 30 electronic blocks, from light sensor, infrared sensor, to humidity sensor. Connect your Codey to Neuron to explore more fun.

## Add Neuron Blocks

### 1. Make sure "Codey" is selected and click "+" in the Blocks area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-20-12.png)

### 2. From the pop-up Extension Center page, click "+" to add Neuron blocks.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-38-06.png)

### 3. Go back to Edit Page, you can find Neuron category added to the block palette.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-38-46.png)

## Have Some Fun

Let's try out the new Neuron Blocks. We will use the LED Strip of the Neuron system to make a simple project.

### 1. Connect the LED Strip to Codey.

### 2. Drag a when button () is pressed block from the Events category to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-04-40.png)

### 3. Drag a LED Strip () lights up () block from the Neuron category. Set the colors of all LEDs as repeating sequences.

&#x20;

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-12-42.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-13-04.png)

### 4. Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-13-49.png)

### 5. Press button A and check how the LED strip lights up.


# IR Remote

You can use your IR remote to control Codey Rocky. Customize your IR remote to be your Codey Rocky control.

## Add IR Remote Blocks

### 1. Make sure "Codey" is selected and click "+" in the blocks area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-11-20-12.png)

### 2. From the pop-up Extension Center page, click "+" to add IR Remote blocks.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-28-07.png)

### 3. Go back to Edit page. You can find IR Remote category added to the block palette.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-28-36.png)

## Have Some Fun

Let's try out the new IR Remote blocks. We will make a simple project to control Codey Rocky with your IR Remote.

### 1. Drag a when Codey starts up block from the Events category to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-48-36.png)

### 2. When up arrow button is pressed, we want Codey Rocky to move forward. We need to a if () then () block from the Control category, a IR Remote () pressed? block from the IR Remote category, and a move forward at power ()% for () secs block from the Action category.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-53-22.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-53-29.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-53-39.png)

### 3. When down arrow button is pressed, we want Codey Rocky to move backward. We need to a if () then () block from the Control category, a IR Remote () pressed? block from the IR Remote category, and a move backward at power ()% for () secs block from the Action category.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-56-57.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-57-05.png)

### 4. When left arrow button is pressed, we want Codey Rocket to turn left. We need to a if () then () block from the Control category, a IR Remote () pressed? block from the IR Remote category, and a turn left at power ()% for () secs block from the Action category.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-58-55.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-17-59-04.png)

### 5. When right arrow button is pressed, we want Codey Rocky to turn right. We need to a if () then () block from the Control category, a IR Remote () pressed? block from the IR Remote category, and a turn right at power ()% for () secs block from the Action category.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-18-00-06.png)

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-18-00-15.png)

### 6. Add a Control block forever.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/images/ir.png)

### 7. Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/tutorials/2018-12-05-09-51-28.png)

### 8. Press the buttons of your IR Remote and see how Codey Rocky moves.


# Use Python

Codey is a micropython-based robot.\
Python code need to be uploaded to Codey in order to run.

### Start Using Python <a href="#start-using-python" id="start-using-python"></a>

Start using Python by switching the programming mode from "Blocks" to "Python"

![](http://docs.makeblock.com/codeyrocky/en/tutorials/use-python-1.png)

**Note: please make sure that Codey is currently selected.**

![](http://docs.makeblock.com/codeyrocky/en/tutorials/use-python-2.png)

Here's an example code:

```
import codey
import rocky
import time
import event

@event.start
def on_start():
    codey.led.show(255,0,0)
    rocky.forward(50,1)
```

After programming, click "Upload" to upload the program to Codey.

### Convert Blocks to Python <a href="#convert-blocks-to-python" id="convert-blocks-to-python"></a>

In the Scripts area, click   ![](http://docs.makeblock.com/codeyrocky/en/tutorials/use-python-3.png)   to covert blocks to Python. The following is an example:

![](http://docs.makeblock.com/codeyrocky/en/tutorials/use-python-4.png)

### Use the Face Panel <a href="#use-the-face-panel" id="use-the-face-panel"></a>

#### display.show(text, wait=False) <a href="#displayshowtext-waitfalse" id="displayshowtext-waitfalse"></a>

Show a piece of text on Codey's Face Panel.

```
codey.display.show("hello world", wait=False)
codey.display.show(3.14, wait=False)
codey.display.show("14:02", wait=False)
```

#### display.show\_image(image, time) <a href="#displayshowimageimage-time" id="displayshowimageimage-time"></a>

Show an image on Codey's face panel. The image displayed needs to be converted to hexadecimal data.

If the duration is any other number than zero, the panel will turn off after the set duration.

```
codey.display.show_image("00003c7e7e3c000000003c7e7e3c0000", time_s=1)
```

#### display.show\_image(image, x, y) <a href="#displayshowimageimage-x-y" id="displayshowimageimage-x-y"></a>

Display an image on Codey's face panel at a specific location (x, y).

```
codey.display.show_image("000c18181c0c000000000c1c18180c00", 0, 0)
# Show a smiley face at the upper-left corner
```

#### codey.display.set\_pixel(x, y, status) / codey.display.toggle\_pixel(x, y) <a href="#codeydisplaysetpixelx-y-status--codeydisplaytogglepixelx-y" id="codeydisplaysetpixelx-y-status--codeydisplaytogglepixelx-y"></a>

* set\_pixel: set the status of the pixel at (x, y); set `True` to light up the pixel, or `False` to turn it off
* toggle\_pixel: toggle a pixel at (x, y): turn on if it is off, and off if it is on

```
codey.display.set_pixel(5, 5, True) # light up the pixel at (5, 5)
codey.display.set_pixel(5, 5, False) # turn off the pixel at (5, 5)
codey.display.toggle_pixel(5, 5) # toggle the pixel at (5, 5)
```

#### display.get\_pixel(x, y) <a href="#displaygetpixelx-y" id="displaygetpixelx-y"></a>

Check if the certain pixel of Codey is on or not. If on, return True; otherwise return False

```
print(codey.display.get_pixel(5, 5))  # print True if the pixel at (5, 5) is on
```

#### display.clear() <a href="#displayclear" id="displayclear"></a>

Clear all the contents on Codey's face panel.

```
codey.display.clear() # turn off the face panel
```

### Use the RGB LED on the Codey <a href="#use-the-rgb-led-on-the-codey" id="use-the-rgb-led-on-the-codey"></a>

#### led.show(r, g, b, time) <a href="#ledshowr-g-b-time" id="ledshowr-g-b-time"></a>

Set the color of Codey's LED.

If the duration is a non-zero number, the LED will turn off after specified seconds.

```
codey.led.show(255, 255, 0, 1) # set the color, turn off after 1 second
codey.led.show(255, 0, 0) # change the color to red
```

#### led\_off() <a href="#ledoff" id="ledoff"></a>

Turn off Codey's LED.

```
codey.led_off() # turn off the led light
```

#### led.set\_red(value) / led.set\_green(value) / led.set\_blue(value) <a href="#ledsetredvalue--ledsetgreenvalue--ledsetbluevalue" id="ledsetredvalue--ledsetgreenvalue--ledsetbluevalue"></a>

Set the RGB value of the LED independently. The range of each color value is 0-255.

```
codey.led.set_red(255)
codey.led.set_green(255)
codey.led.set_blue(255)
```

### Make a Sound <a href="#make-a-sound" id="make-a-sound"></a>

#### speaker.play\_melody(name) <a href="#speakerplaymelodyname" id="speakerplaymelodyname"></a>

Play the a sound file.

```
codey.speaker.play_melody("meow")
codey.speaker.play_melody("meow.wav") # .wav is optional
```

Sound file available：

* `hello.wav` : hello
* `hi.wav` :hi
* `bye.wav` : bye
* `yeah.wav` : yeah
* `wow.wav` : wow
* `laugh.wav` : laugh
* `hum.wav` : hum
* `sad.wav` : sad
* `sigh.wav` : sigh
* `annoyed.wav` : annoyed
* `angry.wav` : angry
* `surprised.wav` : scared
* `yummy.wav` : pettish
* `curious.wav` : curious
* `embarrassed.wav` : embarrassed
* `ready.wav` : ready
* `sprint.wav` : sprint
* `sleepy.wav` : snore
* `meow.wav` : meow
* `start.wav` : start
* `switch.wav` : switch
* `beeps.wav` : beeps
* `buzzing.wav` : buzz
* `exhaust.wav` : air-out
* `explosion.wav` : explosion
* `gotcha.wav` : gotcha
* `hurt.wav` : painful
* `jump.wav` : jump
* `laser.wav` : laser
* `level up.wav` : level-up
* `low energy.wav` : low-energy
* `metal clash.wav` : metal-clash
* `prompt tone.wav` : prompt-tone
* `right.wav` : right
* `wrong.wav` : wrong
* `ring.wav` : ringtone
* `score.wav` : score
* `shot.wav` : shot
* `step_1.wav` : step\_1
* `step_2.wav` : step\_2
* `wake.wav` : activate
* `warning.wav` : warning

#### speaker.play\_note(note\_number, beats) <a href="#speakerplaynotenotenumber-beats" id="speakerplaynotenotenumber-beats"></a>

Tell Codey to play a musical note for a duration.

The note number is the MIDI number. You may also use note names like "C3" or "D4". Incorrect note name will produce an error in the console.

```
codey.speaker.play_note(36, 1)
codey.speaker.play_note('c3', 0.25)
```

#### speaker.play\_tone(frequency, beats) <a href="#speakerplaytonefrequency-beats" id="speakerplaytonefrequency-beats"></a>

Play a certain frequency of sound for a duration of certain beats.

```
codey.speaker.play_tone(700, 1)
```

#### speaker.rest(beats) <a href="#speakerrestbeats" id="speakerrestbeats"></a>

Pause the sound for a certain number of beats.

```
codey.speaker.rest(0.25)
```

#### speaker.stop\_sounds() <a href="#speakerstopsounds" id="speakerstopsounds"></a>

Stop all sounds.

```
codey.speaker.stop_sounds()
```

#### speaker.volume <a href="#speakervolume" id="speakervolume"></a>

Set or read the volume of Codey's speaker.

```
codey.speaker.volume = (70) # Set the volume of Codey's speaker to 70%
print(codey.speaker.volume) # Get the current volume of Codey's speaker
```

### Use the Sensors of Codey <a href="#use-the-sensors-of-codey" id="use-the-sensors-of-codey"></a>

#### button\_a.is\_pressed()/button\_b.is\_pressed()/button\_c.is\_pressed() <a href="#buttonaispressedbuttonbispressedbuttoncispressed" id="buttonaispressedbuttonbispressedbuttoncispressed"></a>

If the specified button is pressed, return True; otherwise, return False.

```
print(codey.button_a.is_pressed()) # print True if the button A is pressed.
```

#### potentiometer.get\_value() <a href="#potentiometergetvalue" id="potentiometergetvalue"></a>

Get the position of the potentiometer knob on Codey's side. The value will be 0-100.

```
print(codey.potentiometer.get_value()) # Get the position of potentiometer
```

#### sound\_sensor.get\_loudness() <a href="#soundsensorgetloudness" id="soundsensorgetloudness"></a>

Get the loudness of the sound sensor. The range is 0-100.

```
print(codey.sound_sensor.get_loudness()) # output the loudness of the sound sensor
```

#### light\_sensor.get\_value() <a href="#lightsensorgetvalue" id="lightsensorgetvalue"></a>

Get the light intensity detected by the light sensor. The range is 0-100.

```
print(codey.light_sensor.get_value()) # output the light sensor's value
```

#### motion\_sensor.is\_shaked() <a href="#motionsensorisshaked" id="motionsensorisshaked"></a>

Tell whether the Codey is being shaken. The result is True or False.

```
print(codey.motion_sensor.is_shaked()) # if Codey is being shaken, return True
```

#### motion\_sensor.is\_tilted\_left()/motion\_sensor.is\_tilted\_right()/ motion\_sensor.is\_ears\_up()/motion\_sensor.is\_ears\_down() <a href="#motionsensoristiltedleftmotionsensoristiltedrightmotionsensorisearsupmotionsensorisearsdown" id="motionsensoristiltedleftmotionsensoristiltedrightmotionsensorisearsupmotionsensorisearsdown"></a>

Tell whether Codey is tilted to the right/left, or placed ears-up/ears-down. The result is True or False.

```
print(codey.motion_sensor.is_tilted_left()) # If Codey is left-tilted, return True
print(codey.motion_sensor.is_ears_up()) # If Codey is placed ears-up, return True
```

#### Gyroscope <a href="#gyroscope" id="gyroscope"></a>

Get the roll, pitch or yaw value of Codey's gyroscope

* motion\_sensor.get\_roll()
* motion\_sensor.get\_pitch()
* motion\_sensor.get\_yaw()

Get the gyroscope's rotation value (in degrees) around a certain axis.

* motion\_sensor.get\_rotation(axis): x, y, or z axis
* motion\_sensor.reset\_rotation(axis="all"): reset the rotation angles of the gyro

You can use motion\_sensor.get\_shake\_strength() to get the intensity of the shaking.

```
print("The yaw and pitch is:", codey.motion_sensor.get_yaw(), codey.motion_sensor.get_pitch()) # output the yaw and pitch value of the gyro
print("The rotation value is:", codey.motion_sensor.get_rotation(x), codey.motion_sensor.get_rotation(y), codey.motion_sensor.get_rotation(z))
codey.motion_sensor.reset_rotation() # reset the rotation value.
print("Shake strength:", codey.motion_sensor.get_shake_strength())
```

#### get\_timer() <a href="#gettimer" id="gettimer"></a>

Get the timer value in seconds (since startup or last reset)

```
print(codey.get_timer()) # print the timer value since startup or last reset
```

#### reset\_timer() <a href="#resettimer" id="resettimer"></a>

Reset the timer.

```
codey.reset_timer() 
print(codey.get_timer()) # prints 0
```

### Codey's Events and Flow Control <a href="#codeys-events-and-flow-control" id="codeys-events-and-flow-control"></a>

Codey supports events (like when the button is pressed), and it also supports multi-threading.

If you wish to use event, declare a function and register it to the event. A program can only register no more than 6 event functions.

Example:

```
def on_button_a_pressed(): # define a function
    print("Button A is pressed!")

codey.on_button_a_pressed() # register it to "when button A is pressed" event
```

#### on\_button\_a\_pressed()/on\_button\_b\_pressed()/on\_button\_c\_pressed() <a href="#onbuttonapressedonbuttonbpressedonbuttoncpressed" id="onbuttonapressedonbuttonbpressedonbuttoncpressed"></a>

When the button is pressed, run the function.

```
def on_button_b_pressed():
    print("The B button is pressed")

codey.on_button_b_pressed()
```

#### on\_shaked() <a href="#onshaked" id="onshaked"></a>

When Codey is shaken, call the function.

```
def on_shaked():
    print("I'm shaken!")

codey.on_shaked()
```

#### on\_tilted\_left() <a href="#ontiltedleft" id="ontiltedleft"></a>

Call the function when Codey tilts to the left.

```
def on_tilted_left():
    print("I'm tilted-left!")

codey.on_tilted_left()
```

#### on\_greater\_than(volume, 'sound\_sensor') <a href="#ongreaterthanvolume-soundsensor" id="ongreaterthanvolume-soundsensor"></a>

When the loudness is over a certain value, call the function.

```
def on_greater_than():
    print("The volume is over 50! Too loud!")

codey.on_greater_than(50, 'sound_sensor')
```

#### on\_less\_than(lightness, 'light\_sensor') <a href="#onlessthanlightness-lightsensor" id="onlessthanlightness-lightsensor"></a>

When the lightness is under a certain value, call the function.

```
def on_less_than():
    print("The light is under 30! too dark!")

codey.on_less_than(30, 'light_sensor')
```

#### on\_received(message\_name) <a href="#onreceivedmessagename" id="onreceivedmessagename"></a>

When a Scratch broadcast is received, trigger the function.

```
def on_received():
    print("Game start!")

codey.on_received('game_start')
```

#### broadcast(message\_name) <a href="#broadcastmessagename" id="broadcastmessagename"></a>

Broadcast a certain message to the Scratch system.

```
codey.broadcast('game_start')
```

#### stop\_all\_scripts()/stop\_this\_script()/stop\_other\_scripts() <a href="#stopallscriptsstopthisscriptstopotherscripts" id="stopallscriptsstopthisscriptstopotherscripts"></a>

Stop all processes, this process, or other processes.

```
codey.stop_all_scripts() # stop all processes on Codey
```

### Let the Rocky move <a href="#let-the-rocky-move" id="let-the-rocky-move"></a>

#### forward(speed, time) <a href="#forwardspeed-time" id="forwardspeed-time"></a>

Tell the Rocky to move forward for a certain period of time. If the time is not set, it will keep moving. The speed range is 0-100.

```
rocky.forward(50, 1) # run forward for 1 seconds at the speed of 50
rocky.forward(100) # run forward forever at the speed of 100
```

#### backward(speed, time) <a href="#backwardspeed-time" id="backwardspeed-time"></a>

Tell the Rocky to move backward for a certain period of time. If the time is not set, it will keep moving. The speed range is 0-100.

```
rocky.backward(50)
rocky.backward(100) # run backward at the max speed of 100
```

#### turn\_right(speed, time) <a href="#turnrightspeed-time" id="turnrightspeed-time"></a>

Tell the Rocky to turn right for a certain period of time. If the time is not set, it will keep turning. The speed range is 0-100.

```
rocky.turn_right(50, 1) # turn right at speed 50 for 1 second
rocky.turn_right(100) # turn right at the max speed of 100
```

#### turn\_left(speed, time) <a href="#turnleftspeed-time" id="turnleftspeed-time"></a>

Tell the Rocky to turn left for a certain period of time. If the time is not set, it will keep turning. The speed range is 0-100.

```
rocky.turn_left(50, 1) # turn left at speed 50 for 1 second
rocky.turn_left(100) # turn left at the max speed of 100
```

#### turn\_right\_by\_degree(angle) <a href="#turnrightbydegreeangle" id="turnrightbydegreeangle"></a>

Make Rocky turn right at a certain angle until done.

```
rocky.turn_right_by_degree(90) # turn right for 90 degrees until done
```

#### turn\_left\_by\_degree(angle) <a href="#turnleftbydegreeangle" id="turnleftbydegreeangle"></a>

Make Rocky turn left at a certain angle until done.

```
rocky.turn_left_by_degree(90) # turn left for 90 degrees until done
```

#### drive(left\_speed, right\_speed) <a href="#driveleftspeed-rightspeed" id="driveleftspeed-rightspeed"></a>

Set the speed of Codey's two wheels at the same time.

```
rocky.drive(50, 50) # set the speed of both wheels to 50
```

#### stop() <a href="#stop" id="stop"></a>

Stop the movement of Codey

```
rocky.stop() # tell Codey to stop moving
```

### Use Rocky's Sensors and Light <a href="#use-rockys-sensors-and-light" id="use-rockys-sensors-and-light"></a>

#### color\_ir\_sensor.set\_led\_color(color) <a href="#colorirsensorsetledcolorcolor" id="colorirsensorsetledcolorcolor"></a>

Set the color of Rocky's LED. Color can be one of: "red", "green", "blue", "yellow", "purple", "cyan", "white", "black". Set the color to "black" will turn off Rocky's LED.

```
rocky.color_ir_sensor.set_led("red")
rocky.color_ir_sensor.set_led("black")
```

#### color\_ir\_sensor.is\_obstacle\_ahead() <a href="#colorirsensorisobstacleahead" id="colorirsensorisobstacleahead"></a>

Tell if there is obstacle ahead. Return True or False. (Rocky's sensor array must face forward)

```
print(rocky.color_ir_sensor.is_obstacle_ahead())
```

#### color\_ir\_sensor <a href="#colorirsensor" id="colorirsensor"></a>

Get the value of the base sensor array.

* color\_ir\_sensor.get\_light\_strength(): get the ambient light intensity of the environment; return 0-100
* color\_ir\_sensor.get\_reflected\_light(): get the reflection light value of the surface; return 0-100
* color\_ir\_sensor.get\_reflected\_infrared(): get the IR reflection value of the surface; return 0-100
* color\_ir\_sensor.get\_greyness(): get the greyness of the surface by light sensor; return 0-100
* color\_ir\_sensor.get\_red(): get the red value of the surface; return 0-255
* color\_ir\_sensor.get\_green(): get the green value of the surface; return 0-255
* color\_ir\_sensor.get\_blue(): get the blue value of the surface; return 0-255
* color\_ir\_sensor.is\_color(color\_str): Tell whether the color sensor senses the specific color; return True or False. The color\_name could be one of "red", "green", "blue", "yellow", "purple", "cyan", "white", "black".

```
print("Lightness and Reflection: ", color_ir_sensor.get_light_strength(), color_ir_sensor.get_reflected_light())
print("IR light value: ", color_ir_sensor.get_reflected_infrared())
print("Greyness: ", color_ir_sensor.get_greyness())
print("RGB value: ", color_ir_sensor.get_red(), color_ir_sensor.get_green(), color_ir_sensor.get_blue())
print("On a red surface? ", color_ir_sensor.is_color("red"))
```

### Communicate with Infrared Signals <a href="#communicate-with-infrared-signals" id="communicate-with-infrared-signals"></a>

Codey can send and receive infrared signals.

#### ir\_send(message) <a href="#irsendmessage" id="irsendmessage"></a>

send a piece of string message with Codey's Infrared Emitter. Another Codey can receive this message with its Infrared Receiver.

```
codey.ir_send("A")
```

#### ir\_receive() <a href="#irreceive" id="irreceive"></a>

When a piece of message sent with infrared signals is received, return a string value.

```
codey.show(codey.ir_receive())
```


# Examples

![](http://docs.makeblock.com/codeyrocky/en/examples/codey-rocky-product-image.jpg)

## Codey Rocky Projects <a href="#codey-rocky-projects" id="codey-rocky-projects"></a>

### 1. Change Codey's Emotions with Buttons <a href="#id-1.-change-codeys-emotions-with-buttons" id="id-1.-change-codeys-emotions-with-buttons"></a>

1\) Drag a when button () is pressed block from the Events category to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-1-1.png)

2\) Drag a play sound () block from the Speaker category.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-1-2.png)

3\) Drag a show image () block from the Looks category.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-1-3.png)

4\) Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/examples/upload.png)

5\) Press Button A to see how Codey looks!

### 2. Use Codey to Create LED Animations <a href="#id-2.-use-codey-to-create-led-animations" id="id-2.-use-codey-to-create-led-animations"></a>

1\) Drag a when Codey is shaking block from the Events category to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-1.png)

2\) Drag a show image () for () secs block from the Looks category, and draw the following image. Reset the time to 0.3.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-3.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-2.png)

3\) Add a show image () for () secs block from the Looks category, and draw the following image. Reset the time to 0.3.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-4.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-5.png)

4\) Add another show image () for () secs block from the Looks category, and draw the following image. Reset the time to 0.3.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-6.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-7.png)

5\) Add a Control block repeat () to wrap up the three show image () for () secs blocks. Reset the number to 6.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-8.png)

6\) Drag a play sound () block from the Speaker category to add some sound effects. Set the sound as "jump".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-10.png)

7\) Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/examples/upload.png)

8\) Try shaking Codey to see the rabbit jumping!

![](http://docs.makeblock.com/codeyrocky/en/examples/project-2-9.png)

### 3. Turn Codey into a Musician <a href="#id-3.-turn-codey-into-a-musician" id="id-3.-turn-codey-into-a-musician"></a>

1\) Drag an Event block when button () is pressed to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-3-1.png)

2\) Add four play note () for () beats blocks from the Speaker category. Set the corresponding note as C4, E4, F4, and A5.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-3-2.png)

**Volume Control Script**

3\) Drag a when Codey starts up block from the Events category.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-3-3.png)

4\) Add a Speaker block set volume to ()% and a Sensing block gear potentiometer value, so that we can adjust the gear to change volume.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-3-4.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-3-5.png)

5\) Add a Control block forever, so we are able to adjust the sound volume all the time.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-3-6.png)

6\) Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/examples/upload.png)

7\) Press Button A to see how Codey plays music!

### 4. Make Codey Blink Eyes <a href="#id-4.-make-codey-blink-eyes" id="id-4.-make-codey-blink-eyes"></a>

1\) Drag an Event block when Codey starts up to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-1.png)

2\) Add a Looks block show image () for () secs. Add an Operators block pick random () to () to make Codey blink eyes randomly. Set the number as 2 and 5.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-4.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-2.png)

3\) Add another Looks block show image () for () secs. Draw the following image, and set the time as 0.2.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-5.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-3.png)

4\) Drag a Control block forever to wrap up the two show image () for () secs blocks, so Codey will keep blinking eyes.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-6.png)

5\) Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/examples/upload.png)

6\) Check Codey to see it blink eyes!

### 5. Make Codey Rocky Identify Colors <a href="#id-5-make-codey-rocky-identify-colors" id="id-5-make-codey-rocky-identify-colors"></a>

1\) Drag an Event block when Codey starts up to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-1.png)

2\) Add a Control block if () then (), and a Sensing block the color detected is ()?.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-1.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-2.png)

3\) Add a Lighting block RGB LED lights up () to make the LED lights up red when the color detected is red. Drag a play sound () block and change the sound to "score" to add some sound effects.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-3.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-4.png)

4\) We want Codey Rocky to detect color blue. Right click to duplicate the blocks. Change the color to blue.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-5.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-6.png)

5\) Add a Control block forever to create a loop.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-7.png)

6\) Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/examples/upload.png)

7\) Have a try!

**Note: keep the IR sensor face-down.**

![](http://docs.makeblock.com/codeyrocky/en/examples/project-5-8.png)

### 6. Make Codey Rocky Avoid Obstacles <a href="#id-6-make-codey-rocky-avoid-obstacles" id="id-6-make-codey-rocky-avoid-obstacles"></a>

1\) Drag an Event block when Codey starts up to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-1.png)

2\) Add a Looks block show image ().

![](http://docs.makeblock.com/codeyrocky/en/examples/project-6-1.png)

3\) Drag an Action block () at power ()%, a Control block wait until (), and a Sensing block obstacles ahead?. Keep all default values.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-6-2.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-6-3.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-6-4.png)

4\) When Codey Rocky detects obstacles ahead, we want it to avoid them by moving backward and turning right, so we need to add three Action blocks: stop moving, move backward at power ()% for () secs, and turn right at power ()% for () secs.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-6-5.png)

5\) Add a Control block forever to make Codey Rocky keep avoiding obstacles.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-6-6.png)

6\) Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/examples/upload.png)

7\) Check how Codey Rocky manages to stay away from obstacles.

**Note: adjust the IR sensor to face-forward.**

### 7. Use Codey to Make Sprites Play Instruments <a href="#id-7-use-codey-to-make-sprites-play-instruments" id="id-7-use-codey-to-make-sprites-play-instruments"></a>

This project combines stage programming with Codey.

Before we start, please toggle to disable **Upload Mode**.

![](http://docs.makeblock.com/codeyrocky/en/examples/disable-upload-mode.png)

1\) Drag an Events block when button () is pressed.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-1.png)

2\) When Button A is pressed, we want the sprite to receive the message. We need to add an Events block broadcast (). Click to create a new message "A".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-2.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-3.png)

3\) Add a new sprite. Under "Sprites", click "+". From the pop-up Sprite Library window, choose "Drum" and click "OK".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-4.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-5.png)

4\) Make sure "Drum" is selected. Drag an Event block when I receive (). Add a Sound block start sound () and keep the default "high tom".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-6.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-8.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-7.png)

5\) Apply some animation effect to "Drum". Add a Looks block switch costume to (), and set the costume as "drum-b". Add a Control block wait () seconds, and change the value to 0.2. Add another Looks block switch costume to (), and set the costume as "drum-a".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-9.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-10.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-7-11.png)

6\) Save your project. Press Button A to see what happens!

### 8. Design a Controller for Codey Rocky <a href="#id-8-design-a-controller-for-codey-rocky" id="id-8-design-a-controller-for-codey-rocky"></a>

This project combines stage programming with Codey.

Before we start, please toggle to disable **Upload Mode**.

![](http://docs.makeblock.com/codeyrocky/en/examples/disable-upload-mode.png)

**Program Sprites**

1\) Under "Sprites", click "×" to delete the default sprite "Panda", and click "+" to add a new sprite. From the pop-up Sprites Library, choose "Arrow1" and click "OK".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-1.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-2.png)

2\) Select "Arrow1". From the Events category, drag a when this sprite clicked block and a broadcast () block. Create a new message "Right".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-3.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-4.png)

3\) Right click "Arrow1" to duplicate. The new sprite will automatically be named "Arrow2". Click "Costumes" to change the costume. Select costume 2. When done, click "×" finish costume setting. In the Scripts area, click to create a new message "Left".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-5.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-6.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-7.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-8.png)

4\) Repeat step 3 to add another sprite "Arrow3" to broadcast message "Down".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-10.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-11.png)

5\) Repeat step 3 to add another sprite "Arrow4" to broadcast message "Up".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-12.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-13.png)

6\) Click to reposition the four arrows as the following image.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-14.png)

**Program Codey**

7\) Choose "Codey" under "Devices". Drag an Events block when I receive () and set the message as "Left". Add an Action block turn left at power ()% for () secs, and keep the default value.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-15.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-16.png)

8\) Drag an Events block when I receive () and set the message to "Right". Add an Action block turn right at power ()% for () secs, and keep the default value.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-17.png)

9\) Drag an Events block when I receive () and set the message to "Up". Add an Action block move forward at power ()% for () secs, and keep the default value.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-18.png)

10\) Drag an Events block when I receive () and set the message to "Down". Add an Action block move backward at power ()% for () secs, and keep the default value.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-8-19.png)

11\) Save your project. Click the arrows on the stage and see how Codey Rocky moves!

### 9. Make a Number Bomb Game <a href="#id-9-make-a-number-bomb-game" id="id-9-make-a-number-bomb-game"></a>

1\) Drag an Event block when Codey starts up to the Scripts area.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-4-1.png)

2\) Choose Variables category and click "Make a Variable". Name the variable "Number" and click "OK".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-1.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-2.png)

3\) Add a Variables block set Number to (), and keep default value.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-3.png)

4\) Add a Looks block show () until scroll done and a Variables block Number.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-4.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-5.png)

5\) Add an Events block when button () is pressed, and keep the default value. Add a Variables block change Number by () and also keep the default value.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-6.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-7.png)

6\) Add a Speaker block play sound () to apply some sound effects to the game.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-8.png)

7\) Click the following two blocks to duplicate and add them to the play sound () block.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-9.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-10.png)

8\) Add a Control block if () then () to set how the game ends.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-11.png)

9\) From the Operators category, drag a () > () block and a pick random () to () block. Set the number to 10 and 20. Then add a Variables block Number.

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-12.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-13.png)

10\) Add a Looks block show image () and draw the following image. Add a Speaker block play sound (), and set the sound to "explosion".

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-14.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-15.png)

![](http://docs.makeblock.com/codeyrocky/en/examples/project-9-16.png)

11\) Click "Upload" to upload the program to Codey.

![](http://docs.makeblock.com/codeyrocky/en/examples/upload.png)

12\) Have a try!

## More Resources <a href="#more-resources" id="more-resources"></a>

### Example Programs <a href="#example-programs" id="example-programs"></a>

You can find a variety of built-in example programs in mBlock 5. Go to the Project Management page to access those programs.

![](http://docs.makeblock.com/codeyrocky/en/examples/examples-1.png)


# Block Reference


# Looks

**LED Dot-Matrix Display**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/codey.jpg)

The face panel of Codey is a 128-LED dot matrix, which can display English characters, numbers, and images.

**Coordinate of the Face Panel**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/codey-api.png)

As shown in the figure above, the face panel has the upper-left corner as the origin of the coordinate system, and the direction of x and y is indicated by the arrow. Parameters:

* x: -15 \~ 15
* y: -7 \~ 7

### 1. show image () for () secs <a href="#id-1-show-image--for--secs" id="id-1-show-image--for--secs"></a>

Display specified image on Codey's screen for a specified period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/1-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/1-2.png)

Press Button A, Codey's screen will display these three images consecutively, for 1 second, 0.5 second, and 1 second respectively. After displaying all images, Codey's screen will turn off.

### 2. show image () <a href="#id-2-show-image" id="id-2-show-image"></a>

Display specified image on Codey's screen.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/2-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/2-2.png)

When Codey starts up, the image will be displayed.

### 3. show image () at the x:() y:() <a href="#id-3-show-image--at-the-x-y" id="id-3-show-image--at-the-x-y"></a>

Display specified image at specified point of the face panel.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/3-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/3-2.png)

Press Button A, the image will be displayed at the origin.

### 4. turn off screen <a href="#id-4-turn-off-screen" id="id-4-turn-off-screen"></a>

Turn off Codey's screen.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/4-2.png)

Press Button A, the image will be displayed at the origin. One second later, the screen will turn off.

### 5. show () <a href="#id-5-show" id="id-5-show"></a>

Display English characters, numbers and symbols on Codey's screen.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/5-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/5-2.png)

Press Button A, Codey's screen will display "12:00".

### 6. show () until scroll done <a href="#id-6-show--until-scroll-done" id="id-6-show--until-scroll-done"></a>

Display English characters, numbers and symbols on Codey's screen, and scroll all contents.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/6-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/6-2.png)

Press Button A, Codey's screen will scroll "morning".

### 7. show () at x:() y:() <a href="#id-7-show--at-x-y" id="id-7-show--at-x-y"></a>

Display English characters, numbers and symbols at specified point of the face panel.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/7-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/7-2.png)

Press Button A, Codey's screen will display "hi" at the origin.

### 8. light up x:() y:() <a href="#id-8-light-up-x-y" id="id-8-light-up-x-y"></a>

Light up specified dot (x, y) of Codey's face panel.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/8-1.png)

**Parameters:**

* x: 0 \~ 15
* y: 0 \~ 7

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/8-2.png)

Press Button A, the dot at (3, 3) will light up.

### 9. light off x:() y:() <a href="#id-9-light-off-x-y" id="id-9-light-off-x-y"></a>

Light off specified dot (x, y) of Codey's face panel.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/9-1.png)

**Parameters:**

* x: 0 \~ 15
* y: 0 \~ 7

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/9-2.png)

Press Button A, the dot at (2, 2) will light up, and light off after one second.

### 10. switch between light-up and light-off x:() y:() <a href="#id-10-switch-between-light-up-and-light-off-x-y" id="id-10-switch-between-light-up-and-light-off-x-y"></a>

Change the status of specified dot (x, y) of Codey's face panel: light off light-up dot; light up light-off dot.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/10-1.png)

**Parameters:**

* x: 0 \~ 15
* y: 0 \~ 7

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/10-2.png)

Press Button A, the dot at (6, 6) will light up. Press Button A again, the dot will light off.

### 11. x:() y:() is it lighted up? <a href="#id-11-x-y-is-it-lighted-up" id="id-11-x-y-is-it-lighted-up"></a>

If specified dot (x, y) of Codey's face panel is lighted up, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/11-1.png)

**Parameters:**

* x: 0 \~ 15
* y: 0 \~ 7

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/11-2.png)

Press Button A, the dot (3, 3) and (5, 5) of Codey's face panel will light up. After 3 seconds, the dot (3, 3) will light off.


# Lighting

**RGB LED**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/codey-led.png)

The RGB LED is situated at the bottom Codey's face panel. Codey's RGB LED consists of 3 LEDs, namely red LED, green LED, and blue LED. You can get different colors by controling brightness of each LED.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/rocky-led.png)

At the center of Rocky's Color IR Sensor is the RGB LED, which consists of 3 LEDs, red LED, green LED, and blue LED. By lighting on or off each LED, you can get seven different colors.

### 1. RGB LED lights up () for () secs <a href="#id-1-rgb-led-lights-up--for--secs" id="id-1-rgb-led-lights-up--for--secs"></a>

Light up Codey's RGB LED a specified color for a specified period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-1-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-1-2.png)

Press Button A, Codey's LED will light up red, and light off after 1 second.

### 2. RGB LED lights up () <a href="#id-2-rgb-led-lights-up" id="id-2-rgb-led-lights-up"></a>

Light up Codey's RGB LED a specified color.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-2-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-2-2.png)

Press Button A, Codey's LED will light up red.

### 3. set the indicator () with color value () <a href="#id-3-set-the-indicator-with-color-value" id="id-3-set-the-indicator-with-color-value"></a>

Set the specified LED indicator with specified color value. There are three LED indicators: red, green, and blue.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-3-1.png)

Change the color value of one LED indicator will not affect the color value of the other two LED indicators.

**Parameters:**

* Red: 0 \~ 255
* Green: 0 \~ 255
* Blue: 0 \~ 255

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-3-2.png)

Press Button A, Codey's RGB LED will light up yellow.

### 4. RGB LED lights off <a href="#id-4-rgb-led-lights-off" id="id-4-rgb-led-lights-off"></a>

Turn off Codey's RGB LED.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-4-2.png)

Press Button A, Codey's RGB LED will light up yellow, and light off after 3 seconds.

### 5. set Rocky's light with color () <a href="#id-5-set-rockys-light-with-color" id="id-5-set-rockys-light-with-color"></a>

Set Rocky's RGB LED a specified color. There are seven colors: red, green, blue, yellow, cyan, purple, and white.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-5-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-5-2.png)

Press Button A, Rocky's RGB LED will light up blue.

### 6. Rocky lights off <a href="#id-6-rocky-lights-off" id="id-6-rocky-lights-off"></a>

Turn off Rocky's RGB LED.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-6-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/lighting-6-2.png)

Press Button A, Rocky's RGB LED will light up blue, and light off after 2 seconds.


# Speaker

Codey's on-board speaker enables Codey to play sound. You can write music, add sound effects, and do other fun stuff with Codey's speaker.

### 1. play sound () <a href="#id-1-play-sound" id="id-1-play-sound"></a>

Make Codey's speaker play a specified sound.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-1-1.png)

| Sound Effect |          |            |             |             |          |         |
| ------------ | -------- | ---------- | ----------- | ----------- | -------- | ------- |
| hello        | hi       | bye        | yeah        | wow         | laugh    | hum     |
| sad          | sigh     | annoyed    | angry       | scared      | pettish  | curious |
| embarrassed  | ready    | sprint     | snore       | meow        | start    | switch  |
| beeps        | buzz     | air-out    | explosion   | gotcha      | painful  | jump    |
| laser        | level-up | low-energy | metal-clash | prompt-tone | right    | wrong   |
| ringtone     | score    | shot       | step\_1     | step\_2     | activate | warning |

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-1-2.png)

Press Button A. Codey will play the sound "hello".

### 2. play sound () until done <a href="#id-2-play-sound--until-done" id="id-2-play-sound--until-done"></a>

Make Codey's speaker play a specified sound, and wait until it's done.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-2-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-2-2.png)

Press Button A. Codey will play the sound "hello".

### 3. stop all sounds <a href="#id-3-stop-all-sounds" id="id-3-stop-all-sounds"></a>

Make Codey's speaker stop playing all sounds.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-3-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-3-2.png)

Press Button A. Codey will play the sound "hello" for 10 times, and then stop all sounds.

### 4. play note () for () beats <a href="#id-4-play-note--for--beats" id="id-4-play-note--for--beats"></a>

Make Codey's speaker play a specified note for specified number of beats.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-4-2.png)

Press Button A. Codey will play the note "C4" for 0.25 beat.

### 5. rest for () beats <a href="#id-5-rest-for--beats" id="id-5-rest-for--beats"></a>

Make Codey's speaker stop playing sounds and wait for specified number of beats.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-5-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-5-2.png)

Press Button A. Codey will play the note "C4" for 0.25 beat 5 times, and after waiting for 0.25 beat, play the note "G4" for 0.25 beat 5 times.

### 6. play sound at frequency of () HZ for () secs <a href="#id-6-play-sound-at-frequency-of--hz-for--secs" id="id-6-play-sound-at-frequency-of--hz-for--secs"></a>

Make Codey's speaker play sound at specified frequency for a specified period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-6-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-6-2.png)

Press Button A. Cody will play a 700Hz sound for one second.

### 7. change volume by () <a href="#id-7-change-volume-by" id="id-7-change-volume-by"></a>

Change the sound volmue of Codey's speaker. Input positive number to increase sound volume, or negative number to decrease sound volume.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-7-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-7-2.png)

Press Button A to decrease sound volume of Codey's speaker by 10.

### 8. set volume to ()% <a href="#id-8-set-volume-to" id="id-8-set-volume-to"></a>

Set the sound volume of Codey's speaker to specified percentage (0 \~ 100).

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-8-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-8-2.png)

When Codey starts up, the sound volume of the speaker will be set to 60%.

### 9. volume <a href="#id-9-volume" id="id-9-volume"></a>

Report the sound volume of Codey's speaker.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-9-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/speaker-9-2.png)

Press Button A. The current sound volume of Codey's speaker will be displayed on the screen.


# Action

![](http://docs.makeblock.com/codeyrocky/en/block-reference/rocky.png)

When Codey and Rocky are combined together, Codey Rocky can move. You can make Codey Rocky move forward or backward, turn left or right, or other more complicated movements. With the help of gyroscope, you can make Codey Rocky turn left/right a specified number of degrees, or move straight forward.

### 1. move forward at power ()% for () secs <a href="#id-1-move-forward-at-power--for--secs" id="id-1-move-forward-at-power--for--secs"></a>

Make Codey Rocky move forward at specified power for a specified period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-1-1.png)

**Parameters:**

* Power: -100 \~ 100 (negative number means opposite direction)
* Time: 0 \~ ∞/second

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-1-2.png)

When Codey starts up, Codey Rocky will move forward at 50% power for one second.

### 2. move backward at power ()% for () secs <a href="#id-2-move-backward-at-power--for--secs" id="id-2-move-backward-at-power--for--secs"></a>

Make Codey Rocky move backward at specified power for a specified period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-2-1.png)

**Parameters:**

* Power: -100 \~ 100 (negative number means opposite direction)
* Time: 0 \~ ∞/second

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-2-2.png)

When Codey starts up, Codey Rocky will move backward at 50% power for one second.

### 3. turn left at power ()% for () secs <a href="#id-3-turn-left-at-power--for--secs" id="id-3-turn-left-at-power--for--secs"></a>

Make Codey Rocky move turn left at specified power for a specified period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-3-1.png)

**Parameters:**

* Power: -100 \~ 100 (negative number means opposite direction)
* Time: 0 \~ ∞/second

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-3-2.png)

When Codey starts up, Codey Rocky will turn left at 50% power for one second.

### 4. turn right at power ()% for () secs <a href="#id-4-turn-right-at-power--for--secs" id="id-4-turn-right-at-power--for--secs"></a>

Make Codey Rocky move turn right at specified power for a specified period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-4-1.png)

**Parameters:**

* Power: -100 \~ 100 (negative number means opposite direction)
* Time: 0 \~ ∞/second

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-4-2.png)

When Codey starts up, Codey Rocky will turn right at 50% power for one second.

### 5. keep straight forward at power ()% for () secs <a href="#id-5-keep-straight-forward-at-power--for--secs" id="id-5-keep-straight-forward-at-power--for--secs"></a>

Use Rocky's gyroscope to make Codey Rocky move forward at the same direction at specified power for a specfied period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-5-1.png)

**Parameters:**

* Power: -100 \~ 100 (negative number means opposite direction)
* Time: 0 \~ ∞/second

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-5-2.png)

When Codey starts up, Codey Rocky will move straight forward at 50% power for one second.

### 6. keep straight backward at power ()% for () secs <a href="#id-6-keep-straight-backward-at-power--for--secs" id="id-6-keep-straight-backward-at-power--for--secs"></a>

Use Rocky's gyroscope to make Codey Rocky move backward at the same direction at specified power for a specfied period of time.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-6-1.png)

**Parameters:**

* Power: -100 \~ 100 (negative number means opposite direction)
* Time: 0 \~ ∞/second

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-6-2.png)

When Codey starts up, Codey Rocky will move straight backward at 50% power for one second.

### 7. turn left () degrees until done <a href="#id-7-turn-left--degrees-until-done" id="id-7-turn-left--degrees-until-done"></a>

Make Codey Rocky turn left specified degrees and wait until it's done.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-7-1.png)

**Parameter:**

* Angle: -∞ \~ ∞/degree (negative number means opposite direction)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-7-2.png)

When Codey starts up, Codey Rocky will turn left 15 degrees and then move forward at 50% power for one second.

### 8. turn right () degrees until done <a href="#id-8-turn-right--degrees-until-done" id="id-8-turn-right--degrees-until-done"></a>

Make Codey Rocky turn right specified degrees and wait until it's done.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-8-1.png)

**Parameter:**

* Angle: -∞ \~ ∞/degree (negative number means opposite direction)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-8-2.png)

When Codey starts up, Codey Rocky will turn right 15 degrees and then move forward at 50% power for one second.

### 9. () at power ()% <a href="#id-9-at-power" id="id-9-at-power"></a>

Make Codey Rocky move forward/backward, or turn left/right at specified power.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-9-1.png)

**Parameter:**

* Power: -100 \~ 100 (negative number means opposite direction)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-9-2.png)

When Codey starts up, Codey Rocky will keep moving forward at 50% power.

### 10. left wheel turns at power ()% and right wheel at power ()% <a href="#id-10-left-wheel-turns-at-power-and-right-wheel-at-power" id="id-10-left-wheel-turns-at-power-and-right-wheel-at-power"></a>

Make the left wheel and right wheel of Codey Rocky move at specified power respectively.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-10-1.png)

**Parameter:**

* Power: -100 \~ 100 (negative number means opposite direction)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-10-2.png)

When Codey starts up, both the left wheel and the right wheel will move at 50% power for one second.

### 11. stop moving <a href="#id-11-stop-moving" id="id-11-stop-moving"></a>

Make Codey Rocky stop moving.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-11-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/action-11-2.png)

When Codey starts up, Codey Rocky will move forward at 50% power for one second, and then stop moving.


# Sensing

**odey**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/codey-1.png)

**Rocky – Color Infrared Sensor**

![](http://docs.makeblock.com/codeyrocky/en/python-api/rocky-api.png)

### 1. button () is pressed? <a href="#id-1-button--is-pressed" id="id-1-button--is-pressed"></a>

If the specified button of Codey is pressed, the report condition is met. There are three buttons: Button A, Button B, and Button C.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-1-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-1-2.png)

When Codey starts up, if Button A is pressed, Codey's screen will display "Yes". If Button A is not pressed, Codey's screen will display "No".

### 2. when Codey connected to Rocky <a href="#id-2-when-codey-connected-to-rocky" id="id-2-when-codey-connected-to-rocky"></a>

If Codey is connected to Rocky, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-2-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-2-2.png)

When Codey starts up, if Codey is connected to Rocky, Codey's screen will display "Yes". If not, Codey's screen will display "No".

### 3. gear potentiometer value <a href="#id-3-gear-potentiometer-value" id="id-3-gear-potentiometer-value"></a>

Report the position of gear potentiometer. The range of the value is 0 \~ 100, rounded to nearest integer.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-3-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-3-2.png)

When Codey starts up, the gear potentiometer value will be displayed on Codey's screen.

### 4. loudness <a href="#id-4-loudness" id="id-4-loudness"></a>

Report the loudness detected by Codey's sound sensor. The range of the value is 0 \~ 100, rounded to nearest tenth.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-4-2.png)

When Codey starts up, the loudness value will be displayed on Codey's screen.

### 5. ambient light intensity <a href="#id-5-ambient-light-intensity" id="id-5-ambient-light-intensity"></a>

Report the ambient light intensity detected by Codey's light sensor. The range of the value is 0 \~ 100, rounded to nearest tenth.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-5-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-5-2.png)

When Codey starts up, the ambient light intensity value will be displayed on Codey's screen.

### 6. battery level <a href="#id-6-battery-level" id="id-6-battery-level"></a>

Report Codey's battery level (0 \~ 100, rounded to nearest ten).

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-6-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-6-2.png)

When Codey starts up, the battery level will be displayed on Codey's screen.

### 7. shaken? <a href="#id-7-shaken" id="id-7-shaken"></a>

If Codey is being shaken, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-7-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-7-2.png)

When Codey starts up, if being shaken, Codey's screen will display "Yes". If not, Codey's screen will display "No".

### 8. shaking strength <a href="#id-8-shaking-strength" id="id-8-shaking-strength"></a>

Report the strength by which Codey is being shaken. The range of the shaking strength is 0 \~ 100, rounded to the nearest integer.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-8-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-8-2.png)

When Codey is being shaken, Codey's screen will display the shaking strength.

### 9. Codey () tilted? <a href="#id-9-codey--tilted" id="id-9-codey--tilted"></a>

If Codey is tilted towards specified direction, the report condition is met. There are four directions: "tilted to the left", "tilted to the right", "ears up", and "ears down". The threshold value is 15 degrees.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-9-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-9-2.png)

When Codey starts up, if tilted to the left, Codey's screen will display "Yes". If not, Codey's screen will display "No".

### 10. Codey positioned as ()? <a href="#id-10-codey-positioned-as" id="id-10-codey-positioned-as"></a>

If Codey is positioned as the specified position, the report condition is met. There are three positions: "face up", "face down", and "stand on desk".

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-10-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-10-2.png)

When Codey starts up, if Codey is positioned face-up, Codey's screen will display "Yes". If not, Codey's screen will display "No".

### 11. roll angle° <a href="#id-11-roll-angle" id="id-11-roll-angle"></a>

Report Codey's roll angle.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-11-1.png)

**Parameter:**

* Roll: -90° \~ 90°, rounded to the nearest integer; positive number means right-tilted; invalid value will be set to zero.

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-11-2.png)

When Codey starts up, the screen will display Codey's roll angle.

### 12. pitch angle° <a href="#id-12-pitch-angle" id="id-12-pitch-angle"></a>

Report Codey's pitch angle.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-12-1.png)

**Parameter:**

* Roll: -180° \~ 180°, rounded to the nearest integer; positive number means ears-up; invalid value will be set to zero.

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-12-2.png)

When Codey starts up, the screen will display Codey's pitch angle.

### 13. rotation angle around x <a href="#id-13-rotation-angle-around-x" id="id-13-rotation-angle-around-x"></a>

Report Codey's rotation angle around the x axis.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-13-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-13-2.png)

When Codey starts up, the screen will display Codey's rotation angle around the x axis.

### 14. rotation angle around y <a href="#id-14-rotation-angle-around-y" id="id-14-rotation-angle-around-y"></a>

Report Codey's rotation angle around the y axis.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-14-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-14-2.png)

When Codey starts up, the screen will display Codey's rotation angle around the y axis.

### 15. rotation angle around z <a href="#id-15-rotation-angle-around-z" id="id-15-rotation-angle-around-z"></a>

Report Codey's rotation angle around the z axis.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-15-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-15-2.png)

When Codey starts up, the screen will display Codey's rotation angle around the z axis.

### 16. reset () rotation angle° <a href="#id-16-reset-rotation-angle" id="id-16-reset-rotation-angle"></a>

Reset Codey's rotation angle around specified axis/axes. There are four options: x-axis, y-axis, z-axis, and all axes.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-16-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-16-2.png)

When Codey starts up, reset rotation angles around all axes.

### 17. timer <a href="#id-17-timer" id="id-17-timer"></a>

Report Codey's timer value (second, rounded to nearest tenth).

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-17-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-17-2.png)

When Codey starts up, Codey's screen will display timer value.

### 18. reset timer <a href="#id-18-reset-timer" id="id-18-reset-timer"></a>

Reset Codey's timer.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-18-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-18-2.png)

Press Button A to reset Codey's timer.

### 19. obstacles ahead? <a href="#id-19-obstacles-ahead" id="id-19-obstacles-ahead"></a>

If Rocky's color infrared sensor detects obstacles ahead, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-19-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-19-2.png)

When Codey starts up, Codey Rocky will keep moving forward at 50% power. If Rocky detects obstacles ahead, Codey Rocky will stop moving.

### 20. the color detected is ()? <a href="#id-20-the-color-detected-is" id="id-20-the-color-detected-is"></a>

If the color detected is the specified color, the report condition is met. There are eight colors: red, green, blue, yellow, cyan, purple, black, and white.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-20-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-20-2.png)

When Codey starts up, if the color detected by Rocky's color sensor is red, Rocky's LED will light up red.

### 21. () color value detected? <a href="#id-21--color-value-detected" id="id-21--color-value-detected"></a>

Report the specified color value of the obstacle detected by Rocky's color sensor. Colors include red, green, and blue.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-21-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-21-2.png)

When Codey starts up, if Rocky detects color red, the value of red will be displayed on Codey's screen.

### 22. color sensor ambient light intensity <a href="#id-22-color-sensor-ambient-light-intensity" id="id-22-color-sensor-ambient-light-intensity"></a>

Report the value of ambient light intensity detected by Rocky's color sensor.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-22-1.png)

**Parameter:**

* Light intensity: 0 \~ 100, rounded to nearest tenth; value exceeding 100 will be displayed as the maximum 100.

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-22-2.png)

When Codey starts up, Codey's screen will display the value of amibent light intensity.

### 23. color sensor reflected light intensity <a href="#id-23-color-sensor-reflected-light-intensity" id="id-23-color-sensor-reflected-light-intensity"></a>

Report the value of reflected light intensity detected by Rocky's color sensor.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-23-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-23-2.png)

When Codey starts up, Codey's screen will display the value of reflected light intensity.

### 24. color sensor reflected infrared light intensity <a href="#id-24-color-sensor-reflected-infrared-light-intensity" id="id-24-color-sensor-reflected-infrared-light-intensity"></a>

Report the value of reflected infrared light intensity detected by Rocky's color sensor.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-24-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-24-2.png)

When Codey starts up, Codey's screen will display the value of reflected infrared light intensity.

### 25. color sensor grey-scale value <a href="#id-25-color-sensor-grey-scale-value" id="id-25-color-sensor-grey-scale-value"></a>

Report the grey-scale value detected by Rocky's color sensor.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-24-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/sensing-24-2.png)

When Codey starts up, Codey's screen will display the grey-scale value.<br>


# Infrared

### 1. send IR message <a href="#id-1-send-ir-message" id="id-1-send-ir-message"></a>

Send specified IR message.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/infrared-1-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/infrared-1-2.png)

Press Button A to send IR message A.

### 2. IR message received <a href="#id-2-ir-message-received" id="id-2-ir-message-received"></a>

Report the received IR message.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/infrared-2-1.png)

### 3. record home appliances remote signal 3 secs <a href="#id-3-record-home-appliances-remote-signal-3-secs" id="id-3-record-home-appliances-remote-signal-3-secs"></a>

Record the remote signal of home appliances for 3 seconds.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/infrared-3-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/infrared-3-2.png)

Press Button A to record the remote signal of home appliances for 3 seconds.

### 4. send home appliances remote signal <a href="#id-4-send-home-appliances-remote-signal" id="id-4-send-home-appliances-remote-signal"></a>

Send recorded remote signal of home appliances.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/infrared-4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/infrared-4-2.png)

Press Button A to send recorded remote signal of home appliances.


# Events

### 1. when Codey starts up <a href="#id-1-when-codey-starts-up" id="id-1-when-codey-starts-up"></a>

When Codey starts up, run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-1-1.png)

**Example:**

When Codey starts up, the screen will display "hello".

### 2. when button () is pressed <a href="#id-2-when-button--is-pressed" id="id-2-when-button--is-pressed"></a>

When the specified button is pressed, run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-2-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-2-2.png)

When Button A is pressed, Codey will play the sound "hello".

### 3. when Codey is shaking <a href="#id-3-when-codey-is-shaking" id="id-3-when-codey-is-shaking"></a>

When Codey is shaking, run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-3-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-3-2.png)

When being shaken, Codey will play the sound "wow".

### 4. when Codey is () tilted <a href="#id-4-when-codey-is--tilted" id="id-4-when-codey-is--tilted"></a>

If Codey tilts towards the specified direction, run the script. There are four options: "tilted to the left", "tilted to the right", "ears up", and "ears down".

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-4-2.png)

When Codey is left-tilted, the screen will display "left".

### 5. when () > () <a href="#id-5-when" id="id-5-when"></a>

When the value of the specified parameter (loudness or timer) is greater than the specified value, run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-5-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-5-2.png)

When the loudness detected is greater than 10, Codey's screen will display current loudness.

### 6. when light intensity < () <a href="#id-6-when-light-intensity" id="id-6-when-light-intensity"></a>

When detected light intensity is less than the specified value, run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-6-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-6-2.png)

When the light intensity detected is less than 10, Codey's LED will light up red.

### 7. when I receive () <a href="#id-7-when-i-receive" id="id-7-when-i-receive"></a>

When Codey receives specified message, run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-7-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-7-2.png)

When receiving "message1", Codey will play the sound "laugh".

### 8. broadcast () <a href="#id-8-broadcast" id="id-8-broadcast"></a>

Broadcast specified message.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-8-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/events-8-2.png)

Press Button A. Codey will broadcast "message 1".


# Control

### 1. wait () seconds <a href="#id-1-wait--seconds" id="id-1-wait--seconds"></a>

Wait for a specified period of time to run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-1-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-1-2.png)

Press Button A. One second later, Codey's screen will display the image.

### 2. repeat () <a href="#id-2-repeat" id="id-2-repeat"></a>

Run the script for the specified number of times.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-2-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-2-2.png)

When Codey starts up, it will play the sound "hello" for ten times.

### 3. forever <a href="#id-3-forever" id="id-3-forever"></a>

Run the script repeatedly.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-3-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-3-2.png)

When Codey starts up, Codey's will repeated display the two images consecutively.

### 4. if () then () <a href="#id-4-if-then" id="id-4-if-then"></a>

If the report condition is met, run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-4-2.png)

When Codey starts up, if being shaken, Codey will play the sound "hello".

### 5. if () then () else () <a href="#id-5-if-then-else" id="id-5-if-then-else"></a>

If the report condition is met, run script 1. If not, run script 2.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-5-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-5-2.png)

When Codey starts up, if there are obstacles ahead, Codey Rocky will stop moving. If not, Codey Rocky will keep moving forward at 50% power.

### 6. wait () <a href="#id-6-wait" id="id-6-wait"></a>

Wait until the report condition is met. Run the script.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-6-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-6-2.png)

After starting up, Codey Rocky will keep moving forward at 50% power until Rocky detects obstacles ahead.

### 7. repeat until () <a href="#id-7-repeat-until" id="id-7-repeat-until"></a>

Run the script repeatedly until the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-7-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-7-2.png)

After starting up, Codey Rocky will keep moving forward at 50% power until Rocky detects obstacles ahead.

### 8. stop () <a href="#id-8-stop" id="id-8-stop"></a>

Stop the specified script or scripts. There are three options: all, this script, or other scripts in sprite.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-8-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/control-8-2.png)

Press Button A to stop all scripts.


# Operators

### 1. () + () <a href="#id-1" id="id-1"></a>

Perform mathematical addition.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-1-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-1-2.png)

Press Button A. Codey's screen will display the result of "2 + 3".

### 2. () − () <a href="#id-2" id="id-2"></a>

Perform mathematical subtraction.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-2-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-2-2.png)

Press Button A. Codey's screen will display the result of "3 - 1".

### 3. () \* () <a href="#id-3" id="id-3"></a>

Perform mathematical multiplication.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-3-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-3-2.png)

Press Button A. Codey's screen will display the result of "2 × 3".

### 4. () / () <a href="#id-4" id="id-4"></a>

Perform mathematical division.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-4-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-4-2.png)

Press Button A. Codey's screen will display the result of "6 ÷ 2".

### 5. pick random () to () <a href="#id-5-pick-random-to" id="id-5-pick-random-to"></a>

Pick a random number from the specified range.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-5-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-5-2.png)

Press Button A. Codey's screen will display the image for a random number of seconds within the range of 1 to 10.

### 6. () > () <a href="#id-6" id="id-6"></a>

If the value of the specified parameter is greater than the specified value, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-6-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-6-2.png)

Shake Codey. If the shaking strength is greater than 10, Codey will play the sound "wow".

### 7. () < () <a href="#id-7" id="id-7"></a>

If the value of the specified parameter is less than the specified value, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-7-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-7-2.png)

When Codey starts up, if battery level is lower than 50%, Codey's screen will display "low battery".

### 8. () = () <a href="#id-8" id="id-8"></a>

If the value of the specified parameter equals the specified value, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-8-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-8-2.png)

When Codey starts up, if the red value of the object detected equals 255, Codey's LED will light up red.

### 9. () and () <a href="#id-9-and" id="id-9-and"></a>

If both the conditions are met, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-9-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-9-2.png)

After starting up, Codey Rocky will keep moving forward at 50% power until red obstacle is detected.

### 10. () or () <a href="#id-10-or" id="id-10-or"></a>

If either one of the two conditions is met, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-10-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-10-2.png)

When Codey starts up, Codey will play the sound "hello", if Button A is pressed or if being shaken.

### 11. not () <a href="#id-11-not" id="id-11-not"></a>

The report condition is met when the specified condition is not met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-11-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-11-2.png)

When Codey starts up, if there no obstacle ahead, Codey Rocky will keep moving forward at 50% power.

### 12. join () () <a href="#id-12-join" id="id-12-join"></a>

Join two specified character strings.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-12-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-12-2.png)

When Codey starts up, the screen will display "hi" and "morning" together.

### 13. letter () of () <a href="#id-13-letter-of" id="id-13-letter-of"></a>

Report the letter at specified position of a character string.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-13-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-13-2.png)

When Codey starts up, the screen will display the third letter of "morning".

### 14. length of () <a href="#id-14-length-of" id="id-14-length-of"></a>

Report the length of a specified character string.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-14-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-14-2.png)

When Codey starts up, the screen will display the length of "morning."

### 15. () contains ()? <a href="#id-15-contains" id="id-15-contains"></a>

If the specified character string contains the other specified character string, the report condition is met.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-15-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-15-2.png)

When Codey starts up, if "apple" contains "a", Codey's screen will display "yes".

### 16. () mod () <a href="#id-16-mod" id="id-16-mod"></a>

Calculate the remainder (modular) of two specified numbers.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-16-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-16-2.png)

When Codey starts up, the screen will display the remainder of "9 ÷ 6".

### 17. round () <a href="#id-17-round" id="id-17-round"></a>

Round the specified number to nearest integer.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-17-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-17-2.png)

When Codey starts up, the screen will display the result of rounding 10.7.

### 18. () () <a href="#id-18" id="id-18"></a>

Perform specific mathematical operation on the specified number. Mathematical operations include: abs (absolute value), floor, ceiling, sqrt (square root), sin, sos, tan, asin, atan, acos, ln, log, e^, and 10^.

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-18-1.png)

**Example:**

![](http://docs.makeblock.com/codeyrocky/en/block-reference/images/operators-18-2.png)

When Codey starts up, the screen will display the square root of 16.<br>


# Python API Reference


# Python API for Codey

## `led` — Onboard RGB LED

**Function**

`led.show(r, g, b)`\
Set the displayed color of the RGB LED, parameters：

* *r* refers to the value of red component, parameter range is `0 ~ 255`，0 with no red component and 255 the highest red component.
* *g* refers to the value of green component, parameter range is `0 ~ 255`，0 with no green component and 255 the highest green component.
* *b* refers to the value of blue component, parameter range is `0 ~ 255`，0 with no blue component and 255 the highest blue component.

`led.set_red(val)`\
Set the red color value of the RGB LED, parameters：

* *val* refers to the value of red component, parameter range is `0 ~ 255`，0 with no red component and 255 the highest red component.

`led.set_green(val)`\
Set the green color value of the RGB LED, parameters：

* *val* refers to the value of green component, parameter range is `0 ~ 255`，0 with no green component and 255 the highest green component.

`led.set_blue(val)`\
Set the blue color value of the RGB LED, parameters：

* *val* refers to the value of blue component, parameter range is `0 ~ 255`，0 with no blue component and 255 the highest blue component.

`led.off()`\
Turn off the RGB LED.

**Sample Code:**

```
import codey
import time

codey.led.show(255,255,255)
time.sleep(2)
codey.led.off()
time.sleep(2)
while True:
    codey.led.set_red(255)
    time.sleep(1)
    codey.led.set_green(255)
    time.sleep(1)
    codey.led.set_blue(255)
    time.sleep(1)
    codey.led.off()
    time.sleep(1)
```

## `display` — Face Panel

**Face Panel Introduction**

![](http://docs.makeblock.com/codeyrocky/en/python-api/codey-api.png)

As shown in the figure above, the face panel has the upper left corner as the coordinate 0 point, and the direction of x and y is indicated by the arrow. About parameters displayed, take above figure as an example. The upper three of the first column data are lit and the data is converted to `11100000`, that is, hexadecimal 0xe0.The second column verse is converted to `00001101`, that is, In hexadecimal 0x0d. All the lattices in the above figure are converted to `e00d0000000000000000000000000000`.

**Function**

`display.show_image(image, pos_x = 0, pos_y = 0, time_s = None)`\
Display custom dot matrix graphics as image parameters, parameters：

* *image* string data, each column of the dot matrix has 8 display points, which is 1 byte of data, converted to a hexadecimal string. Therefore, 16 columns of lattices need to be represented by 32 string data.
* *pos\_x* displays the offset of the x-axis of the graph on the panel. The parameter range is `-15 ~ 15`, It starts from the 0 position as default if this parameter is not set.
* *pos\_y* displays the offset of the graph on the y-axis of the panel. The parameter range is `-7 ~ 7`, It starts from the 0 position as default if this parameter is not set.
* *time\_s* displays the time in seconds (in seconds). If this parameter is not set, the display remains unchanged until there is a clear screen or resetting the panel operation.

`display.show(var, pos_x = 0, pos_y = 0, wait = True)`\
Display data in full-type data parameters, parameters：

* *var* full type, where the display of numeric and time types is treated specially, and the time format display needs to satisfy: `[x]x:[x]x` format (regular expression `d?d:dd?`)
* *pos\_x* displays the offset of the data on the x-axis of the panel. The parameter range is `-15 ~ 15`. It starts from the 0 position as default if this parameter is not set.
* *pos\_y* displays the offset of the data on the y-axis of the panel. The parameter range is `-7 ~ 7`. It starts from the 0 position as default if this parameter is not set.
* *wait* sets whether to block the display, where True: means blocking until the display is complete, False: means display but not blocking.

`display.set_pixel(pos_x, pos_y, status)`\
Set the brightness and deactivation status of a single pixel of the panel, Parameters：

* *pos\_x* The coordinates of the x-axis for the pixel on the panel. The parameter range is `0 ~ 15`.
* *pos\_y* The coordinates of the y-axis for the pixel on the panel. The parameter range is `0 ~ 7`.
* *status* Boolean value，where `True` indicates that the pixel is lit, and `False`: indicates that the pixel is off.

`display.get_pixel(pos_x, pos_y)`\
Get the current on and off states of a single pixel on the panel. The return value is a Boolean value, where `True`: indicates that the pixel is lit, and `False`: indicates that the pixel is off, parameter：

* *pos\_x* The coordinates of the x-axis for the pixel on the panel. The parameter range is `0 ~ 15`.
* *pos\_y* The coordinates of the y-axis for the pixel on the panel. The parameter range is `0 ~ 7`.

`display.toggle_pixel(pos_x, pos_y)`\
Toggle the current on and off states of a single pixel on the panel, parameter：

* *pos\_x* The coordinates of the x-axis for the pixel on the panel. The parameter range is `0 ~ 15`.
* *pos\_y* The coordinates of the y-axis for the pixel on the panel. The parameter range is `0 ~ 7`.

`display.clear()`\
Turn off all the LED lights on the display.

**Sample Code:**

```
import codey
import time

codey.display.show("ffffff")
codey.display.show("123")
time.sleep(1)
codey.display.show("12345", 3, 1)
codey.display.set_pixel(1, 1, True)
image = "ffffffffff000000000000000000000000"
codey.display.show_image(image, pos_x = 3, pos_y = 4)
time.sleep(1)
codey.display.clear()
print("[1, 1]:", codey.display.get_pixel(1, 1))
codey.display.show("12:28")
while True:
    codey.display.toggle_pixel(7, 2)
    codey.display.toggle_pixel(7, 4)
    time.sleep(1)
```

## `speaker` — Onboard Speaker

**Function**

`speaker.stop_sounds()`\
Stop all sounds.

`speaker.play_melody(file_name)`\
Playing an audio file, the function will not block when playing, but if it is called continuously, the next playback will stop the previous playback, Parameters：

* *file\_name* String type, the audio file name of the wav format burned in Codey Rocky flash. When inputting, the format suffix `.wav` can also be omitted.<br>

  The optional sound file has:<br>

  ```
  hello.wav       ： hello
  hi.wav          ： hi
  bye.wav         ： bye
  yeah.wav        ： yeah
  wow.wav         ： wow
  laugh.wav       ： laugh
  hum.wav         ： hum
  sad.wav         ： sad
  sigh.wav        ： sigh
  annoyed.wav     ： annoyed
  angry.wav       ： angry
  surprised.wav   ： scared
  yummy.wav       ： pettish
  curious.wav     ： curious
  embarrassed.wav ： embarrassed
  ready.wav       ： ready
  sprint.wav      ： sprint
  sleepy.wav      ： snore
  meow.wav        ： meow
  start.wav       ： start
  switch.wav      ： switch
  beeps.wav       ： beeps
  buzzing.wav     ： buzz
  exhaust.wav     ： air-out
  explosion.wav   ： explosion
  gotcha.wav      ： gotcha
  hurt.wav        ： painful
  jump.wav        ： jump
  laser.wav       ： laser
  level up.wav    ： level-up
  low energy.wav  ： low-energy
  metal clash.wav ： metal-clash
  prompt tone.wav ： prompt-tone
  right.wav       ： right
  wrong.wav       ： wrong
  ring.wav        ： ringtone
  score.wav       ： score
  shot.wav        ： shot
  step_1.wav      ： step_1
  step_2.wav      ： step_2
  wake.wav        ： activate
  warning.wav     ： warning
  ```

`speaker.play_melody_until_done(file_name)`\
The audio file is played until it stops, and the function blocks playback, that is, the next instruction cannot be executed until the sound is played, parameter：

* *file\_name* String type, the audio file name of the wav format burned in Codey Rocky flash. When inputting, the format name `.wav` can also be omitted. For specific optional parameters, see `play_melody`.

`speaker.play_note(note_num, beat = None)`\
Play note, digital note definitions please refer to: [scratch digital note description](https://en.scratch-wiki.info/wiki/Play_Note_\()*for*()*Beats*(block)), prameters：

* *note\_num* numeric value, range of values `48 - 72`, or string type, such as `C4`.
* *beat* value data, indicates the number of beats, the default value is always playing.\
  notes and frequency is as follows:<br>

  ```
  ['C2','65'],   ['D2','73'],   ['E2','82'],   ['F2','87'],
  ['G2','98'],   ['A2','110'],  ['B2','123'],  ['C3','131'],
  ['D3','147'],  ['E3','165'],  ['F3','175'],  ['G3','196'],
  ['A3','220'],  ['B3','247'],  ['C4','262'],  ['D4','294'],
  ['E4','330'],  ['F4','349'],  ['G4','392'],  ['A4','440'],
  ['B4','494'],  ['C5','523'],  ['D5','587'],  ['E5','659'],
  ['F5','698'],  ['G5','784'],  ['A5','880'],  ['B5','988'],
  ['C6','1047'], ['D6','1175'], ['E6','1319'], ['F6','1397'],
  ['G6','1568'], ['A6','1760'], ['B6','1976'], ['C7','2093'],
  ['D7','2349'], ['E7','2637'], ['F7','2794'], ['G7','3136'],
  ['A7','3520'], ['B7','3951'], ['C8','4186'], ['D8','4699'],
  ```

`speaker.play_tone(frequency, time = None)`\
Play the setting frequency sound, parameters：

* *frequency* Numerical data, the frequency of sound which is played, and its value range is `0 ~ 5000`.
* *time* Numerical data, indicating the playback time (in `milliseconds - ms`) and its value range is `0 ~ the value range limit`.

`speaker.rest(number)`\
Stop the beat, parameters：

* *number* Numerical data, the number of paused beats, its value range is `0 ~ the value range limit`.

**Constant**

`speaker.volume`\
Numerical data, the property value of the volume, you can modify or read this value. Modify this value to control the volume. Its value range is `0 ~ 100`.

`speaker.tempo`\
Numerical data, indicating the nature of the playback speed, in `bmp` (beat per minute), which is the length of each beat.Its value range is `6 ~ 600`. The default value is 60, which means that the duration of one beat is 1 second. The beats of the `rest` and `play_note` functions are affected by this constant.

**Sample Code:**

```
import codey
import time

codey.speaker.play_melody("hello", True)
codey.display.show("hello")
codey.display.clear()

codey.speaker.play_note(48, 1)
codey.speaker.rest(1)
codey.display.show("note")
codey.display.clear()
codey.speaker.play_note("C4", 1)
codey.speaker.rest(1)
codey.display.show("C4")
codey.display.clear()
codey.speaker.play_tone(1000, 2)
codey.speaker.rest(1)
codey.display.show("tone")
codey.display.clear()
print("tempo:", end = "")
print(codey.speaker.tempo)
codey.speaker.play_note("C4", 1)
codey.speaker.rest(1)
codey.speaker.tempo = 120
codey.speaker.volume = 20
codey.speaker.play_note("C4", 1)
codey.speaker.rest(1)
```

## `sound_sensor` — Onboard Sound Sensor

**Function**

`sound_sensor.get_loudness()`\
Get the sound intensity detected by the sound sensor, and the return value is the volume. The value range is `0 ~ 100`.

**Sample Code:**

```
import codey

while True:
    codey.display.show(codey.sound_sensor.get_loudness())
```

## `light_sensor` — Onboard Light Sensor

**Function**

`light_sensor.get_value()`\
Get the light intensity detected by the light sensor, and the return value is the intensity value of visible light. The value range is `0 ~ 100`.

**Sample Code:**

```
import codey

while True:
    codey.display.show(codey.light_sensor.get_value())
```

## `potentiometer` — Onboard Potentiometer

**Function**

`potentiometer.get_value()`\
Get the current value of the potentiometer knob. The value range is `0 ~ 100`.

**Sample Code:**

```
import codey

while True:
    codey.display.show(codey.potentiometer.get_value())
```

## `button_a` — Onboard Button A

**Function**

`button_a.is_pressed()`\
Get the current state of button A. The result returned is `True`: the button is pressed, or the `False`: button is not pressed.

**Sample Code:**

```
import codey

def loop():
    while True:
        if codey.button_a.is_pressed():
            print("button A is pressed")
loop()
```

## `button_b` — Onboard Button B

**Function**

`button_b.is_pressed()`\
Get the current state of button B. The result returned is `True`: the button is pressed, or the `False`: button is not pressed.

**Sample Code:**

```
import codey

def loop():
    while True:
        if codey.button_b.is_pressed():
            print("button B is pressed")
loop()
```

## `button_c` — Onboard Button C

**Function**

`button_c.is_pressed()`\
Get the current state of button C. The result returned is `True`: the button is pressed, or the `False`: button is not pressed.

**Sample Code:**

```
import codey

def loop():
    while True:
        if codey.button_c.is_pressed():
            print("button C is pressed")
loop()
```

## `motion_sensor` — Onboard Motion Sensor

**Motion Sensor Introduction**

![](http://docs.makeblock.com/codeyrocky/en/python-api/codey-gyroscope.png)

As shown in the picture above, the direction of the roll and pitch are based on the right-handed screw rule.

Both roll and pitch are `0°` when the Codey is horizontally placed.

* Roll range: `-90° ~ 90°`
* Pitch range: `-180 ° ~ 180 °`

**Function**

`motion_sensor.get_roll()`\
Get the roll of the Euler angle, the returned data range is `-90 ~ 90`.

`motion_sensor.get_pitch()`\
Get the pitch of the Euler angle, the returned data range is `-180 ~ 180`.

`motion_sensor.get_yaw()`\
Get the yaw of the Euler angle, The returned data range is `0 ~ 360`. Since the Codey onboard sensor is a six-axis sensor, there is no electronic compass. So in fact the yaw angle is just the integral of the Z-axis angular velocity. It has accumulated errors. If you want to get a true yaw angle, this API is not suitable for use.

`motion_sensor.get_rotation(axis)`\
Get the angle at which the Codey rotates on the three axes, and the counterclockwise direction is the positive direction, parameter：

* *axis* String type, with `x`, `y`, `z` representing the axis defined by Codey.

`motion_sensor.reset_rotation(axis = "all")`\
The current angle of initial rotation around the three axes is 0, and the `get_rotation()` will start at 0, parameter:

* *axis* string type, with `x`, `y`, `z` representing the axis defined by Codey, and `all` representing all three axes. This is also the default value for this function.

`motion_sensor.is_shaked()`\
Check if the Codey is shaken, the return value is a Boolean value, where `True` means that Codey is shaken, and `False` means that Codey is not shaken.

`motion_sensor.get_shake_strength()`\
If the Codey is shaken, this function can obtain the intensity of the shaking. The value of the return value range is `0 ~ 100`. The larger the value, the greater the intensity of the shaking.

`motion_sensor.is_tilted_left()`\
Check if Codey is tilted to the left, and the return value is a Boolean value, where `True` means that Codey is tilted to the left, and `False` means that Codey is not tilted to the left.

`motion_sensor.is_tilted_right()`\
Check if Codey is tilted to the right, and the return value is a Boolean value, where `True` means that Codey is tilted to the right, and `False` means that Codey is not tilted to the right.

`motion_sensor.is_ears_up()`\
Check if the ear of Codey is up, the return value is a Boolean value, where `True` means that the ear of Codey is facing up, and `False` means that the ear of Codey is not facing up.

`motion_sensor.is_ears_down()`\
Check if the ear of Codey is down, the return value is a Boolean value, where `True` means that the ear of Codey is facing down, and `False` means that the ear of Codey is not facing down.

`motion_sensor.is_display_up()`\
Check if the face panel of Codey is up, the return value is a Boolean value, where `True` means that the panel of Codey is facing up, and `False` means that the panel of Codey is not facing up.

`motion_sensor.is_display_down()` Check if the face panel of Codey is down, the return value is a Boolean value, where `True` means that the panel of Codey is facing down, and `False` means that the panel of Codey is not facing down.

`motion_sensor.is_upright()`\
Check if Codey is upright, the return value is a Boolean value, where `True` means that Codey is upright, and `False` means that Codey is not upright.

`motion_sensor.get_acceleration(axis)`\
Get the acceleration values of the three axes in `m/s^2`, Parameters：

* *axis* String type, with `x`, `y`, `z` representing the axis defined by Codey.

`motion_sensor.get_gyroscope(axis)`\
Get the angular velocity values of the three axes in `°/sec`, Parameters：

* *axis* String type, with `x`, `y`, `z` representing the axis defined by Codey。

**Sample Code 1:**

```
import codey
import time

while True:
    roll = codey.motion_sensor.get_roll()
    pitch = codey.motion_sensor.get_pitch()
    yaw = codey.motion_sensor.get_yaw()
    print("roll:", end = "")
    print(roll, end = "")
    print("   ,pitch:", end = "")
    print(pitch, end = "")
    print("   ,yaw:", end = "")
    print(yaw)
    time.sleep(0.05)
```

**Sample Code 2:**

```
import codey

while True:
    if codey.motion_sensor.is_shaked():
        print("shake_strength:", end = "")
        print(codey.motion_sensor.get_shake_strength())
```

**Sample Code 3:**

```
import codey

while True:
    if codey.motion_sensor.is_tilted_left():
        print("tilted_left")
    if codey.motion_sensor.is_tilted_right():
        print("tilted_right")
    if codey.motion_sensor.is_ears_up():
        print("ears_up")
    if codey.motion_sensor.is_ears_down():
        print("ears_down")
    if codey.motion_sensor.is_display_up():
        print("display_up")
    if codey.motion_sensor.is_display_down():
        print("display_down")
    if codey.motion_sensor.is_upright():
        print("upright")
```

## `ir` — Onboard Infrared Transceiver

**Function**

`ir.receive()`\
Returns the string information received by the infrared receiver, so the data sent by the infrared sender must end with `\n`. If it is a remote control command that receives the NEC encoding protocol, use another function `receive_remote_code()`.

`ir.receive_remote_code()`\
Get the date from infrared remote controller. The data contains two parts: address and content, so it returns a list data which length 2. The first parameter is the address code, and the latter parameter is the data code.

`ir.send(str)`\
Send infrared string, parameters：

* *str* The string data to be emitted, the function send will add the `\n` terminator at the end of the string automatically.

`ir.start_learning()`\
Start infrared learning and only support remote control commands that learn the standard NEC protocol.

`ir.stop_learning()`\
Stop infrared learning.

`ir.save_learned_result(index)`\
Save the learned infrared coding result to the corresponding area, parameters：

* *index* the value range is 0 \~ 15, a total of 16 storage areas.

`ir.send_learned_result(index = 1)`\
Send infrared learning saved infrared code, the learning result of the area with index = 1 is set as default, parameters：

* *index* The index value range is `0 ~ 15`, a total of 16 storage areas.

`ir.learn(time = 3)`\
Infrared learning `time` seconds, after calling this API will save the infrared information learned in `time` seconds. Default saved to the area with index = 1, parameter：

* *time* learning time, in `seconds`.

**Sample Code 1:**

```
import codey
import event

@event.start
def start_cb():
    print("start event succeeded")
    while True:
        codey.display.show(codey.ir.receive_remote_code()[1])
```

**Sample Code 2:**

```
import codey
import event

@event.button_a_pressed
def button_a_cb():
    print("button a event succeeded")
    codey.ir.learn()
    codey.led.show(0, 100, 0)

@event.button_b_pressed
def button_a_cb():
    print("button b event succeeded")
    while True:
        codey.ir.send_learned_result()

@event.button_c_pressed
def button_c_cb():
    print("button b event succeeded")
    while True:
        codey.display.show(codey.ir.receive())
```

## `wifi` — Onboard Wi-Fi

**Function**

`wifi.start(ssid = "wifi_ssid", password = "password", mode = codey.wifi.STA)`\
Start wifi connection, the API will not block process, API exit does not mean that wifi is connected, you need to call `wifi.is_connected()` to judge, Parameter：

* *ssid* string type, Wi-Fi account.
* *password* string type, Wi-Fi password.
* *mode* starts the Wi-Fi mode.

`wifi.is_connected()`\
Check if Wi-Fi is connected, the return value is Boolean, where `True` means that wifi has established a connection, `False` means that wifi has not yet established a connection.

**Constant**

`wifi.STA`\
The Wi-Fi station mode, that is, the wireless adapter mode. In this mode, wifi can be connected to the router.

`wifi.AP`\
Wireless access point mode, the general wireless routing / bridge works in this mode. In this mode, it allows other wireless devices to access.

`wifi.APSTA`\
The Wi-Fi AP and STA modes coexist.

**Sample Code:**

```
import codey
codey.wifi.start('makeblock', 'password', codey.wifi.STA)
codey.led.show(0,0,0)
while True:
    if codey.wifi.is_connected():
        codey.led.show(0,0,255)

    else:
        codey.led.show(0,0,0)
```

## `battery` — Built-in Lithium Battery

**Function**

`battery.get_voltage()`\
Get the current battery voltage, the return value is a floating point data. The unit is `V`.

`battery.get_percentage()`\
Get the percentage of remaining battery power. The return value is an integer. The data range is `0 ~ 100`, where 100 means there is still 100% of the remaining battery.

**Sample Code:**

```
import codey

while True:
    print("vol" + str(codey.battery.get_voltage()))
    print("percentage" + str(codey.battery.get_percentage()))
```

## `codey_timer` — Counter

**Function**

`codey.get_timer()`\
Gets the current value of the timer (the timer runs from the time the user script starts), the return value is a floating point data. The unit is `seconds`.

`codey.reset_timer()`\
Initialize the value of the timer.

**Sample Code:**

```
import codey

codey.reset_timer()

while True:
    print("time:", end = "")
    print(codey.get_timer())
```

## `codey_broadcast` — Broadcast Module

**Function**

`codey.broadcast(str)`\
A broadcast can be sent to the serial port, Bluetooth, and its own event monitoring unit, Parameter：

* *str* The content of the broadcast.

**Sample Code:**

```
import codey
import event

@event.button_a_pressed
def button_a_cb():
    print("button a event succeeded")
    codey.broadcast("hello")

@event.received("hello")
def received_cb():
    print("received message: hello")
```

## `codey_external_module_detect` — External Module Access Detection

**Function**

`codey.has_neuron_connected()`\
Check whether there is any neuron module connected to Codey, and the return value is a Boolean value, where `True` indicates that the neuron module is connected to Codey (including the connecting of the Rocky), and `False` indicates that there is no neuron module connected to the Codey.

`codey.is_rocky_connected()`\
Check if the Rocky is connected to the Codey, the return value is a Boolean value, where `True` means that there is a Rocky connected to the Codey, and `False` means no Rocky connected to Codey.

**Sample Code:**

```
import codey
import time

while True:
    if codey.is_rocky_connected():
        print("rocky is in")
    else:
        print("rocky is out")
    time.sleep(1)
```

## `codey_script_control` — Script/Thread Control

**Function**

`codey.stop_this_script()`\
Stop the current script, consistent with the scratch stop script feature.

`codey.stop_other_scripts()`\
Stop other scripts, consistent with the scratch stop other scripts feature.

`codey.stop_this_script()`\
Stop all scripts, consistent with the scratch stop all scripts.

**Sample Code:**

```
import codey
import time
import event

@event.start
def start_cb():
    while True:
        print("start cb executing...")
        time.sleep(1)
        print("stop this script")
        codey.stop_this_script()

@event.button_a_pressed
def button_a_cb():
    codey.stop_other_scripts()
    while True:
        print("button a event")

@event.button_b_pressed
def button_b_cb():
    codey.stop_other_scripts()
    while True:
        print("button b event")

@event.button_c_pressed
def button_c_cb():
    codey.stop_all_scripts()
```

## `event` — Event Processing Unit

**Event Processing Unit Introduction**

The way user events are used currently supports two ways of writing. One is registration：

```
import codey
import time
import event

def start_cb():
    while True:
        codey.led.show(255, 0, 0)
        time.sleep(1)
        codey.led.show(0, 0, 0)
        time.sleep(1)
event.start(start_cb)
```

The other is to use a decorator, such as：

```
import codey
import time
import event

@event.start

def start_callback():
    while True:
        codey.led.show(255, 0, 0)
        time.sleep(1)
        codey.led.show(0, 0, 0)
        time.sleep(1)
```

**Function**

`event.start(callback)`\
Startup event.

`event.shaked(callback)`\
Codey was shaken event.

`event.received(callback, msgstr)`\
Broadcast reception detection event. In addition to the callback parameter, the parameter：

* *msgstr* string type, the string to be matched. The event will be triggered when the received string matches the matching string.

`event.button_a_pressed(callback)`\
Button A pressed event.

`event.button_b_pressed(callback)`\
Button B pressed event.

`event.button_c_pressed(callback)`\
Button C pressed event.

`event.tilted_left(callback)`\
Codey left-tilted event.

`event.tilted_right(callback)`\
Codey right-tilted event.

`event.ears_up(callback)`\
Codey ears-up event.

`event.ears_down(callback)`\
Codey ears-down event.

`event.ir_received(callback, ir_str)`\
Infrared string reception detection event. In addition to the callback parameter, the parameter：

* *ir\_str* string type, the string to be matched. The event will be triggered when the received string matches the matching string.

`event.greater_than(callback, threshold, type_str)`\
The threshold comparison event, which will be triggered when the threshold is exceeded. In addition to the callback parameter, the parameter：

* *threshold* value data, set the threshold for triggering.
* *type\_str* string data, currently only supports `sound_sensor`: volume sensor, `timer`: timer.

`event.less_than(callback, threshold, type_str)`\
Threshold comparison event, triggered below the threshold, in addition to the callback parameter, the parameter：

* *threshold* value data, set the threshold for triggering
* *type\_str* string data, currently only supports `light_sensor`: light sensor.

**Sample Code:**

```
import codey
import event

@event.button_a_pressed
def button_a_cb():
    print("button a event triggered")

@event.button_b_pressed
def button_b_cb():
    print("button b event triggered")

@event.button_c_pressed
def button_c_cb():
    print("button c event triggered")

@event.greater_than(20, "sound_sensor")
def sound_sensor_cb():
    print("sound sensor greater event triggered")

@event.greater_than(5, "timer")
def timer_cb():
    print("timer greater event triggered")

@event.less_than(30, "light_sensor")
def light_sensor_cb():
    print("light sensor event triggered")
```


# Python API for Rocky

### `motion` – Rocky Chassis Movement <a href="#motion-rocky-chassis-movement" id="motion-rocky-chassis-movement"></a>

**Function**

`rocky.stop()`\
Rocky stops moving.

`rocky.forward(speed, t = None, straight = False)`\
Rocky moves forward, parameters：

* *speed* The value of motion speed, parameter range is `-100 ~ 100`, negative numbers represent backwards, positive numbers represent forward.
* *t* The value of the motion time, in `seconds`, the parameter range is `0 ~ the value range limit`. If set to 1, it means the rocky will move forward for 1s. If this parameter is not set, the forward state is maintained until there is the motion stop command or new motion command.
* *straight* Enable the gyro sensor to correct the forward direction or not. If this parameter is not set, it is not enabled by default.

`rocky.backward(speed, t = None, straight = False)`\
Rocky moves backward, parameters：

* *speed* The value of motion speed, parameter range is `-100 ~ 100`, negative numbers represent forward, positive numbers represent backward.
* *t* The value of the motion time, in `seconds`, the parameter range is `0 ~ the value range limit`. If set to 1, it means the rocky will move backward for 1s. If this parameter is not set, the backward state is maintained until there is the motion stop command or new motion command.
* *straight* Enable the gyro sensor to correct the backward direction or not. If this parameter is not set, it is not enabled by default.

`rocky.turn_left(speed, t = None)`\
Rocky turns left, parameters：

* *speed* The value of turn speed, parameter range is -100 \~ 100, negative numbers represent turn right, positive numbers represent turn left.
* *t* The value of the motion time, in `seconds`, the parameter range is `0 ~ the value range limit`. If set to 1, it means the rocky will turn left for 1s. If this parameter is not set, the turn left state is maintained until there is the motion stop command or new motion command.

`rocky.turn_right(speed, t = None)`\
Rocky turns right, parameters：

* *speed* The value of turn speed, parameter range is -100 \~ 100, negative numbers represent turn right, positive numbers represent turn left.
* *t* The value of the motion time, in `seconds`, the parameter range is `0 ~ the value range limit`. If set to 1, it means the rocky will turn left for 1s. If this parameter is not set, the turn left state is maintained until there is the motion stop command or new motion command.

`rocky.drive(left_power, right_power)`\
Rocky turns according to the set value for each motor, parameters：

* *left\_power* Motor speed of left wheel, parameter range is `-100 ~ 100`, negative numbers represent the left wheel rotates backward, positive numbers represent the left wheel rotates forward.
* *right\_power* Motor speed of right wheel, parameter range is `-100 ~ 100`, negative numbers represent the right wheel rotates backward, positive numbers represent the right wheel rotates forward.

`rocky.turn_right_by_degree(angle, speed = 40)`\
Rocky turns right according to the set degree, parameters：

* *angle* Angle of rotation, negative numbers represent turn left, positive numbers represent turn right.
* *speed* Turning speed, parameter range is `0 ~ 100`, if this parameter is not set, the default speed is 40. (Since the gyro sensor is used for turning specific angle, it is recommended not to modify the speed to avoid the turning angle being inaccurate).

`rocky.turn_left_by_degree(angle, speed = 40)`\
Rocky turns left according to the set degree, parameters：

* *angle* Angle of rotation, negative numbers represent turn right, positive numbers represent turn left.
* *speed* Turning speed, parameter range is `0 ~ 100`, if this parameter is not set, the default speed is 40. (Since the gyro sensor is used for turning specific angle, it is recommended not to modify the speed to avoid the turning angle being inaccurate).

**Sample Code:**

```
import codey
import rocky
import time

rocky.forward(50, 1)
rocky.stop()
rocky.backward(50, 1)
rocky.turn_left(50, 1)
rocky.turn_right(50, 1)
rocky.drive(50, 80)
time.sleep(2)
while True:
    rocky.turn_right_by_degree(80, 40)
    rocky.turn_right_by_degree(80, 20)
```

### `color_ir_sensor` – Color IR Sensor <a href="#colorirsensor-color-ir-sensor" id="colorirsensor-color-ir-sensor"></a>

**Color Infrared Sensor Introduction**

![](http://docs.makeblock.com/codeyrocky/en/python-api/rocky-api.png)

As shown in the figure, the sensors in front of the rocky are:

* **White LED**：light white to achieve detecting the visible light reflection intensity on the surface of the object with using visible light sensor.
* **Visible Light Sensor**：detect the visible light intensity.
* **RGB LED**：light LED with specific RGB value to achieve recognizing the color with using the visible light sensor.
* **Infrared Light Sensor**：detect the infrared light intensity
* **Infrared Transmitter**：transmit infrared light to achieve detecting the infrared light reflection intensity on the surface of the object with using the infrared light sensor.

**Function**

`color_ir_sensor.get_red()`\
Get the size of the red color component of the color sensor, parameter range is `0 ~ 100`.

`color_ir_sensor.get_green()`\
Get the size of the green color component of the color sensor, parameter range is `0 ~ 100`.

`color_ir_sensor.get_blue()`\
Get the size of the blue color component of the color sensor, parameter range is `0 ~ 100`.

`color_ir_sensor.is_color(color_str)`\
Judge whether a matching color is detected, parameters：

* *color\_str* color type, including `red`, `green`, `blue`, `yellow`, `cyan`, `purple`, `white`,`black`, the corresponding parameter is `red`, `green`, `blue`, `yellow`, `cyan`, `purple`, `white`, `black`. Return value is boolean, `Ture` represents color matching, `False` represents the colors do not match.

`color_ir_sensor.get_light_strength()`\
Get the ambient light intensity d\`etected by the visible light sensor, parameter range is 0 \~ 100.

`color_ir_sensor.get_greyness()`\
Get the grayscale value detected by the visible light sensor (using RGB LED and visible light sensor), parameter range is `0 ~ 100`.

`color_ir_sensor.get_reflected_light()`\
Get the visible light reflection intensity detected by the visible light sensor, parameter range is `0 ~ 100`.

`color_ir_sensor.get_reflected_infrared()`\
Get the infrared light reflection intensity detected by the infrared light receiving tube, parameter range is `0 ~ 100`.

`color_ir_sensor.is_obstacle_ahead()`\
Detect if there are obstacles in front, the return value is boolean, `Ture`represents obstacles, `False` represents no obstacles.

`color_ir_sensor.set_led_color(color_name)`\
Set color for the RGB LED light of the color sensor, parameters：

* *color\_name* including `red`, `green`, `blue`, `yellow`, `cyan`, `purple`, `white`, `black`, the corresponding parameter is `red`, `green`, `blue`, `yellow`, `cyan`, `purple`, `white`, `black`.

**Sample Code:**

```
import codey
import rocky

while True:
    if rocky.color_ir_sensor.is_obstacle_ahead():
        rocky.color_ir_sensor.set_led_color('white')
    else:
      rocky.color_ir_sensor.set_led_color('black')
```


# Python API for Third-Party Libraries

### `urequests` – Network Request Module <a href="#urequests-network-request-module" id="urequests-network-request-module"></a>

**Function**

`urequests.request(method, url, data=None, json=None, headers={})`\
Send a network request, it will block the response data returned to the network, parameters：

* *method* method of establishing a network request. e.g. `HEAD`，`GET`，`POST`，`PUT`，`PATCH`, `DELETE`.
* *url* URL of the network request.
* *data* (optional), a dictionary, tuple list \[(key, value)] (will be form coded), byte or class file object sent in the request body.
* *json* (optional), json data sent in the request body.
* *headers* (optional), HTTP header dictionary to be sent with the request.

`urequests.head(url, **kw)`\
Send a `HEAD` request, the return type is the response of the request, parameters：

* *url* URL of the network request.
* \*\*kw request optional parameters.

`urequests.get(url, **kw)`\
Send a `GET` request, the return type is the response of the request, parameters：

* *url* URL of the network request.
* \*\*kw request optional parameters.

`urequests.post(url, **kw)`\
Send a `POST` request, the return type is the response of the request, parameters：

* *url* URL of the network request.
* \*\*kw request optional parameters.

`urequests.put(url, **kw)`\
Send a `PUT` request, the return type is the response of the request, parameters：

* *url* URL of the network request.
* \*\*kw request optional parameters.

`urequests.patch(url, **kw)`\
Send a `PATCH` request, the return type is the response of the request, parameters：

* *url* URL of the network request.
* \*\*kw request optional parameters.

`urequests.delete(url, **kw)`\
Send a `DELETE`request, the return type is the response of the request, parameters：

* *url* URL of the network request.
* \*\*kw request optional parameters.

**Sample Code:**

```
import codey
import urequests as requests
import time

# Fill in your router's ssid and password here.
codey.wifi.start('wifi_ssid', 'password')
codey.led.show(0,0,0)
while True:
    if codey.wifi.is_connected():
        codey.led.show(0,0,255)
        res = requests.get(url='http://www.baidu.com/')
        print(res.text)
        time.sleep(3)
    else:
        codey.led.show(0,0,0)
```

**Sample Code:2**

```
import codey
import urequests as requests
import time

# Fill in your router's ssid and password here.
codey.wifi.start('wifi_ssid', 'password')
codey.led.show(0,0,0)
hour = minite = second = "00"
while True:
    if codey.wifi.is_connected():
        try:
            res = requests.get(url = 'http://www.time.ac.cn/timeflash.asp?user=flash').text
            hour_begin = res.find('<hour>') + len('<hour>')
            hour_end = res.find('</hour>')
            minite_begin = res.find('<minite>') + len('<minite>')
            minite_end = res.find('</minite>')
            second_begin = res.find('<second>') + len('<second>')
            second_end = res.find('</second>')
            if hour_begin > len('<hour>') and hour_end > hour_begin and \
               minite_begin > len('<minite>') and minite_end > minite_begin and \
               second_begin > len('<second>') and second_end > second_begin:

                if hour_end - hour_begin == 1:
                    hour = '0' + res[hour_begin:hour_end]
                elif hour_end - hour_begin == 2:
                    hour = res[hour_begin:hour_end]

                if minite_end - minite_begin == 1:
                    minite = '0' + res[minite_begin:minite_end]
                elif minite_end - minite_begin == 2:
                    minite = res[minite_begin:minite_end]

                if second_end - second_begin == 1:
                    second = '0' + res[second_begin:second_end]
                elif second_end - second_begin == 2:
                    second = res[second_begin:second_end]

                print(hour + ":" + minite + ":" + second)
                cur_time = hour + ':' + minite;
                codey.display.show(cur_time)
        except:
            print("get error data")
    else:
        codey.led.show(0,0,0)
```

**Sample Code:3**

```
import codey
import urequests as requests
import ujson

# user_account and password is mblock's account and password
def get_user_request_header():
    post_data = ujson.dumps({ 'account': 'user_account', 'password': 'password'})
    request_url = 'http://passport2.makeblock.com/v1/user/login'
    res = requests.post(request_url, headers = {'content-type': 'application/json'}, data = post_data).json()
    header_data = ''
    if res['code'] == 0:
        header_data = { "content-type": 'application/json; charset=utf-8', "devicetype": '1'}
        header_data["uid"] = str(res['data']['user']['uid'])
        header_data["deviceid"] = '30AEA427EC60'
    return header_data

# Get weather information
# cid: checkpoint id
# arg: Information to be queried
#            aqi:  Air Quality Index
#            pm25: PM2.5 concentration
#            pm10: PM10 concentration
#            co:   Carbon monoxide concentration
#            so2:  Sulfur dioxide concentration
#            no2:  Nitrogen dioxide concentration
def get_air_quality_info(cid, arg):
    if not codey.wifi.is_connected():
        return ''
    post_data = ujson.dumps({ "cid": cid, "arg": arg})
    request_url = 'http://msapi.passport3.makeblock.com/' + 'air/getone'
    res = requests.post(request_url, headers = get_user_request_header(), data = post_data)
    text = res.text
    return float(text)

# Fill in your router's ssid and password here.
codey.wifi.start('wifi_ssid', 'password')
codey.led.show(0,0,0)
while True:
    if codey.wifi.is_connected():
        codey.led.show(0,0,255)
        data = get_air_quality_info('1539','aqi')  #1539 is Shenzhen checkpoint id
        codey.display.show(data)
    else:
        codey.led.show(0,0,0)
```

### `mqtt` – Message Queue Telemetry Transmission <a href="#mqtt-message-queue-telemetry-transmission" id="mqtt-message-queue-telemetry-transmission"></a>

**Class**

`class mqtt.MQTTClient(client_id, server, port=0, user=None, password=None, keepalive=0, ssl=False, ssl_params={})` Instantiating the interface object of MQTT client, parameters：

* *client\_id* the unique client id string used when connecting to the broker. If client\_id is zero length or None, then one will be randomly generated. In this case, the parameter `clean_session` of the `connect` function must be `True`.
* *server* The host name or IP address of the remote server.
* *port* (optional), the network port of the server host to connect to. The default port number is 1883. Please note that the default port number of the MQTT over SSL/TLS is 8833.
* *user* (optional), the username registered on the server.
* *password* (optional), the password registered on the server.
* *keepalive* (optional), the client’s keepalive time out value. Default is 60 s.
* *ssl* (optional), whether enable the SSL/TLS support.
* *ssl\_params* (optional), SSL/TLS parameter.

`connect(clean_session=True)`\
Connect the client to the server, this is a blocking function, parameters：

* *clean\_session* a boolean that determines the client type. If `True`, the broker will remove all information about this client when it disconnects. If `False`, the client is a durable client and subscription information and queued messages will be retained when the client disconnects.

`reconnect()`\
Reconnect to the server using the details provided previously. You must call `connect` before calling this function.

`disconnect()`\
Disconnect from the server.

`ping()`\
Test the connectivity between the server and client.

`set_last_will(topic, msg, retain=False, qos=0)`\
Set the will to be sent to the server. If the client disconnects without calling `disconnect()`, the server will post a message on its behalf, parameters：

* *topic* The topic of the will post.
* *msg* A will message to send.
* *retain* If set to `True`, the will message will be set to the last known `good/reserved message` for the topic.
* *qos* Is used for the quality of service level of the will.

`publish(topic, msg, retain=False, qos=0)`\
A message is sent from the client to the agent and then sent from the agent to any client that subscribes to the matching topic, parameters：

* *topic* The topic of the message should be posted.
* *msg* The actual message to send.
* *retain* If set to True, the will message will be set to the last known `good/reserved message` for the topic.
* *qos* The level of quality of service to use.

`subscribe(topic, qos=0)`\
Subscribe to a topic of the service, this module provides some helper functions to subscribe and process messages directly. For example `set_callback`, parameters：

* *topic* The subject of the message to subscribe.
* *qos* The level of quality of service to use.

`set_callback(f)`\
Sets the callback function for the topic subscription, which is called when the server responds to our subscription request, parameters：

* *f* callback function.

`wait_msg()`\
Wait for the server until the server has no pending messages. This function is a blocking function.

`check_msg()`\
Check if the server has pending messages. If not, return directly, if any, do same processing as function wait\_msg.

**Sample Code:**

```
from mqtt import MQTTClient
import codey
import time

MQTTHOST = "mq.makeblock.com"
MQTTPORT = 1883

# Fill in as you like
client_id = "20180911203800"

# Example Path
Topic = "/sensors/temperature/#"

mqttClient = MQTTClient(client_id, MQTTHOST, port=MQTTPORT, user='test', password='test', keepalive=0, ssl=False)

# Connect to the MQTT server
def on_mqtt_connect():
    mqttClient.connect()

# publish a message
def on_publish(topic, payload, retain=False, qos = 0):
    mqttClient.publish(topic, payload, retain, qos)

# message processing function
def on_message_come(topic, msg):
    print(topic + " " + ":" + str(msg))
    codey.display.show(msg)

# subscribe message
def on_subscribe():
    mqttClient.set_callback(on_message_come)
    mqttClient.subscribe(Topic, qos = 1)

# Fill in your router's ssid and password here.
codey.wifi.start('wifi_ssid', 'password')
codey.led.show(0,0,0)
codey.display.show(0)
while True:
    if codey.wifi.is_connected():
        on_mqtt_connect()
        on_subscribe()
        codey.led.show(0,0,255)
        while True:
            # Blocking wait for message
            on_publish("/sensors/temperature/home", str(38), qos = 1)
            mqttClient.wait_msg()
            time.sleep(1)
    else:
        codey.led.show(0,0,0)
```


# Python API for Neuron Extension Modules

### `dc_motor_driver` – Dual DC Motor Driver <a href="#dcmotordriver-dual-dc-motor-driver" id="dcmotordriver-dual-dc-motor-driver"></a>

**Function**

`dc_motor_driver.set_power(speed, ch = 0)`\
Set power for the motor driver in each channel, parameters:

* *speed* Refers to power value of the motor controlled, the parameter range is `-100 ~ 100`.
* *ch* Refers to channel number of the motor controlled, the parameter range is `0 ~ 2`, and `0`: stands for both slots，`1`: for slot 1 channel，2: for slot 2 channel.

**Sample Code:**

```
import codey
import neurons
import event

@event.button_a_pressed
def on_button_a_pressed():
    print("button a event succeeded")
    neurons.dc_motor_driver.set_power(100, 1)

@event.button_b_pressed
def on_button_b_pressed():
    print("button b event succeeded")
    neurons.dc_motor_driver.set_power(100, 2)

@event.button_c_pressed
def on_button_c_pressed():
    print("button c event succeeded")
    neurons.dc_motor_driver.set_power(100, 0)
    neurons.dc_motor_driver.set_power(100, 1, 2)
```

### `servo_driver` – Dual Servo Driver <a href="#servodriver-dual-servo-driver" id="servodriver-dual-servo-driver"></a>

**Function**

`servo_driver.set_angle(position, ch = 0)`\
set power for the servo driver in each channel, parameters：

* *position* Refers to turning angle value of the servo controlled, the parameter range is `0 ~ 180`.
* *ch* Refers to channel number servo controlled, the parameter range is `0 ~ 2`, and `0`: stands for both slots，`1`: for slot 1 channel，2: for slot 2 channel.

**Sample Code:**

```
import codey
import neurons
import event
import time

neurons.servo_driver.set_angle(0, 0)
time.sleep(1)

@event.button_a_pressed
def on_button_a_pressed():
    print("button a event succeeded")
    neurons.servo_driver.set_angle(100, 1)

@event.button_b_pressed
def on_button_b_pressed():
    print("button b event succeeded")
    neurons.servo_driver.set_angle(100, 2)

@event.button_c_pressed
def on_button_c_pressed():
    print("button c event succeeded")
    neurons.servo_driver.set_angle(100, 0)
```

### `led_strip` – LED Strip Driver <a href="#ledstrip-led-strip-driver" id="ledstrip-led-strip-driver"></a>

**Function**

`led_strip.set_single(index, red_value, green_value, blue_value)`\
Set color of each light on the LED Strip, parameters：

* *index* Set the light order No, the parameter range is `1 ~ the value of total lights on the LED Strip`。
* *red\_value* Set LED red value, the parameter range is `0 ~ 255`, 0 means no red color, 255 means the brightest red color.
* *green\_value* Set LED green value, the parameter range is `0 ~ 255`, 0 means no green color, 255 means the brightest green color.
* *blue\_value* Set LED blue value, the parameter range is `0 ~ 255`, 0 means no blue color, 255 means the brightest blue color.

`led_strip.set_all(red_value, green_value, blue_value)`\
Set color for all lights, parameters：

* *red\_value* Set LED red value, the parameter range is `0 ~ 255`, 0 means no red color, 255 means the brightest red color.
* *green\_value* Set LED green value, the parameter range is `0 ~ 255`, 0 means no green color, 255 means the brightest green color.
* *blue\_value* Set LED blue value, the parameter range is `0 ~ 255`, 0 means no blue color, 255 means the brightest blue color.

`led_strip.set_effect(mode, speed, list)`\
Set effect of the LED Strip, parameters：

* *mode* effect mode, the parameter range is `0 ~ 5`
  * 0： means static mode: lights status keep the last setting。
  * 1： means rolling mode: the front N lights turn on firstly as the setting color, then the N lights move to 2\~N+1 and the first one turns off, then 3\~N+2 and first two lights turn off, just like below picture:\
    ![](http://docs.makeblock.com/codeyrocky/en/python-api/neuron-api-1.png)
  * 2： means repeat mode: the front N lights turn on firstly as the setting color, and rest lights will copy that status until the last light, just like below picture:\
    ![](http://docs.makeblock.com/codeyrocky/en/python-api/neuron-api-2.png)
  * 3： means marquee mode: N light turn on and then move repeatedly at a setting speed, as below picture:\
    ![](http://docs.makeblock.com/codeyrocky/en/python-api/neuron-api-3.png)
  * 4： means breathing mode: the lights change at the speed of human breath, that is they turn on/off each three seconds.
  * 5： means gradient mode: all lights on the strip change their color gradually to the new setting color in a specific setting time.
* *speed* dynamic change speed, the parameter range is `0 ~ 8`, 0 means the slowest speed and 8 is the fastest(It only works when there is dynamic change setting of lights status).
* *list* changeable parameter list, the parameter range is `0 ~ 8`，the first parameter means the first light color, the second parameter means the second light color, and so on; And color parameters are as below: `black(0x00)`, `red(0x01)`, `orange(0x02)`, `yellow(0x03)`, `green(0x04)`, `cray(0x05)`, `blue(0x06)`, `purple(0x07)` and `while(0x08)`.

**Sample Code:**

```
import codey
import neurons
import event
import time

neurons.led_strip.set_all(0, 0, 255)
time.sleep(1)

@event.button_a_pressed
def on_button_a_pressed():
    print("button a event successed")
    neurons.led_strip.set_all(0, 0, 0)
    neurons.led_strip.set_single(1, 255, 0, 0)
    time.sleep(1)
    neurons.led_strip.set_all(0, 0, 0)
    neurons.led_strip.set_single(2, 255, 0, 0)
    time.sleep(1)
    neurons.led_strip.set_all(0, 0, 0)
    neurons.led_strip.set_single(3, 255, 0, 0)
    time.sleep(1)

@event.button_b_pressed
def on_button_b_pressed():
    print("button b event successed")
    neurons.led_strip.set_effect(0, 8, (1,6,8,1,6,8,1,6,8))
    time.sleep(3)
    neurons.led_strip.set_effect(1, 8, (1,6,8,1,6,8,1,6,8))
    time.sleep(3)
    neurons.led_strip.set_effect(2, 8, (1,6,8,1,6,8,1,6,8))
    time.sleep(3)
    neurons.led_strip.set_effect(3, 8, (1,6,8,1,6,8,1,6,8))
    time.sleep(3)
    neurons.led_strip.set_effect(4, 8, (1,6,8,1,6,8,1,6,8))
    time.sleep(3)
    neurons.led_strip.set_effect(5, 8, (1,6,8,1,6,8,1,6,8))
    time.sleep(3)

@event.button_c_pressed
def on_button_c_pressed():
    print("button c event successed")
    neurons.led_strip.set_effect(0, 5, (1,1,1,1,1,1,1,1,1))
    time.sleep(3)
    neurons.led_strip.set_effect(1, 5, (1,1,1,1,1,1,1,1,1))
    time.sleep(3)
    neurons.led_strip.set_effect(2, 5, (1,1,1,1,1,1,1,1,1))
    time.sleep(3)
    neurons.led_strip.set_effect(3, 5, (1,1,1,1,1,1,1,1,1))
    time.sleep(3)
    neurons.led_strip.set_effect(4, 5, (1,1,1,1,1,1,1,1,1))
    time.sleep(3)
    neurons.led_strip.set_effect(5, 5, (1,1,1,1,1,1,1,1,1))
    time.sleep(3)
```

### `led_panel` – RGB LED Panel <a href="#ledpanel-rgb-led-panel" id="ledpanel-rgb-led-panel"></a>

**Function**

`led_panel.set_all(red_value, green_value, blue_value)`\
Set and display color of all lights on the panel, parameters：

* *red\_value* Set LED red value, the parameter range is `0 ~ 255`, 0 means no red color, 255 means the brightest red color.
* *green\_value* Set LED green value, the parameter range is `0 ~ 255`, 0 means no green color, 255 means the brightest green color.
* *blue\_value* Set LED blue value, the parameter range is `0 ~ 255`, 0 means no blue color, 255 means the brightest blue color.

`led_panel.set_pixel(x, y, red_value, green_value, blue_value)`\
Set color for each pixel on the panel, parameters：

* *x* pixel’s X position on the panel, the parameter range is`0 ~ 7`.
* *y* pixel’s Y position on the panel, the parameter range is`0 ~ 7`.
* *red\_value* Set LED red value, the parameter range is `0 ~ 255`, 0 means no red color, 255 means the brightest red color.
* *green\_value* Set LED green value, the parameter range is `0 ~ 255`, 0 means no green color, 255 means the brightest green color.
* *blue\_value* Set LED blue value, the parameter range is `0 ~ 255`, 0 means no blue color, 255 means the brightest blue color.

`led_panel.show_image(list, mode = 0)`\
Set the display content as image parameter mode, parameters：

* *list* changeable parameter list, the parameter range is `0 ~ 8`，the first parameter means the first light color, the second parameter means the second light color, and so on; And color parameters are as below: `black(0x00)`, `red(0x01)`, `orange(0x02)`, `yellow(0x03)`, `green(0x04)`, `cray(0x05)`, `blue(0x06)`, `purple(0x07)` and `while(0x08)`.
* *mode* contents displaying mode, the parameter range is `0 ~ 3`
  * 0：means emerging mode, setting image will display directly.
  * 1：means erase mode, original image disappear gradually and new setting image will display gradually and vertically.
  * 2：means left moving mode, original image moves to the left and disappear gradually and new setting image will move to the left until display the whole image.
  * 3：means right moving mode, original image moves to the right and disappear gradually and new setting image will move to the right until display the whole image.

`led_panel.set_animation(frame_index, list)`\
Set the animation content on the panel, parameters：

* *frame\_index* index of the animation frame, the parameter range is `0 ~ 3`; 0 mean the first frame, 1 means the second, and so on.
* *list* changeable parameter list, the parameter range is `0 ~ 8`，the first parameter means the first light color, the second parameter means the second light color, and so on; And color parameters are as below: `black(0x00)`, `red(0x01)`, `orange(0x02)`, `yellow(0x03)`, `green(0x04)`, `cray(0x05)`, `blue(0x06)`, `purple(0x07)` and `while(0x08)`.

`led_panel.show_animation(frame_speed, mode)`\
Show the animation frame setting by `set_animation`, parameters：

* frame\_speed switch speed of the animation frame content, the parameter range is `0 ~ 2`
  * 0：means slow speed that the animation frame rolls every one second
  * 1：means normal speed that the animation frame rolls every half second
  * 2：means fast speed that the animation frame rolls every 0.2 second.
* *mode* frame change mode, the parameter range is `0 ~ 3`
  * 0：means emerging mode, setting image will display directly.
  * 1：means erase mode, original image disappear gradually and new setting image will display gradually and vertically.
  * 2：means left moving mode, original image moves to the left and disappear gradually and new setting image will move to the left until display the whole image.
  * 3：means right moving mode, original image moves to the right and disappear gradually and new setting image will move to the right until display the whole image.

`led_panel.show_string(red_value, green_value, blue_value, list)`\
Display the string as the setting color, parameters：

* *red\_value* Set LED red value, the parameter range is `0 ~ 255`, 0 means no red color, 255 means the brightest red color.
* *green\_value* Set LED green value, the parameter range is `0 ~ 255`, 0 means no green color, 255 means the brightest green color.
* *blue\_value* Set LED blue value, the parameter range is `0 ~ 255`, 0 means no blue color, 255 means the brightest blue color.
* *list* changeable parameter list, the first character, the second character, the third character…

`led_panel.clear()`\
Clear the display of the panel.

**Sample Code:**

```
import codey
import neurons
import event
import time

neurons.led_panel.clear()
neurons.led_panel.set_all(0, 0, 255)
time.sleep(1)
neurons.led_panel.clear()

@event.button_a_pressed
def on_button_a_pressed():
    print("button a event successed")
    neurons.led_panel.set_pixel(0, 0, 255, 0, 0)
    time.sleep(1)
    neurons.led_panel.set_pixel(4, 4, 255, 0, 0)
    time.sleep(1)
    neurons.led_panel.set_pixel(7, 7, 255, 0, 0)
    time.sleep(1)
    neurons.led_panel.set_pixel(0, 6, 255, 0, 0)
    time.sleep(1)

@event.button_b_pressed
def on_button_b_pressed():
    print("button b event successed")
    neurons.led_panel.show_image([1,6,8,0,0,0,1,6,8],0)
    time.sleep(1)
    neurons.led_panel.show_image([1,1,1,1,1,1,1,1,1],1)
    time.sleep(1)
    neurons.led_panel.show_image([6,6,6,6,6,6,6,6,6],2)
    time.sleep(1)
    neurons.led_panel.show_image([8,8,8,8,8,8,8,8,8],3)
    time.sleep(1)

@event.button_c_pressed
def on_button_c_pressed():
    print("button c event successed")
    neurons.led_panel.set_animation(0, (1,6,8,1,6,8,0,0,0))
    neurons.led_panel.set_animation(1, (6,6,6,6,6,6,6,6,6))
    neurons.led_panel.set_animation(2, [6,6,6,6,6,6,6,6,6])
    neurons.led_panel.set_animation(3, (8,8,8,8,8,8,8,8,8))
    neurons.led_panel.show_animation(1, 2)
    time.sleep(6)
    neurons.led_panel.show_string(255, 0, 0, "hello")
    time.sleep(4)
    neurons.led_panel.show_string(255, 0, 0, (100))
    time.sleep(4)
    neurons.led_panel.show_string(255, 0, 0, (1,2,3))
```

### `buzzer` – Buzzer <a href="#buzzer-buzzer" id="buzzer-buzzer"></a>

**Function**

`buzzer.play_note(note_num, beat = None)`\
Play note, digital note definitions please refer to： scratch digital note description, prameters：

* *note\_num* numeric value, range of values `48 - 72`, or string type, such as `C4`.
* *beat* value data, indicates the number of beats, the default value is always playing.\
  notes and frequency is as follows:<br>

  ```
  ['C2','65'],   ['D2','73'],   ['E2','82'],   ['F2','87'],
  ['G2','98'],   ['A2','110'],  ['B2','123'],  ['C3','131'],
  ['D3','147'],  ['E3','165'],  ['F3','175'],  ['G3','196'],
  ['A3','220'],  ['B3','247'],  ['C4','262'],  ['D4','294'],
  ['E4','330'],  ['F4','349'],  ['G4','392'],  ['A4','440'],
  ['B4','494'],  ['C5','523'],  ['D5','587'],  ['E5','659'],
  ['F5','698'],  ['G5','784'],  ['A5','880'],  ['B5','988'],
  ['C6','1047'], ['D6','1175'], ['E6','1319'], ['F6','1397'],
  ['G6','1568'], ['A6','1760'], ['B6','1976'], ['C7','2093'],
  ['D7','2349'], ['E7','2637'], ['F7','2794'], ['G7','3136'],
  ['A7','3520'], ['B7','3951'], ['C8','4186'], ['D8','4699'],
  ```

`buzzer.play_tone(frequency, time = None)`\
Play the tone of setting frequency, prameters：

* *frequency* Numerical data, the frequency of sound which is played, and its value range is `0 ~ 5000`.
* *time* Numerical data, indicating the playback time (in `milliseconds - ms`) and its value range is `0 ~ the value range limit`.

`buzzer.rest(number)`\
Stop the beat, parameters：

* *number* Numerical data, the number of paused beats, its value range is `0 ~ the value range limit`.

**Constant**

`buzzer.tempo`\
Numerical data, indicating the nature of the playback speed, in `bmp` (beat per minute), which is the length of each beat.Its value range is `6 ~ 600`. The default value is 60, which means that the duration of one beat is 1 second. The beats of the `rest` and `play_note` functions are affected by this constant.

**Sample Code:**

```
import codey
import time
import neurons

codey.display.show("hello")

neurons.buzzer.play_note(48, 1)
neurons.buzzer.rest(1)
codey.display.show("note")
codey.display.clear()
neurons.buzzer.play_note("C4", 1)
neurons.buzzer.rest(1)
codey.display.show("C4")
codey.display.clear()
neurons.buzzer.play_tone(1000, 2)
neurons.buzzer.rest(1)
codey.display.show("tone")
codey.display.clear()

while True:
    neurons.buzzer.tempo = 60
    print("tempo:", end = "")
    print(neurons.buzzer.tempo)
    neurons.buzzer.play_note("C4", 1)
    neurons.buzzer.rest(2)
    neurons.buzzer.tempo = 240
    neurons.buzzer.play_note("C4", 1)
    neurons.buzzer.rest(2)
```

### `button` – Button <a href="#button-button" id="button-button"></a>

**Function**

`button.is_pressed()`\
Get current status of button; the result will be `True`: button pressed or `False`: button is not pressed.

**Sample Code:**

```
import neurons

while True:
    if neurons.button.is_pressed():
        print("pressed!")
```

### `funny_touch` – Funny Touch <a href="#funnytouch-funny-touch" id="funnytouch-funny-touch"></a>

**Funny Touch User Guide**

![](http://docs.makeblock.com/codeyrocky/en/python-api/neuron-api-4.png)

Funny touch can be connected to any conductive object (such as bananas and water) and turn it into a touch switch. A simple and interesting interactive effect can be achieved by detecting the conducting state between funny switches and GND wire.

How to use?

1. Plug the funny switch to slot 1 and the GND wire to slot 2.
2. Clip a funny switch to a conductive object.
3. Hold the metal clip of the GND wire and touch the conductive object with the other hand, the relevant indicator will light up and the block will send out an on signal.

**Note: Alligator clip is sharp, please do not clip yourself with the funny switch or the clip of GND wire, it may hurt you.**

**Function**

`funny_touch.is_red_touched()`\
Whether the red clip is touched or not, result will be `True`: yes, it is touched, or `False`: no, it isn’t touched.

`funny_touch.is_green_touched()`\
Whether the green clip is touched or not, result will be `True`: yes, it is touched, or `False`: no, it isn’t touched.

`funny_touch.is_yellow_touched()`\
Whether the yellow clip is touched or not, result will be `True`: yes, it is touched, or `False`: no, it isn’t touched.

`funny_touch.is_blue_touched()`\
Whether the blue clip is touched or not, result will be `True`: yes, it is touched, or `False`: no, it isn’t touched.

**Sample Code:**

```
import codey
import time
import event
import neurons

@event.start
def start_cb():
    while True:
        if neurons.funny_touch.is_blue_touched():
            print("blue touched")
        if neurons.funny_touch.is_red_touched():
            print("red touched")
        if neurons.funny_touch.is_green_touched():
            print("green touched")
        if neurons.funny_touch.is_yellow_touched():
            print("yellow touched")

        time.sleep(0.1)
```

### `ultrasonic_sensor` – Ultrasonic Sensor <a href="#ultrasonicsensor-ultrasonic-sensor" id="ultrasonicsensor-ultrasonic-sensor"></a>

**Function**

`ultrasonic_sensor.get_distance()`\
Get the distance (`cm`) between the obstacle ahead and ultrasonic sensor; the result is floating point, ranging `0 ~ 300` cm; but measure distance ranges `3 ~ 300` cm as detection is not exact enough within 3 cm.

**Sample Code:**

```
import codey
import time
import event
import neurons

@event.start
def start_cb():
    while True:
        print(neurons.ultrasonic_sensor.get_distance())
        time.sleep(0.2)
```

### `gyro_sensor` – Gyro Sensor User Guide <a href="#gyrosensor-gyro-sensor-user-guide" id="gyrosensor-gyro-sensor-user-guide"></a>

Refer to the picture below for Gyro module coordinate system:

![](http://docs.makeblock.com/codeyrocky/en/python-api/neuron-api-5.png)

**Function**

`gyro_sensor.get_roll()`\
Get the roll of the Euler angle, the returned data range is `-90 ~ 90`.

`gyro_sensor.get_pitch()`\
Get the pitch of the Euler angle, the returned data range is `-180 ~ 180`.

`gyro_sensor.get_yaw()`\
Get the yaw of the Euler angle, The returned data range is `-32768 ~ 32767`，Since the gyro sensor is a six-axis sensor, there is no electronic compass. So in fact the yaw angle is just the integral of the Z-axis angular velocity. It has accumulated errors. If you want to get a true yaw angle, this API is not suitable for use.

`gyro_sensor.is_shaked()`\
Check if the gyro sensor is shaken, the return value is a Boolean value, where `True` means that gyro sensor is shaken, and `False` means that gyro sensor is not shaken.

`gyro_sensor.get_acceleration(axis)`\
Get the acceleration values of the three axes in `g`, Parameters：

* *axis* String type, with `x`, `y`, `z` representing the axis defined by gyro sensor.

`gyro_sensor.get_gyroscope(axis)`\
Get the angular velocity values of the three axes in `°/sec`, Parameters：

* *axis* String type, with `x`, `y`, `z` representing the axis defined by gyro sensor.

**Sample Code 1:**

```
import rocky
import event
import neurons

@event.button_a_pressed
def on_button_a_callback():
    codey.stop_other_scripts()
    codey.display.show("pit")
    while True:
        print(neurons.gyro_sensor.get_pitch())
        time.sleep(0.05)

@event.button_b_pressed
def on_button_b_callback():
    codey.stop_other_scripts()
    codey.display.show("rol")
    while True:
        print(neurons.gyro_sensor.get_roll())
        time.sleep(0.05)

@event.button_c_pressed
def on_button_c_callback():
    codey.stop_other_scripts()
    codey.display.show("yaw")
    while True:
        print(neurons.gyro_sensor.get_yaw())
        time.sleep(0.05)
```

**Sample Code 2:**

```
import rocky
import event
import neurons

@event.start
def start_cb():
    codey.display.show("sha")
    while True:
        print(neurons.gyro_sensor.is_shaked())
        time.sleep(0.2)
```

**Sample Code 3:**

```
import rocky
import event
import neurons

@event.start
def start_cb():
    while True:
        print("gyro z:", end = "")
        print(neurons.gyro_sensor.get_gyroscope("z"))
        print("accel z:", end = "")
        print(neurons.gyro_sensor.get_acceleration("z"))
        time.sleep(0.2)
```

### `pir_sensor` – PIR Sensor <a href="#pirsensor-pir-sensor" id="pirsensor-pir-sensor"></a>

**Function**

`pir_sensor.is_activated()`\
Get the detecting result from the sensor. Result will be `True`: it detects human nearby or `False`: it doesn’t detect human nearby.

**Sample Code:**

```
import codey
import time
import event
import neurons

@event.start
def start_cb():
    while True:
        print(neurons.pir_sensor.is_activated())
        time.sleep(0.2)
```

### `soil_moisture` – Soil Moisture <a href="#soilmoisture-soil-moisture" id="soilmoisture-soil-moisture"></a>

**Function**

`soil_moisture.get_value()`\
Get humidity of soil detected, ranging `0 ~ 100`; the higher value is, the higher humidity is.

**Sample Code:**

```
import codey
import time
import event
import neurons

@event.start
def start_cb():
    while True:
        print(neurons.soil_moisture.get_value())
        time.sleep(0.2)
```


# FAQs

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-15-51.png)

## FAQ for Codey Rocky <a href="#faq-for-codey-rocky" id="faq-for-codey-rocky"></a>

### 1. The system shows “The device driver is not enabled. Solutions”. <a href="#id-1-the-system-shows-the-device-driver-is-not-enabled-solutions" id="id-1-the-system-shows-the-device-driver-is-not-enabled-solutions"></a>

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-20-59.png)

This problem happens mostly when we are installing mBlock 5. When the security software or VPN is enabled, the installation might be interrupted.

**Solution 1（This can solve the problem in most cases):**

Close the security software (including the windows firewall) and VPN first and then re-install mBlock 5.

If Solution 1 doesn’t work, then try Solution 2.

**Solution 2:**

Close the security software and VPN. Then, re-install mBlock 5. Change the installation directory location this time.

**Solution 3：**

In some cases, users install mBlock 5 to a non-default installation location. In this case, the system authority management will block the device driver from being enabled.

**How to solve the problem:**

Re-stall the software to the default installation location.

### 2. Can Codey Rocky talk? <a href="#id-2-can-codey-rocky-talk" id="id-2-can-codey-rocky-talk"></a>

Codey Rocky has no speech recognition block so it can’t talk. However, Neuron will come with a speech recognition block and can work with Codey Rocky.

### 3. I prefer to connect Codey Rocky to the computer via the computer’s self-contained Bluetooth? Is that OK? <a href="#id-3-i-prefer-to-connect-codey-rocky-to-the-computer-via-the-computers-self-contained-bluetooth-is-that" id="id-3-i-prefer-to-connect-codey-rocky-to-the-computer-via-the-computers-self-contained-bluetooth-is-that"></a>

Mobile phones always come with a standard Bluetooth version while Bluetooth protocols and standards vary across different computers. Only a small portion of computers have the matching version. To ensure users better experiences, we currently don’t support connecting Codey Rocky via the computer’s self-contained Bluetooth.

### 4. I couldn’t connect Codey Rocky to a phone or an iPad. mBlock 5 keeps telling me to update the firmware. How to fix it? <a href="#id-4-i-couldnt-connect-codey-rocky-to-a-phone-or-an-ipad-mblock-5-keeps-telling-me-to-update-the-firmwa" id="id-4-i-couldnt-connect-codey-rocky-to-a-phone-or-an-ipad-mblock-5-keeps-telling-me-to-update-the-firmwa"></a>

1）Download the latest version of mBlock 5 PC.

Get mBlock 5 [here](http://www.mblock.cc).&#x20;

2）Connect Codey Rocky to mBlock 5 for PC and update the firmware.

3）Try to connect Codey Rocky to your phone or iPad again.

### 5. When I connect Codey Rocky to an iPhone or iPad, mBlock 5 shows “Unidentified firmware”. How do I solve the problem? <a href="#id-5-when-i-connect-codey-rocky-to-an-iphone-or-ipad-mblock-5-shows-unidentified-firmware--how-do-i-sol" id="id-5-when-i-connect-codey-rocky-to-an-iphone-or-ipad-mblock-5-shows-unidentified-firmware--how-do-i-sol"></a>

Temporary solution: Restart your phone/iPad and Codey Rocky. Try connecting again.

### 6. Can I update the firmware of Codey Rocky in the mBlock 5 app? <a href="#id-6-can-i-update-the-firmware-of-codey-rocky-in-the-mblock-5-app" id="id-6-can-i-update-the-firmware-of-codey-rocky-in-the-mblock-5-app"></a>

We currently do not support updating the firmware on phones, but we will roll out this feature later.

### 7. I cannot save projects to desktop and the Virus & Threats Center pops up telling me “Unauthorized changes blocked”. <a href="#id-7-i-cannot-save-projects-to-desktop-and-the-virus--threats-center-pops-up-telling-me-unauthorized-ch" id="id-7-i-cannot-save-projects-to-desktop-and-the-virus--threats-center-pops-up-telling-me-unauthorized-ch"></a>

You need to reset the computer system. Close Windows Defender or add mBlock. exe to the trusted list of Defender.

### 8. Codey Rocky has connectors at its back. What’s the function? <a href="#id-8-codey-rocky-has-connectors-at-its-back-whats-the-function" id="id-8-codey-rocky-has-connectors-at-its-back-whats-the-function"></a>

Codey Rocky has Pogo Pins magnetic connectors at its back, enabling it to be compatible with Neuron. Users are able to use mBlock 5 to control Codey Rocky and Neuron simultaneously.

### **9. The Bluetooth dongle failed to connect. What’s the problem?** <a href="#id-9-the-bluetooth-dongle-failed-to-connect-whats-the-problem" id="id-9-the-bluetooth-dongle-failed-to-connect-whats-the-problem"></a>

1）Put your Codey close to the Bluetooth dongle and it will automatically pair with Codey. When the dongle stops flashing, it means that the dongle is successfully connected.

2）Press the button on the dongle and put your Codey close to the dongle. When the blue light stops flashing, it means the dongle is successfully connected. Then you can connect the device to the mBlock 5.

### **10. Why can’t I upload the programs?** <a href="#id-10-why-cant-i-upload-the-programs" id="id-10-why-cant-i-upload-the-programs"></a>

1）Make sure your Codey Rocky is successfully connected;

2）If you connect your Codey Rocky via a Bluetooth dongle, first check if the dongle is flashing (light flashing means failed connection). If it is flashing, turn the dongle off and connect again.

3）If you don’t have the problems mentioned above, then connect your Codey Rocky with the software and make sure you select the correct serial port (if there are several ports, try each of them to see if it is the correct one).

### **11. I get a blank white screen when I start the mBlock 5. What’s the problem?** <a href="#id-11-i-get-a-blank-white-screen-when-i-start-the-mblock-5-whats-the-problem" id="id-11-i-get-a-blank-white-screen-when-i-start-the-mblock-5-whats-the-problem"></a>

The mBlock uses openGL so a low version of graphics driver might lead to a white screen. To solve the problem. you can use DriverGenius to update your graphics driver.

### **12. After I installed the software and clicked Connect Your Device, a pop-up window showed that the device was not enabled.** <a href="#id-12-after-i-installed-the-software-and-clicked-connect-your-device-a-pop-up-window-showed-that-the-de" id="id-12-after-i-installed-the-software-and-clicked-connect-your-device-a-pop-up-window-showed-that-the-de"></a>

Some antivirus programs or security software might block the mBlock 5 to connect to ports. That’s why you couldn’t enable the device. So we suggest that you temporarily disable or exit the antivirus programs when you are running the mBlock.

### **13. My laptop comes with Bluetooth. Can I connect Codey Rocky to the laptop via Bluetooth?** <a href="#id-13-my-laptop-comes-with-bluetooth-can-i-connect-codey-rocky-to-the-laptop-via-bluetooth" id="id-13-my-laptop-comes-with-bluetooth-can-i-connect-codey-rocky-to-the-laptop-via-bluetooth"></a>

Makeblock provides an official Bluetooth dongle so you can use it for wireless connection. To ensure better experience, Codey Rocky only supports the Bluetooth dongle that’s provided by Makeblock. Therefore, we recommend that you purchase the Makeblock Bluetooth dongle if you expect better wireless connection and faster uploading. By the way, you won’t need a Bluetooth dongle if you run programs on mobile devices (Phone/iPad).

### **14. Does Codey Rocky support online testing? Do I have to upload offline to run the programs?** <a href="#id-14-does-codey-rocky-support-online-testing-do-i-have-to-upload-offline-to-run--the-programs" id="id-14-does-codey-rocky-support-online-testing-do-i-have-to-upload-offline-to-run--the-programs"></a>

Yes, Codey supports online testing now. But note that in Mac systems, after you connect Codey to mBlock 5 in the live mode, you need to switch to the upload mode first and then back to the live mode to enable the live mode.

### **15. Is Codey Rocky controlled by Scratch? Is face recognition supported?** <a href="#id-15-is-codey-rocky-controlled-by-scratch-is-face-recognition-supported" id="id-15-is-codey-rocky-controlled-by-scratch-is-face-recognition-supported"></a>

Codey Rocky works with mBlock 5, the companion software developed by Makeblock.

Inspired by Scratch 3.0, mBlock 5 not only supports graphical programming but also allows users to program with Python. Moreover, mBlock 5 has AI blocks that support technologies like face recognition and speech recognition.

### **16. Can I find any app available on mobile devices?** <a href="#id-16-can-i-find-any-app-available-on-mobile-devices" id="id-16-can-i-find-any-app-available-on-mobile-devices"></a>

Codey Rocky supports mBlock 5 PC.

To download it, please visit [here](http://www.mblock.cc/software/mblock/mblock5/).&#x20;

It also supports mBlock 5 for Phone/Pad. Search mBlock 5 in app stores to download. mBlock 5 is available for iOS.

Makeblock app is available for iOS and Android.

### **17. The IoT feature didn’t work. What’s the problem?** <a href="#id-17-the-iot-feature-didnt-work-whats-the-problem" id="id-17-the-iot-feature-didnt-work-whats-the-problem"></a>

You will need the cloud server if you want to use the IoT feature.

So you have to create an account for mBlock 5 first, sign in and connect to the network. Then, you can use the IoT feature.

How to sign up: click on the icon in the top right corner of mBlock 5 to sign up.

### **18. What should I do to add the IoT blocks?** <a href="#id-18-what-should-i-do-to-add-the-iot-blocks" id="id-18-what-should-i-do-to-add-the-iot-blocks"></a>

First, select Devices on the tab. Next, click the plus button + in the Blocks area to add the extension. There, you can find the IoT block.

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-24-49.png)

### **19. I want details about the IoT feature. Where can I get access to example courses?** <a href="#id-19-i-want-details-about-the-iot-feature-where-can-i-get-access-to-example-courses" id="id-19-i-want-details-about-the-iot-feature-where-can-i-get-access-to-example-courses"></a>

To help you better understand what Codey Rocky can do, we’ll roll out example programs next. Stay tuned for more!

### **20. Is my Codey Rocky covered by warranty? How long is the warranty ?** <a href="#id-20-is-my-codey-rocky-covered-by-warranty-how-long-is-the-warranty" id="id-20-is-my-codey-rocky-covered-by-warranty-how-long-is-the-warranty"></a>

Makeblock provides a 6-month warranty for electronic products and a 3-month warranty for motors. Other accessories are not covered by warranty (including structural parts, consumables, batteries, etc.) but we will send you replacements if there is damage to these parts due to manufacturing problems.

### **21. Where can I get help if I run into issues?** <a href="#id-21-where-can-i-get-help-if-i-run-into-issues" id="id-21-where-can-i-get-help-if-i-run-into-issues"></a>

Please contact technical support via emailing to <inquiry@pakronics.com.au>

### **22. Does the sound sensor only detect whether there is a sound?** <a href="#id-22--does-the-sound-sensor-only-detect-whether-there-is-a-sound" id="id-22--does-the-sound-sensor-only-detect-whether-there-is-a-sound"></a>

It can detect the volume of sound.

### **23. The system shows: Your graphics driver version is too low. Please update it and try again.** <a href="#id-23-the-system-shows-your-graphics-driver-version-is-too-low-please-update-it-and-try-again" id="id-23-the-system-shows-your-graphics-driver-version-is-too-low-please-update-it-and-try-again"></a>

To update the graphics driver, you can get help from other software like DriverGenius or directly download the latest official graphics driver.

The same problem might occur if you open the mBlock 5 instantly after you start the computer. It is because that it takes time for the system driver programs to work.

Solution: Restart the mBlock 5.

### **24. I installed mBlock 5 on my Mac and tried to connect Codey to the software. But I got a "System Extension Blocked" notification and the connection failed. How to solve the problem?** <a href="#id-24-i-installed-mblock-5-on-my-mac-and-tried-to-connect-codey-to-the-software-but-i-got-a-system-exte" id="id-24-i-installed-mblock-5-on-my-mac-and-tried-to-connect-codey-to-the-software-but-i-got-a-system-exte"></a>

Go to System Preferences->Security & Privacy. You will see the "System software from Jiangsu Qinheng Co. Ltd was blocked from loading" notification. Click the button "Allow" and try again.

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-28-20.png)

### **25. After I connect Codey Rocky to mBlock 5 on Mac, it shows that no serial port is detected.** <a href="#id-25-after-i-connect-codey-rocky-to-mblock-5-on-mac-it-shows-that-no-serial-port-is-detected" id="id-25-after-i-connect-codey-rocky-to-mblock-5-on-mac-it-shows-that-no-serial-port-is-detected"></a>

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-29-14.png)

If this is the first time that you install mBlock 5 on the computer and you came across this problem, you can open System Preferences and adjust Security & Privacy. As shown below:

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-29-56.png)

Click Allow and restart the mBlock 5. Connect Codey Rocky to mBlock 5 and serial ports will be detected this time.

**Note: Only when the lock at the bottom is locked on and the second option is checked off, can the option Allow be available for being selected. So you need to check off the second option（App Store and authorized developers), and make sure the button lock at the bottom is locked on.**

### **26. When I download mBlock in the system of MacOS High Sierra 10.13 or later versions, it shows that no serial driver can be detected and the software can’t connect to Codey, mBot or other hardware.** <a href="#id-26-when-i-download-mblock-in-the-system-of-macos-high-sierra-1013-or-later-versions-it-shows-that-no" id="id-26-when-i-download-mblock-in-the-system-of-macos-high-sierra-1013-or-later-versions-it-shows-that-no"></a>

The macOS High Sierra 10.13 or later versions require user approval before loading new third-party kernel extensions. mBlock uses CH340 serial driver so it will fail to connect to Codey or mBot if the extension loading is not approved by users.

Find the apple notice at: <https://developer.apple.com/library/content/technotes/tn2459/_index.html>

**Solution:**

1.Start the terminal: Finder --> Go --> Utilities --> Terminal

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-31-20.png)

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-31-46.png)

2.Copy：sudo kextload /Library/Extensions/usbserial.kext/

3.Paste the line to the terminal and hit Enter. If a command Password shows up, input your computer password and hit Enter. The screenshots are as below:

Paste

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-32-34.png)

Input the computer password and hit Enter

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-33-07.png)

4.Open：Preference --> Security & Privacy --> General, and you will find a notice that System Software from developer “jiangsu Qinheng Co. Ltd” was blocked from loading. Click the button Allow as shown below:

![](http://docs.makeblock.com/codeyrocky/en/faq/2018-12-03-15-33-57.png)

**Reminder:**

mBlock 5 of later versions will be accessible at App Store. Users can download later versions at Apple Store to get the problem solved thoroughly (update time to be determined)

If you are to download mBlock 3, you still have to stick to the solution to solve the driver problem.


# Edison

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mDQwx3rBZGa6EtW2X%2F-M-mIOwpGreg89Qn_jmK%2Fimage.png?alt=media\&token=ae87da1c-fae1-4ca8-a17d-dac3c4f1004d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mDQwx3rBZGa6EtW2X%2F-M-mIRyUA8unkcFl1666%2Fimage.png?alt=media\&token=c39bb006-319d-44bd-842d-fcb6d1bd260a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mDQwx3rBZGa6EtW2X%2F-M-mIUUxYpIgVgzItpgH%2Fimage.png?alt=media\&token=ada70174-e3d4-4b4e-8619-cc5240bc52a5)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mDQwx3rBZGa6EtW2X%2F-M-mIX122-mJb5IuG0TV%2Fimage.png?alt=media\&token=4e5df2b0-84ac-40cf-9907-c64d3603d733)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mDQwx3rBZGa6EtW2X%2F-M-mIZEjRKxc-qgvt2CT%2Fimage.png?alt=media\&token=a3d22fc7-ddb5-4257-99e2-74a5677ef112)

Learning Materials

<https://meetedison.com/content/EdBlocks-teachers-guide-complete.pdf>

<https://meetedison.com/content/EdBlocks-lesson-activities-complete-set.pdf>

<https://meetedison.com/content/EdScratch/EdScratch-teachers-guide.pdf>

<https://meetedison.com/content/Australian-Curriculum-v8.3-EdBlocks-062017.pdf>&#x20;


# mBot


# Introduction

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PoXXHDhuLlnvxeS7%2F0.jpeg?generation=1570958428805625\&alt=media)

**Introduction**

As Makeblock's award-winning programming robot, mBot has taken the heart of over 4,500,000 children around the world. Not only do children adore mBot's loving appearance, but they also love playing with it.

With a screwdriver and step-by-step instructions, children can build their own robot from scratch and enjoy the fun of hands-on creation. The building process provides a perfect opportunity to introduce kids to the basics of robotic machinery and electronic parts. They can easily get started with block-based programming to play with mBot.

**Use mBlock 5**

Use mBlock 5 to play with your mBot. Graphical programming is ideal to show kids the magic of programming. As they progress, they can even further delve into more complicated Arduino C programming.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PoXYvyrM6-hLGM3v%2F1.png?generation=1570958428828346\&alt=media)

You can get mBlock 5 on your PC, phones and tablets, or use mBlock 5 in a web browser.

* For PC, please visit: <http://www.mblock.cc/mblock-software/>
* For Android and iOS, please search "mblock" in any application store to download
* For web browser, please visit: <https://ide.makeblock.com/>


# Building mBot

**Building mBot**

* [Parts list](http://docs.makeblock.com/mbot/en/tutorials/building.html#parts-list)
* [Use of screwdriver](http://docs.makeblock.com/mbot/en/tutorials/building.html#use-of-screwdriver)
* [Main board](http://docs.makeblock.com/mbot/en/tutorials/building.html#main-board)
* [Building instructions](http://docs.makeblock.com/mbot/en/tutorials/building.html#building-instructions)

**Parts list**

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PyslEDIYZv9WV1dD%2F0.png?generation=1570958471258809\&alt=media)

**Use of screwdriver**

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PysmEalXrrsnUS40%2F1.png?generation=1570958471289765\&alt=media)

**Main board**

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PysniUBTdFZJXz5O%2F2.png?generation=1570958471264278\&alt=media)

**Building instructions**

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PysoN0_5dzX5tDCz%2F3.png?generation=1570958471246634\&alt=media)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Pysp1jfsWW-Y-P5f%2F4.png?generation=1570958471228866\&alt=media)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PysqwbBt4mlwy2Qo%2F5.png?generation=1570958471270116\&alt=media)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PysrBdBkJQixcm0z%2F6.png?generation=1570958471345198\&alt=media)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Pyss1D8zRHu7SHkA%2F7.png?generation=1570958471351557\&alt=media)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Pyst3FyqWG2Qd0Ih%2F8.png?generation=1570958471287792\&alt=media)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3PysutH67AsE-XgG2%2F9.png?generation=1570958471281303\&alt=media)


# Connect mBot

You can connect mBot to mBlock 5 via the USB or Bluetooth 4.0.

* [Method one: via the USB](http://docs.makeblock.com/mbot/en/tutorials/connect.html#method-one-via-the-usb)
* [Method two: via Bluetooth 4.0](http://docs.makeblock.com/mbot/en/tutorials/connect.html#method-two-via-bluetooth-40)

**Method one: via the USB**

1\. Use the USB Cable that came with mBot to connect your mBot to a USB port on you computer.

2\. Power on your mBot.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIR8oU27sEsng-FR%2F0.png?generation=1570958555553093\&alt=media)

3\. Under "Devices", click "add", and choose "mBot" from the pop-up Device Library window.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIR9R7VXkfcHoctH%2F1.png?generation=1570958555477332\&alt=media)→ ![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIRAFYlKjZNvglzI%2F2.png?generation=1570958555477850\&alt=media)

4\. Click "Connect", and from the pop-up device connection window, click "Connect" under "USB".

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIRBTzwh_PSIDtcG%2F3.png?generation=1570958555477130\&alt=media)→ ![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIRCdJ7Gq9gxsprq%2F4.png?generation=1570958555481030\&alt=media)

**Method two: via Bluetooth 4.0**

System requirements:

* **Windows**: the version of Bluetooth must be 4.0; for other Bluetooth versions, a Bluetooth 4.0 adapter is recommended (refer to [Bluetooth 4.0 Adapter](http://www.mblock.cc/doc/en/part-one-basics/connect-devices.html#3-bluetooth-40-instructions-for-windows-users) for detailed instructions)
* **Mac OS**: support most Mac OS models

1\. Power on your mBot.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIRDP3Iis5nuDaBs%2F5.png?generation=1570958555559414\&alt=media)

2\. Turn on the Bluetooth on your PC.

* Windows: on the task bar, select **action center** > **Bluetooth**
* Mac OS: choose **Apple menu** > **System Preferences**, then click **Bluetooth**

3\. Under "Devices", click "add", and choose "mBot" from the pop-up Device Library window.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIREidOBBarPFFtK%2F6.png?generation=1570958555480613\&alt=media)→ ![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIRFwZXNwP-96O3J%2F7.png?generation=1570958555486185\&alt=media)

4\. Click "Connect", and from the pop-up device connection window, click "Connect" under "Bluetooth 4.0".

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIRGXTwcrHLg0mvX%2F8.png?generation=1570958555483617\&alt=media)→ ![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3QIRHVRQRtLkZOTeR%2F9.png?generation=1570958555531031\&alt=media)


# Preset Modes

There are three preset modes of mBot:

* [Obstacle avoidance](http://docs.makeblock.com/mbot/en/tutorials/preset-modes.html#obstacle-avoidance-mode)
* [Infrared remote control](http://docs.makeblock.com/mbot/en/tutorials/preset-modes.html#infrared-remote-control-mode)
* [line-following](http://docs.makeblock.com/mbot/en/tutorials/preset-modes.html#line-following-mode)

Switch modes using the **infrared remote controller or the on-board button**.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Q9G00oDaXtg-xo_E%2F0.png?generation=1570958517725189\&alt=media)

The color of the LED on the main board indicates the current mode:\
![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Q9G1T_HJ4l_dD1_h%2F1.png?generation=1570958517694389\&alt=media) White: infrared remote control mode\
![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Q9G20AIqmiiVX3Gq%2F2.png?generation=1570958517698370\&alt=media) Green: obstacle avoidace mode\
![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Q9G3Ej0UZU9LUAtu%2F3.png?generation=1570958517697502\&alt=media) Blue: line-following mode

**Obstacle avoidance mode**

In obstacle avoidance mode, mBot moves and avoids obstacles autonomously.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Q9G4ha1snwTIDJ3S%2F4.png?generation=1570958517721959\&alt=media)

**Infrared remote control mode**

A special infrared remote controller is included in the package. You can use the controller to control mBot, such as speed, direction, and others.

**Note: place your mBot on a piece of smooth and flat ground.**

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Q9G5Bf3HB0UwM5sr%2F5.png?generation=1570958517729723\&alt=media)

**Line-following mode**

In line-following mode, mBot moves autonomously along the black lines on the map.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-Lr3P7cSyZ6XnRQv1DsI%2F-Lr3Q9G6keASFI9gSRPs%2F6.png?generation=1570958517685142\&alt=media)


# Microbit

Small power full microcontroller with amazing potential for school. It supports Graphical and Python programming language.

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mIvPRYYw7A9xn2wYn%2F-M-mJBrSC8dpnVBCJb_e%2Fimage.png?alt=media\&token=961ac718-da0c-48d5-a30d-5c1dbc92e1fe)

## Key Features:&#x20;

* **Small micro-controller board designed by BBC for use in computer education in the UK**&#x20;
* **Bunch of sensors, buttons and display are packed on 4cm x 5cm board**&#x20;
* **Online programming tool and eco-system of learning material makes it ideal kit for school students**
* **Online emulator makes it convenient to learn programming even without the board**

## Hardware

* 25 individually-programmable LEDs – Create icons, display scrolling text or numbers or even graphs!
* 2 programmable buttons – Use them as input and trigger a piece of code on the device
* Physical connection pins – Connect external components like a motor, speaker or LEDs
* Light and temperature sensors – Measure physical parameters to make light and temperature dependent systems
* Motion sensors (accelerometer and compass) – Measure the acceleration, movement, shake or tilt of the Micro:bit board and use them as trigger in your code; Compass lets you detect the direction your board is facing!
* Wireless Communication, via Radio and Bluetooth – Communicate with PC, mobile or other&#x20;
* Micro:bit wirelessly USB interface – Connect to your PC and download code to it.

![Block editor for Microbit](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mIvPRYYw7A9xn2wYn%2F-M-mKajf3hsjdnVF-KNe%2Fimage.png?alt=media\&token=a61611f4-60f9-484e-aff4-a6a8623bb8c6)

## What do we need?

&#x20;Computer with internet connection, Micro:bit, USB cable

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mIvPRYYw7A9xn2wYn%2F-M-mL-VmHy9aaIlYjw1k%2Fimage.png?alt=media\&token=397fff58-4f1f-4376-8028-74c8a4c5e7bc)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-M-mIvPRYYw7A9xn2wYn%2F-M-mL2R-s5cGfSuiKrvo%2Fimage.png?alt=media\&token=a9ff5264-778f-4ea6-8054-f6d39ebb2375)

## Online course

{% embed url="<https://www.pakronics.com.au/collections/microbit-online-course>" %}

## Resource

{% embed url="<https://makecode.microbit.org/>" %}


# Merge Cube

MERGE enables active learning by enabling students to learn and create in entirely new ways while giving teachers simple AR/VR tools that increase student engagement, intellectual curiosity and classr

## Bring Learning to Life

MERGE enables active learning by enabling students to learn and create in entirely new ways while giving teachers simple AR/VR tools that increase student engagement, intellectual curiosity and classroom achievement.At the core is the MERGE Cube - a mixed reality school supply that extends learning beyond the limitations of device screens by giving students the ability to interact with virtual objects.

{% embed url="<https://youtu.be/4RiMiAUI3G4>" %}

{% embed url="<https://www.pakronics.com.au/collections/merge-cube-vr>" %}


# Bare Conductive Board

Make interactive projects with touch board, starter kit & conductive paint.

{% embed url="<https://youtu.be/dKFRweXei90>" %}

{% embed url="<https://www.pakronics.com.au/collections/bare-conductive-australia-1>" %}

Get started with Conductive Paint starter kit - <https://www.pakronics.com.au/collections/bare-conductive-australia-1>


# Tello Edu

{% embed url="<https://youtu.be/FVYxxHn8R-k>" %}

## Tello EDU

Tello EDU is an impressive and programmable drone perfect for education. You can easily learn programming languages such as Scratch, Python, and Swift. With an upgraded SDK 2.0, Tello EDU comes with more advanced commands and increased data interfaces. Complete with DJI’s flight control technology, Tello EDU also supports Electronic Image Stabilization. Write code to command multiple Tello EDUs to fly in a swarm, and develop amazing AI functions. Programming has never been this fun with Tello EDU!

![720P HD Transmission](https://static.dbeta.me/stormsend/uploads/32f62210-bfff-0136-c0e4-22000a969061/PC1.svg)

#### 720P HD Transmission

![5 MP Photos](https://static.dbeta.me/stormsend/uploads/35e254d0-bfff-0136-c0e5-22000a969061/PC2.svg)

#### 5 MP Photos

![13-min Flight Time](https://static.dbeta.me/stormsend/uploads/392576c0-bfff-0136-c0e6-22000a969061/PC3.svg)

#### 13-min Flight Time

![Precise Hovering](https://static.dbeta.me/stormsend/uploads/3c038220-bfff-0136-c0e7-22000a969061/PC4.svg)

#### Precise Hovering

![Program a Swarm of Drones](https://static.dbeta.me/stormsend/uploads/44153600-bfff-0136-c0e8-22000a969061/PC5.svg)

#### Program a Swarm of Drones

![Mission Pads Offer Multiple Fun Uses](https://static.dbeta.me/stormsend/uploads/45c73910-bfff-0136-c0e9-22000a969061/PC6.svg)

#### Mission Pads Offer Multiple Fun Uses

![Multiple Flight Mode](https://static.dbeta.me/stormsend/uploads/480fc7f0-bfff-0136-c0ea-22000a969061/PC7.svg)

#### Multiple Flight Mode

![Unlock More Possibilities with SDK](https://static.dbeta.me/stormsend/uploads/4a3ef8f0-bfff-0136-c0eb-22000a969061/PC8.svg)

#### Unlock More Possibilities with SDK

## Drone Swarm

You can program multiples Tello EDUs simultaneously through one device. Use code to control a swarm of Tello EDUs, have them fly over Mission Pads, and perform flips and other acrobatic movements. Improve your programming skills while pushing the limits of your creativity!

## Advanced Programming

Mission Pads are a fantastic asset for increased programming precision. They serve not only as guiding points, but as trigger mechanisms. Program with the specific information within each Mission Pad to expand your options and push the limits of Tello EDU. You can write code that will enable your aircraft to recognize each Missions Pad’s unique ID, as well as perform aerial acrobatics. Control a swarm of Tello EDUs, and bring your imagination to life.

[\* Click here to see how Mission Pads are used](https://www.ryzerobotics.com/tello-edu/downloads)

## Discover More with AI

Access video stream data with Tello EDU, creating more possibilities for image processing and AI development. The new SDK 2.0 allows you to develop Tello EDU further, realizing more AI functions such as object recognition\*, tracking, 3D reconstruction through programming, computer vision, and deep learning technologies.[\* Click here to view sample code.](https://github.com/dji-sdk/Tello-Python)

## Programming Simplified

Tello EDU supports block programming. Simply drag coding blocks on the screen to program Tello EDU and enable certain movements. Additionally, the Tello Space Travel tutorial teaches you how to use the Swift programming language to code on your iPad while following a fun storyline. This space adventure is available via the Swift Playgrounds app. Team up with Tello EDU to explore the universe!

[\* Click here to download the Swift Playgrounds app.](https://www.apple.com/cn/swift/playgrounds)

{% embed url="<https://www.pakronics.com.au/collections/tello-edu>" %}


# Secondary


# Microbit Grove Inventor Kit

Extension kit for your Microbit. Grove eco-system is one of the largest eco-system that includes plug and play modules and supports multiple programming language through various compatible hardwares.

The Grove Inventor Kit for Micro:bit brings endless possibilities to your micro:bit. The core board in this kit is the Grove shield for micro:bit, with which you can use plenty of Grove modules including sensors, display, actuator to interact with micro:bit. If you never used and have no idea what grove is, here is the [introduction of Grove](http://wiki.seeed.cc/Grove_System/). All you need to know is that with Grove, there is no need of soldering or jump wires any more. Your prototyping will be easier and much more convenient.

We have already prepare 10 grove modules to let you get started with micro:bit. With these grove modules, you can measure distance and display it, use gesture to play different music, or make a smart guard for your desk or room. If you are a beginner to micro:bit, don’t worry because we have prepare 12 different project which will teach you step by step. If you are an advanced user, this kit will help you more creative project than others.&#x20;

**12 Projects**<br>

* Control the Light
* Sunshine micro:bit
* LED Bar Controller
* Music Player
* Gesture Recognition
* Smart Guard
* Shake Counter
* Ultrasonic Meter
* Rainbow on The Desk
* Guardians of The Secrets in Your Bag
* Guardians of The Secrets in Your Room
* Magic Musician


# mBot Ranger


# Arduino Science Kit


# Arduino Starter Kit


# Arduino Grove Starter Kit


# CoDrone


# Senior Secondary

&#x20;


# CoDrone Pro

Resources and troubleshooting for using CoDrone Pro in your classroom.

CoDrone Pro with Blockly programming - <https://learn.robolink.com/course/codrone-with-blockly/>

CoDrone Pro  with Arduino programming - <https://learn.robolink.com/course/codrone-with-arduino/>

CoDrone Pro with Python programming - <https://learn.robolink.com/course/codrone-with-python/>

Purchase <https://www.pakronics.com.au/products/codrone>&#x20;


# Arduino CTC Go


# Digital Tech Kits


# Digital Tech Kit for K-2

{% content-ref url="/pages/-Lr36XwjoleCCSTw4m7P" %}
[Bee Bot](/early-primary/bee-bot)
{% endcontent-ref %}

{% content-ref url="/pages/-Lr36hvXCqsHos6fxens" %}
[Ozobot](/early-primary/ozobot)
{% endcontent-ref %}


# Digital Tech Kit for 3-5


# Digital Tech Kit for 6-8


# Digital Tech Kit for 9-10


# Makerspace


# Otto DIY

An interactive robot that you can make with 3D print or Laser cut enclosures that is powered by Arduino board which you can program with Graphical or Arduino code.

{% embed url="<https://youtu.be/WRwl8_skT1U>" %}
OTTO DIY&#x20;
{% endembed %}

## Why is Otto special?

\
Otto is truly Opensource; it means the hardware is easily discerned so that others can freely make it, compatible with Arduino, easy to 3D print and customize, and therefore, the perfect opportunity to build your very first robot, learn robotics and have fun. the act of building and coding your own Otto will create an emotional connection, feel of ownership and improves the learning.\
\
Otto is a robot that brings people closer to technology. learn the logical connection between code and action and by assembling it, they understand how its mechanical components, and electronics work.\ <br>

![OTTO DIY bipod robot Australia Pakronics](https://cdn.shopify.com/s/files/1/0735/0383/files/otto1_600x600.png?v=1579732566)

![OTTO DIY BIPOD robot australia pakronics](https://cdn.shopify.com/s/files/1/0735/0383/files/otto2_480x480.png?v=1579732574)


# User guide

Otto DIY Maker kit with Arduino Nano Every

Pakronics® sells Otto-DIY robots with Arduino ***Nano Every*** boards. While both boards and pin-wise compatible, there are few differences between the two Arduino variants, as listed below:

| Parameter | Arduino Nano | Arduino Nano Every |
| --------- | ------------ | ------------------ |
| Processor | ATmega328P   | ATmega4809         |
| Flash     | 32KB         | 48KB               |
| SRAM      | 2KB          | 6KB                |
| EEPROM    | 256B         | 1024B              |

## Otto Kit variants:

Otto-DIY Robot Kits are available in the following four variants depending upon the mechanical and electronic components:

| Parts \| Variants | Maker | Maker+ | Humanoid | Eye/LED |
| ----------------- | ----- | ------ | -------- | ------- |
| Arduino           | X     | X      | X        | X       |
| Shield            | X     | X      | X        | X       |
| Servos            | 4     | 4      | 6        | 4       |
| Buzzer            | X     | X      | X        | X       |
| Switch            | X     | X      | X        | X       |
| Ultrasonic Sensor | X     | X      | X        |         |
| Touch Sensor      |       | 3      | 1        | 1       |
| Sound Sensor      |       | X      | X        |         |
| Bluetooth         |       | X      | X        |         |
| LED Matrix (8x8)  |       |        | X        |         |
| LED Matrix (16x8) |       |        |          | X       |

## Connection of components – Otto Robot Assembly

Across all the four variants of Otto-DIY Robots, buzzer, switch and Servos are common. Following the connection guide:

* Servos
  * 4 servos for foot and legs are connected to pin 2, 3, 4 and 5 respectively
  * 2 servos for hands (Humanoid only) are connected to pin 6 and 7
* Buzzer is connected to pin 13
* Battery switch is connected with Vin and Ground to supply the Arduino board through battery power.
* Ultrasonic sensor is connected to pin 9 (Maker, Maker+ and Humanoid)
* Sound sensor is connected to Analog pin A6 (Maker+ and Humanoid only)
* Touch sensor is connected to Analog pin A0 (Maker+, Maker-Eye and Humanoid)
* 8x8 LED matrix uses pin A1, A2 and A3 (Humanoid only)
* Accelerometer / Gyro uses pin A4 and A5 (Humanoid only)
* 16x8 LED matrix is connected to I2C port (Eye only)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fpakronics-education%2F-M-hDTxg7SD8Bpni_ARg%2F-M-hMuadnJl1VX7-5hxC%2F4.png?generation=1581309210792384\&alt=media)

{% file src="/files/-MCK-sd2bzxFU3kfPpmj" %}


# Assembly Instructions


# Builder Kit

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CNCH4P5bmQSZqh3R%2FScreenshot_1.png?alt=media\&token=662739f5-55ba-4c7f-a49f-3dce6bf7365a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CQROmt_veaJq0J9q%2FScreenshot_2.png?alt=media\&token=bcf3e1c8-5d1a-48a4-97f7-f2c38ad33c80)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CUZVDj2WuE7ttEAw%2FScreenshot_3.png?alt=media\&token=edcf6e36-b7df-41b9-86ee-ee3b1bec6f43)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CXNss5QdhgHhuCy_%2FScreenshot_4.png?alt=media\&token=745441f5-3336-4dc5-b803-33168e698d7c)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CZjmJ2-hzTx9Ux58%2FScreenshot_5.png?alt=media\&token=30dde50f-b4d8-43e3-b560-af4e6fed6a86)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CbBFSwPDRohOUssG%2FScreenshot_6.png?alt=media\&token=504fa6b6-43aa-4af3-a6b5-a84dd14bc099)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2Cds-4Gna6D5GPSuJ%2FScreenshot_7.png?alt=media\&token=ab47d993-80b4-4263-8188-4c0388561371)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CgI9sWVXcdVE9yAH%2FScreenshot_8.png?alt=media\&token=1fa71b60-4c6c-4fc5-a05b-33967847be6e)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CiXUkt2qOcYBd-CK%2FScreenshot_9.png?alt=media\&token=82cb222e-12ea-4fce-8889-08c4af82b646)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CkqZCECsin3cXkih%2FScreenshot_10.png?alt=media\&token=3c4bb836-a013-494a-bc48-6f4190838466)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CnpvdPxYjUQRZV_I%2FScreenshot_11.png?alt=media\&token=ba51d565-f639-45d8-8c99-d4659c234f0d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CqaKxHZgIEnVL5ck%2FScreenshot_12.png?alt=media\&token=3725f769-1194-4a94-9517-6b09b11a251f)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2Ct4wqpy0hikbrzTz%2FScreenshot_13.png?alt=media\&token=739199ed-b55a-43fd-a37c-bce15c97e746)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2CvPywcKNkuUUy7-I%2FScreenshot_14.png?alt=media\&token=3a18c34f-8a1a-4b86-af98-9acf8c76f347)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2Cy8Eo5o71Mp_4Ex3%2FScreenshot_15.png?alt=media\&token=e741d0b6-bae5-4306-a364-873ea3d88558)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2D-VejScACQBPZJjx%2FScreenshot_16.png?alt=media\&token=3e36cf24-7d2e-4aee-a59f-d58f8412bb9d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2D2YJyWf58RFDDb9D%2FScreenshot_17.png?alt=media\&token=2359a49c-01b9-426f-b8d8-e6bf6af2815a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2D5HJW-37debj0pN1%2FScreenshot_18.png?alt=media\&token=ce87ad89-18f7-48f5-be1c-8f61dcc7969c)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2D807ddQ1vWq-8tW6%2FScreenshot_19.png?alt=media\&token=41534e05-0d04-454b-a40b-9c8bbf968017)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DAuLZ651tDTv2sAK%2FScreenshot_20.png?alt=media\&token=4358b8a6-0581-400a-8329-3fbab0679376)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DDIDvrhRGOr8WEjq%2FScreenshot_21.png?alt=media\&token=c15c1435-454f-478c-8dff-a6bcfe09e9a4)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DGL-_IKWsGOUezwl%2FScreenshot_22.png?alt=media\&token=4ccfb2c2-541d-4313-8002-302f373861be)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DIsDEUa-9XU4RtMF%2FScreenshot_23.png?alt=media\&token=6e8981c7-304e-4dd4-8c2e-4fcc42358259)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DM3URtUDKxNwsYyg%2FScreenshot_24.png?alt=media\&token=4e44e570-2474-4592-bebd-bcbf5f63a8da)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DO_Gv7WTIbWaNMd3%2FScreenshot_25.png?alt=media\&token=76a5f141-25ca-452a-8291-52dbfb2c7b4b)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DS6honE6MKI6WNu4%2FScreenshot_26.png?alt=media\&token=fe7de866-1095-4d20-a5d7-d9d1c3df972b)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DV0f7otbT0GEJUb5%2FScreenshot_27.png?alt=media\&token=f515ab7c-189b-4061-9d07-5f49ebd4e07d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2DXX5mhIm3TfT0s38%2FScreenshot_28.png?alt=media\&token=8f17aa09-f129-4229-85ad-3bc8e81d2a38)

The above instructions have been sourced from [OttoDIY.com](https://www.ottodiy.com/)

You can find the printable assembly instructions here.

{% file src="/files/-Ly2DiFFgLBBo\_1uCkay" %}
Printable Assembly Instructions
{% endfile %}


# Builder Kit +

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly26kYmv1UQda5RLBbj%2FScreenshot_1.png?alt=media\&token=3faa77f6-f1b0-41b8-88e1-e5f6039329ec)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly26nT42XKNXpWea34F%2FScreenshot_2.png?alt=media\&token=614e8de4-d959-4370-89a1-b524eca0f52d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly26qNXns6egy2jzoIM%2FScreenshot_3.png?alt=media\&token=1c105238-042c-4bd6-9827-1dda2b742f6f)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly26t_CuZIUYaHcsLRu%2FScreenshot_4.png?alt=media\&token=604778c8-80ca-4284-ad40-8f398b169381)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly26wJ6hfL5XXNXcs5k%2FScreenshot_5.png?alt=media\&token=1eee88ab-b356-4862-a3dc-de0b647cfa92)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly26zPb1N5U8-FnO2kt%2FScreenshot_6.png?alt=media\&token=d18aca5d-ff85-412a-97fe-20c543811cb8)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly271YJxQ6TDKQPTBjJ%2FScreenshot_7.png?alt=media\&token=52f84ba2-7d71-44b5-84e8-01381c46d861)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2749ERAisl1S1I7R6%2FScreenshot_8.png?alt=media\&token=8a12172b-dc9e-444a-b204-44c90b04c1ab)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly276mPyCrycGEIofci%2FScreenshot_9.png?alt=media\&token=03ca202d-8347-403c-9d31-ff924c9849fa)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2797ICLZ0_-WBkiLI%2FScreenshot_10.png?alt=media\&token=13048ded-8592-42a7-b421-8e64352dad15)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27CZoJaPWjyYsb20W%2FScreenshot_11.png?alt=media\&token=b6ba0c92-03c7-4603-a9e9-b46a9709b519)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27FTF0oIErkAzSLIC%2FScreenshot_12.png?alt=media\&token=11a469ec-ce76-42b9-ab0a-b2aed9d51dec)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27INQmO7ES5CqofcL%2FScreenshot_13.png?alt=media\&token=eb8d7022-54ad-46f6-957b-2e65665bed70)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27MINq7ZxALHD0zAk%2FScreenshot_14.png?alt=media\&token=bde7ebb7-a3e9-40ce-8975-78eb9a5847bd)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27PNQiKHnfur0XiEv%2FScreenshot_15.png?alt=media\&token=b5061a86-846d-4c13-b047-79a5739be2b4)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27RsqimGZdxuppBEO%2FScreenshot_16.png?alt=media\&token=45c42aaf-d9ac-4928-b903-d7213a152481)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27UtlxGdQ14jzHefw%2FScreenshot_17.png?alt=media\&token=ad9cbf09-23d5-4278-9fdb-8dea14f4b39a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27Xy-w5spjCEDnsrI%2FScreenshot_18.png?alt=media\&token=00976b1e-d885-49af-80d3-a015af97071d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27_vQIlrOHYukWMiX%2FScreenshot_19.png?alt=media\&token=8196d4df-0fa6-4de5-9b0c-9142bd17ef19)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27czR8sZwmHJm3Jt1%2FScreenshot_20.png?alt=media\&token=7eea22f3-279d-4cde-a916-4e519469f5e7)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27fp7Bvg7-W0ryUhz%2FScreenshot_21.png?alt=media\&token=92ea685b-97cb-4455-ad93-d674b176c79f)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27iWB9WPjXBWKPfTd%2FScreenshot_22.png?alt=media\&token=e8f7914e-5ce8-4a81-85d7-4126be6352a4)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27lJzq_x_0MtmN6J0%2FScreenshot_23.png?alt=media\&token=044e92d1-1b2e-4a5e-8a89-7f271b0d5fff)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27nyBuuOyWaLTh_QB%2FScreenshot_24.png?alt=media\&token=ea2e5173-afa6-435a-a60c-bdf1743177c5)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27qsGXIeMbhqsqPXv%2FScreenshot_25.png?alt=media\&token=2296c2c4-eb12-4e0f-b0c6-d6fc282e1f0a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27u5meIhF1HNx2S0Q%2FScreenshot_26.png?alt=media\&token=9748cf58-db98-454f-b52e-d8b917017cf7)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27wjRBmzh_8KlSThO%2FScreenshot_27.png?alt=media\&token=3deaa33e-4480-407a-9273-ced9ca49d35a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly27zsMPc4CJM4p7LHx%2FScreenshot_28.png?alt=media\&token=56dee8be-87c1-435d-9217-00e364b51369)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly281YZQCpPR1kl6qiH%2FScreenshot_29.png?alt=media\&token=66e2d196-86e9-42e4-9373-9dd59d8a2247)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly284YDB4i7a_Gm45cb%2FScreenshot_30.png?alt=media\&token=c01b136d-f385-4a15-9e87-5c790d71137c)

The above instructions have been sourced from [OttoDIY.com](https://www.ottodiy.com/)

You can find the printable assembly instructions here

{% file src="/files/-LwU3YyXLenv5PHYaWR6" %}
Printable Assembly Instructions
{% endfile %}


# Builder Kit Humanoid

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2903x7wQICV3KLzwS%2FScreenshot_1.png?alt=media\&token=c065dc2e-d5c0-4582-b561-67faac74b79d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly293RbvfGhJq8Ru59L%2FScreenshot_2.png?alt=media\&token=5131cdec-f2a5-4669-af27-a8a933e488c6)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly296Yh_wwL5mIbNb_N%2FScreenshot_3.png?alt=media\&token=0c905ada-250a-4928-8802-3766c97d761d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29A9WtLhdsNyHhBD5%2FScreenshot_4.png?alt=media\&token=91f2702c-0188-4add-b52c-30a8ccd5be68)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29DeS723pr6GKK-s7%2FScreenshot_5.png?alt=media\&token=5cfe6ead-bfa4-487f-a140-a25845ded72b)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29G7UO7cMzMrkHrHP%2FScreenshot_6.png?alt=media\&token=54a0581c-e389-468c-9e95-2fa0e806e3b0)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29JdL4iSxMDe7ga6z%2FScreenshot_7.png?alt=media\&token=c03f54bc-3d0f-4d67-85ad-9e5c80617c2e)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29MwYxUZhM5TZcclC%2FScreenshot_8.png?alt=media\&token=778a121a-fc4b-4aff-9cc8-5e23f5b46f07)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29PF_qKPtXYqPlWBI%2FScreenshot_9.png?alt=media\&token=17de9075-af75-4f10-ae9b-66a605e583d7)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29Rlc-b51prqLU3zG%2FScreenshot_10.png?alt=media\&token=7be61827-bbf0-4635-8391-750be5a5bd5d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29Tmb-Z_oDXRgrASs%2FScreenshot_11.png?alt=media\&token=ca038d75-68ec-42ca-ae78-3760ced67bf7)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29WXw5gFDwe03Y_Tw%2FScreenshot_12.png?alt=media\&token=95ad71ab-8568-492e-a874-0050a8a118fc)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29ZgA13WWkp0shXiN%2FScreenshot_13.png?alt=media\&token=2f1150db-b936-438a-a392-b4f2f77685ab)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29bSxVW_9Bh_7eFaS%2FScreenshot_14.png?alt=media\&token=21e1598d-8883-4c3d-aae9-9b6c1cad5036)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29e63Q88hmVaF9Imd%2FScreenshot_15.png?alt=media\&token=bee92b31-3871-4df9-8061-ee6c7842ea25)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29ggPwHLhvalxNinO%2FScreenshot_16.png?alt=media\&token=1e49dc55-809d-4bdc-829c-5d394e02d177)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29jo6UH2AczsQVmJM%2FScreenshot_17.png?alt=media\&token=1a5ec477-68dd-4dd0-beaa-497cc104a4d1)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29mo33BPPz9bIT1_O%2FScreenshot_18.png?alt=media\&token=261e83e6-64f2-4983-a7ea-cfd4008b676c)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29rYp1rmVUa4wishk%2FScreenshot_19.png?alt=media\&token=828e2c1e-68af-41dd-89db-28eddb211b8b)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29uBDUi3w4iB6Ifkp%2FScreenshot_20.png?alt=media\&token=e75188ad-4344-4a95-89f7-6d6d3a757d83)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly29xBOJ9AUs-Vd5TI1%2FScreenshot_21.png?alt=media\&token=53705faa-c924-4344-bb90-70b564e85d2a)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2A-Nh0y8-PK3soSfO%2FScreenshot_22.png?alt=media\&token=9cd7c92e-08f3-444b-8dc2-2cc562a2c54c)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2A2MbopxEuMpwqiT0%2FScreenshot_23.png?alt=media\&token=15f503ad-8ae3-48a2-a284-a86b4d0dbb31)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2A6ycgG7IOrppMZQr%2FScreenshot_24.png?alt=media\&token=4292eb54-9735-42d7-8f17-3ce6247658af)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2A9hMAlBQlU4BtBIT%2FScreenshot_25.png?alt=media\&token=c32b91d0-aac2-433e-8511-6acec6990e61)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2ACfHK2AD3qkxeugo%2FScreenshot_26.png?alt=media\&token=59240e14-baf2-419f-a41e-a625f2579800)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2AFLhRaZyo-YrLMrZ%2FScreenshot_27.png?alt=media\&token=9ed9c78b-ad57-4a46-a060-0435f3394c15)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2AI6cmg0GxLHA2Lfv%2FScreenshot_28.png?alt=media\&token=4e327743-6863-4623-99e8-6158e79147a3)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2AM1Uw5FUo_Zz0gg3%2FScreenshot_29.png?alt=media\&token=67ea18dc-3c92-46ce-afe4-862f51385700)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly1rCxpX5l8D6l1-PLk%2F-Ly2AP-CiMeeTbrCkr6s%2FScreenshot_30.png?alt=media\&token=86e7f0a9-9308-4f38-8ac9-e73d1d79fe45)

The above instructions have been sourced from [OttoDIY.com](https://www.ottodiy.com/)

You can download the printable assembly instructions here.

{% file src="/files/-LwU3k\_--h2PmHJPQP-M" %}
Printable Assembly Instructions
{% endfile %}


# Builder Kit E

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2FwKQWWJ_LGZ_QmZg%2F1.jpg?alt=media\&token=bd5b33f7-ef7f-4868-9e48-502d59ed714d)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2G-2xxe1XOWEB2DHb%2F2.jpg?alt=media\&token=9d77a6f4-390c-400e-828d-84b3389537c6)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2G1zfvN8f7ME_hhVF%2F3.jpg?alt=media\&token=c1305016-211c-49a8-acb5-875ae682233c)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2G5uUJGEc-5b0tax6%2F4.jpg?alt=media\&token=ac7c1787-16d6-4eb9-b45d-2d261d7f3193)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2G9YQKvKHqfKk2oGm%2F5.jpg?alt=media\&token=8f5fb007-a784-4da9-a0d9-944870094f5c)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GCTKGH18-2Z9AhmO%2F6.jpg?alt=media\&token=ec5cc09a-e8f3-42d6-a9e9-ccb7fdf9678f)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GFHZt-GAF67DLSuC%2F7.jpg?alt=media\&token=90d6db4f-c0b4-48d0-b179-ddd828e50733)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GHmZQEZqmHZQ_5pt%2F8.jpg?alt=media\&token=03509540-a61f-4819-9a01-0da9f8579390)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GKSlroq69oWutccA%2F9.jpg?alt=media\&token=f4311d59-4f31-453f-9530-659bba37df26)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GNMJ9uHrjZwP1gEM%2F10.jpg?alt=media\&token=36cee6ee-9c1c-4282-bf42-af878f65c0f3)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GPtJBfi98316ZPMP%2F11.jpg?alt=media\&token=a758750f-de47-4ecb-b50c-a1587cdb6d9b)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GSDwhtonSnKusZkQ%2F12.jpg?alt=media\&token=42d9e27a-97f8-429e-8ebc-35efc63106ed)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GVIF7xrHojJj9Gcd%2F13.jpg?alt=media\&token=999a397b-622d-4f1a-bcf3-d03d6012002f)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GYcCuOG7fyYoFtMw%2F14.jpg?alt=media\&token=c01553df-caf3-40a1-ba73-334e65535743)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2Ga_c8mcNbE5AU8ON%2F15.jpg?alt=media\&token=3372a0e5-bdac-41dd-9d73-6493821ccab3)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GduRsV1P9GGKUbdk%2F16.jpg?alt=media\&token=5c43a576-3c5a-426a-9b39-e1bfd4c5b605)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GiA6QNDvc2n6FCDi%2F17.jpg?alt=media\&token=ea17b7ef-a162-4bcb-bde2-74886b610011)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2Gl7lOCbENLPTCdRJ%2F18.jpg?alt=media\&token=37b81d06-fc1d-4ab8-9882-81859e89e49b)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GoMGGkpyg-XosqSZ%2F19.jpg?alt=media\&token=d38a6305-63a1-4a57-9c44-95f0f4d816a8)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GqufJhSF08cJLg4t%2F20.jpg?alt=media\&token=c020cfcc-4675-44e0-81dc-3833dc877f25)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GteJQvjy-2_B5e54%2F21.jpg?alt=media\&token=3161cb62-72c4-4750-9717-0267a6ded00e)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2Gx9uOyWN3mOZ-US8%2F22.jpg?alt=media\&token=1cec8d6d-7e2c-4be1-b015-4fd0ce4f4a17)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2GzziyzxlT5Y5kymS%2F23.jpg?alt=media\&token=130aa559-294a-4551-9de8-0b41d26ed3f0)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2H1byJRBeuhXHZHRi%2F24.jpg?alt=media\&token=cfd0c4d0-c557-40d6-86f1-70ca7f0f0907)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2H4vs_tZlWJkxdi_u%2F25.jpg?alt=media\&token=8b0faa17-0f16-496b-bfae-814283e72f89)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2H7qTmIkW-xipciL3%2F26.jpg?alt=media\&token=c096c588-1aa8-472c-beca-8c4bfe34db78)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2HAFqG-7A5zy-pBMH%2F27.jpg?alt=media\&token=5caa2724-8b5f-4e0f-a170-448e49af7ecc)

![](https://2169521322-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LpB_n-ftH_l6rtTiAfI%2F-Ly2E_CEAeescFoeJpXg%2F-Ly2HCx8Mc1lvVRg1Oz3%2F28.jpg?alt=media\&token=4188e5ce-820e-4ed1-843c-84fa0b88b94a)

The above instructions have been sourced from [OttoDIY.com](https://www.ottodiy.com/)

You can find the printable assembly instructions here.

{% file src="/files/-Ly2HRub9Hhm1naxve2N" %}
Printable Assembly Instructions
{% endfile %}


# OTTO enclosures 3D and laser cut files

otto can have 3D printed parts or laser cut file to make range of enclosures

## OTTO for Arduino Nano EVERY board&#x20;

Otto DIY with Arduino Nano every board will have different head file as there is minor difference in the USB port. The Nano Every is using Micro USB.

{% file src="/files/-M2B8GozjE7nKYqFTplG" %}
OTTO Basic Head designed for Arduino Nano Every&#x20;
{% endfile %}

{% file src="/files/-M2B8GozjE7nKYqFTplG" %}
OTTO Plus Head designed for Arduino Nano Every
{% endfile %}

{% file src="/files/-M2B8vAMkOQ30H4VBvcr" %}
OTTO Eye Head designed for Arduino Nano Every
{% endfile %}

{% file src="/files/-M2B8cT76Dxn-f2Y9CKC" %}
OTTO Humanoid Head designed for Arduino Nano Every
{% endfile %}

## OTTO V9 Files&#x20;

#### OTTO v9 file includes Head, Body, Leg and foot. You will need to print one of Head and Body while 2 print of Leg and foot. If you are using Arduino Nano Every board then use the Head STL file from above list.

OTTO basic and plus shares same 3D files that can be downloaded from here - <https://wikifactory.com/+OttoDIY/otto-diy/files/3Dprint>&#x20;

OTTO Humanoid can be found here  -<https://wikifactory.com/+OttoDIY/humanoid/files/3DPrint>

On the WiKi factory there are range of OTTO remix that also be downloaded from here - <https://wikifactory.com/+OttoDIY/projects>

### OTTO Laser Cut

You will need a Laser cut machine ro someone that provides you the service and send the specific format that the machine will use for example .dwg .svg .ai or .pdf﻿\
While Boxes.py allows setting any thickness this is really meant be be cut in 3mm plywood with the exception of servo mounts in the body (the two top most parts) which should be cut from 5mm plywood to get the right depth for the servos. Material with different but similar thickness should also work just fine. Check that the (body) servos will poke through the two layers. Always measure the actual thickness as it often differs from the nominal value. Baltic birch has worked well for us. Poppler is a bit weak but may work now as some weak points in the model have been addressed.﻿\
Generate the body <https://www.festi.info/boxes.py/OttoBody>﻿                                                                  Generate the legs <https://www.festi.info/boxes.py/OttoLegs>

## Paper craft

You can download paper craft to dress your OTTO - <https://wikifactory.com/+OttoDIY/otto-diy/files/Papercraft>


# Code

Original files found on internet are designed for Arduino nano and Pakronics Australia have developed compatible code for Arduino Every board.

{% content-ref url="/pages/-MAxJx5YGl9o6M0qrO2a" %}
[Setup Arduino Every board in Arduino IDE](/arduino/tutorials/setup-arduino-every-board-in-arduino-ide)
{% endcontent-ref %}

## Library OTTO with Arduino Nano Every board code

{% file src="/files/-M0tkrjvmshKzmyo5iCr" %}
OTTO Library for Arduino Nano Every by Pakronics
{% endfile %}

## If you don't know how to install Arduino library for OTTO

{% content-ref url="/pages/-LwU53qTTXKvs6M3wsIS" %}
[Installing Libraries](/arduino/tutorials/installing-libraries)
{% endcontent-ref %}

## Legacy Arduino Nano code

You can download the codes for different functions of Otto from here. You will need to install the libraries in arduino before using the codes provided.&#x20;

{% file src="/files/-LwU4iR7nXxYMGkcomkS" %}
Libraries
{% endfile %}

{% file src="/files/-LwU4sfdtWzJHOy6tthY" %}
Codes
{% endfile %}

In case you don't know to install libraries, you can take a look at our tutorial here.

{% content-ref url="/pages/-LwU53qTTXKvs6M3wsIS" %}
[Installing Libraries](/arduino/tutorials/installing-libraries)
{% endcontent-ref %}


# Curcuitmess


# Circuitmess Ringo


# Inside the Box

Here’s a list of components that you should’ve received in your box:<br>

![Inside the box components](https://www.circuitmess.com/wp-content/uploads/DSC06628_977x768sketch.jpg)

1. **Acrylic casing set:**
   1. Front protective casing
   2. Front aesthetic casing
   3. Bottom aesthetic casing
   4. Bottom protective casing
2. **Main board**
3. **Brain board & SD card**
4. **Display board**
5. **Sound board**
6. **Analog joystick**
7. **Micro USB cable**
8. **Micro SD reader**
9. **Li-Po battery**
10. **Network board (this one can look differently depending on your kit version)**
11. **FOUR small component bags**
12. **Button cap sticker set  \*(only in older versions of the phone)**

## **A Deep Dive Into The Components**

### 1. Acrylic casing set <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

![](https://www.circuitmess.com/wp-content/uploads/DSC05805_1024x683.jpg)

Ringo’s internals are protected by a casing made out of CNC laser-cut acrylic plastic.

The casing consists of 4 parts:

1. **Front transparent protective casing**
2. **Front aesthetic color casing**
3. **Back aesthetic color casing**
4. **Back transparent protective casing**

Everything is stacked together using metal bolts and spacers. This style of casings is called “the sandwich design”.

**NOTE:** Both back and front protective casing come with a protective layer that should be peeled off. You can do this right now or later before putting the casing on the phone. We will also cover this in Chapter 4.

### 2. Main board (PCB)

![](https://www.circuitmess.com/wp-content/uploads/DSC05443_1024x683.jpg)![](https://www.circuitmess.com/wp-content/uploads/DSC05437_1024x683.jpg)

This is the equivalent to a PC’s motherboard.

“PCB” stands for “printed circuit board”.

Basically, this is a fiberglass board with copper traces on it, along with some protective paint and insulating material.

Copper layers on the board form traces that connect various components on your Ringo phone kit so that they can work together as an electronic device.

### 3. Brain board & SD card

![](https://www.circuitmess.com/wp-content/uploads/DSC05452_1024x683.jpg)![](https://www.circuitmess.com/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif)![](https://www.circuitmess.com/wp-content/uploads/Brain-board-e1563709013601.jpg)

The SD card comes included in every kit and is inserted in your Brain board.\
This board is what makes your phone do smart stuff such as display text on the screen or read the SD card.

It contains the main microcontroller (the big silver square thing), as well as an SD card slot and an RTC chip.

“RTC” stands for “real-time clock” and it’s the main timekeeping chip on the Ringo. Basically, that’s a chip that counts time and triggers alarms, every microwave has it nowadays.

It also contains the power management and shutdown circuitry that can turn the whole device ON/OFF, charge the battery, measure the battery voltage, etc.\
The on-board micro USB port is used for both charging and programming the device.

A regular Micro SD card is Ringo’s main storage device and is used for storing media, apps, games, settings and more.

### 4. Display board <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/Circuitmess-Ringo-MAKERphone-Display-board-PCB.png)](https://www.circuitmess.com/wp-content/uploads/Circuitmess-Ringo-MAKERphone-Display-board-PCB.png)[![](https://www.circuitmess.com/wp-content/uploads/DSC05467_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05467_1024x683.jpg)

This board’s main component is, of course, its display.

LCD stands for liquid crystal display and when applying a current to the crystal layer inside the display, it changes which color that part of the screen will be.

It features a 160x128 pixels display with 8-bit color depth at a 1.8” screen size.

The display should provide you with plenty of possibilities to make some amazing pixel art in your games and apps.

**NOTE:** 8-bit color is a method of storing image information such that each pixel is represented by one 8-bit byte. There is a palette map with three colors: red, green and blue (RGB), where each color is represented by a value between 0 and 255, thus creating 16,777,216 color combinations.

### 5. Sound board <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

![](https://www.circuitmess.com/wp-content/uploads/DSC05460_1024x683.jpg)

The Sound board contains a DAC chip, a microphone and a headphone jack that need to be soldered onto the board.

DAC stands for digital to analog converter and it converts the digital data (1/0) to an analog signal (a.k.a. music and sound effects that are played out on the speaker).

The board incorporates a DAC chip that with a 3.4W amplifier in a single package!

### 6. Analog joystick <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

[![](https://www.circuitmess.com/wp-content/uploads/joystick-edit.jpg)](https://www.circuitmess.com/wp-content/uploads/joystick-edit.jpg)

The joystick has two axis and cannot be clicked.

This joystick is the phone’s main navigational input, whether it’s scrolling through a text message, flying around in a game or navigating down a menu.

### 7. Micro USB cable

[![](https://www.circuitmess.com/wp-content/uploads/DSC05482-cropped.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05482-cropped.jpg)

This is a standard USB to micro USB cable.

With it, you can charge the Ringo, as well as upload your own programs and games.

### 8. SD card reader

[![](https://www.circuitmess.com/wp-content/uploads/DSC05486-cropped_1024x674.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05486-cropped_1024x674.jpg)

In order to make your life a bit easier, we have also included a handy Micro SD card reader.

Just insert the included Micro SD card in and then you can put all your favorite songs and photos, as well as Ringo-compatible games (.BIN files) onto it.

### 9. Li-Po battery <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

![](https://www.circuitmess.com/wp-content/uploads/DSC05462_1024x683.jpg)

This rechargeable battery serves as the main power supply for the Ringo.

1300mAh should provide up to 3 days of moderate usage, like playing games or listening to music.

In case you don’t know what “Li-Po” means, when it comes to batteries, this indicates its structure and which materials it uses to store electrical energy. (Li-Po stands for lithium polymer.)

It comes with a male JST power connector (the white connector at the end of the red-black cable).

The battery will come connected to the main board.\
The reason for sending you those components like that is a regulation that doesn’t allow us to send the Li-Po batteries via airmail if they are not embedded in some kind of a “device”.

Before assembling the Ringo, you will have to disconnect the battery from the main board and then reconnect it when the time comes.

Never solder or modify a device that is “alive”. In other words, always unplug the battery or some other power supply from the device’s PCB, otherwise, you might make a short circuit with your soldering iron or screwdriver and damage the electronic components.

Electronics 101: the positive pole of any electrical power source (+) is usually marked with a red wire. The negative pole of any electrical power source (-) is usually marked with a black wire (in some cases green and brown colors are used too).[![](http://circuitmess.com/wp-content/uploads/2017/08/15.jpg)](http://circuitmess.com/wp-content/uploads/2017/08/15.jpg)

### 10. Network board <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

[![](https://www.circuitmess.com/wp-content/uploads/DSC05474_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05474_1024x683.jpg)

Without this module, you can’t make calls, send messages, or get the correct time from the cellular network.

Basically, this board has a secondary microcomputer that handles everything related to mobile phone network communication.

These chips come pre-certified and pre-approved and they’re used in other products that need to communicate via cellular network.

Every network module has a unique IMEI (International Mobile Equipment Identity) assigned to it and written on its front side.

Depending on which Ringo version you ordered and which version you’re located in, your network module may differ.

The 2G standard version comes with a SIM800C module (the black board), and the 4G version comes with a more powerful SIM7600 module (the green board).

### 11. FOUR small component bags

![](https://www.circuitmess.com/wp-content/uploads/DSC05490_1024x683.jpg)

The smaller components are divided into 4 smaller bags and we’ll go in detail about what’s inside them.

As a matter of precaution, we usually put one piece extra for the smaller mechanical components, such as nuts, bolts, and spacers.

#### Bag #1 <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

![](https://www.circuitmess.com/wp-content/uploads/DSC05812_1024x683sketch.jpg)

A) 1x Lanyard (hand strap)

B) 2x M2.5 white nylon nut

C) 5x M3 black nylon nut

D) 6x M3x4mm brass (golden) spacer

E) 12x M3x5mm brass (golden) spacer

F) 1x microphone

G) 1x headphone jack

H) 1x speaker with JST connector

You can’t have a phone that doesn’t ring!

The speaker can be used for all sorts of sound effects, game soundtracks, music, notifications, and ringtones.

#### Bag #2 <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

![](https://www.circuitmess.com/wp-content/uploads/DSC05594_edit1024x683sketch.jpg)

A) 6x M3x8mm metal bolt

B) 6x M3x12mm metal bolt

C) 5x M3x10mm black nylon bolt

D) 2x M2.5 white nylon bolt

These basic mechanical components fixate the different modules to the Main board and hold the entire casing together.

#### Bag #3 <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

![](https://www.circuitmess.com/wp-content/uploads/DSC05533_1024x683_sketch.jpg)

A) 2x big yellow pushbutton

B) 16x small black pushbutton

C) 3x machined header pin stick

There are two types of buttons on the Ringo: the smaller ones that are used on the numerical keypad for entering phone numbers and the bigger buttons used for navigating through menus.

They’re the essential input sources for navigating menus, playing games and using apps.

The pin headers come in long sticks and are used to connect all the different modules to the Main board.

They will need to be cut to appropriate size and soldered onto the other boards.

#### Bag #4 <a href="#laser-cut-acrylic-casing" id="laser-cut-acrylic-casing"></a>

![](https://www.circuitmess.com/wp-content/uploads/DSC05866_edit_1024x683.jpg)

* 16x small black pushbutton cap
* 2x big black pushbutton cap

The button caps are easily attached to the top of the pushbuttons and are also replaceable.

NOTE: Earlier versions of the phone come with empty caps that should be covered with button stickers. However, later versions will come with already printed letters and numbers directly on the buttons so no stickers will be necessary.


# Tools Needed

&#x20;**The Ringo is a kit designed to educate, but it’s far from a toy.**

**And as such, it requires some real tools.**

The equipment and tools required for the assembly are not included in the standard kit.

The tools required are essential whenever assembling, fixing or modifying electronic devices and are the tools of the trade for every maker/hardware hacker/modder/electrician.

Here's the list of tools needed :

1. **USB soldering iron**
2. **Small cross screwdriver**
3. **USB power brick for the soldering iron**
4. **Needle-nose pliers**
5. **Soldering iron stand**
6. **Diagonal cutter pliers**
7. **A small reel of rosin-cored solder**
8. **Power cable for the soldering iron**
9. **Desoldering vacuum tool (solder sucker)**
10. **Cleaning sponge**


# Soldering the parts

[![](https://www.circuitmess.com/wp-content/uploads/DSC05535_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05535_1024x683crop.jpg)

### Step 1 – The Brain board

\
**Let’s begin with the Brain board.**![](https://www.circuitmess.com/wp-content/uploads/DSC05540_1024x683.jpg)

Take 2 sticks of pin headers and cut them to size so that you can solder them onto the Brain board’s PCB.

**You need to trim them with your diagonal cutter pliers.**

In the end, you need to have one 22-pin header and one 11-pin machined header.

![](https://www.circuitmess.com/wp-content/uploads/DSC05555_1024x683.jpg)

The pin headers need to be soldered so that they’re vertical to the board.

Luckily there is a nice technique for doing just that

**1) Solder just the first pin** of one row of headers

![](https://www.circuitmess.com/wp-content/uploads/DSC05559_1024x683.jpg)

**2) Check that the pin header is perpendicular.**

**3) If the header is slightly skewed and needs adjusting, melt the solder and tilt the headers with your fingers.**\
(Watch out not to burn yourself.)

**4) Check if the headers are aligned correctly, if not then repeat the process**

![](https://www.circuitmess.com/wp-content/uploads/DSC05564_1024x683.jpg)

**If the header is vertical to the board, you can solder the rest of the pins.**

![](https://www.circuitmess.com/wp-content/uploads/DSC05578_1024x683crop.jpg)

Solder the second row of the headers as well.\
\
**Make sure that they’re vertical to the Brain board!**

The results should look like the photo on the left.![](https://www.circuitmess.com/wp-content/uploads/DSC05595_1024x683crop.jpg)

### Step 2 – Attaching the Brain board onto the Main board

For this, you will need:

1 x M3x10mm black nylon bolt

1 x M3x5mm brass (golden) spacer  **(WATCH OUT – there are two similar types of brass spacers in your kit and you need the bigger brass spacer here!)**

1 x M3 black nylon nut

[![](https://www.circuitmess.com/wp-content/uploads/DSC05602_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05602_1024x683.jpg)

Put the bolt through the Brain board so it faces out in the direction of the pins.

Then screw the brass spacer on top of it.

**Use a small screwdriver for this!**[![](https://www.circuitmess.com/wp-content/uploads/DSC05607_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05607_1024x683.jpg)

**Your Brain board should look like this now.**[![](https://www.circuitmess.com/wp-content/uploads/DSC05608_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05608_1024x683.jpg)

Then, you can place the entire Brain board onto the Main board where it says “the Brain board”.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05615_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05615_1024x683.jpg)

Put the plastic nut onto the bolt on the back side of the Main board.

Now that they’re fixed together, we can solder the Brain board onto the Main board.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05627_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05627_1024x683.jpg)

### Step 3 – Soldering the Brain board to the Main board

Remember the headers you had to cut and solder to the Brain board?

We’re not done with them yet! You need to solder them to the Main board too.

We need to do this in order to establish an electrical connection between the Brain board and the Main board.[![](https://www.circuitmess.com/wp-content/uploads/DSC05635_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05635_1024x683.jpg)

But with a steady hand and some patience, this shouldn’t be a problem for you.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05638_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05638_1024x683crop.jpg)

### Step 4 – The Display board

Next, we have the Display board..[![](https://www.circuitmess.com/wp-content/uploads/DSC05641_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05641_1024x683.jpg)

Again, you’ll have to cut the pin headers to the appropriate size so that they can fit the pins on the Display board.

You need an 8-pin header row for this.[![](https://www.circuitmess.com/wp-content/uploads/DSC05644_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05644_1024x683.jpg)

With the same technique used when soldering the Brain board’s pin headers, soldering this shouldn’t be a problem.[![](https://www.circuitmess.com/wp-content/uploads/DSC05654_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05654_1024x683.jpg)

### Step 5 – Mounting the Display board onto the Main board

For this, you’ll need:

3 x M3x10mm black nylon bolt

3x M3x5mm brass (golden) spacer\
**(WATCH OUT – there are two similar types of brass spacers in your kit and you need the bigger brass spacer here!)**

3x M3 black nylon nut

**Put the bolts through the holes so that they face the same direction as the pins.**

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/DSC05662_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05662_1024x683crop.jpg)

**Then, put the spacers on top of them and screw them on.**

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/DSC05664_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05664_1024x683crop.jpg)

Place the Display board on the Main board where it says “LCD display”.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05665_1024x683cro.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05665_1024x683cro.jpg)

Then tighten the three nuts from the back side of the Main board.

**NOTE : You can’t tighten the nuts with a screwdriver from underneath, only from above!**[![](https://www.circuitmess.com/wp-content/uploads/DSC05669_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05669_1024x683.jpg)

### Step 6 – Soldering the Display board

Now let’s go ahead and solder the Display board pins onto the Main board.

Through these pins, the Brain board will be able to push all the images to the Display board, so it’s important to solder them properly.[![](https://www.circuitmess.com/wp-content/uploads/DSC05678_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05678_1024x683.jpg)

### Step 7 – The Sound board

With the Sound board we’re going to have to do a bit more soldering than with the other boards.

For this step, you’ll need.

1 x pin header row\
1 x microphone\
1 x headphone jack

[![](https://www.circuitmess.com/wp-content/uploads/DSC05686_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05686_1024x683.jpg)

First, solder the microphone to the Sound board.

**Be careful not to solder it onto the opposite side.**\
**(Check the picture below.)**

![](https://www.circuitmess.com/wp-content/uploads/DSC05684_1024x683.jpg)[![](https://www.circuitmess.com/wp-content/uploads/DSC05689_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05689_1024x683.jpg)

After that, solder the headphone jack, too.![](https://www.circuitmess.com/wp-content/uploads/Sound-board-e1570209744560.png)[![](https://www.circuitmess.com/wp-content/uploads/DSC05682_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05682_1024x683.jpg)

As before, you need to trim the pin headers to the right size using your diagonal cutter pliers.

You’ll need a 9-pin header for the Sound board.[![](https://www.circuitmess.com/wp-content/uploads/DSC05693_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05693_1024x683.jpg)

Solder them vertically to the board just like you’ve done with the Brain board and Display board before.[![](https://www.circuitmess.com/wp-content/uploads/DSC05695_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05695_1024x683.jpg)

### Step 8 – Attaching the Sound board

For this step, you’ll need the following components:

1 x M3x10mm black nylon bolt

1 x M3x5mm brass (golden) spacer\
**(WATCH OUT – there are two similar types of brass spacers in your kit and you need the bigger brass spacer here!)**

1 x M3 black nylon nut

[![](https://www.circuitmess.com/wp-content/uploads/DSC05697_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05697_1024x683.jpg)

Put the screw through the board as we did with the other boards, then screw down the spacer.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05700_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05700_1024x683.jpg)

Place the Sound board onto the Main board where it says “Sound board”.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05707_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05707_1024x683.jpg)

Fasten the nut from the back side.[![](https://www.circuitmess.com/wp-content/uploads/DSC05711_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05711_1024x683.jpg)

### Step 9 – Soldering the Sound board

The Sound board shouldn’t pose any problems since it doesn’t have that many pins that need to be soldered.

Plus, by now you should be getting a grip on how soldering works if you didn’t already have the experience.

Solder the pins to the Main board and we’re done with that.[![](https://www.circuitmess.com/wp-content/uploads/DSC05720_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05720_1024x683.jpg)

### Step 10 – A lot of buttons…

**All of these buttons may seem overwhelming, but trust us, after you solder a couple of them, the rest will be a breeze!**

The smaller buttons are placed where the numerical keypad is, and just below the display.&#x20;

The bigger buttons are placed where it says A and B.[![](https://www.circuitmess.com/wp-content/uploads/DSC05723_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05723_1024x683.jpg)

Let’s start with the big yellow ones.

Push them into the Main board so that they sit firmly on the board.

**Before soldering the push buttons, make sure that they’re perpendicular (vertical)  to the board.**

**This is very important as you’ll have trouble putting the protective casing on the device if the buttons are tilted!**[![](https://www.circuitmess.com/wp-content/uploads/DSC05724_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05724_1024x683.jpg)

The soldering pads are quite big for these buttons, so you’ll need to hold your iron on them a bit longer.[![](https://www.circuitmess.com/wp-content/uploads/DSC05739_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05739_1024x683.jpg)

Soldering the smaller pushbuttons is mostly the same as soldering the big yellow ones.<br>

**Please make sure that the pushbuttons are sitting firmly on the board and that they’re not tilted before soldering them.**<br>

As we said in the previous paragraph, you won’t be able to mount the casing if the buttons are tilted\![![](https://www.circuitmess.com/wp-content/uploads/DSC05745_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05745_1024x683.jpg)

Make sure you solder each and every pin correctly.

Don’t get hasty just because there’s so many of them.\
Slow and steady wins the race\![![](https://www.circuitmess.com/wp-content/uploads/DSC05755_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05755_1024x683.jpg)

### Step 11 – The joystick

The joystick is still left to be soldered, but after all those pushbuttons, it shouldn’t be an issue.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05757_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05757_1024x683.jpg)

Once you’re done with that, feel free to **turn off your soldering iron and take a breather, because soldering time is over!**

Nice job so far, but unfortunately we’re not done yet. There are still a few steps ahead.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05765_1024x683sketch.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05765_1024x683sketch.jpg)

Oh no! It seems we’ve made a mistake during the soldering process!

As you already know, **soldering joints mustn’t be bridged** as the device won’t work correctly (signals or voltages will get mixed or shorted).

**This is a perfect moment to demonstrate how to fix bridged solder joints with a desoldering vacuum pump:**[![](https://www.circuitmess.com/wp-content/uploads/DSC05767_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05767_1024x683.jpg)

* Push down the plunger button on the desoldering pump
* Place the soldering iron on the bridged joint until it melts
* Place the desoldering pump directly on the melted solder joint
* Press the release button on the desoldering pump, that should suck up the molten solder
* Repeat the process if needed

This will require some practice, but it isn’t impossible to learn\![![](https://www.circuitmess.com/wp-content/uploads/DSC05772_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05772_1024x683.jpg)

### Step 12 – The Network board

In order to attach the Network board to the Main board, you’ll need the following components:

2x M2.5 white nylon bolt\
2x M2.5 white nylon nut

[![](https://www.circuitmess.com/wp-content/uploads/DSC05775_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05775_1024x683.jpg)

The Network board first needs to be inserted into the big connector on the back where it says “Mini PCIE Express”.

The network module needs to be inserted at an angle like this.

Then you need to push it down until it’s horizontal with the Main board.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05779_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05779_1024x683.jpg)

Keep holding it down and put one bolt through the Network board and the Main board.

Fasten it with a nut from the other side.

Then put the other bolt and fasten the other nut too.[![](https://www.circuitmess.com/wp-content/uploads/DSC05787_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05787_1024x683.jpg)

### Step 13 – The speaker

Connecting the speaker is easy!

First, you need to insert the speaker’s wire connector through the large hole on the top of the Main board.[![](https://www.circuitmess.com/wp-content/uploads/DSC05794_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05794_1024x683.jpg)

Once you’ve done that, take the white connector with a pair of pliers (or your fingers) and put it in the female connector slot where it says “speaker”.

You should feel a bump when the connector fits in the slot nicely.[![](https://www.circuitmess.com/wp-content/uploads/DSC05799_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05799_1024x683.jpg)

Now, place the speaker so it fits snugly between the Display board and the Main board.

#### That’s about it for the electronics of your Ringo phone, but we’re not done yet! We still need to place the whole device in a casing and place the button caps.More hardware assembly ahead!


# Assembling the parts

#### The soldering part is finally done, and now it’s time to do the mechanical assembly.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05866_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05866_1024x683.jpg)

### Step 1 – The button caps

Pressing those pushbuttons without button caps on would be really tough, wouldn’t it?

Well then, let’s take out all the button caps and place them on the buttons.

**Same as with the pushbuttons, there are two types: the bigger ones are for the A and B buttons and the smaller ones make up the rest.**

**\*NOTE: You will receive the buttons with UV printed symbols.**[![](https://www.circuitmess.com/wp-content/uploads/DSC05881_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05881_1024x683crop.jpg)

Place them on top of the buttons and push down firmly.

They should make a “click” when they fit into place.[![](https://www.circuitmess.com/wp-content/uploads/Not-Peeled.png)](https://www.circuitmess.com/wp-content/uploads/Not-Peeled.png)

**Plastic peeling**

Before starting to screw anything together, make sure to take off the protective peeling that we mentioned earlier.

There are total of 4 layers you need to peel off, two on each plastic case.

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/DSC07489.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC07489.jpg)

**Make sure to use your nails or a wooden pick to start with the peeling process.**

**Do not use anything sharp or made out of metal as it may permanently damage the protective plastic.**

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/Peeled-e1570225219595.png)](https://www.circuitmess.com/wp-content/uploads/Peeled-e1570225219595.png)

When it’s all done, it should look something like this.&#x20;

Both protective plastics should be completely transparent. If there are any blue layers left on them, make sure to remove it completely.

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/DSC05818_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05818_1024x683crop.jpg)

### Step 2 – The front casing

Since we don’t want anything to happen to your Ringo, it’s best to put it in its plastic casing.

Let’s start with the front side.

For this, we’re going to need:

6x M3x8mm metal bolt  **(WATCH OUT – there are two versions of metal bolts that look similar; you need the shorter bolts here)**

6 x M3x5mm brass (golden) spacer **(WATCH OUT – there are two similar types of brass spacers in your kit and you need the bigger brass spacer here!)**

1 x Front protective casing\
1 x Front aesthetic casing

[![](https://www.circuitmess.com/wp-content/uploads/DSC05825_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05825_1024x683.jpg)

Put the bolts in from the front side and tighten the metal spacers from the back side.

**Don’t tighten them too much, because you could damage the casing!**![](https://www.circuitmess.com/wp-content/uploads/DSC05831_1024x683crop.jpg)

The front part should look something like this now: **When you put the bolts through the back side, don’t screw down the spacers all the way through.**\
**This will prove useful up ahead when we’ll connect both sides of the casing.**

[![](https://www.circuitmess.com/wp-content/uploads/DSC05836_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05836_1024x683crop.jpg)

### Step **3** – The back casing

Take the rest of the components:

6x M3x12mm metal bolt  **(WATCH OUT – there are two versions of metal bolts that look similar; you need the longer bolts here)**\
\
6x M3x4mm brass (golden) spacer  **(WATCH OUT – there are two similar types of brass spacers in your kit and you need the shorter brass spacer here!)**

1 x Bottom aesthetic casing\
1 x Bottom protective casing[![](https://www.circuitmess.com/wp-content/uploads/DSC05842_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05842_1024x683.jpg)

The process is pretty similar to assembling the front casing.![](https://www.circuitmess.com/wp-content/uploads/DSC05856_1024x683.jpg)[![](https://www.circuitmess.com/wp-content/uploads/DSC05849_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05849_1024x683crop.jpg)[![](https://www.circuitmess.com/wp-content/uploads/DSC05859_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05859_1024x683.jpg)

### Step 4 – The battery

The battery comes with pre-applied two-sided sticky tape, so you’ll need to peel off the paper layer from the back of the battery.

**Be careful not to peel off the whole tape, just the protective paper layer.**

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/DSC05861_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05861_1024x683.jpg)

Place it inside the largest slot on the back casing, and make sure the battery’s cable is facing right.

Press down on the battery firmly to ensure it’s stuck to the casing nicely.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05904_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05904_1024x683.jpg)

After sticking the battery to the casing, all that’s left to do is connect the white connector into the slot on the Main board where it says “battery”.

[![](https://www.circuitmess.com/wp-content/uploads/Full-Antenna-e1570224293272.png)](https://www.circuitmess.com/wp-content/uploads/Full-Antenna-e1570224293272.png)

### Step 5 – The antenna

You were probably wondering what’s that dangling black wire connected to the network module.

That’s the Ringo’s antenna and it is impossible to connect to the mobile network without it.

[![](https://www.circuitmess.com/wp-content/uploads/DSC05893_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05893_1024x683.jpg)

Like with the battery, you’ll need to first peel off the paper layer from the end of the antenna.

**Be extra gentle with it as it can be damaged if sticked wrongly!**[![](https://www.circuitmess.com/wp-content/uploads/DSC05897_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05897_1024x683.jpg)

Then stick it to the casing right next to the battery, with the antenna wire facing up.

**Be careful when tugging on the antenna because the antenna connector on the network module is a bit fragile and might even break if you put too much strain on it!**[![](https://www.circuitmess.com/wp-content/uploads/DSC05898_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05898_1024x683.jpg)

Now you should have the back casing connected to the Main board with the battery and antenna as shown on the photo on the left.[![](https://www.circuitmess.com/wp-content/uploads/DSC05945_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05945_1024x683crop.jpg)

### Step 6 – Combining the front and back casing

Place the back casing onto the back of the Main board.

**Watch out for the cables as they might get in the way. Make sure they stay within the casing and away from the screws so they don’t stick out or get damaged.**

[![](https://www.circuitmess.com/wp-content/uploads/DSC05911_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05911_1024x683crop.jpg)

Flip the phone so that the screen is facing up.[![](https://www.circuitmess.com/wp-content/uploads/DSC05916_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05916_1024x683.jpg)

Now place the front casing onto the front side of the Main board.[![](https://www.circuitmess.com/wp-content/uploads/DSC05926_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05926_1024x683.jpg)

**Tighten the six bolts on the BACK SIDE.**

Squeeze the bottom and top pieces of casings together with your fingers while tightening the bolts.

**Keep in mind that you don’t tighten them too much when assembling the casing because you might damage it.**

#### And voilá, you’ve just assembled your very own mobile phone!

#### Check out the following chapter for further instructions on how to set up your Ringo.


# Set up your Ringo

We’re done with the assembly process and now it’s finally time to see this thing in action!

[![](https://www.circuitmess.com/wp-content/uploads/DSC05948_1024x683.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05948_1024x683.jpg)

Firstly, if you have received a SIM card with your CircuitMess Ringo kit, take it out and pop it out at the 2nd smallest size (micro SIM).

If you didn’t receive a SIM card with your kit, or if you don’t have one that you can use, don’t worry, your Ringo can function just fine without a SIM card (except for calls and messages, duh!).

Still, we advise that you should insert a SIM card if you have one before going further.

![](https://www.circuitmess.com/wp-content/uploads/FinalSIM.png)

![](https://www.circuitmess.com/wp-content/uploads/DSC05950_1024x683.jpg)

The SIM card slot is located on the left side of the device, and you need to insert it so that the notch on the SIM card faces upwards (check the picture).

When inserting it you should hear a click when it sits in the slot.

The Micro SIM slot has a push-push mechanism (push when inserting and push when removing).

**NOTE: SIM can be inserted in multiple ways but it will only work if it’s inserted the right way. After inserting the SIM card, restart the phone so that the SIM module can reload the card.**

&#x20;![](https://www.circuitmess.com/wp-content/uploads/SIM-Final-v2-1.png)[![](https://www.circuitmess.com/wp-content/uploads/DSC05987_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05987_1024x683crop.jpg)

**IMPORTANT: Before turning your Ringo on, we recommend charging your phone for at least one hour.**

The batteries come discharged in order to preserve their chemical composition.

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/DSC05993_1024x683crop.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05993_1024x683crop.jpg)

After it charged for a while, press the ON button on the bottom right side of the phone.

Your Ringo should power on and boot into the Startup wizard.

&#x20;[![](https://www.circuitmess.com/wp-content/uploads/DSC05999_1024x683-1.jpg)](https://www.circuitmess.com/wp-content/uploads/DSC05999_1024x683-1.jpg)

Follow the on-screen instructions of the startup wizard to check if everything works right.

Your phone is now up and running! Bravo!


# Grove Ecosystem

Grove is a modular, standardized connector prototyping system. Grove takes a building block approach to assembling electronics. Compared to the jumper or solder based system, it is easier to connect, experiment and build and simplifies the learning system, but not to the point where it becomes dumbed down. Some of the other prototype systems out there takes the level down to building blocks. Good stuff to be learned that way, but the Grove system allows you to build real systems. It requires some learning and expertise to hook things up.

{% content-ref url="/pages/-LpBeUAR1YMXtvYgKNGK" %}
[Grove System](/seed-studio/grove-system)
{% endcontent-ref %}

{% content-ref url="/pages/-LpBeYY-MIWcWP4kr\_2m" %}
[Grove Modules](/seed-studio/grove-modules)
{% endcontent-ref %}


# Grove System

![Grove Ecosystem](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/grove_cover.png)

## What is the Grove System?

Grove is a modular, standardized connector prototyping system. Grove takes a building block approach to assembling electronics. Compared to the jumper or solder based system, it is easier to connect, experiment and build and simplifies the learning system, but not to the point where it becomes dumbed down. Some of the other prototype systems out there takes the level down to building blocks. Good stuff to be learned that way, but the Grove system allows you to build real systems. It requires some learning and expertise to hook things up.

The Grove system consists of a base unit (stem) and various modules (twigs) with standardized connectors. The people originating the Grove system (Seeedstudio) have tried to use "stems"and "twigs" as part of the Grove lexicon. After a short period of consideration, we are dropping those names. They just aren't needed and just confuse the issue.

The Base unit, generally a microprocessor, allows for easy connection of any input or output from the Grove modules. And every 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 up to 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.

## Grove Projects

Here are some project made with Grove for your reference, more projects please refer to [Recipe](http://www.seeed.cc/discover.html?t=Grove) or [Instructables](http://www.instructables.com/howto/Grove/).

| DIY a Humidifier                                                                                                         | Personal Voice Assistant                                                                                                 | Acrylic Monitor Stand                                                                                                    |
| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/3.jpg) |
| [MAKE IT NOW!](http://www.instructables.com/id/DIY-Smart-House-2-DIY-a-Humidifier/)                                      | [MAKE IT NOW!](http://www.instructables.com/id/DIY-Smart-House-1-Personal-Voice-Assistant-based-o/)                      | [MAKE IT NOW!](http://www.instructables.com/id/DIY-a-Programmable-Acrylic-Monitor-Stand/)                                |

| Sensor hub & Win10 IoT                                                                                                   | Steam-punk Style Award                                                                                                   | Plant Watering Device                                                                                                    |
| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/6.jpg) |
| [MAKE IT NOW!](http://www.instructables.com/id/DIY-a-Smart-Monitoring-Device-Based-on-Win10-IoT/)                        | [MAKE IT NOW!](http://www.instructables.com/id/Make-a-Steam-Punk-Style-Cup/)                                             | [MAKE IT NOW!](http://www.instructables.com/id/DIY-an-Automatic-Plant-Watering-Device/)                                  |

| Wi-Fi Speaker                                                                                                            | DIY a toy car                                                                                                            | Retro Wooden Lamp                                                                                                        |
| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/7.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/8.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/9.jpg) |
| [MAKE IT NOW!](http://www.instructables.com/id/DIY-a-Wi-Fi-Speaker/)                                                     | [MAKE IT NOW!](http://www.instructables.com/id/Make-a-mini-toy-car-with-Arduino/)                                        | [MAKE IT NOW!](http://www.instructables.com/id/DIY-a-Retro-Wooden-Lamp-with-BBG/)                                        |

| Pokemon Go SAFETY BADGE                                                                                                   | Make a Wooden Gun                                                                                                         | Quality of Life Meter                                                                                                     |
| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/10.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/11.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/12.jpg) |
| [MAKE IT NOW!](http://www.instructables.com/id/5-Minutes-to-DIY-Your-Own-Pokemon-Go-SAFETY-BADGE/)                        | [MAKE IT NOW!](http://www.instructables.com/id/DIY-a-Wooden-Laser-Gun-As-a-Xmas-Present-for-Your-/)                       | [MAKE IT NOW!](http://www.instructables.com/id/Quality-of-Life-Meter-Mk2-Smarter-and-Connected/)                          |

| Hackable RGB ornament                                                                                                     | The Internet Of Led Wall                                                                                                  | PI Game Box                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/13.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/14.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/project_images/15.jpg) |
| [MAKE IT NOW!](http://www.instructables.com/id/Glasso-a-button-free-RGB-timer/)                                           | [MAKE IT NOW!](http://www.instructables.com/id/The-Internet-of-Led-Wall-1/)                                               | [MAKE IT NOW!](http://www.instructables.com/id/DIY-a-Raspberry-Game-2048/)                                                |

## Size of Grove

There're 5 size of Grove.

| 1X1                                                                                                                    | 1X2                                                                                                                    | 1X3                                                                                                                    | 2X2                                                                                                                    | 2X3                                                                                                                    |
| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| 20x20mm                                                                                                                | 20x40mm                                                                                                                | 20x60mm                                                                                                                | 40x40mm                                                                                                                | 40x60mm                                                                                                                |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/size1x1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/size1x2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/size1x3.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/size2x2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/size2x3.jpg) |

## How to connect Grove to your board

If there's no Grove connector on your board, you need a **Grove Expansion Board** which to attach the Grove modules. The Grove Expansion Board provides the processing power, and the modules offer the input sensors and output actuators of your system. There are many Grove Expansion Board for different platform already, they include Arduino UNO, Particle Phone, BeagleBone board etc.

| Arduino Base Shield                                                                                                   | BeagleBone board                                                                                                      | Arduino Mega                                                                                                          |
| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/base_1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/base_2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/base_3.jpg) |
| [BUY ONE NOW!](http://www.seeedstudio.com/Base-Shield-V2-p-1378.html)                                                 | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Base-Cape-for-Beaglebone-v2.0-p-2644.html)                            | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Mega-Shield-v1.2-p-2539.html)                                         |

| IOIO-OTG                                                                                                              | Particle Photon                                                                                                       | NodeMCU                                                                                                               |
| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/base_4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/base_5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/base_6.jpg) |
| [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Base-Shield-for-IOIO-OTG-p-1613.html)                                 | [BUY ONE NOW!](http://www.seeedstudio.com/Particle-Photon-Base-Shield-p-2598.html)                                    | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Base-Shield-for-NodeMCU-p-2513.html)                                  |

!!!Note Arduino Base Shield works for:

* Arduino UNO/Leonardo
* Seeeduino V3/4/4.1/Lite/Clio/Lotus/Stalker
* LinkIt ONE

## Interface of Grove modules

You may notice that there're 4 color of the Grove cable.

* **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.

### 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 range from the simple to the 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

An 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                          |

## Grove Cables

### Normal Grove Cable

There're 4 size of Grove cables for your projects, the length is consist of 5cm, 20cm, 30cm, 40cm as well as 50 cm. As shown below.

| 5cm                                                                                                                            | 20 cm                                                                                                                             | 30 cm                                                                                                                           | 40 cm                                                                                                                           | 50 cm                                                                                                                           |
| ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_5.jpg)         | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_20.jpg)           | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_30.jpg)         | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_40.jpg)         | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_50.jpg)         |
| [BUY ONE NOW!](http://www.seeedstudio.com/depot/grove-universal-4-pin-buckled-5cm-cable-5-pcs-pack-p-925.html?cPath=98_106_57) | [BUY ONE NOW!](http://www.seeedstudio.com/depot/grove-universal-4-pin-20cm-unbuckled-cable-5-pcs-pack-p-749.html?cPath=98_106_57) | [BUY ONE NOW!](http://www.seeedstudio.com/depot/grove-universal-4-pin-buckled-30cm-cable-5-pcs-pack-p-926.html?cPath=98_106_57) | [BUY ONE NOW!](http://www.seeedstudio.com/depot/grove-universal-4-pin-buckled-40cm-cable-5-pcs-pack-p-927.html?cPath=98_106_57) | [BUY ONE NOW!](http://www.seeedstudio.com/depot/grove-universal-4-pin-buckled-50cm-cable-5-pcs-pack-p-928.html?cPath=98_106_57) |

### Grove - Branch Cable

Grove Branch Cable is a cable used in the Grove system. It consists of three male-type latching connectors and four color-coded wires. Grove Branch Cables can be used to support daisy-chaining multiple Grove devices to a Grove shield. Typically, one end is connected to a Grove shield, and the second and third connectors are attached to two Grove devices.

As with other members of the Grove cable family, the male connectors are keyed. This means that they are shaped uniquely and will fit one and only one way into their matching connectors on shields and devices. Also, when attaching the connectors to shields or devices, be sure to press firmly to mate the male connectors on the Grove Branch Cable with the female receptacles on the Grove shield or Grove devices. Since Grove Branch Cables have latches (sometimes referred to as "buckles" or "buckled cables"), when the latch closes, you will hear a small sound and should see the latch close over its corresponding part. These latches (or buckles) improve connections, and are especially handy in high-vibration or production environments, since some force must be used when disconnecting the cable. When moving your Grove device, or changing it, you must also apply a small bit of pressure to release the latch on the Grove Branch Cable connector, and then pull to remove the it from the receptacle or socket.

Use extra care if connecting multiple devices using the Grove Branch Cable. Be aware that the analog or digital pin on the Grove Shield will be shared by both Grove devices. Such configurations may be inappropriate for two analog devices. Using a Grove Branch Cable to connect an analog and a digital Grove device may not work at all.

[![// image](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_branch.jpg)](http://www.seeedstudio.com/depot/grove-branch-cable-5pcs-pack-p-847.html?cPath=98_106_57)

Sample applications include:

* Connecting or daisy chaining two or more I2C devices. Multiple branch cables can be used to extend I2C busses.
* Connecting two devices that need to work at the same time. For example, a LED and a Relay could be connected to a Grove Shield using a single Grove Branch Cable. It would then be possible to turn both the LED and the Relay off or on simultaneously since the two devices would be controlled by a single digital pin.

### Grove - Branch Cable for Servo

Grove Branch Cable for Servos are another type of Grove Cable, and are primarily used to connect one or two servos to your project. They consist of three connectors: one keyed four pin male connector suitable for connecting to a Grove Shield, and two three pin male post-type connectors. In this configuration, power and ground (pins 3 and 4 from the four pin male) are carried to both three pin male connectors. Pin 1 (yellow)of the four pin connector is connected to one of the pins of the Arduino capable of PWM, and is carried out to one of the three pin male post connectors. Pin 2 (white wire) of the four pin connector is also connected to a second PWM-capable pin of the Arduino, and is carried out to the second three pin male post connector.

The four pin keyed connector of the Grove Branch Cable for Servos will usually be connected to a Grove Shield digital socket such as D2-D9. When connecting servos, make a note of the wire color of the digital PWM cable (yellow or white) to know which digital pin corresponds to the servo input.

![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_servo.jpg)

### Grove to 4pin Female/Male Jumper

You can use it for:

* Connect Grove device to the other MCUs, such as you want to connect Grove - Light Sensor to Raspberry Pi.
* Use Base Shield to control some non-grove device

![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/cable_male_female.png)

### Link to buy a cable

| Cable                  | Link                                                                                                                                  |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Branch Cable           | [BUY ONE NOW!](http://www.seeedstudio.com/depot/grove-branch-cable-5pcs-pack-p-847.html?cPath=98_106_57)                              |
| Branch Cable for Servo | [BUY ONE NOW!](http://www.seeedstudio.com/depot/grove-branch-cable-for-servo5pcs-pack-p-753.html?cPath=98_106_57)                     |
| Grove to 4Pin Female   | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-4-pin-Female-Jumper-to-Grove-4-pin-Conversion-Cable-%285-PCs-per-PAck%29-p-1020.html) |
| Grove to 4Pin Male     | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-4-pin-Male-Jumper-to-Grove-4-pin-Conversion-Cable-%285-PCs-per-Pack%29-p-1565.html)   |

## Grove Starter Kit

We designed many kits for the beginner. Normally, a Grove starter kit include a Grove Extension Board, many Grove modules and a user manual, which include many lessons for the beginners. If you want to start a platform or just learn about electronic, Grove Starter kit is your best choice.

![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/starter_kit_main.jpg)

There are many kits for different platform.

| Kit Name                                   | Link                                                                                                                        |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| Grove - Starter Kit for Arduino            | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-Arduino-p-1855.html)                                        |
| Grove Starter Kit for mbed                 | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-mbed-p-2032.html)                                           |
| Grove Starter Kit for LinkIt ONE           | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-LinkIt-ONE-p-2028.html)                                     |
| Grove Starter Kit for LaunchPad            | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-LaunchPad-p-2178.html)                                      |
| Grove Starter Kit for Photon               | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-Photon-p-2179.html)                                         |
| Grove Starter Kit for BeagleBone Green     | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-SeeedStudio-BeagleBone-Green-p-2526.html)                   |
| Grove Starter Kit for LinkIt 7688 Duo      | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-LinkIt-7688-Duo-p-2551.html)                                |
| Grove Starter Kit for 96Boards             | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-Kit-for-96Boards-p-2618.html)                                       |
| Grove Starter kit for Arduino\&Genuino 101 | [BUY ONE NOW!](http://www.seeedstudio.com/Grove-Starter-kit-for-Arduino\&Genuino-101-p-2664.html)                           |
| GrovePi+ Starter Kit for Raspberry Pi      | [BUY ONE NOW!](http://www.seeedstudio.com/GrovePi+-Starter-Kit-for-Raspberry-Pi-A+,B,B+&2,3-%28CE-certified%29-p-2572.html) |

## Choose your Grove

Want some Grove modules for your project? Here are some recommend.

### Grove Basic Input and Output

| Grove - LED                                                                                                            | Grove - Rotary Angle Sensor                                                                                            | Grove - Button                                                                                                         |
| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/basic_1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/basic_2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/basic_3.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-Blue-LED-p-1139.html)                                                  | \[More Details]\(<http://www.seeedstudio.com/Grove-Rotary-Angle-Sensor(P)-p-1242.html>)                                | \[More Details]\(<http://www.seeedstudio.com/Grove-Button(P)-p-1243.html>)                                             |

| Grove - Switch                                                                                                         | Grove - Encoder                                                                                                        | Grove - Touch Sensor                                                                                                   |
| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/basic_4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/basic_5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/basic_6.jpg) |
| \[More Details]\(<http://www.seeedstudio.com/Grove-Switch(P)-p-1252.html>)                                             | [More Details](http://www.seeedstudio.com/Grove-Encoder-p-1352.html)                                                   | [More Details](http://www.seeedstudio.com/Grove-Touch-Sensor-p-747.html)                                               |

### Grove for Display

| I2C\_LCD                                                                                                                 | Grove - OLED Display 0.96"                                                                                               | Grove - OLED Display 1.12"                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/display_1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/display_2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/display_3.jpg) |
| [More Details](http://www.seeedstudio.com/I2C_LCD-%28With-universal-Grove-cable%29-p-2601.html)                          | [More Details](http://www.seeedstudio.com/Grove-OLED-Display-0.96%22-p-781.html)                                         | [More Details](http://www.seeedstudio.com/Grove-OLED-Display-1.12%22-p-824.html)                                         |

| Grove - LCD RGB Backlight                                                                                                | Grove - 4-Digit Display                                                                                                  | Grove LED Bar v2.0                                                                                                       |
| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/display_4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/display_5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/display_6.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-LCD-RGB-Backlight-p-1643.html)                                           | [More Details](http://www.seeedstudio.com/Grove-4-Digit-Display-p-1198.html)                                             | [More Details](http://www.seeedstudio.com/Grove-LED-Bar-v2.0-p-2474.html)                                                |

### Grove for Motion Detect

| Grove - IMU 10DOF v2.0                                                                                                  | Digital Accelerometer(±400g)                                                                                            | 3-Axis Digital Gyro                                                                                                     |
| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_3.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-IMU-10DOF-v2.0-p-2691.html)                                             | [More Details](http://www.seeedstudio.com/Grove-3-Axis-Digital-Accelerometer%28%C2%B1400g%29-p-1897.html)               | [More Details](http://www.seeedstudio.com/Grove-3-Axis-Digital-Gyro-p-750.html)                                         |

| 3-Axis Digital Compass                                                                                                  | 3-Axis Digital Accelerometer(±1.5g)                                                                                     | 3-Axis Analog Accelerometer                                                                                             |
| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_6.JPG) |
| [More Details](http://www.seeedstudio.com/Grove-3-Axis-Digital-Compass-p-759.html)                                      | \[More Details]\(<http://www.seeedstudio.com/Grove-3-Axis-Digital-Accelerometer(%C2%B11.5g)-p-765.html>)                | [More Details](http://www.seeedstudio.com/Grove-3-Axis-Analog-Accelerometer-p-1086.html)                                |

| 3-Axis Digital Acc(±16g)                                                                                                | 6-Axis Acc\&Compass v2.0                                                                                                | 6-Axis Acc\&Gyroscope                                                                                                   |
| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_7.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_8.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/motion_9.jpg) |
| \[More Details]\(<http://www.seeedstudio.com/Grove-3-Axis-Digital-Accelerometer(%C2%B116g)-p-1156.html>)                | [More Details](http://www.seeedstudio.com/Grove-6-Axis-Accelerometer%26Compass-v2.0-p-2476.html)                        | [More Details](http://www.seeedstudio.com/Grove-6-Axis-Accelerometer%26Gyroscope-p-2606.html)                           |

### Grove for Communication

| Grove – Uart Wifi                                                                                                     | 433MHz Simple RF link kit                                                                                             | 315MHz Simple RF Link Kit                                                                                             |
| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_3.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-%E2%80%93-Uart-Wifi-p-2495.html)                                      | [More Details](http://www.seeedstudio.com/Grove-433MHz-Simple-RF-link-kit-p-1062.html)                                | [More Details](http://www.seeedstudio.com/Grove-315MHz-Simple-RF-Link-Kit-p-1061.html)                                |

| Grove - Serial RF Pro                                                                                                 | 125KHz RFID Reader                                                                                                    | Grove - BLE                                                                                                           |
| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_6.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-Serial-RF-Pro-p-794.html)                                             | [More Details](http://www.seeedstudio.com/Grove-125KHz-RFID-Reader-p-1008.html)                                       | [More Details](http://www.seeedstudio.com/Grove-BLE-p-1929.html)                                                      |

| Grove - BLE (dual model)                                                                                              | Grove - NFC                                                                                                           | Grove - NFC Tag                                                                                                       |
| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_7.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_8.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/comu_9.jpg) |
| \[More Details]\(<http://www.seeedstudio.com/Grove-BLE-(dual-model)-p-2407.html>)                                     | [More Details](http://www.seeedstudio.com/Grove-NFC-p-1804.html)                                                      | [More Details](http://www.seeedstudio.com/Grove-NFC-Tag-p-1866.html)                                                  |

### Grove for Environment

| Air quality sensor                                                                                                   | Gas Sensor(MQ2)                                                                                                      | Gas Sensor(MQ5)                                                                                                      |
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_3.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-Air-quality-sensor-v1.3-p-2439.html)                                 | \[More Details]\(<http://www.seeedstudio.com/Grove-Gas-Sensor(MQ2)-p-937.html>)                                      | \[More Details]\(<http://www.seeedstudio.com/Grove-Gas-Sensor(MQ5)-p-938.html>)                                      |

| Gas Sensor(MQ3)                                                                                                      | Gas Sensor(MQ9)                                                                                                      | Gas Sensor(O2)                                                                                                       |
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_6.jpg) |
| \[More Details]\(<http://www.seeedstudio.com/Grove-Gas-Sensor(MQ3)-p-1418.html>)                                     | \[More Details]\(<http://www.seeedstudio.com/Grove-Gas-Sensor(MQ9)-p-1419.html>)                                     | \[More Details]\(<http://www.seeedstudio.com/Grove-Gas-Sensor(O2)-p-1541.html>)                                      |

| Dust Sensor                                                                                                          | Moisture Sensor                                                                                                      | Temperature\&Humidity Sensor                                                                                         |
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_7.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_8.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/env_9.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-Dust-Sensor-p-1050.html)                                             | [More Details](http://www.seeedstudio.com/Grove-Moisture-Sensor-p-955.html)                                          | [More Details](http://www.seeedstudio.com/Grove-Temperature%26Humidity-Sensor-Pro-p-838.html)                        |

### Grove for Robot

| I2C Mini Motor Driver                                                                                                  | I2C Motor Driver                                                                                                       | Grove - Servo                                                                                                          |
| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/robot_1.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/robot_2.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/robot_3.jpg) |
| [More Details](http://www.seeedstudio.com/Grove%C2%A0-%C2%A0I2C%C2%A0Mini%C2%A0Motor%C2%A0Driver-p-2508.html)          | [More Details](http://www.seeedstudio.com/Grove-I2C-Motor-Driver-p-907.html)                                           | [More Details](http://www.seeedstudio.com/Grove-Servo-p-1241.html)                                                     |

| Line Finder                                                                                                            | Ultrasonic Ranger                                                                                                      | 80cm Infrared Proximity Sensor                                                                                         |
| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/robot_4.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/robot_5.jpg) | ![enter image description here](https://raw.githubusercontent.com/SeeedDocument/GroveSystem/master/images/robot_6.jpg) |
| [More Details](http://www.seeedstudio.com/Grove-Line-Finder-p-825.html)                                                | [More Details](http://www.seeedstudio.com/Grove-Ultrasonic-Ranger-p-960.html)                                          | [More Details](http://www.seeedstudio.com/Grove-80cm-Infrared-Proximity-Sensor-p-788.html)                             |


# Grove Modules


# Actuators


# Atom Node

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node.jpg)

You might want to DIY an alarm system to monitor the soil moisture in your garden. While you are still lying in bed comfortably in the early morning, you might need a device, which automatically opens the doghouse for your doggie to come out and enjoy the warm sunlight. However, the complex software and hardware holds you back. Now, here comes Atom sweeping the road through the thistles and thorns; helping you complete these wonderful homebrew projects.

Atom is a node in internet of things. It can not only work standalone but also coordinate with other devices. Atom is highly expandable and easy to use. Standard Grove interfaces allow connections with different sensors. Atom fulfills tasks intelligently: the abundant data gathered are transmitted to the actuator wirelessly. What’s more fascinating is that you can finish all the tasks by simply setting your Android phone.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node_03.jpg)

Atom features wireless data transmission and mobile monitoring. Equipped with standard Bee interface, Atoms can be connected to XBee, RFBee and Bluetooth Bee to form wireless communication network, which gathers and manages the data automatically. Atom can also upload the data of different sensors to the Cloud, making it convenient to analyze data at all times and places simply through Web browsers.

[![](https://github.com/SeeedDocument/Seeed-WiKi/raw/master/docs/images/300px-Get_One_Now_Banner-ragular.png)](https://www.seeedstudio.com/Atom-Node-Black-Alloy-Limited-Edition-p-1494.html)

## Feature

* Mobile devices/Apps centered configure
* Open Source
* Flexible wireless networks topology from Ad-hoc to mesh
* Built-in battery
* A variety of Indicators, Easy to distinguish the work state
* Skin-Skeleton-Gut philosophy

## Specification

| Item                                                        | Typical                             | Unit |
| ----------------------------------------------------------- | ----------------------------------- | ---- |
| USB Supply Voltage                                          | 4.75-5.25                           | VDC  |
| Quiescent Current(connect RF Bee)                           | 25\~40                              | mA   |
| GPIO Voltage                                                | 3.3                                 | V    |
| Battery Capacity                                            | 300                                 | mAH  |
| Charging Current                                            | 300-500                             | mA   |
| USB Interface                                               | MICRO USB                           | /    |
| Working Frequency                                           | 16                                  | MHz  |
| Grove Supply Voltage                                        | 3.3                                 | V    |
| Output Current(Max)                                         | 500                                 | mA   |
| Continuous Working Time(Max)                                | 22                                  | h    |
| Photosensitive Sensor Response Frequency                    | 100                                 | Hz   |
| Low Battery Indication                                      | 3.71                                | V    |
| Photosensitive sensor response frequency                    | 100                                 | Hz   |
| RF BEE (seeed) Communication Distance(Max) in outdoor       | 200                                 | m    |
| Xbee(Xbee) Communication Distance(Max) in outdoor           | 30                                  | m    |
| Bluetooth Bee(seeed) Communication Distance(Max) in outdoor | 20                                  | m    |
| Grove Connector                                             | 3(IIC;UART;PWM)                     | /    |
| 20Pin Bee Socket                                            | Compatible Rfbee,Xbee,Bluetooth Bee | /    |
| Two-color charge indicator                                  | Green/Red                           | /    |
| Two-color user indicator                                    | Green/Red                           | /    |
| Buzzer Frequency                                            | 2.7±0.3                             | K    |

## Topology

Atom Node has sensor/actuator connectors for playing solo. With XBee or other open RF communication modules, It is also ready to talk in versatile networks topology when used in multiple. For example:

**1. The first Mode:**

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node1.jpg)

In this mode, The sensor and actuator are connected to one Atom Node. Atom Node read the sensor data and determine whether drive the Actuator to execute related actions. Demo 1 in the usage is working in this mode.

**2. The second Mode:**

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node2.jpg)

In this mode, The sensor and actuator are connected to two Atom Node. Atom Node receive the sensor data which is send by another Atom Node through RFBee and determine whether drive own actuator to execute related actions. Demo 2 in the usage is working in this mode.

**3. The third Mode:**

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node3.jpg)

In this mode, The sensor is connected to one Atom Node(here we called it as AtomSensor). Other Atom Nodes receive the sensor data which is send by AtomSensor through RFBee and determine whether driver own actuator to execute related actions.

## The Structure

Node solutions are design align with SSG (skin skeleton gut) philosophy. Gut: electronics inside

Skeleton: An minimal aluminum framework for protection and fixture, leaving enough opening to cater various sensors/actuators

Product Size:82mm*63.5mm*17mm

Material:Aluminum 5052

Finished: Black/Silver Anodized

Highlight Features: Hinge structure

Part Cleanness: Remove all burrs\&sharp corners. Clean off all oils,Dirt,or other contaminants

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom.node.jpg)

Let's look forward to these prototype...

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node_View1.jpg)![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node_View2.jpg)

## The Hardware

The system adopts Atmel 32U4 as the main chip. And equipped with standard Bee interface socket for wireless communication. It adopts 3.3V power supply, and the external power interface is Micro USB. When connected with external power source, it will convert to 3.3V through DC‐DC voltage‐adjustable‐circuit(based on chip TD6810),and supply power for the whole system. Meanwhile, 5V power source charge Lithium battery through CN3065 charge manager IC.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Atom_Node_Interface_Function.jpg)

**U1:** Atmel 32U4 IC, a 8-bit AVR Microcontroller;

**U3:** TD6810-ADJ IC, 1.5MHz 800mA Synchronous Step-Down Regulator Dropout;

**U4:** CN3065 IC, Charge management chip.

**Micro USB:** Charge for Lithium Battery and programming.

**Charge Indicator:** During charging process, the indicator is red; when finish charging, it turns to green. When it’s not connected to external power source or when the battery is in normal state, the indicator won’t light up. When it’s in low‐battery level(do not connect to extern power), it shows red.

**User Indicator:** Green blinking indicates transmit data, Red blinking indicates initializate. Red light indicates in configuration mode.

**Light Sensor:** Receive encoded parameters that Android device send.

**ADC Connector:** Can connect Sensors(is not IIC connector).

**PWM Connector:** Can connect Actuators(is not IIC connector).

**IIC Connector:** Can connect Sensors or Actuators(is IIC connector).

**Note:** A atom node can not connect simultaneously two or more Sensors(Actuators).

**Key Feature**

* Arduino compatible MCU
* LiPo battery and charger circuit
* LED/LDR for parameter setup
* Sensor/Actuator connector
* XBee compatible socket
* Micro USB cable for programming and power
* Low consumption design

&#x20;**Block Diagram**

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Beacon_ATOM_hardware.jpg)

&#x20;**Hardware design instruction**

[http://www.seeedstudio.com/wiki/images/1/1b/Beacon*Atom\_Hardware\_Design\_Analysis*.pdf](https://github.com/SeeedDocument/Atom_Node/raw/master/res/Beacon_Atom_Hardware_Design_Analysis_.pdf)

**Atom Node Overview**

Now let’s see what Atom Node looks like.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Hardware_View.jpg)

## The firmware and software

### The firmware

The firmware which have uploaded to Atom Node can driving sensors and actuators. Sensors available for Atom Node:

| ID  | Name                                        | Type   | Control Mode |
| --- | ------------------------------------------- | ------ | ------------ |
| 1   | Grove - Button                              | Sensor | IO           |
| 2   | Grove - Tilt Switch                         | Sensor | IO           |
| 3   | Grove - Line Finder                         | Sensor | IO           |
| 4   | Grove - PIR Motion Sensor                   | Sensor | IO           |
| 5   | Grove - Infrared Reflective Sensor          | Sensor | IO           |
| 6   | Grove - Magnetic switch                     | Sensor | IO           |
| 7   | Grove - Touch Sensor                        | Sensor | IO           |
| 8   | Grove - IR Distance Interrupter             | Sensor | IO           |
| 9   | Grove - Hall Sensor                         | Sensor | IO           |
| 11  | Grove - Collision Sensor                    | Sensor | IO           |
| 12  | Grove - Moisture sensor                     | Sensor | Analog       |
| 13  | Grove - Light Sensor                        | Sensor | Analog       |
| 14  | Grove - Rotary Angle Sensor                 | Sensor | Analog       |
| 44  | Grove - Temprature Sensor                   | Sensor | Analog       |
| 45  | Grove - Water Sensor                        | Sensor | Analog       |
| 46  | Grove - 80cm Infrared Proximity Sensor      | Sensor | Analog       |
| 47  | Grove - Infrared Temperature Sensor         | Sensor | Analog       |
| 48  | Grove - Slide Potentiometer                 | Sensor | Analog       |
| 59  | Grove - Air quality sensor 1.0              | Sensor | Analog       |
| 50  | Grove - Electricity Sensor                  | Sensor | Analog       |
| 51  | Grove - Alcohol Sensor                      | Sensor | Analog       |
| 53  | Grove - Sound Sensor                        | Sensor | IO           |
| 54  | Grove – Ultrasonic Ranger                   | Sensor | IO           |
| 81  | Grove - Digital Light Sensor                | Sensor | IIC          |
| 82  | Grove - Barometer Sensor                    | Sensor | IIC          |
| 102 | Grove - Temperature\&Humidity Sensor Pro –T | Sensor | ONE-Wire     |
| 103 | Grove - Temperature\&Humidity Sensor Pro –H | Sensor | ONE-Wire     |
| 110 | Grove - Infrared Receiver                   | Sensor | IR           |

Current it can drive almost all of sensors. It is visible that the firmware is powerful. Actuators available for Atom Node:

| ID  | Name                                | Type     | Control Mode |
| --- | ----------------------------------- | -------- | ------------ |
| 128 | Grove - Relay                       | Actuator | IO           |
| 129 | Grove - LED                         | Actuator | IO           |
| 135 | Grove - Multi Color Flash LED (5mm) | Actuator | IO           |
| 136 | Grove - Variable Color LED          | Actuator | IO           |
| 137 | Grove - Buzzer                      | Actuator | IO           |
| 138 | Grove - Vibrator                    | Actuator | IO           |
| 201 | Grove - OLED Display 128\*64        | Actuator | IIC          |
| 202 | Grove - OLED 96x96                  | Actuator | IIC          |
| 223 | Grove - LED Bar                     | Actuator | IO           |
| 224 | Grove - Infrared Emitter            | Actuator | IR           |

### The software

There is an application program for configuring Atom Node modules. The program is running on Android devices. During the configuration process, the screen area of Android device will flash to transmit encoded parameters to the Atom Node via a light-sensitive transistor. The configuration interface is shown below:

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Configuration_Interface_.png)

## Usage

Atom Node is an open-source hardware solution for the Internet of Things, which can support several Grove sensors and actuators to gather physical data and perform certain actions. The Atom Node needs to be configured before being put in use. After configuration, several modules can gather and transmit data wirelessly through RFBee.

We would like to take the temperature sensor as an example to illustrate the use of the Atom Node. Let's try to make this happen: when the temperature exceeds 28 ℃, a buzzer will sound.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Effect_diagram.jpg)

**Preparatory work:** Using the device, you need at least an RFBee/Xbee (when using only one Atom Node, it is not necessary) and an Android device (the Atom Node does not include it). If you want the Atom Node to work, they are essential. And please make sure the baud rate of the RFBee/XBee is set at 57,600. If not, you need to modify the configuration, using your own method or upload the demo of [the Library file:RFBee](https://github.com/SeeedDocument/Atom_Node/raw/master/res/RFBee.zip) to RFBee. Then download [the application program package:BeaconUI](https://github.com/SeeedDocument/Atom_Node/raw/master/res/BeaconUI.zip) and install on an Android device.

### Demo 1: Use one Atom Node

Now using an Atom Node working in IFTTT mode, follow the steps below:

* Connect a Grove - Temperature to ADC port and Grove - Buzzer to PWM port using [Grove - Universal 4 Pin cables](https://app.gitbook.com/GROVE_System#Grove_Cable).
* Plug RFBee in the Bee Socket.
* Press the button on one side of the Atom Node to turn it on. The LED on the other side will light up. Then press the button again to make the Atom Node enter the configuration mode. Meanwhile, the user indicator is red.
* Open the Atom Node app; you can see the following interface:

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Interface1.jpg)

* Click the plus sign at the upper right corner to add a device, a selection panel will pop up.

  ![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface2.jpg)

Let’s pause for a while to briefly introduce the interface.

1\) Device Name: this can be any word. Such as “Sensor-temperature” or any word you like.

2\) Sensor: choose a sensor.

3\) The rest of the configuration is for the Actuator. If you don’t need one, choose NULL and the rest of the options are automatically ignored.

Now let's configure it and set the device name as "temp".

* Refer to the picture below, Input "temp" as the device name. Choose "Grove - Temperature" in "Sensor" and choose "Grove - Buzzer" in Actuator. Choose any other options besides "Null" in "Sensor Radio Frequency", Input the "if" value and choose on in "then":

  ![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface9.png)

In indie mode, the trigger source should choose the device itself, therefore you should choose "temp" in the drop-down box of "Trigger from". But now there's only a "Null" option. Just ignore this problem. After you see the device name in the device list, you can reconfigure when the device name appears in "Trigger from".

* Place it on the Android device screen. Note that the light sensor is facing the screen. It is better that the brightness of the screen is set to about 35%. ![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface3.jpg)
* Click "Submit". It will start configuring. After successful configuration, the user indicator lights green and blinks.If the configuration fails, click Again. If it keeps failing, you can refer to [FAQ](https://app.gitbook.com/Talk-Atom_Node).

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface4.jpg)

* We have completed the configuration, you can see it in the device list now.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface5.jpg)

Remember that you have just selected trigger source as Null. You need to reconfigure it.

* Once the temperature sensor reads a value exceeding 28 ℃, the buzzer will sound.

### Demo 2: Use two Atom Node

Using two Atom Nodes working in IFTTT mode, you may follow the steps below:

* Connect a Grove - Temperature to the ADC port of Atom Node and plug an RFBee (Baud rate 57,600) to the Bee socket.
* Connect a Grove - Buzzer to the PWM port of another Atom Node and plug an RFBee to the bee Socket.
* Open the Atom Node app. Click the plus sign on the upper right corner. We set the device name as “temp” and choose Grove - Temperature in "sensor" as follows: ![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface6.jpg)
* Turn on the Atom Node and enter configuration mode by pressing the button, then place it on the Android screen. Click Submit. It will start configuring.
* After completing the configuration of one Atom Node, you can see it in the device list.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface5.jpg)

* Then configure the other Atom Node, connecting a Grove - Buzzer in a similar fashion.

  ![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface7.jpg)

When configuring the actuator, set the actuator's name. Then choose the trigger source of the actuator in “Trigger from”. We would like to use the previously configured device "temp" to trigger the actuator: therefore we should choose "temp" in the drop-down box of “Trigger from”. There are some other trigger conditions and actions, like “If” and “then” which help you to build a link between a certain condition and corresponding actions. By the way, the “If” values should always follow the data type of the Sensor you used.

* When the two Nodes have been configured, it will start working. Then you can see the user LED is green.

  ![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Node_Interface8.jpg)

## Work Status Description

| \*\*Operate\*\*                                   | \*\*Status\*\*                                                                                                                 | \*\*Function\*\*                          |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------- |
| Press the power button                            | Power LED will light(Blue)                                                                                                     | Turn on the atom node                     |
| Press the power button after turn on Atom Node    | Power LED is light(Blue),User LED will light(if unpair, User LED is red;After successfully paired,User LED is green and blink) | Enter configuration mode                  |
| Press the power button when in configuration mode | Power LED is light(Blue),User LED will off                                                                                     | Exit configuration mode                   |
| Long Press the power button                       | All LED will off and Buzzer will Sound                                                                                         | Turn off Atom Node                        |
| Double-click the power button                     | User Indicator will off or on                                                                                                  | Turn on/off User Indicator                |
| Four-click the power button                       | all indicators keep states                                                                                                     | Clear data                                |
| Connect Atom Node to PC using USB cable           | Charge LED will light(Charge LED is red in charge, After charging complete,Charge LED is Green), Power LED will light          | Charge for Battery or update the firmware |

## Upgrade the firmware

### Connect device and install the driver

* Download [the Atom Node Driver File](https://github.com/SeeedDocument/Atom_Node/raw/master/res/Atom_Node_Driver.zip) and save it.
* Connect the Micro-USB cable to the Atom Node and connect the other side of the Micro-USB connector to the computer's USB port.
* Wait for the new found hardware prompt.If the installer does not launch automatically, Navigate to the Windows Device Manager  and find the Seeeduino Lite listing.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/A_Unknow_Device.jpg)

* Right click and choose Update driver. When asked to install automatically or from a specific location, select "Browse my computer for driver software".

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Update_Driver.jpg)

* Choose "Search for the best driver in these locations", and check the box "incude this location in the search". Click the Browse button and navigate to drive you have downloaded. Select the drivers folder an click **OK**.

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Browse_the_Driver.jpg)

![](https://github.com/SeeedDocument/Atom_Node/raw/master/img/Update_the_Driver.jpg)

### Modify File: boards.txt and  USBCore.cpp

* Open up Arduino-1.0.1/hardware/arduino/co<https://github.com/SeeedDocument/Atom_Node/raw/master/res/arduino> directory, replace the file:USBCore.cpp with [the new USBCore.cpp](https://github.com/SeeedDocument/Atom_Node/raw/master/res/USBCore.zip).
* And replace file：boards.txt with [the new boards.txt](https://github.com/SeeedDocument/Atom_Node/raw/master/res/Boards-Atom_Node-.txt) in the path:Arduino-1.0.1/hardware/arduino.

### Download the required library files and Atom.Node firmware

* The latest Atom.Node firmware: <https://github.com/reeedstudio/Atom_Node>
* The latest Atom.Node Library: <https://github.com/reeedstudio/Atom_Node_Libraries>

### Upload program using Arduino IDE

* Open the Atom\_Node.ino of Atom.Node firmware file
* Select Seeeduino Node from the Tools | Board menu of the Arduino environment. And select the correct port.
* Compile and uplaod the code.

Now you have completed the firmware upgrade.

## Resources

* [Atom\_Node\_Eagle\_File.zip](https://github.com/SeeedDocument/Atom_Node/raw/master/res/Atom_Node_Eagle_File.zip)
* [Atom Node Library](https://github.com/reeedstudio/Atom_Node_Libraries)
* [Atom Node firmware](https://github.com/reeedstudio/Atom_Node)
* [the application program:BeaconUI](https://github.com/SeeedDocument/Atom_Node/raw/master/res/BeaconUI.zip)
* [Hardware design instruction](https://github.com/SeeedDocument/Atom_Node/raw/master/res/Beacon_Atom_Hardware_Design_Analysis_.pdf)


# Grove 2 Coil Latching Relay

![](https://raw.githubusercontent.com/SeeedDocument/Grove-2-Coil_Latching_Relay/master/img/2Coil_Latching_Relay_01.jpg)

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. Even the power can be removed when the work state do not need to change, making this module especially suitable for low-power projects.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/Grove-2-Coil-Latching-Relay-p-1446.html)

## Features

* Grove Connector
* Low power consumption
* Dual Switch

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Specifications

| Item                   | Min         | Typical | Max | Unit |
| ---------------------- | ----------- | ------- | --- | ---- |
| Working Voltage        | 4.7         | 5.0     | 5.3 | VDC  |
| Set/Reset Voltage(Max) | 4.0         | VDC     |     |      |
| Coil Resistance        | 151         | 167     | 183 | Ω    |
| Switching Voltage(Max) | 35VAC/35VDC | /       |     |      |
| Switching Current(Max) | 3           | A       |     |      |
| Set Time(Latching)     | 4.5(max)    | ms      |     |      |
| Reset Time(Latching)   | 3.5(max)    | ms      |     |      |

## Platforms Supported

## Before usage

### Related Reading

We suggest you to read those knowledge before using the Gas sensor, it'll help you to learn more about Arduino and our products, and also it'll let you to use open souse hardware more easier.

* [Getting Started with Arduino](https://app.gitbook.com/Getting_Started_with_Seeeduino)
* [What is Grove system](https://app.gitbook.com/Grove_System)
* [Why i need a Base shield?](https://app.gitbook.com/Base_Shield_V2)

After reading that you will know how to use Base shield with Grove products to work well with Arduino. Let's start it !

### To be prepared

This tutorial will include some necessary products:

* [Arduino UNO R3](http://www.seeedstudio.com/depot/Arduino-Uno-Rev3-p-694.html) or [Seeeduino v4](http://www.seeedstudio.com/depot/Seeeduino-V4-p-669.html)
* [Base Shield](http://www.seeedstudio.com/depot/Base-Shield-V2-p-1378.html)
* Grove - 2-Coil Latching Relay

## Getting Started

### With Arduino

The latching relay only draws power during the changing of state. A rising/falling voltage pulse on the signal pin changes it's working state. This is very useful in situations where energy efficiency is important, and also in situations where you need the relay to remember its state.

Let's begin to use it.

* Connect the module to D3 port of [Grove - Base Shield](https://app.gitbook.com/Base_Shield_V2).
* The relay hold in "set" status(Comm and NO connected) in default, when there is a rising edge on the SIG pin. It turns the "reset" state(Comm and NC connected). The reference code is shown below:

```c
#define LatchingRelay 3
void setup()
{
    pinMode(LatchingRelay,OUTPUT);

    digitalWrite(LatchingRelay,LOW);
    delay(1000);
    digitalWrite(LatchingRelay,HIGH);
    delay(1000);
}
void loop()
{

}
```

* The relay hold in "reset" status(Comm and NC Connected), when there is a falling edge on the SIG pin. It turns the "set" state(Comm and NO connected). The reference code is shown below:

```c
#define LatchingRelay 3
void setup()
{
    pinMode(LatchingRelay,OUTPUT);

    digitalWrite(3,HIGH);
    delay(1000);
    digitalWrite(3,LOW);
    delay(1000);
}
void loop()
{

}
```

* This module consumes little power when working state doesn't change. After setting the relay state, you do not need to supply power for the Latching Relay any more, which makes it especially low power consumption.

Note Relay is on the "reset" status when being released from stock.

![](https://raw.githubusercontent.com/SeeedDocument/Grove-2-Coil_Latching_Relay/master/img/Latching_Relay_Diagram.jpg)

Notes

&#x20;1\. The two-way relays are controlled at the same time.

&#x20;2\. The NO(NC) indicator will flash once when switch to "set"("reset") status.

### With Raspberry Pi

1.You should have got a raspberry pi and a grovepi or grovepi+.

2.You should have completed configuring the development enviroment, otherwise follow [here](https://app.gitbook.com/GrovePiPlus).

3.Connection

* Plug the sensor to grovepi socket D4 by using a grove cable.

4.Navigate to the demos' directory:

```
cd yourpath/GrovePi/Software/Python/
```

* To see the code

```
nano grove_2_coil_latching_relay.py   # "Ctrl+x" to exit #
```

```
import time
import grovepi

# Connect the Grove 2-Coil Latching Relay to digital port D4
# SIG,NC,VCC,GND
relay = 4

grovepi.pinMode(relay,"OUTPUT")

while True:
    try:
        # switch on for 5 seconds
        grovepi.digitalWrite(relay,1)
        print "on"
        time.sleep(5)

        # switch off for 5 seconds
        grovepi.digitalWrite(relay,0)
        print "off"
        time.sleep(5)

    except KeyboardInterrupt:
        grovepi.digitalWrite(relay,0)
        break
    except IOError:
        print "Error"
```

5.Run the demo.

```
sudo python grove_2_coil_latching_relay.py
```

## Resources

* [Grove - 2-Coil Latching Relay Eagle File](https://raw.githubusercontent.com/SeeedDocument/Grove-2-Coil_Latching_Relay/master/res/Grove-2-Coil_Latching_Relay_Eagle_File.zip)
* [Latching\_Relay\_Datasheet](https://raw.githubusercontent.com/SeeedDocument/Grove-2-Coil_Latching_Relay/master/res/Latching_Relay_Datesheet.pdf)


# Grove Button

![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/Button.jpg)

**Grove - Button** is a momentary push button. It contains one independent "momentary on/off" button. “Momentary” means that the button rebounds on its own after it is released. The button outputs a HIGH signal when pressed, and LOW when released. The button signals the SIG Pin of the Grove Interface while NC is not used at all. There are two versions of this button available as showed in the pictures. The only difference between them is the direction of the Grove socket.

[![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/300px-Get_One_Now_Banner.png)](https://www.seeedstudio.com/Grove-Button-p-766.html)

## Features

* Easy to use momentary ON/OFF button
* Uses Standard 4-pin Grove Cables to connect to other Grove modules such as Grove Power Modules and Grove - Base Shield

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Usage

**Standalone**

Follow these steps to build a sample circuit using this module but without using any microcontroller:

* Connect the button module to the input side of your circuit (to the left of the power module). On the output side of the circuit, you may use a range of User [Interface modules](https://app.gitbook.com/Grove/Grove_System/) (Grove - Red LED, Grove - LED String Light, Grove - Mini Fan, Grove - Buzzer, Grove - Recorder etc.)
* Power up the circuit when complete.
* The button module can now be used to trigger an output. For example:
  * When used in conjunction with a Grove - Red LED output module, observe that the LED turns ON when you press the button and turns OFF when you stop pressing it.

![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/Grove-momentarySwitch-RedLED.jpg)

In terms of power modules, use either the Grove - USB Power module or the Grove - DC Jack Power module for the Grove circuit.

**With Arduino**

Follow these simple steps to build a Grove circuit using the momentary ON/OFF button:

When using the module in conjunction with an Arduino or a Seeeduino, use the Grove - Base Shield and connect the Grove - Button module to the shield using a designated Grove interface. Also attach an output module such as a Grove - Red LED which will get triggered based on input received from the button. Upload the following sample sketch to make the LED turn ON and OFF based on input from Grove - Button:

```c
//Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached to pin 2.

/*
 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.


 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
    // initialize the LED pin as an output:
    pinMode(ledPin, OUTPUT);
    // initialize the pushbutton pin as an input:
    pinMode(buttonPin, INPUT);
}

void loop(){
    // read the state of the pushbutton value:
    buttonState = digitalRead(buttonPin);

    // check if the pushbutton is pressed.
    // if it is, the buttonState is HIGH:
    if (buttonState == HIGH) {
        // turn LED on:
        digitalWrite(ledPin, HIGH);
    }
    else {
        // turn LED off:
        digitalWrite(ledPin, LOW);
    }
}
```

**With Raspberry Pi**

This is a simple example of Raspberry Pi. Run Program and press button, it will print 1 on the terminal, else print 0. Such as the picture below.

![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/GrovePi%2B_grove_button.jpg)

![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/Grovepi%2B_grove_button_terminal.jpg)

```python
# http://www.seeedstudio.com/wiki/Grove_-_Button

import time
import grovepi

# Connect the Grove Button to digital port D3
# SIG,NC,VCC,GND
button = 3

grovepi.pinMode(button,"INPUT")

while True:
    try:
        print grovepi.digitalRead(button)
        time.sleep(.5)

    except IOError:
        print "Error"
```

**Run The Program**

* Find the path to the file(According to your own path)

  ```
  cd GrovePi/Software/Python/
  ```
* Run Progrom

  ```
  sudo python grove_button.py
  ```

**Related Grove Packer**

The standard Grove - Button module is available as part of the following Grove Kit Series:

|                                                        Grove - Mixer Pack V2                                                       |                                  Grove - Mixer Pack                                  |                               Grove - Starter Kit V1.1b                              |
| :--------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------: |
|                      ![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/mixer%20pack%20v2.jpg)                     | ![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/mixer%20pack.jpg) |  ![](https://github.com/SeeedDocument/Grove_Button/raw/master/image/Newbundle1.jpg)  |
| [Get One Now](https://www.seeedstudio.com/Mixer-Pack-V2\(Electronic-blocks%2Cwithout-Arduino%2Cplug-and-play-system\)-p-1867.html) |        [Get One Now](https://www.seeedstudio.com/Grove-Mixer-Pack-p-1590.html)       | [Get One Now](https://www.seeedstudio.com/Grove-Starter-Kit-for-Arduino-p-1855.html) |

Alternatively, it can be bought stand-alone [here](https://www.seeedstudio.com/Grove-Button-p-766.html)at the Seeed Studio [Bazaar](https://www.seeedstudio.com/). To buy the Panel Mount version of the module, go to [here](http://www.seeedstudio.com/depot/Grove-ButtonP-p-1243.html)

## Project

![](https://raw.githubusercontent.com/SeeedDocument/Grove_Button/master/img/gun.jpg)

Inspired by OVERWATCH, we have made a very cool Wooden Laser Gun toy for fun these day!

The Wooden Laser Gun and the Gun Target are all based on an Arduino board called Seeeduino Lotus. The laser emitter on the Laser Gun is controlled to fire laser pulse to "activate" the Gun Target. And there are 3 light sensors on the Gun Target to detect the laser pulse. It seems very simple right? If you are interested in our project, please make one for yourself or your child! It's worth to spend one day DIY it as a Xmas present.

[![](https://raw.githubusercontent.com/SeeedDocument/Seeed-WiKi/master/docs/images/make.png)](http://www.instructables.com/id/DIY-a-Wooden-Laser-Gun-As-a-Xmas-Present-for-Your-/)

## Resources

* [Schematic at Easyeda](https://easyeda.com/Seeed/Grove_Button_v1_2-f0f9f212fcee460ebe3703dab813e5c4)
* [Grove-Button Eagle Files](https://github.com/SeeedDocument/Grove_Button/raw/master/resources/Grove_-_Button_v1.0_Source_File.zip).
* [How to upload code](http://wiki.seeedstudio.com/wiki/Upload_Code)


# Grove Buzzer

![](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/images/Grove%20Buzzer.jpg) The Grove - Buzzer module has a [piezo buzzer](https://en.wikipedia.org/wiki/Buzzer#Piezoelectric) as the main component. The piezo can be connected to digital outputs, and will emit a tone when the output is HIGH. Alternatively, it can be connected to an analog pulse-width modulation output to generate various tones and effects.

[![](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/images/300px-Get_One_Now_Banner.png)](https://www.seeedstudio.com/Grove-Buzzer-p-768.html)

## Features

* Easy to use piezoelectric buzzer
* Uses Standard 4-pin Grove Cables to connect to other Grove modules such as - [Grove Power Modules](https://app.gitbook.com/Grove/Grove_System/) and Grove - Base Shield

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Specifications

* Operating Voltage: 4-8V
* Sound Output: ≥85dB
* Resonant Frequency: 2300±300Hz

## Usage

**Standalone**

Follow these steps to build a sample circuit using this module but without using any microcontroller:

1. Connect the buzzer module to the output side of your circuit (to the right of the power module). On the input side of the circuit, you may use a range of sensor based input modules (**Grove - Light Sensor**, **Grove - Button** or **Grove - Slide Potentiometer**).
2. Power up the circuit.
3. The buzzer will start to "buzz" when the input module supplies a trigger:
   * If using with a momentary switch like the one on the **Grove - Button module**, simply press the button to turn ON the buzzer.
   * If using with a **Grove - Slide Potentiometer**, move the slider from the GND position to VCC and see how the tone and frequency of the buzzer vary as the supplied voltage increases.
   * If using with a **Grove - Light Sensor** connected directly to the input side of the circuit, you should hear the buzzer in bright light and it should stop "buzzing" in the dark. If you want the buzzer to sound only in the dark, add a **Grove - NOT** module between the light sensor and the power module.

You can use either the **Grove - USB Power** module or the **Grove - DC Jack Power** module for the Grove circuit.

**With Arduino**

Follow these simple steps to build a Grove circuit using the buzzer: 1. When using the module in conjunction with an Arduino or a **Seeeduino**, use the **Grove - Base Shield** and connect the Grove - Buzzer module to the shield using a designated Grove Interface as shown below:

![](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/images/Conn-four.jpg)

1. Upload the following sample sketch to make the Buzzer make a beeping noise:

```c
// Project Four - Noise maker
//

void setup()
{
  pinMode(6, OUTPUT);
}

void loop()
{
  digitalWrite(6, HIGH);
  delay(analogRead(0));
  digitalWrite(6, LOW);
  delay(analogRead(0));
}
```

**With TI LaunchPad**

Playing Music (Buzzer)

* This example shows how to use the Grove buzzer module to play melodies. It sends a square wave of the appropriate frequency to the buzzer, generating the corresponding tone.

![](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/images/Buzzer.jpg)

```c
/*
  Buzzer
 The example use a buzzer to play melodies. It sends a square wave of the
 appropriate frequency to the buzzer, generating the corresponding tone.

 The circuit:
 * Buzzer attached to pin39 (J14 plug on Grove Base BoosterPack)
 * one side pin (either one) to ground
 * the other side pin to VCC
 * LED anode (long leg) attached to RED_LED
 * LED cathode (short leg) attached to ground

 * Note:
 This example code is in the public domain.

 http://www.seeedstudio.com/wiki/index.php?title=GROVE_-_Starter_Kit_v1.1b#Grove_-_Buzzer

*/

/* Macro Define */
#define BUZZER_PIN               39            /* sig pin of the buzzer */

int length = 15;         /* the number of notes */
char notes[] = "ccggaagffeeddc ";
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void setup()
{
    /* set buzzer pin as output */
    pinMode(BUZZER_PIN, OUTPUT);
}

void loop()
{
    for(int i = 0; i < length; i++) {
        if(notes[i] == ' ') {
            delay(beats[i] * tempo);
        } else {
            playNote(notes[i], beats[i] * tempo);
        }
        delay(tempo / 2);    /* delay between notes */
    }

}

/* play tone */
void playTone(int tone, int duration) {
    for (long i = 0; i < duration * 1000L; i += tone * 2) {
        digitalWrite(BUZZER_PIN, HIGH);
        delayMicroseconds(tone);
        digitalWrite(BUZZER_PIN, LOW);
        delayMicroseconds(tone);
    }
}

void playNote(char note, int duration) {
    char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
    int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

    // play the tone corresponding to the note name
    for (int i = 0; i < 8; i++) {
        if (names[i] == note) {
            playTone(tones[i], duration);
        }
    }
}
```

**With Raspberry Pi** The following is a simple example to show how to use the Grove - Buzzer module on Raspberry Pi. The buzzer makes noise and delays one second. Then quiet for a second.It repeats the above action.

![](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/images/GrovePi%2B_Grove_buzzer.jpg)

```python
# GrovePi + Grove Buzzer
import time
import grovepi

# Connect the Grove Buzzer to digital port D8
# SIG,NC,VCC,GND
buzzer = 8

grovepi.pinMode(buzzer,"OUTPUT")

while True:
    try:
        # Buzz for 1 second
        grovepi.digitalWrite(buzzer,1)
        print 'start'
        time.sleep(1)

        # Stop buzzing for 1 second and repeat
        grovepi.digitalWrite(buzzer,0)
        print 'stop'
        time.sleep(1)

    except KeyboardInterrupt:
        grovepi.digitalWrite(buzzer,0)
        break
    except IOError:
        print "Error"
```

**Run the program**

Find the path to the file(According to your own path) \`\`\`cd GrovePi/Software/Python/

````
Run Program
```sudo python grove_buzzer.py
````

## Project

![](https://raw.githubusercontent.com/SeeedDocument/Seeeduino_Lotus/master/img/gun.jpg)

Inspired by OVERWATCH, we have made a very cool Wooden Laser Gun toy for fun these day!

The Wooden Laser Gun and the Gun Target are all based on an Arduino board called Seeeduino Lotus. The laser emitter on the Laser Gun is controlled to fire laser pulse to "activate" the Gun Target. And there are 3 light sensors on the Gun Target to detect the laser pulse. It seems very simple right? If you are interested in our project, please make one for yourself or your child! It's worth to spend one day DIY it as a Xmas present.

[![](https://raw.githubusercontent.com/SeeedDocument/Seeed-WiKi/master/docs/images/make.png)](http://www.instructables.com/id/DIY-a-Wooden-Laser-Gun-As-a-Xmas-Present-for-Your-/)

## Resources

* [Grove - Buzzer Source Files v1.1](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/resources/Grove-Buzzer_V1.1_eagle.zip)
* [Grove - Buzzer Source Files v1.0 (Eagle and pdf)](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/resources/Grove_-_Buzzer_v1.0_Source_File.zip)
* [S9013datasheet](https://github.com/SeeedDocument/Grove_Buzzer/raw/master/resources/S9013.pdf)
* [Schematic at Easyeda](https://easyeda.com/Seeed/Grove_Buzzer_v1_2-c713baf3c1774da39ce0c995544ce5da)


# Grove Dry Reed Relay

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Dry-Reed_Relay/master/img/DryReed_Relay_01.jpg)

The **Grove-Dry Reed Relay** is a relay module which works through magnetizing the vibration reed via the current in the coils. Compared to electromagnetic relays, the contacts completely sealed is the biggest feature of the Dry-Reed Relay. Besides, it features simplicity in construct, compactness, fast speed and long life, which make it widely applied in many fields such as microelectronic detection, Automatic Control etc.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/Grove-Dry-Reed-Relay-p-1412.html)

## Features

* Grove Interface
* High Speed
* Good stability
* Long contact life
* Contact fully sealed

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Specifications

| Item                        | Min              | Typical | Max | Unit |
| --------------------------- | ---------------- | ------- | --- | ---- |
| Voltage                     | 4.8              | 5.0     | 5.2 | VDC  |
| Coil Resistance             | 225              | 250     | 275 | Ω    |
| Pick-Up Voltage             | 3.75             | VDC     |     |      |
| Switching Current(Max)      | 0.5              | A       |     |      |
| Switching Voltage(Max)      | 120 VAC/60VDC    | -       |     |      |
| Carrying Current(Max)       | 1.0              | A       |     |      |
| Operate Time(Max)           | 1.0              | mS      |     |      |
| Release Time(Max)           | 0.5              | mS      |     |      |
| Mechanical Life(at no load) | 1×108 operations | -       |     |      |
| Ambient Temperature         | -30              | /       | 70  | ˚C   |

## Platforms Supported

## Usage

### With Arduino

The Dry-Reed Relay can support up to 60VDC 1A load. You can use it to control resistance load, **but it is not applicable to inductive load(such as Motor)**.

The usage of this Dry-reed relay is quite alike that of common relays.

* Connect electric light to Grove - Dry-Reed Relay and power for electric light.
* Connect Grove - Dry-Reed Relay to port D2 of [Grove - Base Shield](https://app.gitbook.com/Base_Shield_V2) and plug it into Arduino/Seeeduino.
* Upload the below code.

```
    int Relay = 2;

    // the setup routine runs once when you press reset:
    void setup() {                
      // initialize the digital pin as an output.
      pinMode(Relay, OUTPUT);     
    }

    // the loop routine runs over and over again forever:
    void loop() {
      digitalWrite(Relay, HIGH);   //the Relay close(HIGH is the voltage level)
      delay(5000);               // wait for five seconds
      digitalWrite(Relay, LOW);    //the Relay normally open by making the voltage LOW
      delay(5000);               // wait for five seconds
    }
```

* The electric light will light up for seconds ,then off for seconds, repeatedly.For the special applications, you may need to write the code by yourself.

### With Raspberry Pi

1.You should have got a raspberry pi and a grovepi or grovepi+.

2.You should have completed configuring the development enviroment, otherwise follow [here](https://app.gitbook.com/GrovePiPlus).

3.Connection

* Plug the sensor to grovepi socket D4 by using a grove cable.

4.Navigate to the demos' directory:

```
    cd yourpath/GrovePi/Software/Python/
```

* To see the code

  ```
  nano grove_relay.py   # "Ctrl+x" to exit #
  ```

  ```
  import time
  import grovepi

  # Connect the Grove Relay to digital port D4
  # SIG,NC,VCC,GND
  relay = 4

  grovepi.pinMode(relay,"OUTPUT")

  while True:
      try:
          # switch on for 5 seconds
          grovepi.digitalWrite(relay,1)
          print "on"
          time.sleep(5)

          # switch off for 5 seconds
          grovepi.digitalWrite(relay,0)
          print "off"
          time.sleep(5)

      except KeyboardInterrupt:
          grovepi.digitalWrite(relay,0)
          break
      except IOError:
          print "Error"
  ```

5.Run the demo.

```
    sudo python grove_relay.py
```

## Resources

* [Grove - Dry-Reed Relay Eagle File](https://raw.githubusercontent.com/SeeedDocument/Grove-Dry-Reed_Relay/master/res/Grove-Dry-Reed_Relay_Eagle_File.zip)
* [Dry-Reed Relay Datasheet](https://raw.githubusercontent.com/SeeedDocument/Grove-Dry-Reed_Relay/master/res/Dry-Reed_Relay_Datasheet.pdf)


# Grove EL Driver

![](https://raw.githubusercontent.com/SeeedDocument/Grove-EL_Driver/master/img/Grove-EL_Driver.jpg)

Grove - EL Driver is designed for driving EL Wires. It integrates a very small inverter to drive the EL Wire, so you can easily light up the EL Wire with just one single Grove cable.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/Grove-EL-Driver-p-2269.html)

## Version Tracker

| Revision | Descriptions           | Release      |
| -------- | ---------------------- | ------------ |
| v1.0     | Initial public release | Dec 11, 2014 |

### **Supported EL Wires:**

* [EL Wire-Green 3m](http://www.seeedstudio.com/depot/EL-WireGreen-3m-p-1102.html)
* [EL Wire-Red 3m](http://www.seeedstudio.com/depot/EL-WireRed-3m-p-1129.html)
* [EL Wire-Blue 3m](http://www.seeedstudio.com/depot/EL-WireBlue-3m-p-1128.html)
* [EL Wire-Yellow 3m](http://www.seeedstudio.com/depot/EL-WireYellow-3m-p-1127.html)
* [EL Wire-White 3m](http://www.seeedstudio.com/depot/EL-WireWhite-3m-p-1130.html)

## Features

* Grove compatible interface
* 3.3V/5V Compatible
* Integrated Inverter Transformer
* Input Current: 300mA Max (According to the load)
* Supported max EL Capacitance: 15nF

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Usage

Here we show how to use Arduino to control the state of the LED.

1. Connect the Grove - EL Driver to Base Shield's **digital port 2** with 4pin Grove Cable. Of course you can change to other valid digital ports if it's necessary and the definitions of the port should be changed too. Connect a EL Wire to EL Driver **J1** port with the given cable in product package.
2. Plug it onto the Arduino/Seeeduino. Connect the board to PC using USB cable.
3. Copy the demo code to your sketch, then upload to Arudino or Seeeduino board. You will see the EL Wire blink every second.

```
/*************************   2014 Seeedstudio   **************************
* File Name          : GroveELDriverDemoCode.ino
* Author             : Seeedteam
* Version            : V1.0
* Date               : 11/12/2014
* Description        : Demo code for Grove - EL Driver
*************************************************************************/

#define ELPin 2 //connect EL Driver to digital pin2
void setup() {                
  // initialize the digital pin2 as an output.
  pinMode(ELPin, OUTPUT);     
}

void loop() {
  digitalWrite(ELPin, HIGH);   // set the EL Wire on
  delay(500);               // for 500ms
  digitalWrite(ELPin, LOW);   // set the EL Wire off
  delay(500);
}
```

![](https://raw.githubusercontent.com/SeeedDocument/Grove-EL_Driver/master/img/Grove-EL_Driver_usage.jpg)

## Resources

* [sch\_pcb\_eagle](https://raw.githubusercontent.com/SeeedDocument/Grove-EL_Driver/master/res/Grove-EL_Driver_v1.0.zip)
* [sch\_pdf](https://raw.githubusercontent.com/SeeedDocument/Grove-EL_Driver/master/res/Grove-EL_Driver_v1.0.pdf)


# Grove Haptic Motor

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Haptic_Motor/master/img/Grove_Haptic_Motor.jpg)

Grove - Haptic motor is a grove module integrated with [DRV2605L](http://www.ti.com/product/DRV2605L) which will give your project more feelings. This motor is specially designed for various effects, such as ramping the vibration level up and down, for wearables and other IoT devices. Right now we have developed an easy-to-use library which simulate 123 kinds in total of vibrating modes and this will make your prototyping quicker. Also, you can develop more advanced functions with driver DRV2605L which will improve actuator performance in terms of acceleration consistency, start time, and break time and is accessible through a shared I2C compatible bus or PWM input signal.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/depot/Grove%C2%A0%C2%A0Haptic%C2%A0Motor-p-2546.html)

## Features

* More vibration effects.
* Quicken your project prototyping process.
* Easy-to-use library with 123 kinds of vibrating modes.
* Powerful driver to implanting more advanced functions.

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Specifications

| Parameter                  | Value      |
| -------------------------- | ---------- |
| Operating voltage          | 3.3\~5.0 V |
| Ripples (at maximum power) | 50\~100 mV |
| Max power                  | 750 mW     |
| I2C speed                  | 100 kHz    |
| Vibration effects          | 123 types  |
| Driver                     | DRV2605L   |
| Port                       | I2C        |
| Default I2C Address        | 0x5A       |

## Platforms Supported

## Application ideas

* Mobile phone, tablets.
* Wearable devices.
* Remote controls, touch-enabled devices.
* Industrial human-machine interfaces.

## Hardware Overview

**Front view:** ![](https://raw.githubusercontent.com/SeeedDocument/Grove-Haptic_Motor/master/img/Grove_Haptic_Motor.jpg)

**Rear view:** ![](https://raw.githubusercontent.com/SeeedDocument/Grove-Haptic_Motor/master/img/Grove_Haptic_Motor_back.jpg)

## Getting started

Note This section only shows you how to build a basic development environment. You can build a development environment for your project with following guides:

### Build IDE

Refer to following guides to building an appropriate IDE:

[Getting Started on Windows](https://app.gitbook.com/Seeeduino_v4.2#Getting_Started_on_Windows)

[Getting Started on Mac OS X](https://app.gitbook.com/Seeeduino_v4.2#Getting_Started_on_Mac_OS_X)

Note Arduino board will also be fine if you happen to have no Seeeduino board because [Seeeduino](https://app.gitbook.com/Seeeduino_v4.2) is compatible with Arduino.

### Hardware connection

Notes

a. Make sure you have built a development environment successful through previous steps.

b.Make sure your board has selected Arduino Uno and COM port right chosen. Connect to I2C interface on Seeeduino board and Haptic motor with grove wire.

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Haptic_Motor/master/img/Grove_haptic_motor_connection.jpg)

### Download sample code

1. You can download [sample code](https://github.com/Seeed-Studio/Grove_Haptic_Motor) and library or header files.
2. Click a button named "Download Zip" at [Github](https://github.com/Seeed-Studio/Grove_Haptic_Motor).
3. Decompress the downloaded ZIP file.
4. Remove the "-master" twice in decompressed file name.
5. Copy the folder Grove\_Haptic\_Motor into your library folder (In default, it is same with Sketchbook Location which can be found by clicking File > Preference).Under Windows, it will likely be called "My Documents\Arduino\libraries". For Mac users, it will likely be called "Documents/Arduino/libraries". On Linux, it will be the "libraries" folder in your sketchbook.
6. Copy file **drv2605.cpp** and file **drv2605.h** to its parent directory.

### Load sample code

Note In this case we use [Seeeduino 4.2](https://app.gitbook.com/Seeeduino_v4.2) as experiment board which is a compatible board with Arduino.

Tip You can use [Base shield v2](https://app.gitbook.com/Base_Shield_V2) as expansion board which will make your connection of modules simple.

Warning Never touch driver DRV2605L which may cause damage to it when it is powered.

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Haptic_Motor/master/img/Grove_Haptic_Motor_cautions.png)

1. Make sure haptic motor and main control board well connected.
2. Load your sample code drv2605.ino under example file of decompressed file.
3. Flash your code to your main control board by click Project->Upload(CTRL+U).
4. After uploading, you now get haptic motor vibrate at a smooth style.

## Resources

* Schematic files in [Eagle format](https://raw.githubusercontent.com/SeeedDocument/Grove-Haptic_Motor/master/res/Grove_Haptic_Motor_v0.9_Eagle.zip) and [PDF format](https://raw.githubusercontent.com/SeeedDocument/Grove-Haptic_Motor/master/res/Grove_Haptic_Motor_v0.9_SCH.pdf).
* [More about drive circuit DRV2605L](http://www.ti.com/product/DRV2605L).
* [Git repository](https://github.com/Seeed-Studio/Grove_Haptic_Motor)


# Grove I2C Motor Driver V1.2

![](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/img/I2CMotorDriver-2.jpg)

The Grove I2C motor driver is a new addition to the Grove series with the same easy-to-use interface. Its heart is a dual channel H-bridge driver chip（L298N）that can handle current up to 2A per channel, controlled by an Atmel ATmega8L which handles the I2C communication with for example an Arduino. Both motors can be driven simultaneously while set to a different speed and direction. It can power two brushed DC motors or one 4-wire two-phase stepper motor. It requires a 6V to 15V power supply to power the motor and has an onboard 5V voltage regulator which can power the I2C bus and the Arduino(selectable by jumper). All driver lines are diode protected from back EMF.

The easy software interface is not the only easy-to-use feature because the Grove I2C motor driver is designed to get you up and running in no time. It features a LED for power and four LED's to indicate if and to which direction each motor is running. Screw terminals facilitate motor and power connections, and the Grove system plug and I2C interface enables you to daisy-chain the driver with many other devices.

[![](https://github.com/SeeedDocument/Seeed-WiKi/raw/master/docs/images/300px-Get_One_Now_Banner-ragular.png)](https://www.seeedstudio.com/twig-i2c-motor-driver-p-907.html)

## Version Tracker

| Revision | Descriptions                | Release        |
| -------- | --------------------------- | -------------- |
| v1.0     | Initial public release      | May 17th, 2012 |
| v1.2     | I2C address set by hardware | July 2th, 2012 |

## Feature

* Grove Compatiple
* I2C Interface
* Motor's speed and direction can control
* Number of channels: 2
* Changeable slave address by Hardware

## Specifications

| Item                            | Min | Typical | Max | Unit |
| ------------------------------- | --- | ------- | --- | ---- |
| Working Voltage                 | 6   | -       | 15  | VDC  |
| Max Output Current per channel  | 0.5 | A       |     |      |
| Maximum Total current           | 1.0 | A       |     |      |
| Input/output voltage on I2C bus | 5   | V       |     |      |
| Communication protocol          | I2C | /       |     |      |

## Interface Function

![](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/img/I2CMotorDriver-1.jpg)

**78M05 IC:** 5v voltage regulator

**L298 IC:** dual full bridge driver

**Atmega8 IC:** Control Motor Rotate.

**NOTE:** Input voltage on screw terminals is regulated to 5v and connected to I2C +5v via a jumper (J4). Remove jumper if both external power via the screw terminals and power via the I2C header is used. Use jumper if 5v should be supplied to the I2C bus.

## Application Ideas

This motor driver can be used to drive any brushed electronic motor as long as it doesn't consume more than 2A at 5v. Two motors can be driven simultaneously while set to a different speed and direction. The speed can be set fully proportional and is controlled by the ATmega8 on the board using PWM. It is set by I2C commands sent from Arduino or Seeeduino. It is perfect for applications like robots, homebuilt RC cars, case fans, high power LED illumination or any other project that involves proportional load control.

## Cautions

* The board will be very hot if while operating over 1Amps. Do keep off your hands!
* Arduino IDE(1.0 Or higher version) are supported.

## Usage

The I2C Motor Driver can control motor which is based on the chip L298, The L298 isn’t just a dual motor driver, it is a dual H-bridge. An h-bridge is basically a specific setup of transistors that allow you to switch direction of current. So hooked up to a motor, that means you can have it spin in both directions, and with PWM input, you can use your Arduino to make them spin at any speed. Because the L298 has 2 H-bridges, you can not only make a robot go forwards and backwards, but also turn around by having each wheel spin in a different direction.

Now, let's use the I2C Motor Driver to control two DC motors or a stepper rotating in the positive or opposite direction.

### Set the address of the I2C Motor Driver

* Set the address by dial switch as a new function added to the new I2C Motor Driver.

![](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/img/I2CMotorDriver-9.jpg)

* Then keep the address setup in the program is same to the address setup on the I2C motor driver. The default address setup in the program is 0x0f.

  ```
  #define I2CMotorDriverAdd         0x0f   // Set the address of the I2CMotorDriver
  ```

  How to drive 2 DC motors

![](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/img/I2CMotorDriver-4.jpg)

**Note:**

\</span>

The first thing to notice however, is that you need an external power source your DC motors, the 5v pin on the Arduino can not source enough power to drive 2 motors, you may damage your Arduino if you do.

And then program your Arduino as below:

```
#include <Wire.h>
.......
.......
< Driver functions >
.......
.......
void setup()  {
    Wire.begin(); // join i2c bus (address optional for master)
    delayMicroseconds(10000); //wait for motor driver to initialization
}

void loop()  {
    while(1)  {
        MotorSpeedSetAB(100,20);
        delay(10); //this delay needed
        MotorDirectionSet(0b1010);  //0b1010  Rotating in the positive direction
        delay(1000);
        MotorDirectionSet(0b0101);  //0b0101  Rotating in the opposite direction
        delay(500);
    }
}
```

In this program, Arduino first set the speed of the 2 DC motors with the *MotorSpeedSetAB()\_command, and then set the DC motors work directions with \_MotorDirectionSet()* command. please refer to the [Function Reference](https://app.gitbook.com/Grove-I2C_Motor_Driver_V1.2#Function_Reference) for details, you can download all the demo code in the [Resource](https://app.gitbook.com/Grove-I2C_Motor_Driver_V1.2#Resources).

### How to drive a 4-wire stepper

The I2C motor Driver can be also used to drive a 4-wire stepper. connect your stepper to the Output Pins of I2C motor driver, and then connect motor driver to your Arduino/Seeeduino with I2C bus. Program your Arduino as blows:

```
#include <Wire.h>
.......
.......
< Driver functions >
.......
.......
void setup()  {
    Wire.begin(); // join i2c bus (address optional for master)
    delayMicroseconds(10000); //wait for motor driver to initialization
}

void loop()  {
    while(1)  {
        MotorSpeedSetAB(100,100);//when driving a stepper, the speed should be set to 100;
        delay(10);
        MotorDirectionSet(0b0001);
        delay(4);
        MotorDirectionSet(0b0011);
        delay(4);
        MotorDirectionSet(0b0010);
        delay(4);
        MotorDirectionSet(0b0110);
        delay(4);
        MotorDirectionSet(0b0100);
        delay(4);
        MotorDirectionSet(0b1100);
        delay(4);
        MotorDirectionSet(0b1000);
        delay(4);
        MotorDirectionSet(0b1001);
        delay(4);
    }
}
```

This connected 4-wire stepper will rotate, you can adjust the rotate speed or step number in your Arduino program. You can also use some other stepper libraries to control it, you can download all the demo code in the [Resource](https://app.gitbook.com/Grove-I2C_Motor_Driver_V1.2#Resources).

![](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/img/2.gif)

## Function Reference

**1. void MotorSpeedSetAB(unsigned char MotorSpeedA , unsigned char MotorSpeedB)**&#x20;

*Description: defines the speed of motor 1 and motor 2*

*MotorSpeedA: the DC motor A speed, should be 0\~100;*

*MotorSpeedB: the DC motor B speed, should be 0\~100;*

Usage:

```
Serial.println("sent DC speed 100");
MotorSpeedSetAB(100,100);//defines the speed of motor 1 and motor 2;
delay(10); //this delay needed
```

**2. void MotorPWMFrequenceSet(unsigned char Frequence)**

*Description:set the prescale frequency of PWM, 0x03 default.*

*Frequence: the prescale frequency of PWM.*&#x20;

**3. void MotorDirectionSet(unsigned char Direction)**

*Description: Adjust the direction of the motors.*

*Direction:can be Forward/Reverse rotating.*

Usage:

```
MotorDirectionSet(0b1010);  //"0b1010" defines the output polarity, "10" means the M+ is "positive" while the M- is "negative"
                            // make sure M+ and M- is different polarity when driving DC motors.
delay(1000);
MotorDirectionSet(0b0101);  //0b0101  Rotating in the opposite direction
delay(500);
```

**4. void MotorDriectionAndSpeedSet(unsigned char Direction,unsigned char MotorSpeedA,unsigned char MotorSpeedB)**

*Description: Adjust the direction and speed together of Motors.*

## Resources

* [Grove - I2C Motor Driver Eagle File](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/res/Grove-I2C_Motor_Driver_Source_File.zip)
* [I2C Motor DriverV1.2 Demo Code](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/res/I2CMotorDriver12Demo.zip)
* [L298 Datasheet ](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/res/L298datasheet.pdf)
* [78M05 Datssheet ](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/res/ST_78M05DataSheet.pdf)
* [File:Burn Firmware for Atmega8 using ISP](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.2/raw/master/res/Burn_firmware_for_Atmega8_using_ISP.zip)


# Grove I2C Motor Driver V1.3

![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/img/I2CMotorDriver_New.jpg)

The Grove - I2C Motor Driver V1.3 (latest version) can directly control Stepper Motor or DC Motor. Its heart is a dual channel H-bridge driver chip（L298N）that can handle current up to 2A per channel, controlled by an Atmel ATmega8L which handles the I2C communication with platforms such as Arduino. Both motors can be driven simultaneously while set to a different speed and direction. It can power two brushed DC motors or one 4-wire two-phase stepper motor. It requires a 6V to 15V power supply to power the motor and has an onboard 5V voltage regulator which can power the I2C bus and the Arduino(selectable by jumper). All driver lines are protected by diodes from back-EMF.

Contrast to the [Grove - I2C motor driver V1.2](http://wiki.seeed.cc/Grove-I2C_Motor_Driver_V1.2/), the V1.3 enables users to control the stepper motor more easily. You do not need to control the steppers all the time anymore, simply send a command to I2C motor driver V1.3 to drive a stepper motor, and it will act as your command, which would save your Arduino resource and simplify your code.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/Grove-I2C-Motor-Driver-p-907.html)

## Version

| Revision | Descriptions                                    | Release        |
| -------- | ----------------------------------------------- | -------------- |
| v1.0     | Initial public release                          | May 17th, 2012 |
| v1.2     | Modify the I2C address set by hardware          | July 2nd, 2012 |
| v1.3     | Modify the firmware to support off-line Stepper | Feb 18th, 2013 |

## Features

* Grove Compatible
* I2C Interface
* Adjustable motor speed and rotation direction
* Changeable slave address by hardware

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Specifications

| Item                            | Min | Typical | Max | Unit |
| ------------------------------- | --- | ------- | --- | ---- |
| Working Voltage                 | 6   | -       | 15  | VDC  |
| Max Output Current per channel  | 0.5 | A       |     |      |
| Maximum Total current           | 1.0 | A       |     |      |
| Input/output voltage on I2C bus | 5   | V       |     |      |
| Communication protocol          | I2C | /       |     |      |

## Platforms Supported

## Hardware Overview

![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/img/I2CMotorDriver-1.jpg) **78M05 IC:** 5V voltage regulator

**L298 IC:** Dual full bridge driver

**ATmega8 IC:** Control Motor Rotation.

Note Input voltage on screw terminals is regulated to 5V and connected to I2C +5V via a jumper (J4). Remove jumper if both external power via the screw terminals and power via the I2C header are used. Use jumper if 5V should be supplied to the I2C bus.

## Application Ideas

* Robots
* Homebuilt RC cars
* Case fans
* High power LED illumination

Caution The board will be very hot while operating over 1Amp. Do keep your hands off!

## Getting Started

The I2C Motor Driver can control motor which is based on the chip L298. The L298 isn’t just a dual motor driver, it is a dual H-bridge. An h-bridge is basically a specific setup of transistors that allow you to switch direction of current. Hooking up to a motor means you can have it spin in both directions; and with PWM input, you can use your Arduino to make them spin at any speed. Because the L298 has 2 H-bridges, you can make a robot turn around by spinning each wheel in different directions, and of course go forwards and backwards.

### 1. Install the library

* Please follow [how to install an arduino library](http://wiki.seeed.cc/How_to_install_Arduino_Library/) procedures to install library.
* Run the command or or download the [zip file](https://github.com/Seeed-Studio/Grove_I2C_Motor_Driver_v1_3/archive/master.zip) directly.

```
  git clone https://github.com/Seeed-Studio/Grove_I2C_Motor_Driver_v1_3.git
```

* Simply copy the Grove\_I2C\_Motor\_Driver\_v1\_3 folder to your Arduino library collection. For example, arduino-1.6.12/libraries. Next time you run the Arduino IDE, you'll have a new option in Sketch -> Include Library -> Grove\_I2C\_Motor\_Driver\_v1\_3. Review the included examples in Grove\_I2C\_Motor\_Driver\_v1\_3. We provide both DC and stepper motor control examples.

  ![](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/raw/master/img/library%20example.jpg)

### 2. Set the address of the I2C Motor Driver

* Set the address by dial switch is a new function added to the new I2C Motor Driver.

  ![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/img/I2CMotorDriver-9.jpg)
* Then keep the address setup in the program the same as the address setup on the I2C motor driver. The default address setup in the program is 0x0f.

```
// default I2C address is 0x0f
#define I2C_ADDRESS 0x0f

void setup()
{
    Motor.begin(I2C_ADDRESS);
}
```

### 3. Drive 2 DC motors

![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/img/I2CMotorDriver-4.jpg)

Note The first thing to notice, is that you need an external power source for your DC motors. The 5V pin on the Arduino cannot provide enough power to drive 2 motors, you may damage your Arduino if you do so.

* There are 2 functions to control DC motors:

```
// Set the speed of a motor, speed is equal to duty cycle here
void speed(unsigned char motor_id, int _speed);

// Stop one motor
void stop(unsigned char motor_id);
```

With speed() function, you are able to drive one motor at the speed you want.

* **motor\_id** represents which motor to use. You can fill MOTOR1 or MOTOR2.
* **\_speed** represents the speed you set to the motor. You can fill -100\~100 here. When \_speed>0, DC motor runs clockwise, while \_speed<0, DC motor runs anticlockwise. And the bigger the absolute value of \_speed, the faster the speed of DC motor.

With stop() function, you are able to stop a running DC motor.

* **motor\_id** represents which motor to use. You can fill MOTOR1 or MOTOR2.

### 4. Drive a Stepper Motor

Take [24BYJ48 Stepper Motor](http://www.seeedstudio.com/depot/high-quality-stepper-motor-12v-p-335.html?cPath=170_171) as an example, The hardware installation as shown below:

![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/img/I2C_Motor_Driver_control_a_Stepper_Motor.jpg)

The connection between [24BYJ48](http://www.seeedstudio.com/depot/high-quality-stepper-motor-12v-p-335.html?cPath=170_171) Stepper Motor and I2C Motor Driver is as shown below:

![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/img/I2C_Motor_Driver_Connector.jpg)

* We provide one function to drive a stepper motor.

```
// Drive a stepper motor
void StepperRun(int _step);
```

**\_step** represents the steps you set to the stepper motor to run. You can fill -1024\~1024. When \_step>0, stepper motor runs clockwise, while \_step<0, stepper motor runs anticlockwise. When \_step is 512/-512, the stepper motor will run a complete turn and if \_step is 1024/-1024, the stepper motor will run 2 turns. The stepper motor will stop automatically after it finishes its steps.

## Resources

* [Grove - I2C Motor Driver V1.3 in Eagle Format](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/res/Grove-I2C_Motor_Driver_v1.3_Eagle_File.zip)
* [Grove - I2C Motor Driver V1.3 PCB in PDF Format](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/raw/master/res/Grove%20-%20I2C%20Motor%20Driver%20%20v1.3b%20PCB.pdf)
* [Grove - I2C Motor Driver V1.3 Schematic in PDF Format](https://github.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/raw/master/res/Grove%20-%20I2C%20Motor%20Driver%20%20v1.3b.pdf)
* [Grove - I2C Motor Driver V1.3 Library](https://github.com/Seeed-Studio/Grove_I2C_Motor_Driver_v1_3)
* [L298 Datasheet](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/res/L298datasheet.pdf)
* [78M05 Datasheet](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/res/ST_78M05DataSheet.pdf)
* [On-Chip Firmware for I2C motor driver](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver_V1.3/master/res/On-Chipfirmware_for_Motor_driver.zip)


# Grove I2C Motor Driver

| ![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver/master/img/Grove-I2C_Motor_Driver_V1.1.jpg) | ![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver/master/img/I2CMotorDriver-2.jpg) | ![](https://raw.githubusercontent.com/SeeedDocument/Grove-I2C_Motor_Driver/master/img/I2CMotorDriver_New.jpg) |
| ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [Grove - I2C Motor Driver V1.0](https://app.gitbook.com/Grove-I2C_Motor_Driver_V1.0)                                   | [Grove - I2C Motor Driver V1.2](https://app.gitbook.com/Grove-I2C_Motor_Driver_V1.2)                        | [Grove - I2C Motor Driver V1.3](https://app.gitbook.com/Grove-I2C_Motor_Driver_V1.3)                          |


# Grove LED Matrix Driver v1.0

![](https://raw.githubusercontent.com/SeeedDocument/Grove-LED_Matrix_Driver_v1.0/master/img/Grove-LED_Matrix_Driver_v1.0_product_view_700_s.jpg)

Grove - LED Matrix Driver v1.0 is UART (Serial) to dot matrix LED driver that incorporates various graphics functions.It can only support 32×64 LED matrix. This product is a **Grove** compatible UART interface. It provides easy and rich APIs that abstract the complexity of the underlying LED driving hardware. All you need to is just call these APIs in code to implement different functionalities for your project.

Each dot(i.e pixel) support dual color LEDs. It can produce three colors totally: red (primary color), green(primary color) and yellow (mixed color). The input current for all LEDs can be set at a time.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/Grove-LED-Matrix-Driver-v1.0-p-2645.html)

Note This Grove module does not support changing the input current of each LED separately.

## Features

* Grove compatible and easy to use
* Highly abstracted and complete API
* Support dual-color LED-pixel. Three colors totally (the third color is a mix of two primary color)
* Interface: UART(SoftSerial in Arduino)

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Specifications

| Parameter                              | Value                                                                                                                          |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Operating voltage(V)                   | 3.3–5 Volts                                                                                                                    |
| Operating current(mA)                  | Maximum: 28–50 mA                                                                                                              |
| Output voltage (from matrix driver)    | 3.3 Volts                                                                                                                      |
| Symbols/Graphics functions supported   | Dot, straight line, circle, char, string, number, emoji, image (you can display these symbols by calling API directly in code) |
| Supported LED matrix size              | 32(row)×64(column)                                                                                                             |
| Supported color in each LED matrix dot | Dual LEDs (green and red) and a mixed color(yellow), and you can use only one LED in each LED matrix dot                       |
| Connector for LED matrix               | DBSTAR\_HUB 08A                                                                                                                |
| Protocol for Grove port                | UART                                                                                                                           |
| Working temperature                    | -40–80 ℃                                                                                                                       |
| Dimensions                             | 46.5×44 mm                                                                                                                     |
| Weight                                 | 9 g(for the module), 12.5(for all single package)                                                                              |

## Platforms Supported

## Hardware Overview

![](https://raw.githubusercontent.com/SeeedDocument/Grove-LED_Matrix_Driver_v1.0/master/img/Grove-LED_Matrix_Driver_v1.0_product_components_described_1200_s.jpg)

* **Grove socket**, to connect this product to main control board.
* **LED matrix port(DBSTAR\_HUB 08A )**, to connect LED matrix. If you can not find a connector like this, you can user jumper wires as an alternative.

### **Package includes**(main parts)

| Parts name                                                                                                                    | Quantity |
| ----------------------------------------------------------------------------------------------------------------------------- | -------- |
| Grove - LED Matrix Driver v1.0                                                                                                | 1 piece  |
| [Grove cable](http://www.seeedstudio.com/depot/Grove-Universal-4-Pin-Buckled-5cm-Cable-5-PCs-Pack-p-925.html?cPath=98_106_57) | 1 piece  |

## Getting Started

Now let us run some basic examples with this module.

### With Arduino

#### Material required

* Grove - LED Matrix Driver v1.0 × 1
* 32×64 LED matrix with one red and one green LEDs in matrix dots (single color LED matrix will also be fine) × 1
* Power line (ribbon shape) for × 1
* 5 Volts(output) Adapter to regulate input voltage for LED matrix × 1
* 8-pin(female) ribbon cable × 1
* Arduino UNO (other Arduino models will also be fine) × 1
* [Grove cable](http://www.seeedstudio.com/depot/Grove-Universal-4-Pin-Buckled-5cm-Cable-5-PCs-Pack-p-925.html?cPath=98_106_57) × 1
* Grove - Base Shield × 1

#### Connections

Connect all parts as following:

![](https://raw.githubusercontent.com/SeeedDocument/Grove-LED_Matrix_Driver_v1.0/master/img/Grove-LED_Matrix_Driver_v1.0_wiki_demo_connections_front_3600.jpg)

![](https://raw.githubusercontent.com/SeeedDocument/Grove-LED_Matrix_Driver_v1.0/master/img/Grove-LED_Matrix_Driver_v1.0_wiki_demo_connections_back_3600.jpg)

#### Coding Work

You can find more demo sketch at <https://github.com/Seeed-Studio/Grove_LED_Matrix_Driver> and development library at <https://github.com/Seeed-Studio/Grove_LED_Matrix_Driver/tree/master/Arduino/LEDMatrix>

1. A typical demo code. You can upload code to main control board with [Codebender](https://codebender.cc).
2. Download and upload the code. If you do not know how to upload an Arduino sketch, please visit <https://www.arduino.cc/en/Guide/Windows> for Windows user or <https://www.arduino.cc/en/Guide/MacOSX> for Mac user. You can see the result as below.

![](https://raw.githubusercontent.com/SeeedDocument/Grove-LED_Matrix_Driver_v1.0/master/img/Grove-LED_Matrix_Driver_v1.0_wiki_demo_result_view_s.jpg)

## Resources

* [Schematic file](https://raw.githubusercontent.com/SeeedDocument/Grove-LED_Matrix_Driver_v1.0/master/res/Grove_LED_Matrix_Driver_v1.0_Schematics.zip)
* [STM32F103C8T6 Datasheet](https://raw.githubusercontent.com/SeeedDocument/Grove-LED_Matrix_Driver_v1.0/master/res/STM32F03C8T6.pdf)
* [Library on Github](https://github.com/Seeed-Studio/Grove_LED_Matrix_Driver)
* [Firmware for this product](https://github.com/Seeed-Studio/Grove_LED_Matrix_Driver/tree/master/Firmware)


# Grove Mini Fan

![](https://github.com/SeeedDocument/Grove-Mini_Fan/raw/master/img/Mini_Fan%20head.jpg)

The **Grove - Mini Fan** module is a DC motor driver based on the AVR Atmega168 microcontroller. The module also provides a breakout through which you can change the microcontroller code. For example, the code can be changed so that the module can be used to drive a [servomotor](http://en.wikipedia.org/wiki/Servomotor). By default, the module is set up to run the DC motor that is included in your mixer pack. The soft-leaved fan also included in the pack can be attached to the motor to make a fun project with kids. Being soft-leaved, the fan is completely safe and there is no chance of any injury even if it is moving at a high speed.

[![](https://github.com/SeeedDocument/Seeed-WiKi/raw/master/docs/images/300px-Get_One_Now_Banner-ragular.png)](https://www.seeedstudio.com/Grove-Mini-Fan-p-1819.html)

## Features

* User friendly output module that triggers a DC motor into operation based on signal received from an input sensor or switching module
* Used in conjunction with DC motor included with the pack
* JST 2.0 Interface used to connect to the motor
* DC motor comes with a colorful soft-leaved fan accessory (as shown in the picture)
* On-board micro-controller can be re-programmed to change module operation
* Micro-controller runs [Arduino](https://app.gitbook.com/w/index.php?title=Arduino\&amp;action=edit\&amp;redlink=1) Compatible code
* Change code to drive Servo motors instead of DC motors
* Uses Standard 4-pin [Grove Cables](https://app.gitbook.com/GROVE_System#Grove_Cables) to connect to other [Grove](https://app.gitbook.com/Grove) modules
* Note:for latest version(v1.1), the output voltage for motor is updated to 3.3 volts.

## Interface Function

![](https://github.com/SeeedDocument/Grove-Mini_Fan/raw/master/img/Mini_fan.jpg)

① UartSBee Interface: Use this interface to change the microcontroller code. Use a \[UartSBee]\(/UartSBee\_V4) module to connect to the microcontroller using the Uart interface.② JST 2.0 Interface: Used to connect to a 3.3 volts DC motor(only 3.3 volts)③ Grove Interface④ ICSP Interface⑤ Atmega168 Microcontroller⑥ Servo Interface

## Usage

Follow these steps to build a sample circuit using this module:

1.First connect the DC motor to the **Grove - Mini Fan** module using the JST2.0 two-wire interface.

2.Connect the Mini Fan module to the output side of your circuit (to the right of the power module). On the input side of the circuit, you may use a range of sensor based input modules ([Grove - Light Sensor](https://app.gitbook.com/Grove-Light_Sensor), [Grove - Sound Sensor](https://app.gitbook.com/Grove-Sound_Sensor), [Grove - Button](https://app.gitbook.com/Grove-Button) or [Grove - Slide Potentiometer](https://app.gitbook.com/Grove-Slide_Potentiometer)).

3.Power up the circuit.

4.The DC motor starts to rotate when the input module supplies a trigger:

* If using with a momentary switch like the one on the [Grove - Button](https://app.gitbook.com/Grove-Button) module, simply press the button to turn ON the motor.
* If using with a [Grove - Slide Potentiometer](https://app.gitbook.com/Grove-Slide_Potentiometer), move the slider from the GND position to VCC and see the speed of the motor increase as the supplied voltage increases. Attach the soft-leaved fan and you have a variable speed personal fan that you can run at whichever speed you desire to fight the heat!
* If using with a [Grove - Light Sensor](https://app.gitbook.com/Grove-Light_Sensor) connected directly to the input side of the circuit, you should see that the motor runs in bright light and stops in the dark:

![](https://github.com/SeeedDocument/Grove-Mini_Fan/raw/master/img/Light_Sensitive_Fan.gif)

* If you want the motor to run only in the dark, add a [Grove - NOT](https://app.gitbook.com/Grove-NOT) module between the light sensor and the power module.
* If using with a [Grove - Sound Sensor](https://app.gitbook.com/Grove-Sound_Sensor), you should see that the motor runs on detecting sound. Again, if you want to reverse the function, or in other words, if you want that the motor should be ON at all times except when there is a sound, add a [Grove - NOT](https://app.gitbook.com/Grove-NOT) module between the sound sensor and the power module.

  \</dd>\</dl>

  \</dd>\</dl>

  \</dd>\</dl>

You can use either the [Grove - USB Power](https://app.gitbook.com/Grove-Mixer_Pack#2._USB_Power) module or the [Grove - DC Jack Power](https://app.gitbook.com/Grove-DC_Jack_Power) module for the Grove circuit.

For building a circuit that controls a servomotor using a potentiometer, follow the steps below:

1. Open the code directly to the path: \libraries\Servo\examples\Knob
2. Upload your code to the on-board MCU. Ensure that you select the correct board type and COM port when uploading.
3. Now you should be able to control your servomotor with a potentiometer

## Availability

This [Grove](https://app.gitbook.com/Grove) module is available as part of the following [Grove Kit Series](https://app.gitbook.com/GROVE_System#GROVE_Kit_Series):

* [Grove Mixer Pack V2](https://app.gitbook.com/GROVE_MIXER_PACK_V2)

Alternatively, it can be bought stand-alone at the [Seeed Studio Bazaar](http://www.seeedstudio.com/depot/Grove-Mini-Fan-p-1819.html).

## Resources

* [Grove - Mini Fan v1.0 (Eagle Files)](https://github.com/SeeedDocument/Grove-Mini_Fan/raw/master/res/Grove-Mini_Fan_v1.0.zip)
* [Grove - Mini Fan v1.0 (pdf)](https://github.com/SeeedDocument/Grove-Mini_Fan/raw/master/res/Grove-Mini_Fan_v1.0.pdf)


# Grove Mini I2C Motor Driver v1.0

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/img/Mini_I2C_motor_2.png)

This Grove - MIni I2C motor driver includes two DRV8830. The DRV8830 provides an integrated motor driver solution for battery-powered toys, printers, and other low-voltage or battery-powered motion control applications. The module has two H-bridge drivers, and can drive two DC motors or two winding of stepper motors, as well as other loads like solenoids.It requires an onboard 5V voltage regulator which can power the I2C bus. All driver lines are diode protected from back EMF.It features two LEDs for fault indicator and four LEDs to indicate which direction each motor is running. GROVE system plug and I2C interface enables you to daisy-chain the driver with many other devices.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/Grove%C2%A0-%C2%A0I2C%C2%A0Mini%C2%A0Motor%C2%A0Driver-p-2508.html)

## Features

* Without external power supply
* Two leds for fault indicator
* Default maximum drive current 200 mA
* Grove compatible
* I2C interface
* Motor's speed and direction can control
* Number of channels: 2
* Easy to use

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Application Ideas

This motor driver can be used to drive any brushed electronic motor as long as it doesn't consume more than 1A at 5v. Two motors can be driven simultaneously while set to a different speed and direction. The speed can be set fully proportional and is controlled by I2C command.

* Battery-Powered:
  * Printers
  * Toys
  * Robotics
  * Cameras
  * Phones
* Small Actuators, Pumps, etc.

Here are some projects for your reference.

| **Make a Mini Toy Car**                                                                                           | **Make a Steampunk Style Award**                                                                                     |
| ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ![](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/img/Mini_toy_car.jpg) | ![](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/img/Seeed_award2015.jpg) |
| [Make it NOW!](http://www.seeed.cc/project_detail.html?id=392)                                                    | [Make it NOW!](http://www.seeed.cc/project_detail.html?id=1131)                                                      |

## Specifications

| Item                            | Min          | Typical | Max | Unit |
| ------------------------------- | ------------ | ------- | --- | ---- |
| Working Voltage                 | 2.75         | 5       | 6.8 | VDC  |
| Max Output Current per channel  | 0.2(default) | -       | 1   | A    |
| Input/output voltage on I2C bus | 3.3/5        | V       |     |      |
| Communication protocol          | I2C          | /       |     |      |
| Default I2C Address             | 0xC0, 0xC4   | /       |     |      |

## Platforms Supported

## Hardware Overview

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/img/Mini_motor_driver.jpg)

* **Grove Interface** - Grove products have a eco system and all have a same connector which can plug onto the **Base Shield**. Connect this module to the I2C port of Base Shield, and then it can work well with Arduino. However, you can also connect Grove - Mini I2C Motor Driver to Arduino without Base Shield by jumper wires.

| Arduino UNO | Base Shield | Grove - Mini I2C Motor Driver |
| ----------- | ----------- | ----------------------------- |
| 5V          | I2C port    | VCC                           |
| GND         | GND         |                               |
| SDA         | SDA         |                               |
| SCL         | SCL         |                               |

* **CH1 fault indicator** - Channel 1 fault indicator.
* **CH2 fault indicator** - Channel 2 fault indicator.
* **Direction indicator** - Motor direction indicator.
* **CH1 Output Connector** - Motor 1 connector.
* **CH2 Output Connector** - Motor 2 connector.

## Hardware function

### Change Default maximum drive current

The default maximum drive current of each channel is 200mA, see the front picture of the board

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/img/QQ20150817-3.png)

Each channel (CH1,CH2) has been added a resistor, and each value of resistor (R5,R12) is 1 Ω, so the maximum drive current is 200mA according to the following equation

&#x20;!\[]\(<https://raw.githubusercontent.com/SeeedDocument/Grove-Mini\\_I2C\\_Motor\\_Driver\\_v1.0/master/img/Mini\\_I2C\\_motor\\_7.png>)

Meantime, each channel provides a reserved solderable pad (R6 for CH1, R13 for CH2), so you can solder a resistor onto the board to change the resistor value of each channel. Following is the new equation if adding resistor to the board

&#x20;!\[]\(<https://raw.githubusercontent.com/SeeedDocument/Grove-Mini\\_I2C\\_Motor\\_Driver\\_v1.0/master/img/Mini\\_I2C\\_motor\\_8.png>) !\[]\(<https://raw.githubusercontent.com/SeeedDocument/Grove-Mini\\_I2C\\_Motor\\_Driver\\_v1.0/master/img/Mini\\_I2C\\_motor\\_9.png>)

Caution Maximum working current of each channel must be less than 1A. So the minimum value of resistor soldered to the reserved pad should not less than 0.2 Ω.

### Change Default I2C Address

The I2C address of each channel is changeable. Please take a look at the back side of the board, you will find there are 4 jumper pads; A0\_CH1 and A1\_CH1 are for channel 1, A0\_CH2 and A1\_CH2 are for channel 2, as shown below:

&#x20;!\[]\(<https://raw.githubusercontent.com/SeeedDocument/Grove-Mini\\_I2C\\_Motor\\_Driver\\_v1.0/master/img/Address\\_mini\\_i2c\\_motor\\_driver.png>)

You can solder or unsolder each jumper to change the I2C address:

* 1 - You need a solder iron, just solder two sides of the jumper together
* 0 - You need a solder iron, just unsolder two sides of the jumper.

&#x20;!\[]\(<https://raw.githubusercontent.com/SeeedDocument/Grove-Mini\\_I2C\\_Motor\\_Driver\\_v1.0/master/img/Mini\\_I2C\\_motor\\_12.png>)

Note The library of Grove - Mini I2C Motor driver is dependent on the default address.

## Getting Started

Now, let us begin to use the Grove - Mini I2C Motor Driver.

### Preparations

Now we are making a demo for Grove - Mini I2C Motor Driver v1.0 which require following modules.

* 2 \* DC Motor 2V-6V
* [Seeeduino Lite](http://www.seeedstudio.com/depot/Seeeduino-Lite-p-1487.html)

**Seeeduino Lite is compatible with Arduino.**

If you are using an Arduino UNO or any others Arduino compatible boards that with out a Grove connect,

You will need a [Grove Base Shield](http://www.seeedstudio.com/depot/base-shield-v13-p-1378.html?cPath=132_134) to connect the Grove easily.

If this is your first time using Arduino or Seeeduino, Please put hand on [here](https://app.gitbook.com/Getting_Started_with_Seeeduino) to start your Arduino journey.

### Hardware Installation

Grove - Mini I2C Motor Driver got one Grove socket for connecting two modules above. They are:

* 2 \* DC Motor 2V-6V - connnect to CH1 & CH2 Output connector.
* Seeeduino Lite

Connect Seeeduino's Grove I2C Interface to Mini Motor Driver's Grove Interface as shown below:

![](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/img/Mini_motor_driver_demo.jpg)

### Software Work

[![](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/img/Arduino_mini_i2c_motor_driver.jpg)](http://https://www.arduino.cc/)

The Grove - Mini I2C Motor Driver can control motor which is based on the chip DRV8830. The DRV8830 is not just a dual motor driver, it is a dual H-bridge. An h-bridge is basically a specific setup of transistors that allow you to switch direction of current. You can use your Arduino to make them spin at any speed.

Because the module has 2 H-bridges, you can not only make a robot go forwards and backwards, but also turn around by having each wheel spin in a different direction.

Connect Seeeduino to computer use a micro USB cable.

Now, let us use the Grove - Mini I2C Motor Driver to control two DC motors rotating in the positive or opposite direction.

Given below is an example program to be used with an Arduino. The code for this is very basic, but you can also change it and do it your own way.

```
/****************************************************************
Example code demonstrating the use of the Arduino Library for
the SparkFun MiniMoto board, which uses the TI DRV8830 IC for I2C
low-voltage DC motor control.

This code is beerware; if you use it, please buy me (or any other
SparkFun employee) a cold beverage next time you run into one of
us at the local.

17 Sep 2013- Mike Hord, SparkFun Electronics

Code developed in Arduino 1.0.5, on a Fio classic board.

**Updated for Arduino 1.6.4 5/2015**
****************************************************************/

#include <SparkFunMiniMoto.h>  // Include the MiniMoto library

// Create two MiniMoto instances, with different address settings.
MiniMoto motor0(0xC4); // A1 = 1, A0 = clear
MiniMoto motor1(0xC0); // A1 = 1, A0 = 1 (default)

#define FAULTn  16     // Pin used for fault detection.

// Nothing terribly special in the setup() function- prep the
//  serial port, print a little greeting, and set up our fault
//  pin as an input.
void setup()
{
    Serial.begin(9600);
    Serial.println("Hello, world!");
    pinMode(FAULTn, INPUT);
}

// The loop() function just spins the motors one way, then the
//  other, while constantly monitoring for any fault conditions
//  to occur. If a fault does occur, it will be reported over
//  the serial port, and then operation continues.
void loop()
{
    Serial.println("Forward!");
    motor0.drive(100);
    motor1.drive(100);
    delayUntil(1000);
    Serial.println("Stop!");
    motor0.stop();
    motor1.stop();
    delay(1000);
    Serial.println("Reverse!");
    motor0.drive(-100);
    motor1.drive(-100);
    delayUntil(1000);
    Serial.println("Brake!");
    motor0.brake();
    motor1.brake();
    delay(1000);
}

// delayUntil() is a little function to run the motor either for
//  a designated time OR until a fault occurs. Note that this is
//  a very simple demonstration; ideally, an interrupt would be
//  used to service faults rather than blocking the application
//  during motion and polling for faults.
void delayUntil(unsigned long elapsedTime)
{
    // See the "BlinkWithoutDelay" example for more details on how
    //  and why this loop works the way it does.
    unsigned long startTime = millis();
    while (startTime + elapsedTime > millis())
    {
        // If FAULTn goes low, a fault condition *may* exist. To be
        //  sure, we'll need to check the FAULT bit.
        if (digitalRead(FAULTn) == LOW)
        {
            // We're going to check both motors; the logic is the same
            //  for each...
            byte result = motor0.getFault();
            // If result masked by FAULT is non-zero, we've got a fault
            //  condition, and we should report it.
            if (result & FAULT)
            {
                Serial.print("Motor 0 fault: ");
                if (result & OCP) Serial.println("Chip overcurrent!");
                if (result & ILIMIT) Serial.println("Load current limit!");
                if (result & UVLO) Serial.println("Undervoltage!");
                if (result & OTS) Serial.println("Over temp!");
                break; // We want to break out of the motion immediately,
                //  so we can stop motion in response to our fault.
            }
            result = motor1.getFault();
            if (result & FAULT)
            {
                Serial.print("Motor 1 fault: ");
                if (result & OCP) Serial.println("Chip overcurrent!");
                if (result & ILIMIT) Serial.println("Load current limit!");
                if (result & UVLO) Serial.println("Undervoltage!");
                if (result & OTS) Serial.println("Over temp!");
                break;
            }
        }
    }
}
```

Now click Upload(CTRL+U) to burn testing code. Please refer to [here](https://app.gitbook.com/Arduino_Common_Error) for any error prompt and you can also add comment on [community](http://www.seeed.cc).

### Review Results

After upload is complete, the motors will rotate in the positive or opposite direction in cycle.

## Resources

* [DRV8830 Datasheet](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/res/DRV8830.pdf)
* [Grove - Mini I2C Motor Driver\_Eagle\_File](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/res/Grove-Mini_I2C_Motor_Driver_v1.0_SCH_PCB.rar)
* [Grove - Mini I2C Motor Driver Schematic Document](https://raw.githubusercontent.com/SeeedDocument/Grove-Mini_I2C_Motor_Driver_v1.0/master/res/Grove-Mini_I2C_Motor_Driver_v1.0_SCH.pdf)
* [Grove - Mini I2C Motor Driver Source Library](https://github.com/Seeed-Studio/Drv8830_Motor_Driver)


# Grove MP3 v2.0

![](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/img/Grove-MP3_v2.0_Product_View_700_S.jpg)

Grove - MP3 v2.0 is a tiny-sized and compact audio module. It supports various audio file operations for an audio file of MP3, WAV and WMV format, such as random music playing, play music in specific files, and so on. With serial communication, you can use all predefined command or command combinations to do all operations on music files. This module also supports general file systems such as FAT16 and FAT32. It gets a Grove UART interface, a 3.5 mm audio jack and a micro-SD slot. With this module, you can add some noise to your silent applications.

[![](https://raw.githubusercontent.com/SeeedDocument/common/master/Get_One_Now_Banner.png)](http://www.seeedstudio.com/depot/Grove-MP3-v20-p-2597.html?cPath=98_106_57)

## Version Tracker

| Product revision | Release date   | Support status |
| ---------------- | -------------- | -------------- |
| Version 1.0      | April 28 2013‎ | Supported      |
| Version 2.0      | Dec 15 2015    | Supported      |

## Features

* General operations on audio files
* On-board micro-SD slot and 3.5 mm audio jack
* Support sample rate of 8 / 11.025 / 12 / 16 / 22.05 / 24 / 32 / 44.1 / 48(KHz)
* 24-bit DAC output, 90 dB (at Max.) dynamic output range, signal-noise ratio at 85 dB
* MP3, WMV and WAV audio format and FAT16, FAT32 files system supported
* Embed 10 levels of equalization in total

!!!Tip More details about Grove modules please refer to [Grove System](http://wiki.seeed.cc/Grove_System/)

## Application ideas

* Middle-level audio module for any applications.

## Specifications

| Parameter                                  | Value                                                                                                                                                            |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Input                                      | 5 V (DC)                                                                                                                                                         |
| Operating current (no signal output state) | less than 15 mA                                                                                                                                                  |
| Operating current                          | less than 40 mA                                                                                                                                                  |
| Chip                                       | KT403A [(datasheet)](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/res/Grove-MP3_v2.0_KT403A_datasheet_V1.3_EN-Recompiled_by_Seeed-.pdf) |
| Chip LDO output voltage                    | 3.3 V                                                                                                                                                            |
| Chip output current                        | 100mA(at Max.)                                                                                                                                                   |
| File formats supported                     | MP3, WAV, WMA                                                                                                                                                    |
| Maximum memory supported for SD card       | 32 GB                                                                                                                                                            |
| Sampling rate                              | 8 / 11.025 / 12 / 16 / 22.05 / 24 / 32 / 44.1 / 48(KHz)                                                                                                          |

## Platforms Supported

## Hardware Overview

![](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/img/Grove-MP3_v2.0_Component_view-front-1200_S.jpg)

![](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/img/Grove-MP3_v2.0_Component_View-Back-1200_S.jpg)

### **Parts list**

| Parts name              | Quantity |
| ----------------------- | -------- |
| Grove - MP3 v2.0        | 1PC      |
| Grove - Universal Cable | 1PC      |

## Get started

### **Material required**

* Seeeduino × 1
* Grove - Base Shield v2 × 1
* Grove - MP3 v2.0 × 1
* SD card with music inside × 1
* USB cable (type A to micro type-B) × 1
* Headset, earphone or stereo with 3.5 mm audio jack × 1

### Preparations

Refer to following guides to building an appropriate IDE:.

Note We have chosen Seeeduino and it is compatible with Arduino in this case. So you can also use Arduino board instead.

[Getting Started on Windows](https://app.gitbook.com/Seeeduino_v4.2#Getting_Started_on_Windows)

[Getting Started on Mac OS X](https://app.gitbook.com/Seeeduino_v4.2#Getting_Started_on_Mac_OS_X)

### Hardware connections

![](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/img/Grove-MP3_v2.0_Demo_connection_1200_S.jpg)

### A example to run

#### Download example

1.Github [address](https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0) which also contain sufficient API to download codes.

2.Refer to \[here]\(/Guide\_to\_use\_demos\_downloaded\_from\_Seeed's\_Github) to learn how to do some preliminary work before running code.

3.Load file *MP3\_Play\_Test.ino* into Arduino and upload to the main controller board.

4.Open Serial Monitor (Ctrl + Shift + M) to send a command to play music.

Note We need to choose No line ending beside baud rate droplist at bottom-right of Serial Monitor window.

5.In this case, we type *1* which is a command to play music. You can find more command comments in demo source code.

6.Now enjoy the music.

### Advanced programming

For advanced programming, you can [download](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/res/Grove-MP3_v2.0_KT403A_datasheet_V1.3_EN-Recompiled_by_Seeed-.pdf) datasheet of chip KT403A.

## Resources

* Hardware [Schematic files](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/res/Grove-MP3_v2.0_Schematic_files.zip)
* [Libraries](https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0) on Github.
* KT403A [Datasheet](https://raw.githubusercontent.com/SeeedDocument/Grove-MP3_v2.0/master/res/Grove-MP3_v2.0_KT403A_datasheet_V1.3_EN-Recompiled_by_Seeed-.pdf) (part)




---

[Next Page](/llms-full.txt/1)

