工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御

概要

このArduino Bluetoothチュートリアルでは、HC-05モジュールを使用してBluetooth通信でArduinoを制御する方法を学びます。スマートフォンによる制御と、ラップトップ/PCによる制御の2つの例を扱います。HC-05の設定変更や、2つのArduino間をマスター/スレーブで通信させる方法は次回のチュートリアルで解説します。詳細については、以下のビデオまたは文章チュートリアルをご覧ください。

Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御

HC-05 Bluetoothモジュール

HC-06がスレーブ専用であるのに対し、HC-05はマスターにも設定可能で、2つのArduinoボード間通信が可能です。いくつかバージョンがありますが、ブレークアウトボード版が接続しやすくお勧めです。HC-05はBluetooth SPP(シリアルポートプロトコル)モジュールで、Arduinoとはシリアル通信でやり取りします。

必要なコンポーネント

  • HC-05 Bluetoothモジュール
  • Arduinoボード
  • ブレッドボードとジャンパワイヤ

回路図


Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御

このモジュールはブレークアウトボードにレギュレータを搭載し、3.6〜6Vで動作可能。しかしロジックレベルは3.3Vです。Arduino TX(5V出力)→Bluetooth RX(3.3V入力)は分圧抵抗を介して接続し、モジュール破損を防ぎます。逆にBluetooth TX(3.3V)→Arduino RXは3.3VがArduinoでHighと認識されるため直接接続可能です。

Arduino Bluetooth通信例: ソースコード

スマホからLEDをON/OFF制御するシンプルな例です。

#define ledPin 7
int state = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(38400); // HC-05デフォルトボーレート
}

void loop() {
  if (Serial.available() > 0) {
    state = Serial.read();
  }
  if (state == '0') {
    digitalWrite(ledPin, LOW);
    Serial.println("LED: OFF");
    state = 0;
  } else if (state == '1') {
    digitalWrite(ledPin, HIGH);
    Serial.println("LED: ON");
    state = 0;
  }
}

コード説明

  • LEDピンと状態変数を定義
  • setup()でLEDピンを出力に設定、Lowで初期化、シリアル通信を38400bpsで開始
  • loop()でSerial.available()チェック、データがあればSerial.read()でstateに格納
  • stateは整数型なので、受信文字『0』はASCII 48、『1』は49として格納される。比較時はキャラクター『0』/『1』で行う
  • 『0』受信でLED OFF、「LED: OFF」をSerial.println()で返信。state=0で一度だけ実行
  • 『1』受信でLED ON、「LED: ON」を返信

重要: コードアップロード時はTX/RX線を外す必要があります(Arduinoのハードウェアシリアルピン0,1を使用するため)。これを避けるには別のピンでSoftwareSerialライブラリを使用します。

関連: HC-05をマスター/スレーブでペアリングする方法 | ATコマンド

スマートフォンをHC-05とArduinoに接続

スマホのBluetoothをオンにしてHC-05を検出、ペアリング(デフォルトパスワード: 1234)。制御用アプリが必要ですが、Play Storeに多数あります。このチュートリアルではMIT App Inventorで自作したカスタムアプリを使用します(次回チュートリアルで作り方を詳細解説)。

Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御
Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御

自作アプリ ダウンロード

Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御 Arduino Bluetooth Tutorial Example Android App (1.38 MB)

アプリの「Connect」ボタンでBluetooth接続、ステータステキストで接続状態確認。「Turn ON」「Turn OFF」ボタンでLED制御。ボタン上部のテキストはArduinoから返信される「LED: ON/OFF」です。

ラップトップ/PCからBluetoothでArduino制御

ラップトップのBluetooth設定からHC-05を検出・ペアリング(パスワード1234)。デバイスマネージャの「ポート(COMとLPT)」に「Standard Serial over Bluetooth link」が2つ出現し、COMポート番号がわかります。

Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御
Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御

Arduinoコードはスマホ例と同じものを使用。PC側はProcessing IDEで制御プログラムを作成します。

