ArduinoやESP32でI2Cが複数ある場合の接続
2023.11.16


マイコン初心者の私に突然訪れた問題。
I2C接続の部品が複数ある場合はどうしたらいいん?
ArduinoもESP32もSLA、SDAのピンは1つずつしかありませんからね、困りますね。
こういったことは表示系の接続とセンサー系の接続が混在したときによく起きます。
私はSSD1306(OLEDディスプレイ)とMLX90614の接続で起きました。

この問題の基本はSDAとSCLの配線を並列につなげればいいという話。
I2Cの部品にはアドレス番号が割り振られているので、
それぞれ個別にアクセスできるので心配はないようだ。
マスターがArduino、スレーブがMLX90614とOLEDディスプレイという感じ。
マスター、スレーブというと、IDEのHDDを思い出す(;'∀')

MLX90614のアドレスは0x5AでSSD1306のアドレスは0x3Cとなっていて、
SDAはシリアルデータ転送線、SCLはクロック線という役割がある。



配線イメージは↑こんな感じ。
VCCはArduinoやESP32から直接渡すのは全ての部品でOKなわけでなく、
スペックシートで検証した上で配線する必要あるが、
MLX90614程度なら問題はなさそう。

https://www.createmakers.com/becoming-makers/arduino-with-mlx90614-and-oled-display/

詳しい説明は↑でされています。
本来ならばI2Cを使う場合、ライブラリを活用したとしても、アドレスを指定するのが一般的ですが、
AdafruitのMLX90614ライブラリはその指定すらなく簡単に動かすことが可能です。



ソースは↑だけ。とても少ないコードで動きます。
一応、ダウンロードできるようにしておきます。
https://randol-news.net/download/MLX90614.zip

もっとセンサーが増えてきたときは何かトラブルが起きるかもしれないけど、
2つ程度なら動かすのは苦労はなさそうだ。
Razer wolverine v2 chromaをST6用に買ってみた感想
2023.10.12


Swtich用のホリパッドをWindows PCで使っていたのですが、
十字キーがちゃんと反応しなくなったり
R1ボタンのゴムが破れて反応しなくなったので交換を施したり、
R2のアシストボタンがゴムズレが起きて反応しないことがあったりします。
最悪なのがプレイ中にBT接続が切れる、1Pと2Pが入れ替わるとか
致命的なことがおきるのでいい加減買い替えを決意しました。
接続がきれたことで負けることがどれだけあったか・・・ ヽ(`Д´)ノプンプン



今回Street Fighter 6用に購入したのが、
Razer wolverine v2 chromaです。
有線専用モデルでUSBが脱着式ではありますが、無線には対応していません。
ボタンはマウスに良く採用されるメカニカルなマイクロスイッチ。
カチカチ感があって、確実に押しているのが分かります。



背面には4つボタンを備えていますが、
押しミスはまず起きないような位置に設置されています。
逆にいうと手が小さい人は押しにくいかもしれないけど・・・・



上面にも2個拡張ボタンがあります。
LT、RTのアーチがジャストフィットしてなかなかよろし。
操作感覚は最高の一言。
入力の遅延も感じられない。
今まで使っていたのは無線HORIパッドだからか、
入力してからの反応が極端にアップした気がする。
インパクト返しの確率がかなり上がりました。
慣れるにつれて勝率があがっていくことは間違いないでしょう。



実際にXinputTest_4000_Samplesで測ってみた。
Switch用のホリコンは、無線で125Hzらしいが、
このパッドは250Hzという結果がでた。
Xbox向けだとあたりまえの数字?
いやでもボタンの構造的反応速度がちがうから
通信速度だけでは測れない速度アップはあるのかな?



ものは試しでhidusbfを使ってUSBのポーリングレートを強制的に1000Hzに変えてみた。
対応しているなら速度アップが見込めるが・・・



変わらんか~~(;´Д`)
ま、しゃーない。



さて、いいところが多いこのパッドですが、当然ネガティブな部分もあります。、
6個の追加マルチファンクションボタンがこのパッドにはあるのですが、
ST6の設定画面に現れません。
steamで拡張ボタンを認識させることが私には無理でした。
XBOX用のパッドでは純正のEliteでしか認識しないらしいです。
私は背面のどこかに弱中強の同時押しを設定できればいいので、
Razer Controller Setup for Xboxで背面ボタンにジョイスティックボタンと同じ設定にして、
ST6の設定画面で弱中強をジョイスティックボタンに割り当てました。
一応これで望みのことは実現できたけど、あまりいい解決方法とは言えないね。

あとボタンの耐久は300万回とメーカーは言ってるけどまず無理でしょう。
マウスでもそこまで長持ちするのは見たことありません。
実際購入者のレビューをみてるとよく壊れるそうです。
だって、フェザータッチで300万回押すわけでもなく、
力を入れて押す人もいれば、押しっぱなしを多用する人もいる。
経年劣化で端子が接触不良することもある。
マウスでチャタリングが起きる現象がこのパッドにも当然おきるでしょう。
寿命はマウスと同じと考えた方が良さそうですね。

