0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry pi pico W と WAVESHARE-27057(waveshare 1.69インチタッチスクリーンディスプレイ) を C++で繋いで動くところまで確認した

Posted at

モチベーション

  • Raspberry pi pico W を持ってるけど、入力と出力のインターフェースを付けたい
    • →思い立ってタッチスクリーンを買ったので、繋げてみた
    • →ゆくゆくは、ライブラリを使ったり、Rustで書いたりしてみたい…

使うもの

  • Raspberry pi pico W
  • WAVESHARE-27057(waveshare 1.69インチタッチスクリーンディスプレイ)
  • Windows環境
  • VSCode + Raspberry pi pico 拡張機能

それぞれの仕様ページ

Raspberry pi pico W

 WAVESHARE-27057(waveshare 1.69インチタッチスクリーンディスプレイ)

繋ぎ方

Raspberry pi pico W

まずはPicoW のGPIOの場所を確認。

https://datasheets.raspberrypi.com/picow/pico-w-datasheet.pdf より拝借。

image.png

 WAVESHARE-27057(waveshare 1.69インチタッチスクリーンディスプレイ)

image.png

picoとディスプレイの配線

配線はWaveShareのページを参考にしています。

ピン名(上から順) ピン概要 PicoW GPIO
VCC 電源(3.3 / 5 V 入力) 3.3V(36番:右の上から5番目)
GND グランド GND(38番:右の上から3番目)
LCD_DIN SPI MOSI ピン GP11(15番:左の下から6番目)
LCD_CLK SPI クロック ピン GP10(14番:左の下から7番目)
LCD_CS LCD チップセレクション、Low アクティブ GP9(12番:左の下から9番目)
LCD_DC LCD データ/コマンドセレクション(データ用 High、コマンド用 Low) GP14(19番:左の下から2番目)
LCD_RST LCD リセット、Low アクティブ GP8(11番:左の下から10番目)
LCD_BL LCD バックライト GP15(20番:左の下から1番目)
TP_SDA タッチパネル データピン GP6(9番:左の上から9番目)
TP_SCL タッチパネル クロックピン GP7(10番:左の上から10番目)
TP_RST タッチパネル リセット、Low アクティブ GP16(21番:右の下から1番目)
TP_IRQ タッチパネル 割り込みピン GP17(22番:右の下から2番目)

WAVESHARE-27057の仕様確認

このモジュールは、

タッチ制御(Touch Driver)が CST816T チップ

ディスプレイ制御(Display Driver)が ST7789V2 チップを使ってます。

C++環境

PlatformIO(Arduino系)版と、

Raspberry pi 公式環境(pico-sdk)のどちらか迷ったけど、

WaveShareの公式サンプルがpico-sdkを使ってるので、公式環境を使います。

WaveShare公式Wikiのサンプルを動かす

WaveShare 公式Wiki

デモのuf2ファイルを動かす

以下のページの「Click to download the demo, decompress the package and go to the 1.69inch_Touch_LCD_Pico folder.」からデモをダウンロードする。

まずは格納されているuf2ファイルを動かしてみます。

1.69inch_Touch_LCD_Pico/c/uf2/1.69inch-Touch-LCD-Module-Test.uf2

image.png



無事に何かしら表示されました。


デモを自分でビルドして動かす

ダウンロードしたzipには、ソースもすべて格納されておりますので、これもビルドして動かします。

pico-sdkが必要なので、 PlatformIOなどでは動きません。

VSCodeのraspberry pi pico開発環境では、pico環境だと認識するためのCMakeのお約束があるので、デモソースに付け足す必要があります。

CMakeLists.txt
# お約束ここから
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Initialise pico_sdk from installed location
# (note this can come from environment, CMake cache etc)

# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
if(WIN32)
    set(USERHOME $ENV{USERPROFILE})
else()
    set(USERHOME $ENV{HOME})
endif()
set(sdkVersion 2.1.0)
set(toolchainVersion 13_3_Rel1)
set(picotoolVersion 2.1.0)
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
if (EXISTS ${picoVscode})
    include(${picoVscode})
endif()
# ====================================================================================
set(PICO_BOARD pico_w CACHE STRING "Board type")

# お約束ここまで

cmake_minimum_required(VERSION 3.12)
include(pico_sdk_import.cmake)

project(Pico_ePaper_Code)
pico_sdk_init()

#添加编译子目录
add_subdirectory(./lib/Config)
add_subdirectory(./lib/LCD)
add_subdirectory(./lib/Fonts)
add_subdirectory(./lib/GUI)
add_subdirectory(./examples)



#添加头文件目录
include_directories(./examples)
include_directories(./lib/Config)
include_directories(./lib/Fonts)
include_directories(./lib/GUI)
include_directories(./lib/LCD)



# 生成可执行文件
add_executable(main 
main.c
)

# enable usb output, disable uart output
pico_enable_stdio_usb(main 1)
pico_enable_stdio_uart(main 1)

# create map/bin/hex/uf2 file etc.
pico_add_extra_outputs(main)

target_link_libraries(main examples LCD GUI Fonts Config pico_stdlib hardware_spi hardware_i2c )

さらに、 raspberry pi pico 拡張機能の「Run Project」を実行すると、

プロジェクトフォルダ/build/Pico_ePaper_Code.elf を書き込もうとするので、

 プロジェクトフォルダ/build/main.uf2  を手動で書き込む必要があります。

このあたりはどうしてこういう動きなのかわからない…


ひとまず、これで自分がビルドしたものも動かすことができました。

「Error: Not Detected CST816T.」が出てタッチパネルが反応しないよ…

zipに格納されていたuf2も、自分で格納したuf2も、どちらもシリアルコンソールに Error: Not Detected CST816T. が表示されています。

タッチパネルがまったく動きません。


Touch_1IN69_WhoAmI 関数でfalseが返ってくることがわかり、どんな値が返ってくるかを調べました。

Touch_1in69.c
/******************************************************************************
function :	读取ID
parameter:  CST816T : 0xB5
******************************************************************************/
UBYTE Touch_1IN69_WhoAmI()
{
    printf("Touch_1IN69_WhoAmI: %d\r\n", DEV_I2C_Read_Byte(address,0xA7));
    if (DEV_I2C_Read_Byte(address,0xA7) == 0xB5)   
        return true;
    else
        return false;
}

10進数的には32。16進数的には 0x20 でした。

CST816T は 0xB5 を返すのは、世間一般的には正しそうです。
ほかのライブラリを参照しました。

ということで、どうして0x20が返ってくるのか分からず…


ひとまず今日はこれで寝ます。

また続きを調べたくなったら追記します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?