ESP-WROOM-32同士をBluetoothで接続してシリアル通信を無線化する

使用したのはこちらです。二つ用意しています。

ESPr® Branch 32(Groveコネクタ付き)www.switch-science.com

BluetoothのMACアドレスを取得する

一つのESPに以下を書き込み実行します。今後こちらがスレイブ側になります。

void setup(void) {
  Serial.begin(115200);
  uint8_t macBT[6];
  esp_read_mac(macBT, ESP_MAC_BT);
  Serial.printf("%02X:%02X:%02X:%02X:%02X:%02X\r\n", macBT[0], macBT[1], macBT[2], macBT[3], macBT[4], macBT[5]);
}

void loop() {}

シリアルモニタにこのように出力されました。

21:51:48.559 -> ets Jun  8 2016 00:22:57
21:51:48.592 -> 
21:51:48.592 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
21:51:48.592 -> configsip: 0, SPIWP:0xee
21:51:48.592 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
21:51:48.592 -> mode:DIO, clock div:1
21:51:48.592 -> load:0x3fff0030,len:1344
21:51:48.592 -> load:0x40078000,len:13964
21:51:48.592 -> load:0x40080400,len:3600
21:51:48.592 -> entry 0x400805f0
21:51:48.713 -> 7C:9E:BD:EA:3D:DA

最終行の「7C:9E:BD:EA:3D:DA」がMACアドレスです。

スレイブ側のBluetoothを開始

#include "BluetoothSerial.h"
#include "Adafruit_NeoPixel.h"

const int buttonON = LOW;    // ボタンが押されているとピンの値はLOW
const int buttonPin1 = 26;
const int LED_button = 15;

BluetoothSerial SerialBT;
Adafruit_NeoPixel led_button = Adafruit_NeoPixel(1, LED_button, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(115200);
  SerialBT.begin("bluetooth", false); // isMaster=false

  pinMode(buttonPin1, INPUT_PULLUP);
  led_button.begin();

  delay(200);
}

void loop() {
  if (digitalRead(buttonPin1) == buttonON) {
    led_button.setPixelColor(0, led_button.Color(0, 100, 0));
    led_button.show();
    SerialBT.write('T');
    delay(200);
    led_button.setPixelColor(0, led_button.Color(0, 0, 0));
    led_button.show();
    while (digitalRead(buttonPin1) == buttonON);
    delay(200); 
  }
}

マスター側のBluetoothを開始

Bluetoothの接続を開始するのが「マスター」です。

#include "BluetoothSerial.h"
#include "Adafruit_NeoPixel.h"

const int buttonON = LOW;    // ボタンが押されているとピンの値はLOW
const int buttonPin1 = 26;
const int LED_button = 15;

BluetoothSerial SerialBT;
Adafruit_NeoPixel led_button = Adafruit_NeoPixel(1, LED_button, NEO_GRB + NEO_KHZ800);

String MACadd = "7C:9E:BD:EA:3D:DA";
uint8_t address[6]  = {0x7C, 0x9E, 0xBD, 0xEA, 0x3D, 0xDA};

void setup() {
  Serial.begin(115200);
  SerialBT.begin("bluetooth", true);  // isMaster=true

  SerialBT.connect(address);
  
  pinMode(buttonPin1, INPUT_PULLUP);
  led_button.begin();
}

void loop() {
  if (SerialBT.available()) {
    if (SerialBT.read() == 'T') {
        led_button.setPixelColor(0, led_button.Color(0, 100, 0));
        led_button.show();
        delay(200);
        led_button.setPixelColor(0, led_button.Color(0, 0, 0));
        led_button.show();
    }
  }
}



使用したのはLED付きボタンです。黒いのは電池ボックスです。
M5Stack用メカニカルキーボタンユニット — スイッチサイエンス



これでスレイブ側のボタンを押すとマスター側のLEDが点灯します。

関連記事

PCとESP-WROOM-32間でBluetooth接続をする場合はこちらです。
touch-sp.hatenablog.com



このエントリーをはてなブックマークに追加