Bluetooth GPIO Modules

8 Channel Bluetooth GPIO Module

1396 views February 18, 2016 admin 0

Introduction

8-channel-bluetooth-GPIO-module

Numato Lab’s 8 Channel Bluetooth GPIO Module is a versatile product for controlling electrical and electronic devices remotely from a PC over Bluetooth link. Ease of use and wider operating system compatibility are the primary goals behind this product’s design. This simplicity allows the use of off-the-shelf Terminal Emulation programs such as Hyper Terminal and PUTTY for controlling the module with a simple set of human-readable commands. For power users, this module can be controlled by writing programs in various programming languages.

Features:

  • 8 TTL (3.3V) compatible GPIOs
  • 6 analog inputs with 10-bit resolution (multiplexed with digital IOs)
  • All GPIOs can be individually configured as input or output.
  • Can be controlled by using standard serial console applications or custom applications
  • Onboard controller can be reprogrammed for custom applications

Some of the possible uses of this module include:

  • Home Automation
  • Lighting Control
  • Garden Equipment Control
  • Industrial Automation
  • Test Fixtures
  • DIY and Hobby

This product is compatible with the following operating systems.

  • Windows XP and later versions (Windows 7, 8/8.1, 10 and future versions)
  • Linux
  • Mac OS X
  • And any other operating system that supports Bluetooth devices.

And these are some of the languages that can be used for programming”

  • C/C++
  • Visual Basic (VB6, VB2008, VB2010 express and other editions)
  • Visual Basic for Applications (Microsoft Office VBA)
  • Perl
  • Python
  • JAVA
  • And many more…

This module has 8 onboard General purposes I/Os multiplexed with 6 Analog Inputs, each connected to individual screw terminals and associated drivers capable of controlling a large number of devices. The analog inputs (multiplexed with GPIOs) can be accessed over the Bluetooth interface for extended functionality. The module communicates with the host PC over the Bluetooth link. A USB Bluetooth Dongle or Bluetooth integrated PC/Laptop would be sufficient to communicate with this device. Firmware upgrade can be done by using the USB B Mini Breakout Board.

How to use the module

The following section describes how to use this module.

Components/Tools required

Along with the module, you may need the items in the list below for easy and fast installation.
1. +5V 1A power supply.
2. Small size screwdriver.

Selection jumper
This module has 4 onboard jumpers (M1, M2, M3 & M4) for configuration of the Bluetooth module.
The table below summarizes the selection jumper and its function.

JumperFunctionDefault Jumper Position
M1Baud rateLoaded
M2Auto connectUnloaded
M3Auto pairingUnloaded
M4Factory resetUnloaded

Reset

ResetThe push-button labeled “RESET” is connected to reset pin of RN42 used for resetting the RN42 Bluetooth module.

Bluetooth Interface

Bluetooth InterfaceThe onboard fully qualified RN-42 2.4GHz Bluetooth module that helps a PC/Linux/Mac computer to communicate and control this module seamlessly.

DC Power Supply

DC Power SupplyThis module uses an external power supply to function properly. External +5V supply can be given through the DC jack on the board.

GPIO/Analog inputs

GPIO Analog inputsThis product has 8 General Purpose IO pins that can be used for various custom applications. 6 pins can be used as Analog to Digital Converter inputs as well. All IO pins support 3.3V TTL signals and the ADC input range is 0 to +3.3V. The ADC can acquire analog signals at the resolution of 10 bits per sample. It is recommended to use a series resistor with the GPIO/ADC pins when interfacing with other circuits. In output mode, each GPIO can source up to 25mA. So no additional circuitry is needed to drive regular LEDs. A 470 Ohms series resistor is recommended for current limiting when connecting LED to a GPIO.

In contrast to GPIOs Analog inputs can read voltages at any level between 0 to 3.3 volts. It is recommended to use a series resistor to protect the input from stray voltages and spikes. The internal Analog To Digital converter supports 10 bits resolution which is adequate for most applications. The table below summarizes the GPIO and Analog to Digital Converter input positions on the header.

GPIO
ADC
IO0ADC0
IO1ADC1
IO2ADC2
IO3ADC3
IO4ADC4
IO5ADC5
IO6NA
IO7NA
3V33V3
GNDGND

Driver Installation

Windows

When the 8 Channel Bluetooth GPIO Module is Powered-up for the first time a red LED (LED2) will toggle at 1 Hz in the board which means the module is discoverable and waiting for a connection. Then follow the below steps and images.

