以下の内容はhttps://gijin77.blog.jp/archives/2024-04.htmlより取得しました。


◆ESP32-S3-DevKit-1-N16R8のボードにSPI接続の2.8インチLCDを接続し
 以前作っていた漢字表示対応ニュース表示を作ってみました。
 lcd28-2
 詳しくは、下記ブログ内記事を参照して下さい。
  ・ESP32-1732S019 で efont を使いニュース表示をしてみた
 ・ESP32-S3 UsbHost機能でkeyboardをリングバッファを使って入力してみた

1.2.8'LCDに対応して「User_Setup.h」を編集します。
  //コメントを取り他のドライバをコメントアウトする。

 ①ドライバーICの設定(45行近辺)
  #define ILI9341_DRIVER       // Generic driver for common displays

 ②画面サイズの設定
  #define TFT_WIDTH  240 // ST7789 240 x 240 and 240 x 320
  #define TFT_HEIGHT 320 // ST7789 240 x 320
 
 ➂SPIのピン番号の設定 
  //ESP32-S3 Devkit 2.8' LCD用 2024/04/26 追記
  #define TFT_MISO 9
  #define TFT_MOSI 13
  #define TFT_SCLK 12
  #define TFT_CS   10  // Chip select control pin
  #define TFT_DC   11  // Data Command control pin
  #define TFT_RST  14  // Reset pin (could connect to RST pin)
  #define TFT_BL   -1  // LED back-light

  #define TOUCH_CS -1     // Chip select pin (T_CS) of touch screen

2.LCDとの接続
 esp32-s3-lcd

3.スケッチは、下記の物を流用します。
   ESP32-1732S019_efont_TFT_eSPI_NewsAPI.ino
 
  ①LEDのGPIO番号を変更します。
 15行  #define LED   1 //21
 
  ②サイズの変更します。
   //2.8'LCD 320 x 240
 20行 #define SCREEN_WIDTH  320 // tft display width, in pixels
 21行 #define SCREEN_HEIGHT 240 // tft display height, in pixels
  
  ➂枠サイズを変更します。
149行  Rect(0,0,319,239,Yellow);//枠表示
220行  Rect(0,0,319,239,Yellow);//枠表示
  
  以上で、動作可能です。
  
3.実行画面
 lcd28-1

以上


ブログトップへ

◆ESP32-S3-DevKit-1-N16R8を入手したので、ESP32-S3のUsbHost機能を試してみました。
 このボードは、USB-Cが2個ついていて片方がキーボードなどが繋がる物です。
 接続には、USB Type-Aとの変換アダプタが必要です。
 esp32s3_keyboard

1.現時点の開発環境(2024/04/21)
 ①Windows 11 pro x64 23H2
 ②Arduino IDE 2.3.2
 ➂ボード esp32 2.0.11
 ④ライブラリ EspUsbHost 1.0.2

2.ボード情報をインストール
 ①ボードマネージャで「esp32-s3」で検索し、「esp32」をインストールします。
 esp32-s3_board

3.ライブラリのインストール
 ①ライブラリマネージャで「esphost」で検索し、「EspUsbHost」を
  インストールします。
 espusbhost

