公開日:2025/06/07
title.png

35th Season


#35-1 ログストレージハット

 以前、I2C EEPROMモジュールをログストレージとして使用するプログラムを作りました(以下記事・図参照)。

  「#34-4 EEPROMをログストレージとして使う

a343_i2ceep.jpg

 M5StickC Plusでも使用可能なプログラムとしてあるのですが、M5StickC Plusで使おうとすると、I2C EEPROMモジュールをデュポンケーブルで接続する事になります。
 接続するのは良いのですが、記録すべき何らかのデータを別なセンサモジュール(I2C通信のもの)から読み出そうと考えると、I2C信号線(SCL,SDA)を引き出す必要があります。I2C信号線はI2C EEPROMモジュールに接続してしまうため、2股に先割れしたデュポンケーブルでもない限り、2個のI2C通信モジュールを同時に接続するのは無理なのです。
 この使い勝手を向上しておきたいと思います。

ログストレージハットの設計

 M5StickC Plusには、「ハット👒」と呼ばれる、拡張I/Oポート(下図)に装着する拡張ユニットが存在します。

a237_ioport.jpg

 今回は、M5StickC Plusの拡張I/Oポートに装着可能なハットとして、I2C EEPROM(24C256)を搭載した基板、「ログストレージハット」を製作したいと思います。
 I2C EEPROMモジュール上の24C256チップはICソケットで実装されているので、取り外しが可能です。ハット製作に当たってはI2C EEPROMモジュールをそのまま活用するのではなく、モジュール基板から24C256チップを取り外してハット基板に乗せ換えて使います。

目標仕様

 下図に示す3×7[cm]万能基板を使います。

a351_univbd37.jpg

 短辺のスルーホール10列に対してM5StickC Plusの拡張I/Oポートが8ピンなので、2列余して接続可能であり、ちょっとしたハット基板を作り込むのに絶好の部品です。

 以下にログストレージハットの目標仕様を示します。

  目標仕様:

配置配線

 I2C EEPROMチップ(24C256)をM5StickC Plusの拡張I/Oポートに接続するだけなので、回路図はごく単純で簡素です。PowerPointを使い、3×7[cm]万能基板での配置配線図を作図してみました。以下図および解説を参照してください。

a351_pandr.png

pin # 24C256 # pin
A0 1

8DIP
8 VCC
A1 2 7 WP
A2 3 6 SCL
GND 4 5 SDA

 実装する部品は全て表面に配置します。ただし、配置配線図に記載の無い、拡張I/Oポートとの接続用ピンヘッダのみ、裏面実装です。次節の裏面写真でご確認ください。

ログストレージハットの工作

 配置配線図が完成したら後は、はんだごてを温めて工作して行くだけです。完成した手作りのハット基板を以下図に示します。

a351_hatface.jpg
a351_hatback.jpg

 実は上の写真、予め作図した配置配線図とは結線が一部異なっています。

  うん、単純に結線を間違えました(1^^;)っ。

 A2〜A0端子からスライドスイッチへのはんだ付けの際、間違えて1個づつ下にずらして、はんだ付けしてしまいました。各スライドスイッチへの結線(はんだ付け)が裏面だったので、勘違いしたのが原因です。

 このせいでWP端子からスライドスイッチへの結線が、当初予定していたスライドスイッチとは反対側の端っこに移動してしまい、被覆線が表面から裏面へ回り込むことになってしまいました。

 まあ、最初からやり直しになるような大失敗ではなく、何とか収拾が付いたので、不幸中の幸いでした。

配置配線図と、完成品の写真で、スライドスイッチの配置が異なっているのは、このためです。誤記ではありません。

被覆線の固定

 表面から裏面へ回り込ませた被覆線が動く事で、金属疲労を起こして断線するのを防ぐため、ABボンドで固めておきました。被覆線の内部よりも、はんだ付けした根元の部分が断線し易いです。

a351_bondab.jpg

 一般的にどう呼称するのか知りませんが、筆者は「ABボンド」と呼んでいます。2液混合すると固まるタイプの接着剤です。

 最近だと、「ジェル状瞬間接着剤」とかいう物が売っているので、そちらの方が使い易かったかも?と、思いました。

今回のお買い物

 今回のお買い物は以下の通りです。

 万能基板はAmazonの中華ショップから購入、配送料無料でした。

 ICソケットは4年ほど前に、こちらの部品と一緒に買っておいたものです(下図)。

