もよいめも

不定期更新ものづくりブログ

PicoWとESP32間でBluetooth通信

ぐぇ~
どうも皆さんお久しぶりです。
久々に需要がありそうで書けることをしたので、ご無沙汰ブログもいい加減更新していこうとおもいます。

PicoWのBluetooth

とりあえず資料は以下の通り。
Bluetooth on PicoW Support — Arduino-Pico 3.6.0 documentation
きわめて簡単な説明ですね!

簡単にマイコン間通信がしたいだけなのでSerialBluetoothとかでよさそう。
しかしながら、ソースを見る限りPicoWから特定の機器に接続する関数は未実装の様子
arduino-pico/libraries/SerialBT/src/SerialBT.h at master · earlephilhower/arduino-pico · GitHub

一方ESP32系では色々とSerialBTの記事が見つかり、特定の機器に接続する関数(conect)もあるようなので、
今回はESP32からPicoWに接続する形?でSerialBTを試そうと思います。

PicoWとM5stampPico
//PicoWに書き込むプログラム
#include <SerialBT.h>

void setup() {
  Serial.begin(115200);
  SerialBT.begin();
  pinMode(LED_BUILTIN, OUTPUT);
}

char buff[5];
uint8_t counter = 0;
void loop() {
  while (SerialBT) {
    if (BOOTSEL) {
      SerialBT.write('P');
    }

    while (SerialBT.available()) {
      digitalWrite(LED_BUILTIN, HIGH);
      char buff = SerialBT.read();
      Serial.print(buff);
    }
    digitalWrite(LED_BUILTIN, LOW);
  }
}
//ESP32(MK5stamp pico)に書き込むプログラム
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;

uint8_t macAddress[6] = { 0x--, 0x--, 0x--, 0x--, 0x--, 0x-- };//ここにPicoWのMACアドレスをいれる
bool connected;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32", true);

  connected = SerialBT.connect(macAddress);
  if (connected) {
    Serial.println("Connected");
  } else {
    while (!SerialBT.connected(10000)) {
      Serial.println("No connection");
    }
  }
}



void loop() {
  while (SerialBT.available()) {
    char buff = SerialBT.read();
    Serial.print(buff);
    if (buff == 'P') {
      SerialBT.write('E');
    }
  }
}

PicoのBOOTSELボタンを押すとESP32に'P'が、ESP32ではなにかを受信したら'E'を送信するプログラムです。
なお、PicoのMACアドレスは上のプログラムを書き込んでスマホとかで他のBluetooth機器を探すと「PicoW Serial (Macアドレス)」という名前で出てくるので、
それを使います。


と、数字おくるとこまでやりたかったのですが、健康優良児で夜に弱く、極めて瞼が重くなってきたので今日はここまで。
気が向いたら追記します。

ぐんない!