1. Go to Bluetooth Devices(Control Panel -> Hardware and Sound -> Devices and Printers -> Bluetooth
Devices
) on your PC. The path will be different for the upgraded version of Windows.

Note: Please be sure that your PC, Laptop has a driver installed USB Bluetooth dongle or an integrated
Bluetooth.

Bluetooth Devices
2. Select RN42 and click Next.
RN42

3. Select the second option (Enter the device’s pairing code).

RN42_1

4. Enter the default pairing code “1234 “RN42_2

5. It will install the driver automatically (In windows7) as below.RN42_3

RN42_4

6. Right-click on the device (RN42), select Properties/Hardware. Note down the name of the serial port (COM1, COM2, etc..). This information is required to control the module from the PC.

RN42_5

RN42_6

Linux

To use this product with Linux, the Bluetooth device driver needs to be compiled in with the kernel. Fortunately, most Linux distributions (Ubuntu, Redhat, Debian, etc..) have this driver pre-installed. When connected to a Linux machine, this product should appear as a serial port in the /dev directory. Usually, the name of the device will be “rfcommx” or similar. The name may be different depending on the Linux distribution you have.

Mac

Similar to Linux, Mac operating system comes with the required drivers pre-installed. When connected to a Mac computer, the device should appear as a serial port

Sending Commands

One of the most powerful features of this module is the simple easy to use command set it supports. The following sections give details of the command set and how to use the command set. 

The command set

This product supports a very simple command set that is designed to be less cryptic and easy to use manually (using serial terminal emulation programs) or through a program written in many supported languages.

List of currently supported commands.

No.CommandParametersExampleDescription
1verNoneverReturns firmware Version
2idget/set xxxxxxxxId get, id set 12345678Reads/Sets id of the module
3adcread, channeladc read 0Read Analog to Digital
Converter input
4gpioset/clear/read, gpio number readall/writeall/ iomask//iodirgpio set 0, gpio clear 0, gpio read 0,gpio readall, gpio writeall ff, gpio iomask ff, gpio iodir 00Control General Purpose Input/Output

The table below has more detailed information about available commands.

No.CommandExampleDescription
1ververReturns current firmware version.
2idid get
id set xxxxxxxx
Id get reads the module ID. Id set will assign a new ID to the
module. “x” stands for alphanumeric characters including
symbols. The new ID must be exactly 8 characters in length.
3gpiogpio set xSets the GPIO output status to high. Here “x” is the number of
the GPIO. This command accepts GPIO number from 0 -7, total
8 values Please see examples below.
gpio set 0 – Sets GPIO 0 to high state
gpio set 4 – Sets GPIO 4 to high state
gpio clear xSets the GPIO output status to low. Here “x” is the number of
the GPIO. This command accepts GPIO number from 0 -7, total
8 values. Please see examples below.
gpio clear 0 – Sets GPIO 0 to low state
gpio clear 4 – Sets GPIO 4 to low state
gpio read xReads the digital input status present at the input mentioned. Here
“x” stands for the number of GPIO. This command accepts
GPIO number from 0 -7, total 8 values. The response will be
either “on” or “off” depending on the current digital state of
the GPIO. Please see examples below.
gpio read 0 – Reads GPIO 0 status
gpio read 4 – Reads GPIO 4 status
gpio iomask xxSet mask for selectively update multiple GPIOs with
writeall/iodir command. A hexadecimal value(xx) must be
specified with desired bit positions set to 0 or 1 with no “0x”
prepended (eg 02, ff). A 0 in a bit position mask the
corresponding GPIO and any update to that GPIO is ignored
during writeall/iodir command. A 1 in a bit position will
unmask that particular GPIO and any updates using
writeall/iodir command will be applied to that GPIO. This mask
does not affect the operation of set and clear commands.
gpio iomask ff – Unmask all GPIOs.
gpio iomask 00 – mask all GPIOs.
Refer Understanding readall/writeall commands for GPIO Modules to know more.
gpio iodir xxSets the direction of all GPIO in a single operation. A
hexadecimal value(xx) must be specified with desired bit
positions set to 0 or 1 with no “0x” prepended (eg 02, ff). A 0
in a bit position configures that GPIO as output and 1
configures as input. Before using gpio readall/writeall
commands, the direction of GPIO must be set using “gpio iodir
xx” command. GPIO direction set by using iodir command will
be modified with subsequent set/clear/read commands
(only affects the GPIO accessed using these commands).
gpio iodir 00 – Sets all GPIO to output.
Refer Understanding readall/writeall commands for GPIO Modules to know more.
gpio readallReads the status of all GPIO in a single operation. The return
value will a hexadecimal number with binary value 1 at bit
positions for GPIO in ON state and 0 for GPIO in OFF state. Eg:
a return value 00 (binary 0000 0000) means all GPIO are OFF.
A value FF (binary 1111 1111) means all GPIO are ON.
gpio readall – Reads all GPIO status.
Refer Understanding readall/writeall commands for GPIO Modules to know more.
gpio writeall xxControl all GPIO in a single operation. A hexadecimal value (xx)
must be specified with desired bit positions set to 0 or 1. A
value 0 at a bit position will turn off the corresponding GPIO. A
value 1 at a bit position will turn on the corresponding GPIO.
gpio writeall ff – Sets all GPIO to high state.
Refer Understanding readall/writeall commands for GPIO Modules to know more.
4adcadc read xReads the analog voltage present at the ADC input mentioned. “x” stands for the number of ADC input. The response will be a number that ranges from 0 – 1023. Please see examples below.
adc read 0 – Reads analog input 0
adc read 4 – Reads analog input 4