ということを踏まえて考えたとしても
ユーザーレビューには、すぐ壊れたといった話が散見しています。
いったい何の部品を使っているかを調査してみたところ、
Kaithのミニマイクロスイッチで表面実装のものっぽい。


https://ja.aliexpress.com/item/1005005021406775.html

中国製だもの。耐久性なんてスペック通りでるわけないよねぇ。
なんでRazerともあろうメーカーが中核の部品に中華部品使うんだろう・・
うちのが壊れたらオムロン製のD2LSに交換したほうがよさそう。

総評を述べておくと
一般的なコントローラーとして使うなら操作感や正確性が頭一つ抜けてます。
が、背面ボタンなどの拡張ボタンに期待して使うなら、Chromaを買う必要なし。
安いRazer wolverine v2で十分です。
拡張ボタンをST6で使いたいなら、Xbox elite controllerか
ホリのファイティングコマンダーOCTAを買ったほうが幸せになれるかも?


ESP32でメール送信
2023.09.16
ESP32とセンサーを組み合わせると
情報を何かしらの手段で報告させたいという考えに結びつきます。
だってWiFi機能があるんですから(;'∀')
一番簡単にできるのはメール送信かと思うわけですが、
以下はその方法と苦労の備忘録となります。
まず、メール送信させるとしてもレンタルサーバーを持ってる人なら
メールアカウントを自分で作って活用すればいいですが、
無い人はGoogleのGMailを使うのが手っ取り早いでしょう。

ESP32でメール送信するためには、ESP_Mail_Client.hを使います。
このライブラリも登録に罠があって、Arduino IDEの「ライブラリを管理」で
「ESP32 Mail Client」で検索すると、
ESP32 Mail Client by Mobizt 最新ver 2.1.6
ESP Mail Client by Mobizt 最新ver 3.4.14
の2つがあり、とても紛らわしいです。
どちらでも動くと思って上のほうを入れてみたら
あらゆることでどうにもうまくいかないので
下のを使ってみたら試行錯誤はありましたが、ソースの構築に成功しました。

WiFi.h
ESP_Mail_Client.h

あとこの2つのライブラリを使用すると
高確率で「***.hに対して複数のライブラリが見つかりました。」
というエラーがでます。***の部分はWifi.hやSD.hだったりします。
ArduinoIDEにはArduino用としてすでにこの2つのライブラリが存在していて、
ESP32用のライブラリをインストールしたら同じ名前のライブラリが追加登録されてしまうものだから
重複してますよと言ってくるわけですね。
ArduinoIDEが吐き出すエラーは「使用済み」と「未使用」にわけて、
しかも保存されているパスまで教えてくれますから、
未使用のライブラリを直接削除して対応しました。これでコンパイルは通ります。

このメールライブラリはコンパイルが非常に遅いです。
Core i9でもかなり待たされます。
私が使っているノート、Core i5-3320Mだと3分くらいも待たされます。
一見ハングアップしたように見えますが、正常に動いていますので気長に待ちましょう。
コンパイルが完成すると、スケッチの空きが極端に少なくなっているので、
追加の機能を持たせるなら要注意です。

Googleのメールですが、ESP32がGmailアカウントを使ってメールを送信できるように、
アプリパスワードを作成する必要があります。
アプリパスワードは16桁のパスコードで、
安全性の低いアプリやデバイスにGoogleアカウントへのアクセス許可を与えるものです。
アプリパスワードによるサインインについては、
https://support.google.com/accounts/answer/185833
こちらをご覧ください。
アプリ パスワードは、2段階認証が有効になっているアカウントでのみ使用できます。
まずは2段階認証を有効にする手順を書きます。

1.「Googleアカウントを管理」を開きます。
2.ナビゲーション パネルで、[セキュリティ] を選択します。
3.Googleへのログイン」で、「2段階認証」>「開始」を選択します。
4.画面に表示される手順に従います。携帯の電話番号が必要になります。
5.2段階認証を有効にすると、アプリのパスワードを作成できる権利を得ます。

アプリパスワードは以下の手順で取得します。
1.「Googleアカウントを管理」を開きます。
2.ナビゲーションパネルで「セキュリティ」を選択します。
3.「Googleにログインする方法」の「2 段階認証プロセス」を開きます。
4.一番したまでスクロールさせて、「アプリパスワード」を選択します。
5.ここのアプリから「メール」、デバイスを選択で「その他」を選び「ESP32」を登録
6.「生成」を選択。これでアプリパスワードが取得できます。

メールサーバーのログインにはこのアプリパスワードを使うことになります。
メール送信に成功したソースコードを貼っておきます。
画像だけでなく、一応ダウンロードできるようにファイルも置いておきます。

testmail.ino

- CafeNote -