Модуль Bluetooth HC-06
![]() |
![]() |
![]() |
Подключение к Arduino
![]() |
|
Схема подключения Bluetooth HC-06 |
В этом уроке мы будем получать то датчика показания температуры и влажности , подключенного к Arduino UNO и отображать его на бесплатноv приложение для Android, для проекта используется наименование " Ardudroid" .
* ArduDroid- бесплатное приложение
Есть много различных способов подключения модулей HC-0x Arduino.
Некоторые предполагает использование библиотеки для связи с модулями с использованием программного обеспечения последовательных соединений, чтобы вы могли отправить программы в UNO, не отключая модуль Bluetooth.
Компромисс в том, что если вы используете эти методы, приводит к потере некоторых Пинов на UNO, которые затем могут использоваться для подключения модуля.
Вместо этого, мы просто предлагаем отсоединить провод на выводе Пин 0 из UNO, когда необходимо запрограмировать его.
Таким образом, мы можем подключить модуль по умолчанию Pin 0 (RX) и Pin1 (TX) и оставить остальные контакты доступны для работы.
Как вы можете видеть на схеме выше, мы используем некоторые резистор (470Ω и 680Ω) для падение напряжения UNO TX с 5 до около 3В.
Это важно, так как HC-06 использует 3,3 логику и используя по умолчанию 5V UNO возможно повредить модуль.
Также мы питания модуля с использованием 3,3 от UNO не 5V, даже если HC-06 поддерживает до 6В.
Из нашего тестирования мы заметили, что при питании от 5V "Get Data" окно в ArduDroid приложение не будет работать правильно.
Sketch code
//Пример программы использования модуля HC-06 Bluetooth и датчика DHT11 с ArduDroid
#include "dht.h" // DHT11 library
#include "FastLED.h" // FastLED library
#define NUM_LEDS 8 // # of WS2812 LEDs
#define DATA_PIN 2 // WS2812 DIN pin
#define dht_apin A0 // DHT11 pin
//ArduDroid variables
#define START_CMD_CHAR '*'
#define END_CMD_CHAR '#'
#define DIV_CMD_CHAR '|'
#define CMD_DIGITALWRITE 10
#define CMD_ANALOGWRITE 11
#define CMD_TEXT 12
#define CMD_READ_ARDUDROID 13
#define MAX_COMMAND 20 // max command number code. used for error checking.
#define MIN_COMMAND 10 // minimum command number code. used for error checking.
#define IN_STRING_LENGHT 40
#define MAX_ANALOGWRITE 255
#define PIN_HIGH 3
#define PIN_LOW 2
dht DHT; //DHT11 Init
CRGB leds[NUM_LEDS]; // FastLED Init
String inText; // used to send txt command from Android
void setup() {
FastLED.addLeds<NEOPIXEL,DATA_PIN>(leds, NUM_LEDS); //Setup FastLED
FastLED.clear();
Serial.begin(9600);
Serial.println("HC-06 Connected!");
Serial.flush();
}
void loop()
{
Serial.flush();
int ard_command = 0;
int pin_num = 0;
int pin_value = 0;
char get_char = ' '; //read serial
// wait for incoming data
if (Serial.available() < 1) return; // if serial empty, return to loop().
// parse incoming command start flag
get_char = Serial.read();
if (get_char != START_CMD_CHAR) return; // if no command start flag, return to loop().
// parse incoming command type
ard_command = Serial.parseInt(); // read the command
// parse incoming pin# and value
pin_num = Serial.parseInt(); // read the pin
pin_value = Serial.parseInt(); // read the value
// GET TEXT COMMAND FROM ARDUDROID
if (ard_command == CMD_TEXT){
inText =""; //clears variable for new input
while (Serial.available()) {
char c = Serial.read(); //gets one byte from serial buffer
delay(5);
if (c == END_CMD_CHAR) { // if we the complete string has been read
// add your code here
break;
}
else {
if (c != DIV_CMD_CHAR) {
inText += c;
delay(5);
}
}
}
}
// GET digitalWrite DATA FROM ARDUDROID
if (ard_command == CMD_DIGITALWRITE){
if (pin_value == PIN_LOW) pin_value = LOW;
else if (pin_value == PIN_HIGH) pin_value = HIGH;
else return; // error in pin value. return.
set_digitalwrite( pin_num, pin_value);
return; // return from start of loop()
}
// GET analogWrite (Sliders) DATA FROM ARDUDROID
if (ard_command == CMD_ANALOGWRITE) {
if (pin_num == 6) { // If #6 slider is used
int numLedsToLight = map(pin_value, 0, 255, 0, NUM_LEDS);
FastLED.clear();
for(int led = 0; led < numLedsToLight; led++) {
if(led < 3)leds[led] = CRGB::Green;
if(led >=3 & led < 6)leds[led] = CRGB::Orange;
if(led >=6)leds[led] = CRGB::Red;
}
FastLED.setBrightness(50);
FastLED.show();
}
return; // Done. return to loop();
}
// SEND DATA TO ARDUDROID (Get Data button)
if (ard_command == CMD_READ_ARDUDROID) {
// Get and send Temp & Humidity to Android
DHT.read11(dht_apin);
delay(1000);
Serial.print("T: ");
Serial.print(DHT.temperature, 0);
Serial.print("c H: ");
Serial.print(DHT.humidity, 0);
Serial.print("%");
return; // Done. return to loop();
}
}
// Select the requested pin# for DigitalWrite action
void set_digitalwrite(int pin_num, int pin_value)
{
switch (pin_num) {
case 13:
pinMode(13, OUTPUT);
digitalWrite(13, pin_value);
// add your code here
break;
case 12:
pinMode(12, OUTPUT);
digitalWrite(12, pin_value);
// add your code here
break;
case 11:
pinMode(11, OUTPUT);
digitalWrite(11, pin_value);
// add your code here
break;
case 10:
pinMode(10, OUTPUT);
digitalWrite(10, pin_value);
// add your code here
break;
case 9:
pinMode(9, OUTPUT);
digitalWrite(9, pin_value);
// add your code here
break;
case 8:
pinMode(8, OUTPUT);
digitalWrite(8, pin_value);
// add your code here
break;
case 7:
pinMode(7, OUTPUT);
digitalWrite(7, pin_value);
// add your code here
break;
case 6:
pinMode(6, OUTPUT);
digitalWrite(6, pin_value);
// add your code here
break;
case 5:
pinMode(5, OUTPUT);
digitalWrite(5, pin_value);
// add your code here
break;
case 4:
pinMode(4, OUTPUT);
digitalWrite(4, pin_value);
// add your code here
break;
case 3:
pinMode(3, OUTPUT);
digitalWrite(3, pin_value);
// add your code here
break;
case 2:
pinMode(2, OUTPUT);
digitalWrite(2, pin_value);
// add your code here
break;
// default:
// if nothing else matches, do the default
// default is optional
}
}