NOTE!

  1. For the commands like gpio read/set/clear, the gpio numbers greater than 9, should be given in upper case(A – V).
    Egs :- gpio set A, gpio clear H
  2. For the commands like gpio writeall/iomask/iodir, the value should be in lower case hexadecimal value(0000 – ffff).
    Egs :- gpio writeall f9ce, gpio iodir a2d5, gpio iomask 4ba8
  3. For the commands like gpio readall/notify on, the output will be showed in upper case hexadecimal value(0000 – FFFF).

Refer Understanding readall/writeall commands for GPIO Modules to know more.

Controlling GPIOs using Serial Terminal Emulator software

The simple set of ASCII based human-readable command set supported by this module makes controlling GPIOs easy with any off the shelf Serial Terminal Emulation program like Hyper Terminal or Teraterm. The most important thing to remember here is that since the module appears as a serial port in the operating system, treat it just like any serial device you may use. Almost all settings such as baud rate, parity, number of stop bits can be left to the default values. The following sections give examples of how to use the module with Hyper Terminal and Teraterm.

Using this module with Hyper Terminal is very easy. Please follow the steps below.
• Connect the module to the computer, install the driver and note down the name of the new serial port that appears in the device manager.
• Open Hyper Terminal and select the serial port corresponding to the GPIO module. Click OK.

Serial Terminal Emulator

• If everything goes well, you should be presented with a blank screen. Press ENTER key and the command prompt should appear. Commands listed in the table above can be entered here now.

Serial Terminal Emulator1

Using the GPIO module with Teraterm is just as easy. Please follow the steps below.

Teraterm is an open-source software. A free copy can be downloaded from http://en.sourceforge.jp/projects/ttssh2/releases/

• Run the TeraTerm application and select the port corresponding to the GPIO module in the “New connection” dialog and click OK.

Serial Terminal Emulator3

• Press ENTER key on the main window and a command prompt should appear as in the image below.

Serial Terminal Emulator4

• Enter the command at the command prompt. Example “ver” command and response are in the image below.

Serial Terminal Emulator5

Controlling the module using a custom program

This GPIO module can be controlled using custom programs written in many languages. Almost any language can be used as long as it supports some sort of serial communication method. Some of the supported languages include

  • C/C++
  • Visual Basic
  • Visual Basic for Applications (Microsoft Office VBA)
  • Perl
  • Python
  • JAVA
  • And a lot more…

