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?

CH340Kのシリアル変換自作

Posted at

格安シリアル変換を作ろう!!!

秋月で売ってるやつを自作すると100円ほど安くなる気がしたので、作ります。
そこまで格安ではない。
変換ICはWCHのCH340Kを使います。
https://akizukidenshi.com/catalog/g/g116306/
環境はwin11、arduino IDE2.3.4、arduino UNO R4です。

設計

秋月に売っているものをまるパクリするので設計もクソもありません。
書いてあるものを参照して、適当に作ります。(適当なのでヒューズは搭載しません(ダメ))
https://akizukidenshi.com/catalog/g/g114745/

上記のモジュールのICと今回使うICは別物なので、細かい機能が異なります。
https://akizukidenshi.com/goodsaffix/ch340.pdf に詳細が書いてあります。

部品

IC
CH340E
コンデンサ
10μF,0.1μF
抵抗
5.1kΩ,4.7kΩ,470Ω
その他
typeCレセプタクル、LED
基板
ユニバーサル基板(18*24)、sop変換基板

ユニバーサル基板はアマゾンで、それ以外は秋月で購入します。

合計価格は425.3円でした。
秋月で同型のICを使ったしいえる変換モジュールは550円なので、124.7円安くなりました。

制作

まずは秋月の↓を参考にして実装します。
https://akizukidenshi.com/goodsaffix/AE-CH340E-TYPEC.pdf
スクリーンショット 2025-02-21 161620.png

↓ 制作したもの
PXL_20250219_040111165.MP.jpg

プログラムは caa45040 さんの記事を参考にします。
https://qiita.com/caa45040/items/8a7fcf4b4755763b49d8
元記事はwin10でしたが、win11でも動作しました。

検証

書き込みができたら実際に通信を行ってみます。
制作したモジュールのRXをTX、TXをRXに接続します。
そしてUSBでArduinoとモジュールをPCに接続します

シリアル通信
void setup(){
  
  Serial.begin(9600);  // シリアル通信(USB側)の開始(ボーレート9600bps)
  Serial1.begin(9600); // シリアル通信(UART側)の開始(ボーレート9600bps)
  pinMode(13, OUTPUT);
  
}

void loop(){

  while(Serial1.available() > 0){   // シリアル受信(UART側)の検知
    int val = Serial1.read();       // データを読み取る
    Serial1.write(val);             // シリアル送信(UART側)
    Serial.write(val);              // シリアル送信(USB側)
    if(val == '1'){                 // "1"ならLEDを点灯,"0"ならLEDを消灯
      digitalWrite(13, HIGH);
    } else if(val == '0'){
      digitalWrite(13, LOW);
    }
  }

  while(Serial.available() > 0){    // シリアル受信(UART側)の検知
    int val = Serial.read();        // データを読み取る
    Serial1.write(val);             // シリアル送信(UART側)
    Serial.write(val);              // シリアル送信(USB側)
    if(val == '1'){                 // "1"ならLEDを点灯,"0"ならLEDを消灯
      digitalWrite(13, HIGH);
    } else if(val == '0'){
      digitalWrite(13, LOW);
    }
  }
}

UNO R4(RA4M1)と、Leonardo(ATmega 32u4)はUARTシリアルとUSBシリアルが別であるため上のプログラムで使えますが、UNO R3(ATmega 328p)はUARTをUSBにシリアル変換して使っているため、上のプログラムでは使えません。別途プログラムをネットから拾ってください。

使用するボードに応じて"13"を変更してください。

arduino IDEを2タブ開いて、のCOMポートのシリアルモニタを開きます。片方にシリアルを送信すると、両方にシリアルが帰ってきます。
1を送信すると、LED(GPIO13)が点灯し、0を送信すると消灯します。

余談ですが、Serial.writeでは文字列がそのまま送信され、Serial.printではASCIIなどで送信されるようです。

上手く動かなかったら気軽にコメントください(解決できるとは言っていない)
お読みいただきありがとうございました。

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?