2019年12月31日火曜日

Bluetooth経由でmicro:bitの温度を取得してM5Stackに表示する

Bluetooth経由でmicro:bitの温度を取得してM5Stackに表示するには、以下の手順を実行します。

1. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じで一通りのbluetoothサービスを最初に追加します
また、ペアリングをしなくても利用できるようにします
2. microbitの温度を取得するプログラム
Arduino IDEから以下のプログラムをM5Stackに書き込みます。microbitのADDRESSは適宜書き換えてください。

#include <M5Stack.h>
#include "BLEDevice.h"

// Address of microbit
#define MYSERVER_ADDRESS "XX:XX:XX:XX:XX:XX"

// Temperature Service
static BLEUUID svcUUID("e95d6100-251d-470a-a062-fa1922dfa9a8");

// Temperature Service - Characteristics
static BLEUUID chUUID("e95d9250-251d-470a-a062-fa1922dfa9a8");

static BLEAddress *pServerAddress;
static BLERemoteCharacteristic* pRemoteCharacteristic;
static BLEClient*  pClient;

void setup()
{
  M5.begin(true, false, true);
  M5.Power.begin();

  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextColor(GREEN);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println(F("Starting..."));

  // init the device.
  BLEDevice::init("");
  pServerAddress = new BLEAddress(MYSERVER_ADDRESS);

  // connect to microbit
  BLEClient* pClient = BLEDevice::createClient();
  pClient->connect(*pServerAddress, BLE_ADDR_TYPE_RANDOM);
  if( pClient->isConnected() == false ){
    M5.Lcd.println("failed to connect the server...");
    delay(2000);
    return;
  }

  // get Service
  BLERemoteService* pRemoteService = pClient->getService(svcUUID);
  if( pRemoteService == nullptr ){
    M5.Lcd.println(F("failed to get service UUID..."));
    delay(2000);
    pClient->disconnect();
    return;
  }

  // get Characteristic
  pRemoteCharacteristic = pRemoteService->getCharacteristic(chUUID);
  if( pRemoteCharacteristic == nullptr ){
    M5.Lcd.println(F("failed to get characteristic UUID..."));
    pClient->disconnect();
    delay(2000);
    return;
  }
}

void loop()
{
  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextSize(4);
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setCursor(80, 100);

  M5.update();
  if( pRemoteCharacteristic->canRead()) {
    // read temperature
    uint8_t value = pRemoteCharacteristic->readUInt8();
      
    M5.Lcd.print("temp:");
    M5.Lcd.println(value);
  }
  delay(2000);
}

3. microbitの温度を取得するプログラムの実行結果

〇参考情報
Bluetooth Developer Studio Level 3 Profile Report


2019年12月30日月曜日

microbitのGrove Shieldに接続したブザーを、USBシリアル通信を通して鳴らす

microbitのGrove Shieldに接続したブザーを、USBシリアル通信を通して鳴らすには、以下の手順を実行します(制御側はRaspberry Pi)。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-buzzer.py
import serial
import time

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    ser.write(b"beep_on\n")
    time.sleep(2)
    ser.write(b"beep_off\n")
    time.sleep(4)
finally:
  ser.close()

プログラムの実行
python3 serial-usb-buzzer.py

microbitに接続したGrove ShieldとBuzzer

関連情報

Groveデバイスまとめ

2019年12月29日日曜日

microbitのGrove Shieldに接続した音センサーの値を、USBシリアル通信を通して取得する

microbitのGrove Shieldに接続した音センサーの値を、USBシリアル通信を通して取得するには、以下の手順を実行します(受け側はRaspberry Pi)。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-sound-sensor.py
import serial

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    line = ser.readline()
    print("sound sensor:{}".format(line.decode('utf-8').strip()))
finally:
  ser.close()

プログラムの実行
python3 serial-usb-sound-sensor.py

microbitに接続したGrove ShieldとSound Sensor

関連情報

Groveデバイスまとめ

2019年12月28日土曜日

microbitのGrove Shieldに接続した光センサーの値を、USBシリアル通信を通して取得する

microbitのGrove Shieldに接続した光センサーの値を、USBシリアル通信を通して取得するには、以下の手順を実行します(受け側はRaspberry Pi)。

実行手順

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-light-sensor.py
import serial

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    line = ser.readline()
    print("light sensor:{}".format(line.decode('utf-8').strip()))
finally:
  ser.close()

プログラムの実行
python3 serial-usb-light-sensor.py

microbitに接続したGrove ShieldとLight Sensor

関連情報

・基板を見えないようにするためにGrove Light Sensorのケースを作成する場合は以下の記事を参照してください。
OpenSCADとUltimaker Curaを使用してGrove Light Sensorのケースを作成する

・Raspberry Pi ZeroとGrove Base HATを利用してGrove Light Sensorを接続する場合は、以下の記事を参照してください。
Raspberry Pi ZeroとGrove Base HAT for Raspberry Piと光センサーで、明るさを取得する

Groveデバイスまとめ

2019年12月27日金曜日

microbitのGrove Shieldに接続したボタンの状態を、USBシリアル通信を通して取得する

microbitのGrove Shieldに接続したボタンの状態を、USBシリアル通信を通して取得するには、以下の手順を実行します(受け側はRaspberry Pi)。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-button.py
import serial

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    line = ser.readline()
    print("button:{}".format(line.decode('utf-8').strip()))
finally:
  ser.close()

プログラムの実行
python3 serial-usb-button.py

microbitに接続したGrove ShieldとButton

関連情報

Groveデバイスまとめ

2019年12月26日木曜日

microbitのGrove Shieldに接続したタッチセンサーの値を、USBシリアル通信を通して取得する

microbitのGrove Shieldに接続したタッチセンサーの値を、USBシリアル通信を通して取得するには、以下の手順を実行します(受け側はRaspberry Pi)。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-touch-sensor.py
import serial

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    line = ser.readline()
    print("touch sensor:{}".format(line.decode('utf-8').strip()))
finally:
  ser.close()

プログラムの実行
python3 serial-usb-touch-sensor.py

microbitに接続したGrove ShieldとTouch Sensor

関連情報

Groveデバイスまとめ

2019年12月25日水曜日

microbitのGrove Shieldに接続したRotary Angleセンサーの値を、USBシリアル通信を通して取得する

microbitのGrove Shieldに接続したRotary Angleセンサーの値を、USBシリアル通信を通して取得するには、以下の手順を実行します(受け側はRaspberry Pi)。

1. microbitで以下のようにMakeコードでプログラムを作成して、microbitに転送しておきます。

2. Raspberry Piでpyserialのインストール
※pipの場合
pip install pyserial

※pipenvの場合は、以下の手順を実行します
sudo apt-get -y install pipenv

mkdir serial-usb
cd serial-usb
pipenv --python 3.7
pipenv install
pipenv install pyserial
pipenv shell

3. Raspberry Piでプログラムの実行

serial-usb-rotary-angle.py
import serial

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    line = ser.readline()
    print("grove rotary angle sensor:{}".format(line.decode('utf-8').strip()))
finally:
  ser.close()

プログラムの実行
python3 serial-usb-rotary-angle.py

microbitに接続したGrove ShieldとRotary Agnle Sensor

関連情報

Groveデバイスまとめ