The APIs that need to be used may be different depending on the target operating system even when the same language is used. For example, when using C/C++ on Windows, Win32 Serial Communication APIs along with File IO APIs (CreateFile, ReadFile, WriteFile, etc..) need to be used (http://msdn.microsoft.com/en-us/library/ff802693.aspx). But when C/C++ is used on the Linux operating system “termios” APIs can be used for serial communication. Please refer to your compiler/language documentation for more details about serial port communication.

Specific details of programming may vary depending on the language and operating system of choice. But the fundamental steps for writing a program to control the GPIO module can be more or less the same. Here is the list of steps that you may need to follow while writing your own program.

  1. Open the serial port for communication.
  2. Set port parameters. Most of the parameters can be left to defaults except Flow Control, which needs to be set to “none”.
  3. To send a command to the module, use an API equivalent to write/writefile and pass the buffer/string containing the command. It is important to append Carriage Return (ASCII 13) to emulate the ENTER key.
  4. If return data is expected (Eg: “ver” command), try to read the characters from the serial port input
    buffer. APIs equivalent to Read/ReadFile can be used to read data from the module. Please note that the return data will include the command itself (since the module echoes everything back), the result,
    carriage return and the “>” symbol.

Please visit the product page for available sample programs.

Additional Information

Analog to Digital Converter

Some products do support Analog to Digital Conversion on some of the IO terminals. A list of GPIOs that supports analog function in this product is listed in GPIO/Analog Inputs in this document. There is no special command is required to execute to switch between analog and digital mode. Executing the “adc” command will set the GPIO to the analog mode and executing the “gpio” command will set the GPIO back to digital mode on the fly. The resolution of the ADC is 10 bits unless otherwise noted. The input voltage range of the ADC is 0 – VDD(this product uses 3.3V power supply, so the range will be 0 – 3.3V). The result will be returned as a number starting at zero and ending at 1023. Zero indicates zero volts at the ADC input and 1023 indicates VDD (3.3V for this product) at ADC input.

Using GPIOs with switches

GPIOs with switchesIt is possible to read the position of a switch that is connected to a GPIO. An SPST or SPDT switch is recommended to use with GPIOs. Push switches do maintain the contacts closed only for a very short time so using them is discouraged. The fundamental idea of using a switch with GPIO is to have the switch cause a voltage level change at the GPIO pin when pressed. Usually, this is achieved by using an external pull-up resistor along with the switch. The pull up resistor is connected between the GPIO and VDD and the switch is connected between the GPIO and ground. When the switch is not pressed, the pull-up resistor will cause the GPIO to stay at the VDD voltage level. When the switch is pressed, the GPIO is short-circuited to the ground and stays at zero voltage. This results in a change in voltage and thus the position of the switch can be read using “gpio read” command. Please see the recommended connection diagram below.

Technical Specifications

Parameter *Value
Unit
Basic Specifications
Number of GPIOs 8
Number of analog inputs (Multiplexed with GPIOs)6
Digital circuit power supply voltage (External)5V
Maximum current drawn by digital circuitry 95mA
Bluetooth Specifications
Bluetooth versionClass 2
Baud rate speeds1,200bps to 921
Kbps
Bluetooth range10m
Frequency 2,402 ~ 2,480 MHz
Communication Interface SPP or HCI
SPP data rates240 Slave
300 Master
Kbps
Kbps
Supply voltage (DC)3-3.6 V
IO Specifications
Maximum IO source current25mA
Maximum IO sink current25 mA
GPIO input low voltage 0.8V
GPIO input high voltage 2 V
GPIO output low voltage 0 V
GPIO output high voltage 3.3 V
ADC Specifications
Resolution 10bits
Full scale range0 – VDDV
Reference voltage VDDV
Recommended Impedance of Analog Voltage Source2.5KΩ

* All parameters considered nominal. Numato Systems Pvt Ltd reserve the right to modify products without notice

FAQ

Q. What are the serial parameters I need to use when communicating with this board?
A. Since this module uses USB as the underlying transport mechanism, most of the serial parameters do not affect the communication. You can leave all parameters to any legal value (Eg: 2400, 4800, 9600, etc… for baud rate) except Flow control. Flow control needs to be set to “None”.

Q. I set a GPIO to a particular value (0/1) using the “gpio set” command. When I read the same GPIO status later using the “gpio read” command I receive a different value than that I set. What is happening?
A. The “gpio read” command does not read the last value set to the GPIO by the user. Rather, it reads the actual digital voltage present at the GPIO pin from an external source. This could be different from what you have set previously.

Q. The GPIO loses its previously set value when trying to read the status. Why it is so?
A. When a gpio is to output a value (high/low), that particular GPIO is put to output mode. When you are trying to read the GPIO, it needs to be put in input mode. In input mode, the GPIO will go to a high impedance state and thus looses the previously set value.

Q. I’m using x language for programming. How do I find out if this language can be used to program and control the GPIO module?
A. Find out if the language of interest supports some kind of APIs/Functions/Components for serial communication. If it does, most likely you should be able to use that language with this module.

Q. What is the connector marked as ICSP on this module?
A. This connector is used to program the onboard microcontroller. This connector is primarily intended for factory use.

Q. I need a customized version of this product, can Numato do the customization for me?
A. Yes, we can definitely do customization but there may be minimum order requirements depending on the level of customization required. Please write to [email protected] for a quote.

Q. Where can I buy this product?
A. All Numato products can be ordered directly from our web store http://www.numato.com. We accept major credit/debit cards and Paypal and ship to almost all countries with a few exceptions. We do have distributors in many countries where you can place your order. Please find the current list of distributors at http://numato.com/distrib.

Mechanical Dimensions

Physical Dimensions

Suggest Edit