modalsoul’s blog

これは“失敗”と呼べるかもしれないが、ぼくは“学習体験”と呼びたい

M5StickC PlusからBLEでSwitchBotを操作する

M5StickC PlusからSwitchBotを操作したメモ

モノ

準備

操作対象のSwitchBotのDevice UUIDとService UUIDを確認する

今回はiPhoneアプリのBLE Scannerを使用

コード

BLEDeviceの特定

SwitchBotのアドバタイズをスキャンして、デバイスを特定する

ボタン操作の検知

M5.updateでボタンの読み取り状態を更新し、M5.BtnA.wasPressed()で押下を判定

コマンドの送信

setupでスキャンしたデバイスBLEClientを接続し、コマンドを送信

M5StickC Plusのシステム時刻/RTCのNTP同期と時刻の参照

M5StickCPlusでシステム時刻とRTPの管理と参照についてのメモ

参考

modalsoul.hatenablog.com

コード

WiFi接続

setup時にWiFiに接続し、NTPとの同期後に接続を解除

システム時刻をNTPと同期

configTime(JST, 0, ntpServer)でシステム時刻とNTPを同期

RTCの設定

getLocalTimeでローカル日時を取得する。

ローカル日時をRTC_TimeTypeDef/RTC_DateTypeDefを使いRTCの時刻と日時それぞれに適用

RTCから日時を取得

M5.Rtc.GetTime/GetDataで日時を取得

設定時と同じくRTC_TimeTypeDef/RTC_DateTypeDefを使用

動作確認

M5StickCPlusとBluetooth接続でシリアル通信

M5StickCPlusでシリアル通信した際のメモその2


前回はUSBを使った有線接続を使ったが、今回はBluetoothを使った無線接続でシリアル通信をする

modalsoul.hatenablog.com

ライブラリ

BluetoothSerial

github.com

コード

#include <M5StickCPlus.h>
#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

void setup() {
  M5.begin();
  M5.Lcd.setTextFont(1);
  M5.Lcd.setCursor(0, 0, 2); 
  M5.Lcd.println("Serial sample.");
  SerialBT.begin("M5StickCPlusBT");
}

void loop() {
  if(SerialBT.available()) {
    String msg = SerialBT.readString();
    M5.Lcd.print("Received:" + msg);
    SerialBT.print(msg);
  }
}

SerialBluetoothSerialはほぼ同じIFなので、前回とコードはほぼ同じ

動作確認

  • BluetoothSerial.beginで指定したデバイスとペアリング
  • ArduinoIDEの「ツール」->「シリアル」から、接続したM5StickCPlusを選択
  • シリアルモニタを起動

あとは前回のシリアル通信と同じ手順でOK

M5StickCPlusとPCをUSB接続でシリアル通信

M5StickCPlusとMacでシリアル通信した際のメモ


出力先がM5StickCPlusの1.14 インチだけだと表示できる情報量も少なく、デバッグなどで面倒なので、手元のMacに情報を送る方法を探した

シリアル通信

M5StickCPlusには3系統のシリアルポートが存在し、USB-Cが1系統目のSerial

8ピンのG0/26がSerial1、GroveのG32/33がSerial2

Serial

www.arduino.cc

シリアル通信のインタフェースにSerialオブジェクトが提供されている

シリアルモニタ

Arduino IDEの、ツール -> シリアルモニタからシリアルモニタを起動

受信した内容の表示と、送信ができる

コード

#include <M5StickCPlus.h>

void setup() {
  M5.begin();
  M5.Lcd.setCursor(0, 0, 2); 
  M5.Lcd.println("Serial sample.");
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()) {
    String msg = Serial.readString();
    M5.Lcd.print("Received:" + msg);
    Serial.print(msg);
  }
}

シリアルモニタから送信したメッセージをM5StickCPlusのディスプレイに表示し、受け取った内容をそのままシリアル通信で送り返す

M5StickCPlusとみちびき対応GPS受信機キットで位置情報を取得

Raspberry Pi Zeroで使ったみちびき対応GPS受信機キットをM5StickCPlusで使ったメモ

参考

modalsoul.hatenablog.com

modalsoul.hatenablog.com

モノ

akizukidenshi.com

配線

GPS受信キットのピンの並びはM5StickCPlusのGrove互換ポートと同じ並びなので、それぞれ接続すればOK

今回はGPS UNIT付属のGroveケーブルのソケットにジャンパケーブルを雑に差し込んだだけ

動作確認

みちびき対応GPS受信キットはGPS UNITと同じく、NMEA0183に準拠した情報をシリアル信号で出力するので、コードの変更はなし

M5StickCPlusとGPS UNITで位置情報を取得

GPS UNITで位置情報を取得した際のメモ

モノ

ライブラリ

TinyGPSPlus

github.com

GPSのNMEAパーサーライブラリ

ドキュメント

docs.m5stack.com

サンプル

M5Stack -> Unit -> GPS_AT5568 -> GPSRaw を参考

コード

Groveなので、G32(=TX)/G33(=RX)を使用

M5StickCPlusでWiFi接続

M5StickCPlusでWiFi接続した際のメモ

モノ

ドキュメント

WifiClient

www.arduino.cc

HttpClient

www.arduino.cc

コード

動作確認