4.ボードについて
 ①ボードの入手先
   ESP32-S3-DevKit-1-N16R8

 ②ボードの改修
  改修といってもジャンパー線を一本付けるだけです。
  これを接続しないと、キーボートに電源が供給されませんでした。
  下記写真
 esp32-s3-ジャンパー

 ➂参考回路図(ESPRESSIFの情報より転載
  VBUSを接続し、キーボード側USBに電源を供給します。
 回路図_ESP32-S3-DevKitC-1_V1

 ④参考ピン配置(ESPRESSIFの情報より転載
 ESP32-S3-DevKitC-1_ピンアサイン

5.スケッチの作成
 ①「...\examples\EspUsbHostKeybord\EspUsbHostKeybord.ino」を元に
 リングバッファ経由に変更しました。
 ②リングバッファについて
  リングバッファは、データを一時的に保存し、先入れ先出し(FIFO)の順序で
 取り出すためのデータ構造です。
  リングバッファを使うことで、一時的にデータを保持でき、データ損失を防ぐことが
 できます。入力の受付と出力の処理を別に行うことで、効率的な入出力処理が可能にな
 ります。

//EspUsbHostKeyboard.ino
//V2024/04/21 by JK1VCK
//blog URL:http://gijin77.blog.jp/archives/40553229.html

#include "EspUsbHost.h"

#define BUFFER_MAX 64 // リングバッファのサイズ
uint8_t chr_buf[BUFFER_MAX]; // 文字リングバッファ用の配列
uint8_t cod_buf[BUFFER_MAX]; // コードリングバッファ用の配列
uint8_t sht_buf[BUFFER_MAX]; // シフトリングバッファ用の配列

uint8_t head = 0; // 読み込み位置
uint8_t tail = 0; // 書き込み位置
uint8_t KEY=0;
uint8_t K_CODE=0;
uint8_t K_SHIFT=0;

//***************************************************
class MyEspUsbHost : public EspUsbHost {
  void onKeyboardKey(uint8_t ascii, uint8_t keycode, uint8_t modifier) {
    chr_buf[tail] = ascii;    // 文字を書き込む
    cod_buf[tail] = keycode;  // コードを書き込む
    sht_buf[tail] = modifier; // シフトを書き込む
    tail = (tail + 1) % BUFFER_MAX; // tailを次の位置に進める
    if (tail == head) head = (head + 1) % BUFFER_MAX; // バッファフル時は頭を進める
  };
};

MyEspUsbHost usbHost;

void key_input_task(void* arg) { //別タスクで実行
  while(1){
    usbHost.task();
    delay(1);
  }
}

uint8_t get_keyboard() {
  uint8_t c=0;
  if (head != tail) { // バッファが空でなければ
    KEY=chr_buf[head]; // 文字を読み出す
    K_CODE=cod_buf[head]; // 文字を読み出す
    K_SHIFT=sht_buf[head]; // 文字を読み出す
    head = (head + 1) % BUFFER_MAX; // headを次の位置に進める
    c=K_CODE;
  }
  return(c);
}

void setup() {
  Serial.begin(115200);
  delay(500);

  usbHost.begin();
  usbHost.setHIDLocal(HID_LOCAL_Japan_Katakana);
  Serial.println("ESP32-S3 Keyboard Test Start");
  usbHost.begin();
  usbHost.setHIDLocal(HID_LOCAL_Japan_Katakana);
  xTaskCreate(key_input_task, "key_input_task", 2048, NULL, 1, NULL);

}

void loop() {
  uint8_t c=get_keyboard();
  if (c!=0){
    Serial.printf("IN=%02d OUT=%02d ", tail,head);
    Serial.printf("KEY=%02x K_CODE=%02x K_SHIFT=%02x char=%c\n", KEY,K_CODE,K_SHIFT,KEY);
  }
  delay(1000); //わざと一秒遅らせる
}
6.書き込み&実行
 ①ボード情報
 esp32-s3_ボード情報

 ②実行結果
 Atoms3-keyboard

以上


ブログトップへ

◆M5AtomS3の128x128のLCDにefont を使い漢字を表示してみました。
 M5StickCPlusには、efont用ライブラリが有りますが、M5AtomS3用は
 無かったので以前ESP32用に作ったものが有ったので流用しました。

 詳しくは、下記ブログ内記事を参照して下さい。
 ・ESP32 にて efont を使い SSD1306 OLED に漢字を表示してみた

1.試験用のスケッチは下記に示します。 
//atoms3_efont.ino
//V2024/04/17 by JK1VCK
//blog URL:http://gijin77.blog.jp/archives/40506691.html

#include <M5AtomS3.h>
#include "efontEnableJaMini.h"
//#include "efontEnableJa.h"
#include "efont.h"

//#define EFONT_DEBUG
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

//efont 文字列を表示する
//**********************************************************************************************
void printEfont(int16_t x,int16_t y,int16_t txtsize,uint16_t color,uint16_t bgcolor,char *str) {
  int posX = x;
  int posY = y;
  int16_t textsize = txtsize;
  uint16_t textcolor = color;
  uint16_t textbgcolor = bgcolor;
  byte font[32];
  while( *str != 0x00 ){
    // 改行処理
    if( *str == '\n' ){
      // 改行
      posY += 16 * textsize;
      posX += 16 * textsize;
      str++;
      continue;
    }
    // フォント取得
    uint16_t strUTF16;
    str = efontUFT8toUTF16( &strUTF16, str );
    getefontData( font, strUTF16 );
    // 文字横幅
    int width = 16 * textsize;
    if( strUTF16 < 0x0100 ){
      // 半角
      width = 8 * textsize;
    }

#ifdef EFONT_DEBUG
    Serial.printf( "str : U+%04X\n", strUTF16 );
#endif

    // 背景塗りつぶし
    M5.Lcd.fillRect(posX, posY, width, 16 * textsize, textbgcolor);
    // 取得フォントの確認
    for (uint8_t row = 0; row < 16; row++) {
      word fontdata = font[row*2] * 256 + font[row*2+1];
      for (uint8_t col = 0; col < 16; col++) {

#ifdef EFONT_DEBUG
        Serial.write( ( (0x8000 >> col) & fontdata ) ? "#" : " " );
#endif

        if( (0x8000 >> col) & fontdata ){
          int drawX = posX + col * textsize;
          int drawY = posY + row * textsize;
          if( textsize == 1 ){
            M5.Lcd.drawPixel(drawX, drawY, textcolor);
          } else {
            M5.Lcd.fillRect(drawX, drawY, textsize, textsize, textcolor);
          }
        }
      }

#ifdef EFONT_DEBUG
        Serial.write( "\n" );
#endif

    }
    // 描画カーソルを進める
    posX += width;
    // 折返し処理
    if( SCREEN_WIDTH <= posX ){ 
      posX = 0;
      posY += 16 * textsize;
    }
  }
  // カーソルを更新
  M5.Lcd.setCursor(posX, posY);
}

void setup() {
auto cfg = M5.config();
  M5.begin(cfg);
  Serial.begin(115200); // シリアル通信初期設定
  delay(1000);        // シリアル接続待ち
  Serial.println("AtomS3 eFont Test!"); // シリアル出力
  M5.Lcd.setRotation( 3 );
  M5.Lcd.clear();
}

void loop() {
  M5.Lcd.clear();
  printEfont(1,10,1,GREEN, BLACK,(char *)"1倍角 こんにちは");
  printEfont(1,28,1,GREEN, BLACK,(char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ123456");
  delay(5000);
  M5.Lcd.clear();  
  printEfont(1,1,2,GREEN, BLACK,(char *)"2倍角 こんにちは");
  delay(5000);
  M5.Lcd.clear();  
  printEfont(1,1,3,GREEN, BLACK,(char *)"3倍角 こんにちは");
  delay(5000);
}


2.実行画面

 s3_efont-3

 s3_efont-2

 s3_efont-1

以上

ブログトップへ

◆パナソニック CN-R300D カーナビに替えたのでAV-INケーブルを
 それに合わせて作りました。
 標準の4極プラグと配置が違っていたので熱収縮チューブ(10mmΦ)で色を
 合わせただけです。
 
1.変更前と変更後の写真
  4極プラグ-改-1
 ②三色10mmΦ熱収縮チューブ
 4極プラグと熱収縮チューブ

2.R-300DのAV-INの4極プラグの仕様
 av-in-4極プラグ

3.使用ケーブルと熱収縮チューブ

>RCAケーブル 3.5 RCA 変換 ケーブル AVケーブル 変換プラグ付き4極ミニプラグ 4極ミニプラグRCAステレオオーディオ ビデオ変換ケーブル22c オス3メス カーナビ ドラレコ バックカメラ テレビ カロッツェリアなど 映像 オーディオコード 赤 白 黄 3RCAオスプラグ
Amazon.co.jpへ
今すぐチェック
>熱収縮チューブ 絶縁チューブ 配線 熱燗セット-熱収縮管絶縁管防水高難燃性収縮ホース-7サイズ φ2mm~10mm 収縮率2:1-耐久性 電線の端末処理 データ線 高難燃性 (140PCS・収納ケース付き)
Amazon.co.jpへ
今すぐチェック

以上

ブログトップへ

◆先日STM32F103C8T6でLチカが出来たので、今回シリアル通信とI2C接続SSD1306に
 表示してみました。
 *STM32F103C8T6の環境設定については、下記ブログ内記事を参照して下さい。

 stm32-i2cl

1.STLinkV2 STM32 SSD1306 USB-Sirial との接続
 ①ディフォルトのピン配置
 stm32_pinout_02

 ②接続図
 stlink-stm32-oled

2.まずは、シリアル通信ですが、普通のSerial.begin(115200)で通信できませんでした。
 色々調べていて、ハードウェアシリアルで出来る事が分かりました。
 ①スケッチは、下記の通りです。
//HardwareSerial-test.ino
//STM32F103C8T6(Blue Pill) シリアル出力テスト

#include <HardwareSerial.h>
#define LED_BUILTIN PC13

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial1.begin(115200);
  delay(2000); 
  Serial1.println("Serial-1 Test");
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  Serial1.println("LED HIGH");
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  Serial1.println("LED LOW");
  delay(1000);
}
 ②実行画面
 com-8
 
3.続いてI2C接続のSSD1306に表示してみます。

今日は、ここまで

ブログトップへ



以上の内容はhttps://gijin77.blog.jp/archives/2024-04.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14