質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

解決済

ST7789を使用したい Arduino UNO SPI

NFHK
NNFF_ASDADHD

総合スコア2

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

1回答

0グッド

0クリップ

412閲覧

投稿2022/11/22 10:38

編集2022/11/23 12:56

前提

Arduino IDE 2.0.1
USBケーブルでPCと接続

ST7789とArduinoはこのように接続している
VCC:3.3vのときと5vのとき両方試している
GND:GND
SCL:D13
SDA:D11
RES:D9
DC:D8
BLK:繋いでいない

使用した製品はこの商品である
https://amzn.to/3TYcgA9

発生している問題・エラーメッセージ

エラーメッセージは発生していない。
いろいろな図形などが描かれると予想しているが、全くディスプレイに反応がない。

該当のソースコード

Arduino-ST7735 and ST7789 Libraryのgraphictest_st7789.ino
に対して、オプション1、2両方とも試してみた

// For the breakout board, you can use any 2 or 3 pins. // These pins will also work for the 1.8" TFT shield. #define TFT_CS 10 #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin #define TFT_DC 8 #endif // OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique // to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and // SCLK = pin 13. This is the fastest mode of operation and is required if // using the breakout board's microSD card. //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); // OPTION 2 lets you interface the display using ANY TWO or THREE PINS, // tradeoff being that performance is not as fast as hardware SPI above. #define TFT_MOSI 11 // Data out #define TFT_SCLK 13 // Clock out Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

試したこと

前提条件にあるように配線を行い、graphictest_st7789.inoを書き込んだ。

質問へのコメントをもとに、コメントアウトを外す場所を確認した。しかし
下記サイトを参考にした結果、tft.inoがあり、そこでは引数が3つの関数を利用していた。
https://101010.fun/iot/arduino-tft-st7789.html

https://github.com/jumejume1/tft240x240-spi/blob/master/tft.ino
を書き込んで実行したところ、描画されるときが一度あった。

tft.inoからわかることとして

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

を利用しており、初期化には

// if the display has CS pin try with SPI_MODE0 tft.init(240, 240, SPI_MODE2); // Init ST7789 display 240x240 pixel

を使用していた。 CSピンがあればSPI_MODE0を使えと指示があるが、CSピンがないのでSPI2で良いと認識している

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

ozwk

2022/11/22 21:24

> 変更をせず 多分ですけどサンプルコードに この場合はこれ この場合はこれのコメントアウトを外す みたいに書かれてません?
NFHK

2022/11/23 05:01

参考サイトより5vにつなぐことにしています。
NFHK

2022/11/23 06:10

私が購入したTFT LCDディスプレイですと、SPI_MODE2 で通信しないと動作しませんでした。 との記載があるためデフォルトの方では動かないのでは?と踏んでます。 たしかにコメントアウトされている関数があり 2つのうちどちらを使うか選択できそうです。 外出先から帰ってから検証します。 tft.inoが動いているあたり、配線には間違いはなさそうとも認識してます。 しかしながら、少し動いても画面の描画がなくなってしまったり、確実に動くわけでないのが気になります。原因はわかりません。

回答1

0

自己解決

#define TFT_CS 10 #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin #define TFT_DC 8
#define TFT_CS 10 // define chip select pin #define TFT_DC 9 // define data/command pin #define TFT_RST 8 // define reset pin, or set to -1 and connect to Arduino RESET pin

RSTとDCが異なるサンプルコードが混在しており、配線をまちがえていた。

tft.init関数の第三引数にSPI_MODE2を指定しないと動かなかった。

// if the display has CS pin try with SPI_MODE0 tft.init(240, 240, SPI_MODE2); // Init ST7789 display 240x240 pixel

と思っていたのだが、動作しなくなった。

投稿2022/11/23 13:21

編集2022/11/23 13:27
NFHK

総合スコア2

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。