Skip to content

Instantly share code, notes, and snippets.

@shikarunochi
Last active November 7, 2024 16:06
Show Gist options
  • Save shikarunochi/0cc30546d9644acfa7437f3cf8e5094f to your computer and use it in GitHub Desktop.
Save shikarunochi/0cc30546d9644acfa7437f3cf8e5094f to your computer and use it in GitHub Desktop.
M5Atom : EXT LCD(without CS pin) + SD Card
#include <SD.h>
#include <SPI.h>
#include <M5Unified.h>
#include "lgfx_ST7789.h"
LGFX_ST7789 m5lcd;
void setup(){
Serial.begin(115200);
//CSなしLCDをspi_mode=0で動作させるための処理
constexpr int PANEL2_RST = 19; // 外部LCDのRSTピン番号
pinMode(PANEL2_RST, OUTPUT);
digitalWrite(PANEL2_RST, LOW); // 外部LCDのRSTをLOWにする(リセット実行)
pinMode(23, OUTPUT);
digitalWrite(23, HIGH); // SCLKピンをHIGHにしておく
digitalWrite(PANEL2_RST, HIGH); // 外部LCDのRST解除
m5lcd.init();
SD.begin(25, SPI, 25000000);
}
void loop(){
m5lcd.drawJpgFile(SD, "/test_1.jpg", 0, 0);
delay(2000);
m5lcd.drawJpgFile(SD, "/test_2.jpg", 0, 0);
delay(2000);
}
#include <SD.h>
#include <SPI.h>
#include <M5Unified.h>
#include "lgfx_ST7789.h"
LGFX_ST7789 m5lcd;
uint8_t buf[50*1024];
void setup(){
Serial.begin(115200);
//CSなしLCDをspi_mode=0で動作させるための処理
constexpr int PANEL2_RST = 19; // 外部LCDのRSTピン番号
pinMode(PANEL2_RST, OUTPUT);
digitalWrite(PANEL2_RST, LOW); // 外部LCDのRSTをLOWにする(リセット実行)
pinMode(23, OUTPUT);
digitalWrite(23, HIGH); // SCLKピンをHIGHにしておく
digitalWrite(PANEL2_RST, HIGH); // 外部LCDのRST解除
m5lcd.init();
SD.begin(25, SPI, 25000000);
}
void drawJpeg(String fileName){
File file = SD.open(fileName, "r");
file.read(buf, 50*1024);
file.close();
m5lcd.drawJpg(buf,50*1024,0,0);
}
void loop(){
drawJpeg("/test_1.jpg");
delay(2000);
drawJpeg("/test_2.jpg");
delay(2000);
}
//SCK(SCLK):G23/SDA(MOSI):G33/RES(RESET):G19/DC:G22
#ifndef LGFX_ST7789_H_
#define LGXF_ST7789_H_
#include <M5Unified.h>
#include <M5GFX.h>
#include <lgfx/v1/panel/Panel_ST7789.hpp>
class LGFX_ST7789 : public lgfx::LGFX_Device
{
lgfx::Panel_ST7789 _panel_instance;
lgfx::Bus_SPI _bus_instance; // SPIバスのインスタンス
public:
LGFX_ST7789(void)
{
{ // バス制御の設定を行います。
auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。
cfg.spi_host = VSPI_HOST; // 使用するSPIを選択 ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST
// ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用
cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3)
cfg.freq_write = 40000000; // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます)
cfg.freq_read = 20000000; // 受信時のSPIクロック
cfg.spi_3wire = true; // 受信をMOSIピンで行う場合はtrueを設定
cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定
cfg.dma_channel = 1; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定)
cfg.pin_sclk = 23; // SPIのSCLKピン番号を設定
cfg.pin_mosi = 33; // SPIのMOSIピン番号を設定
cfg.pin_miso = 21; // SPIのMISOピン番号を設定 (-1 = disable)SDと共有
cfg.pin_dc = 22; // SPIのD/Cピン番号を設定 (-1 = disable)
_bus_instance.config(cfg); // 設定値をバスに反映します。
_panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。
}
{ // 表示パネル制御の設定を行います。
auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
cfg.pin_cs = -1; // CSが接続されているピン番号 (-1 = disable)
cfg.pin_rst = -1; //SDと合わせるため、手動制御// RSTが接続されているピン番号 (-1 = disable)
cfg.pin_busy = -1; // BUSYが接続されているピン番号 (-1 = disable)
// ※ 以下の設定値はパネル毎に一般的な初期値が設定されていますので、不明な項目はコメントアウトして試してみてください。
cfg.memory_width = 240; // ドライバICがサポートしている最大の幅
cfg.memory_height = 320; // ドライバICがサポートしている最大の高さ
cfg.panel_width = 240; // 実際に表示可能な幅
cfg.panel_height = 240; // 実際に表示可能な高さ
cfg.offset_x = 0; // パネルのX方向オフセット量
cfg.offset_y = 0; // パネルのY方向オフセット量
cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
cfg.dummy_read_pixel = 8; // ピクセル読出し前のダミーリードのビット数
cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数
cfg.readable = false; // データ読出しが可能な場合 trueに設定
cfg.invert = true; // パネルの明暗が反転してしまう場合 trueに設定
cfg.rgb_order = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定
cfg.dlen_16bit = false; // データ長を16bit単位で送信するパネルの場合 trueに設定
cfg.bus_shared = true; // SDカードとバスを共有している場合 trueに設定(drawJpgFile等でバス制御を行います)
_panel_instance.config(cfg);
}
setPanel(&_panel_instance); // 使用するパネルをセットします。
}
};
extern LGFX_ST7789 m5lcd;
#endif

EXT LCD

DC :22 RES :19 SDA :33 SCK :23

SD Card

MOSI(SDA):33 MISO:21 SCK :23 CS :25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment