と思ったら1個あった。
昨今は3.3V系のデバイスが増えてきて(もっと低電圧もあるけど)、それらは5Vで動作するArduino UNOでは扱いづらくなり、3.3Vのマイコン(ボード)を使うことが増えてきています(私は) ・・・が、マイコン(ボード)は3.3Vだけど、表示する液晶が5Vなのでどうしたものか・・・みたいなケースがあったりします。
具体的には、ちょうど2004のキャラクタ液晶を触ってみたかったんですが、5Vのものしかなさそうでした(1602とかもそうですが)
基板上で工夫されているものもあると思いますが、そうでない場合にひとつの選択肢になるなと思ったのがクレイン電子のGRO-3350 I2C電圧変換でした。
これは5V側に出力するだけの変換基板ですが、3.3V側の電源から5Vを作っているので他の電源が不要で、かつGrove端子(と、明記されてない気がするけど)なのでGroveで接続出来るので結構便利です。
出す側、受ける側がGroveでない場合は、ジャンパ変換ケーブルがあるので(オスメスともに)これを使うとよいですね。
もちろん、相手側もGroveならGrove-Groveのケーブルでいいわけですが。
この写真に載ってる基板、Airio-Baseで、3.3Vで動作している奴ですね。Arduinoと形状が同じですが3.3Vなので直接5VのLCDを駆動できないわけですね。
なお、この変換基板はスレーブ側からの信号の戻りは出来ないはずなので、戻り信号がある用途では使えないだろう点は要注意ですが、液晶などで出力のみに使用する場合にあると便利だなと思いました。
一応、成果物の写真を貼っておきます。
何をしようとしていたのかはわかると思うんですが、CGRAMが8個しかないので画面が寂しいからちょっとな・・・ってことで保留となりました。
画面が広いので、色々と情報載せたいときは2004のキャラクタ液晶も良いですね。
なお、今回は手元にあったSeeduino XIAOとその拡張ボードを使いました。Groveで接続するだけならGroveシールドでも良かったんですが。
液晶自体はSunFounder 5V 2004 20X4 キャラクタ LCDディスプレイという名前でAmazonで売ってたものを使いました。これはLiquidCrystal_I2Cライブラリで動かせるので自前でライブラリを準備しなくて良いのは良いですね(その分、機能はあるものだけになりますが)
最小限のコードはこんな感じですね。このレベルだと特に載せる必要もない気がしますが・・・(左側の記号と名前は出ないように変えてあります)
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 20, 4); void setup() { lcd.init(); lcd.backlight(); lcd.clear(); lcd.setCursor(5, 0); lcd.print("Hello!"); lcd.setCursor(5, 1); lcd.print("This demo uses"); lcd.setCursor(6, 2); lcd.print("xiao(3.3V)"); lcd.setCursor(6, 3); lcd.print("and GRO-3350"); } void loop() { }