ハイハイスクールアドベンチャー_raspberry_pico_lcd版
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
ハイハイスクールアドベンチャー_raspberry_pico_lcd版 [2025/04/15 23:22] – [BLEキーボード] araki | ハイハイスクールアドベンチャー_raspberry_pico_lcd版 [2025/05/12 07:15] (現在) – araki | ||
---|---|---|---|
行 10: | 行 10: | ||
現状、[[https:// | 現状、[[https:// | ||
+ | 追記: [[https:// | ||
+ | また、BLEキーボードもPico 1W/Pico 2Wで利用できるようになっています。 | ||
===== あれこれ ===== | ===== あれこれ ===== | ||
行 112: | 行 114: | ||
SDカードのCSピンは SD.begin(22, | SDカードのCSピンは SD.begin(22, | ||
+ | === SPI上でSDとLCDが競合している場合 === | ||
+ | |||
+ | Pico Res-Touch LCD 2.8(3.5も同様)はSDカードインターフェイスとLCDインターフェイスをSPI1上に置いているため、両社は競合しています。 | ||
+ | |||
+ | このため。 | ||
+ | CSピンでバスの譲り合い((奪い合い? | ||
+ | |||
+ | そもそも LovyanGFX も SDカードインターフェイスも競合を想定しているので、CSピンを正しくアサインしてやればうまく動くのですが、リセット後に不安定化する場合がままあります。 | ||
+ | |||
+ | 集合知に問うと、最初に両方のCSピンをOFFにしてやればいいという情報が出てきました。 | ||
+ | |||
+ | <code cpp> | ||
+ | pinMode(9, OUTPUT); | ||
+ | pinMode(22, OUTPUT); // SD CS | ||
+ | digitalWrite(9, | ||
+ | digitalWrite(22, | ||
+ | </ | ||
+ | |||
+ | このコードを入れた後はとりあえずリセット後におかしな読込みとなることはなくなったように思います。 | ||
+ | |||
+ | ==== Pico Res-Touch LCD 3.5 ==== | ||
+ | |||
+ | Pico Res-Touch LCD 2.8と同じピンアサインを持つSPI液晶 + SDカードモジュールなのですが、画面が3.5インチ 320x480と大型化した関係で、コントローラが ILI9488 に変更されています。 | ||
+ | |||
+ | これはPicoCalcのものと同じなので、ピンと解像度((PicoCalcは 320x320))だけ変更してやれば動くだろうと思ったら、まったく表示が来なくて、3時間ほど試行錯誤をすることに。 | ||
+ | |||
+ | 結論から言うと、16bit カラーモードで初期化してやらないといけないのでした。 | ||
+ | |||
+ | <code cpp> | ||
+ | auto cfg = _panel_instance.config(); | ||
+ | ... | ||
+ | cfg.dlen_16bit = true; | ||
+ | </ | ||
+ | |||
+ | 要はカラーモードがあってなかったので書き込んでも表示が来なかったというわけです。 | ||
+ | ((おそらくデフォルトでは24か32ビットカラーになっているんだと思います。)) | ||
+ | |||
+ | なお、書き込み40000000 読み出し 2000000で駆動させています。 | ||
+ | これより速くすると動きが怪しい感じになったので多分やめた方がいいでしょう。 | ||
+ | 正直表示は速くはありません。 | ||
+ | |||
+ | 画面サイズが320x480なので、ハイハイスクールアドベンチャーでは縦長で使うことにしました。 | ||
==== USBキーボード ==== | ==== USBキーボード ==== | ||
行 153: | 行 197: | ||
ちょっとWeb界隈を漁ると、同じ現象で困っている人もいらっしゃる。 | ちょっとWeb界隈を漁ると、同じ現象で困っている人もいらっしゃる。 | ||
- | で、さらに調べていったら、**ヘッダファイルの中でコールバックのテンプレート宣言に_ _attribute( (weak) )_ _つけてる**じゃありませんか! | + | で、さらに調べていったら、**ヘッダファイルの中でコールバックのテンプレート宣言に**<code cpp> |
ダメ、絶対! | ダメ、絶対! | ||
WEAK属性は実装の方にだけつけて宣言につけちゃダメ! | WEAK属性は実装の方にだけつけて宣言につけちゃダメ! | ||
行 250: | 行 294: | ||
線がのたくりまわるのは好きではないので、最初にこっちを実装しようとしたのですが、サンプル見ても、Web界隈で調べても、例によってマイコンをBLEセントラルとして使っている事例は少ないんですよね。 | 線がのたくりまわるのは好きではないので、最初にこっちを実装しようとしたのですが、サンプル見ても、Web界隈で調べても、例によってマイコンをBLEセントラルとして使っている事例は少ないんですよね。 | ||
- | 実は未だ動いてないので、コードは同梱していませんが、とりあえず、色々実験はしているので、ここまでで得た知見を。 | + | <del>実は未だ動いてないので、コードは同梱していませんが、とりあえず、色々実験はしているので、ここまでで得た知見を。</ |
+ | 無事に動くに至りましたので、そこまでに得た知見をまとめておきます。 | ||
=== ビルド === | === ビルド === | ||
行 394: | 行 439: | ||
これでコネクションはセキュアになりました。 | これでコネクションはセキュアになりました。 | ||
- | ただ、まだキーボードから通知が拾えていません。 | + | <del>ただ、まだキーボードから通知が拾えていません。 |
- | ble/ | + | ble/ |
+ | |||
+ | ついに、文字が拾えるようになりました。 | ||
+ | < | ||
+ | |||
+ | ポイントは、Notificationを受け取りたいCharacteristicに対して、ディスクリプタを検索してCCCDを見つけたら、Notifyを送信するように要求する((0x0001 -- little endian なら {0x01, 0x00}を送信する。))のと、最後に gatt_client_listen_for_charcteristic_value_updates()でGATT_EVENT_NOTIFICATIONを受け取るようにすることの両方。 | ||
+ | 更に gatt_client_listen_for_characteristic_value_updates()のcharacteristicにはnullptrを渡して一括でやる方がいいということですかね。((サンプルに従って notification_listenerを一つだけ作っているので、個別の characteristicに対してやりたいなら、多分これもcharacteristicごとにわけないといけないんだと思いますが、一括で動いているのでよしとします。)) | ||
+ | なお、このBLEキーボードのくだりについては再編集して[[bleキーボードをつなごう_btstack編]]にまとめました | ||
ハイハイスクールアドベンチャー_raspberry_pico_lcd版.1744759361.txt.gz · 最終更新: by araki