概要
- この記事でやっていることをM5Stackで確認しただけの内容です(スミマセン)。
- M5Stack用にRS232モジュールが販売されてのは知っているけど、前述の記事の部品で比較的安く買えるのでそちらで試しました。
- この記事では、RS232側をPCで試しているが、本当はRS232側は測定器などをつなげて、測定器の仲介機器として使用することを将来的には検討したい。
環境
- Win11 Home 64bit 23H2
- Arudino IDE 64bit 2.3.4
- Tera Term 4.107
主な使用機器
MAX3232
- RS232(±12V)とTTL(0-5Vまたは0-3.3V)の電圧レベルを変換するIC。
- 参考記事の方と同じAmazonのものを使用しました。
M5Stack AtomS3
- 動作確認に使用したM5Stack。液晶画面があり、USBにつないで、すぐに動作確認に使えて、価格もリーズナブルで便利。
機器の接続
- M5Stack(ESP32)の端子入力の電圧は3V系なので、MAX3232には3.3Vの電圧接続がいいと思われます。
- 参照記事の方はArudinoで試されているので5V電圧でやっていたのを、何も気にしないで、そのままM5Stack(Atom S3)でもMAX3232を5Vにつないでやってしまいましたが・・・。一応動作は問題ありませんでしたw
M5Stack(AtomS3)に書込んだプログラミングソース。
- 動作内容は、M5Stack(AtomS3)のボタンを押すたびにカウントアップの表示を出力することで確認しています。
- カウントアップの表示は以下の3つで確認しています。
- M5Stack(AtomS3)の液晶
- Arudinoのシリアルモニタ(AtomS3書込用のUSB-TypeCによるPC接続)
- MAX3232側をUSBシリアルコンバータケーブルでPC接続しTeraTermで表示
- M5Unifiedの共通ライブラリをインクルードして使用しています。
- この記事では「AtomS3」で記載していますが、同じソースでピン番号を変えて(0と26ピン)、「STICK C」でも動作することを確認しています。
- M5Stack(ESP32)は、Serial、Serial1、Serial2の3つが使用できるみたいなのですが・・・(スミマセンこのへんよくわかってないです)。
- Serialは通常のUSB書込時に使用しているものらしいのでそのままいじらず、今回使用するMAX3232に接続しているほうを、とりあえずSerial2として、接続ピンを指定して使用しました。
- 下記のプログラムソースにもコメント記載していますが、Serial2で「5,6」「7,8」「38,39」のピン組合わせを変えて試しましたが、一応すべて同じように使えました。
#include <M5Unified.h>
// M5Unifiedライブラリをプログラムで使用可能に。
// グローバル変数(プログラム全体で使用する変数の定義)
uint32_t count= 0; // ボタンが押された時のカウントを格納する変数
// setup関数は起動時に一度だけ実行。
// 主に初期化処理を記述。
void setup() {
// M5デバイスの初期化
auto cfg = M5.config();
cfg.clear_display = true;
M5.begin(cfg);
// ディスプレイの初期化
M5.Display.setRotation(1);
M5.Display.setFont(&lgfxJapanGothic_12);
// シリアル通信初期化
Serial.begin(9600); // USB側のシリアルの初期化
Serial2.begin(9600, SERIAL_8N1, 38, 39);// MAX3232側のシリアルの初期化
// AtomS3の以下のピン接続で確認実施
// AtomS3 38 <--> MAX3232 RXD
// AtomS3 39 <--> MAX3232 TXD
// AtomS3で「5,6」「7,8」「38,39」の組合わせ試してOKだった。
}
// loop関数は起動している間ずっと繰り返し実行。
void loop() {
// ボタンの状態更新
// この関数を呼び出さないとボタンの状態は更新されない
// 個別に呼び出すのではなくM5.update()で一括して状態を更新する
M5.update();
// ボタンが押された時の内容記載
if (M5.BtnA.isPressed()) {
count++; // カウントの変数を押されるたびにアップ
Serial.println(count); // USB側のシリアルに出力
Serial2.println(count); // MAX3232側のシリアルに出力
}
// ディスプレイの更新
M5.Display.clear();
M5.Display.setCursor(0, 0);
M5.Display.println("カウント");
M5.Display.println(count);
// ループのウェイト(適当な待ち時間)
M5.delay(100);
}
動作結果
参考
Qiita MAX3232を利用してArduinoにRS232Cを追加する
Qiita M5Stack Core2でRS232C通信をする方法
M5StickC非公式日本語リファレンス シリアル通信(UART)
ロジカラブログ M5Stackをシリアルモニターに使用