a351_icsock8.jpg

 ICソケットは「いつか使う事もあろう」と、先回りして買っておいたのだけど、結局4年も塩漬けにしていました。そう言えば、この時一緒に購入したスライドスイッチも、今回本格的に使うことができました。ちょっと先回りが過ぎるでしょうか?

帽子を被って実験

 M5StickC Plusに、製作したログストレージハットを装着したらハードウェアの準備完了です(下図)。

a351_expr.jpg

 シリアルモニタで通信しながら実験を進めるので、M5StickC PlusをUSBケーブルでPCと接続してください。M5StickC Plusへこちらのプログラム(eep_storage.ino)を書き込んで実験します。シリアルモニタで受け付けているコマンドについては、こちらを参照してください。

 では、実験に進みましょう。
 A2〜A0スライドスイッチでスレーブアドレスを変更しながら【scan】コマンドを実行して、スライドスイッチが機能していることを確認しました。手元の24C256チップでは、A2〜A0スライドスイッチの変更後、直ちに設定が有効となっていました(以下サンプルを参照)。

  実験サンプル:【 】内はシリアルモニタからの送信データ
  【scan】
  OK+ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f
  00:             -- -- -- -- -- -- -- --
  10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  50: -- -- -- -- -- 55 -- -- -- -- -- -- -- 5d -- --
  60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  70: -- -- -- -- -- -- -- --
  OK: scan i2c slave address


 上に示したログは、A2〜A0=0x101=5と設定した場合の応答です。I2Cバスに接続された24C256チップのスレーブアドレス(0x55と、シャドウ0x5d)が検出されました


 続いて、WPスライドスイッチを書き込み許可側に設定して、ログレコードを書き込んでみましょう。

  【list,1800】
  LOG: found 0 records
  OK: list: eep_radr=0x1800, eep_ridx=0x6ab7

  【wrec,WE,wr-enable】
  OK: wrec

  【list,1800】
  LOG+ 0x1800: 0x6ab7,'WE',wr-enable\xff\xff\xff
  LOG: found 1 records
  OK: list: eep_radr=0x1810, eep_ridx=0x6ab8

 書き込んだログレコードが読み出せることを確認できました。お手元で実験する場合は【list】コマンド実行時、適切な空き領域のアドレスを指定してください。

 今度は、WPスライドスイッチを書き込み禁止側に設定して、書き込んでみましょう。

  【wrec,WP,wr-protect】
  ERR+ eep_radr=0x1810, eep_ridx=0x6ab8
  ERR: wrec (-3)

  【list,1800】
  LOG+ 0x1800: 0x6ab7,'WE',wr-enable\xff\xff\xff
  LOG: found 1 records
  OK: list: eep_radr=0x1810, eep_ridx=0x6ab8

 新しいレコード’WP’を書き込んだ(【wrec】コマンド)のですが、エラーメッセージが返り、書き込みできなかったことが判ります。WPスライドスイッチ(書き込み禁止)も機能していることが確認できました。OKです。

プルアップ抵抗

 Arduino UNO等のWireクラスライブラリでは、ATmega328の内蔵プルアップ抵抗を使って、外部回路にプルアップ抵抗を実装しなくてもアクセスできるようになっています(こちらを参照)。しかし、今回、M5StickC PlusのWireクラスライブラリでは、外部回路にプルアップ抵抗の実装が必要であることが判明しました。
 プルアップ抵抗無しで実験していたところ、突然【scan】コマンドで検出できなくなったり等、どうも動きが怪しく、「もしや」と思ってプルアップ抵抗を追加したところ安定したのです。

 ただ、ログストレージハット上にプルアップ抵抗を実装する事は不採用としました。
 実は、市販されている数々のI2C通信モジュールには基板上にプルアップ抵抗が実装されている事が多いため、それらを接続すると、二重/三重にプルアップが利いてしまうからです。
 ログストレージハット単体で使用する時にプルアップ抵抗が必要な場合には、ピンソケット(PS)の3V3⇔SCLおよびSDA端子間に、適切な抵抗を挿入して対処してください。実験中の写真を改めてご確認いただくと、ピンソケットに抵抗が挿さっていることを確認できると思います。


 工作時の結線ミスとか、最後のプルアップ抵抗が必要だった件とか、いくつかの落とし穴をかわしつつ、強力なログストレージハットが完成しました。こちらの万歩計ログなんかは、だいぶスマートに実装できる様になったと思います。


btn_arduino.png

btn_prev.png btn_next.png

home