Processing IDE ソースコード

import processing.serial.*;

Serial myPort;
String ledStatus = "LED: OFF";

void setup() {
  size(450, 500);
  myPort = new Serial(this, "COM5", 38400); // デバイスマネージャで確認したCOMポート
  myPort.bufferUntil('\n'); // 改行までバッファリング
}

void serialEvent(Serial myPort) {
  ledStatus = myPort.readStringUntil('\n'); // Arduinoからの文字列読み取り
}

void draw() {
  background(237, 240, 241);
  fill(20, 160, 133); // 緑
  stroke(33);
  strokeWeight(1);
  rect(50, 100, 150, 50, 10);  // Turn ONボタン
  rect(250, 100, 150, 50, 10); // Turn OFFボタン
  fill(255);
  textSize(32);
  text("Turn ON", 60, 135);
  text("Turn OFF", 255, 135);
  textSize(24);
  fill(33);
  text("Status:", 180, 200);
  textSize(30);
  textSize(16);
  text("Program made by Dejan Nedelkovski,\n www.HowToMechatronics.com", 80, 320);
  text(ledStatus, 155, 240); // Arduinoからのステータス表示

  // Turn ONボタン押下判定
  if (mousePressed && mouseX > 50 && mouseX < 200 && mouseY > 100 && mouseY < 150) {
    myPort.write('1');
    stroke(255, 0, 0); strokeWeight(2); noFill();
    rect(50, 100, 150, 50, 10); // 赤枠でハイライト
  }
  // Turn OFFボタン押下判定
  if (mousePressed && mouseX > 250 && mouseX < 400 && mouseY > 100 && mouseY < 150) {
    myPort.write('0');
    stroke(255, 0, 0); strokeWeight(2); noFill();
    rect(250, 100, 150, 50, 10);
  }
}

Processingコード説明

  • processing.serial.*ライブラリでシリアル通信
  • setup()でウィンドウサイズ設定、シリアル通信開始(COMポート番号は環境に合わせて変更)
  • bufferUntil('\n')で改行までバッファリング(Arduinoのprintln()が改行を送るため)
  • serialEvent()で着信チェック、readStringUntil('\n')でArduinoからの文字列取得
  • draw()で常時描画:背景、ボタン、テキスト、ステータス表示
  • マウス座標でボタン領域判定、押下時に『1』/『0』送信、ボタンを赤枠ハイライト
Arduino Bluetooth通信をマスター: HC-05モジュールでスマホ/PC制御

実行ボタンを押すと自動的にBluetooth通信が確立し、HC-05が2秒ごとに点滅して接続成功を示します。これでラップトップからLED制御が可能です。

次回チュートリアルでは、HC-05の設定変更と2つのArduino間マスター/スレーブ通信を解説します。ご質問はコメント欄でどうぞ。Arduinoプロジェクトコレクションもぜひご覧ください。

製造プロセス

  1. Arduinoで作るセキュアなRFIDロック – ステップバイステップガイド
  2. JX Wave Generator – Arduino互換DDS発振器(OLEDディスプレイ搭載)
  3. u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
  4. Arduino + Windows IoT + Azure クラウドによる高度な転倒検知システム
  5. Arduino UnoとBluetoothでラジコンカーを遠隔操作:ステップバイステップガイド
  6. Arduino Nanoと指紋センサーで作るバイオメトリクス認証システム – 完全チュートリアル
  7. ArduRadio:Arduino自作FMラジオ付き目覚まし時計
  8. Arduino Nanoで作るBluetooth対応スマートコーヒーメーカー 〜温度グラフ表示と自動開始機能付き〜
  9. Raspberry Pi 3とArduinoで作る自作ノートPC:ステップバイステップガイド
  10. Arduino Due望遠鏡制御キット「rDUINOScope」 - GPS、RTC、Bluetooth、ジョイスティック搭載のスタンドアロンGOTOシステム
  11. Bluetooth対応スマートサーモスタット & 照明制御システム