eepooのアイコン画像
eepoo 2021年03月06日作成
製作品 製作品 閲覧数 1646
eepoo 2021年03月06日作成 製作品 製作品 閲覧数 1646

シリアルモニター

シリアルモニター

マイコンのシリアル出力をそのまま受け取って表示するハードウェアがあると便利かも、、 と思って作ってみました。
外観
トップカバーを外した状態
OLED ディスプレイを外した状態

藤色の部品はボトムカバー。pro miniは締結用の穴などないので、ボトムカバーに対しては厚めの両面テープで止めています。

使ったマイコンは Pro mini 168 5V
買ったときには168と328があるとは知らず、適当に買ったら、168で Adafruitのライブラリを使うとメモリが足りず動かなかったので、軽量なライブラリを探し、SSD1306Ascii にしました。

■パーツリスト
pro mini 168 5V
ピンソケット
SSD1306( OLED 128x64 モノクロ I2C display)
タクトスイッチx2 (キャップは適当に)
タクトスイッチ用基板(ユニバーサル基板を加工)
筐体 3D CADで設計し 3D printerで出力

■結線
pro mini SSD1306
A4     SDA
A5     SCL
VCC      VCC
GND    GND

タクトスイッチはそれぞれ片方を GNDに
片方を D2,D3に接続。

ピンソケットはDTR,TX,RXなどの方に 6pin のピンソケットを立てる。

ソースは以下の通り

bool halt = false;
#define HALTPIN 2
#define BRCHANGE 3
unsigned long nextButton  = 0;
#define CMASK 200
#define LED 13
#define VER 1.0
unsigned long currBR = 9600;//9600を115200をトグル

#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;
void setup() {
  Serial.begin(currBR);
  Wire.begin();
  Wire.setClock(400000L);
  oled.begin(&Adafruit128x64, I2C_ADDRESS);
  oled.setFont(System5x7);
  oled.setScrollMode(SCROLL_MODE_AUTO);
  pinMode(HALTPIN, INPUT_PULLUP);
  pinMode(BRCHANGE, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
  oled.print("Serial Monitor ver:");
  oled.println(VER);

}
void loop() {
  if (Serial.available() > 0) { // 受信したデータが存在する
    char aByte = Serial.read(); // 受信データを読み込む
    if (!halt) {
      oled.print(aByte);
    }
  }
  if (digitalRead(HALTPIN) == LOW) {
    if (millis() > nextButton) {
      halt = ! halt;
      if (!halt) {
        digitalWrite(LED, HIGH);
      } else {
        digitalWrite(LED, LOW);
      }
      nextButton = millis() + CMASK;
    }
  }
  if (digitalRead(BRCHANGE) == LOW) {
    if (millis() > nextButton) {
      switch (currBR) {
        case 9600:
          currBR = 115200;
          break;
        case 115200:
          currBR = 9600;
          break;
      }
      Serial.end();
      oled.print("***** ");
      oled.println(currBR);
      Serial.begin(currBR);
      nextButton = millis() + CMASK;
    }
  }
}

見てわかる通り、D3に繋いだ方のタクトスイッチを押すことでシリアル通信のスピードを変更します。今回は 9600と115200をトグルするだけにしましたが、容易に増やせますね、、
D2に繋いだボタンを押すと表示更新を止めます。
見たいところで止められる機能というわけです。
わかりやすいところにLEDを引き出しておくべきでしたが、まぁ、スペースもないことで、pro miniの オンボードLEDの光が隙間から見えるので、これでモニター中かストップ中か判別することにします。

接続は GND,VCCと対象のマイコンのTXをこちらのRXに繋ぐだけです。
対象のマイコンが Serialに書き出したものをせっせと表示します。
このライブラリはスクロールモードというのがあって、すごく簡単にスクロールしてくれるので楽でした。

実物の稼働状態はこんな感じです。

3Dプリントの仕上がりが雑で恥ずかしいです。

送信側は

Serial.println(millis());
delay(1000);

という感じです。

ちなみに、 FTDIボードをこんな風にさしてFWのバージョンアップを行えます。
キャプションを入力できます

最初FTDIボードを裏返しに差し込んで、書き込めないなぁ~ と悩みました。
裏返しに差し込んでも壊れないということがわかりました。

6
eepooのアイコン画像
プログラミング大好きな本業メカ屋 arduinoからマイコンに手を出し、BluePillやESP32などでいろいろ作っています。 HUB75のLED Matrix Panelのライブラリを作ったりもしています。
  • eepoo さんが 2021/03/06 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する