# Grove Node

Grove - Node is a simple and flexible electronic module to connect physical objects. It's based on the idea of IFTTT (IF-This-Then-That). It has two Grove connectors to access a variety of [Grove](https://app.gitbook.com/Grove) modules. With pre-programming IFTTT firmware, it's easy to create physical objects with analog sensors and 0/1 actuators.

It integrates Bluetooth Low Energy (BLE) which makes it extremely easy to interact with phones and tablets. To extend its usability, a DFU bootloader is built in to reprogram it Over-The-Air through BLE. It supports ARM mbed platform to write new firmware with hundreds of libraries.

## Features

* IFTTT pattern to use
* Two Grove connectors for sensors and actuators
  * Plug-Play with analog sensors and high/low actuators
    * Flexible 4 GPIOs, all can be used for PWM, ADC, I2C and UART
* Nordic nRF51822 Multi-protocol Bluetooth® 4.0 low energy/2.4GHz RF SoC
  * ARM Cortex-M0 processor
    * 256kB flash, 16kB RAM
* On board battery charge circuit
* OTA firmware
* mbed enabled
  * Online IDE
    * Easy to use C/C++ SDK
    * Handy libraries

## Specifications

* Operating voltage: 3.3Vdc
* Battery capacity: 80mAH
* Maximum charge current: 100mA
* Grove Interface supply Voltage：3.3V
* Grove Interface supply Current: 100mA max
* Grove Interface input Voltage：0\~3.3V

## Pinout

## Get Started

* Turn On Grove Node

Connect Grove Node with a battery or a USB cable and then press its button, it will run.

&#x20;\* Double Clicks - run its bootloader, the red LED will be on. \* Otherwise - run its application, the green LED will blink.

* Turn Off Grove Node
* In bootloader mode - wait for a while to run into the application.
* In application mode - long press the button wait until all LEDs are off \</dd>\</dl>

### Get Started with Pre-programmed Firmware

![](https://github.com/SeeedDocument/Grove-Node/raw/master/img/Milcandy_IFTTT.jpg)

First, we need an **Input** Grove module to sense the physical world. Pre-programmed firmware only supports an analog input sensor or 0/1 digital input sensor. The following Grove modules from Seeedstudio can be used as an **Input**:

| Module name                            | Parameter to measure |
| -------------------------------------- | -------------------- |
| Grove - 80cm Infrared Proximity Sensor | Distance             |
| Grove - Button                         | On/Off               |
| Grove - Electricity Sensor             | Electricity          |
| Grove - Gas Sensor(MQ2\&MQ5)           | Gas Quality          |
| Grove - Light Sensor                   | Light                |
| Grove - Magnetic Switch                | Magnetic             |
| Grove - Moisture Sensor                | Moisture             |
| Grove - PIR Motion Sensor              | PIR Motion           |
| Grove - Rotary Angle Sensor            | Rotary Angle         |
| Grove - Tilt Switch                    | Object Position      |
| Grove - Sound Sensor                   | Sound                |
| Grove - Temperature Sensor             | Temperature          |
| Grove - Touch Sensor                   | Human touch          |
| Grove - Water Sensor                   | Water                |

Other analog sensors which is not Grove-compatible need a little small adjustment. Just connect your signal output to pin4 of Grove connector and then the VCC and GND. *Note that only sensors that output an analog or digital 1/0 value can be used with the pre-programmed firmware*

![](https://github.com/SeeedDocument/Grove-Node/raw/master/img/Mil_Grove_con.png)

Second, we need an **output** Grove module as an actuator. The following Grove modules can be used:

| Module name      | Action when triggered       |
| ---------------- | --------------------------- |
| Grove - Buzzer   | Buzzer enabled              |
| Grove - LED      | LED On                      |
| Grove - Vibrator | Vibrate                     |
| Grove - Relay    | Swith On/Off other circuits |

For example, we intend to create a light which automatically turns on if the environment is dark and turns off if otherwise, then we select a [Grove\_-\_Light\_Sensor](https://app.gitbook.com/Grove-Light_Sensor) and a [Grove\_-\_LED](https://app.gitbook.com/Grove-LED).

Third, teach the Grove Node a logic.

Connect the light sensor as an input and the LED as an output, and then turn on the Grove Node.

* In a normal environment, do a single-click on the Grove Node's button
* Cover the light sensor with a hand to simulate a dark environment, and then do a double-clicks, the Grove - LED will be on.
* Release the light sensor, the Grove - LED will be off.

## Over-The-Air

The Grove Node has a pre-programmed OTA bootloader. To run into the bootloader:

1. power off the Grove Node
2. do a double-clicks on the Grove Node's button
3. the red LED will be on and a BLE device named SD7DFU can be scaned
4. use [nRF Master Control Panel](https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp) to upgrade the BLE app

![](https://github.com/SeeedDocument/Grove-Node/raw/master/img/Ota-ui.png)

More information can be found at [mbed.org](https://developer.mbed.org/teams/Bluetooth-Low-Energy/wiki/Firmware-Over-the-Air-FOTA-Updates).

## Develop New Application

See [ble on mbed.org](http://developer.mbed.org/teams/Bluetooth-Low-Energy/)

## Resources

* [Grove - Node v1.0 schematic pdf file](https://github.com/SeeedDocument/Grove-Node/raw/master/res/Grove-Node_v1.0.pdf)
* [Grove - Node v1.0 eagle design file](https://github.com/SeeedDocument/Grove-Node/raw/master/res/Grove-Node_v1.0_eagle.zip)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.pakronics.com.au/seed-studio/grove-modules/others/grove-node.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
