USB-TTL変換モジュール:CH340とCP2102の使い方
USB-TTL変換モジュールの役割、TX-RXのクロス接続、3.3 V/5 Vジャンパー、ドライバ、Pro Mini・ESP-01・ESP32-CAMへの書き込み方法、CH340とCP2102の違いを解説します。
USB-TTL変換モジュールは、パソコンのUSBポートを、マイコンが使うシリアル通信(UART)に変換する小さなボードです。Arduino Pro Mini、ESP-01、ESP32-CAMなど、USB端子のないボードにコードを書き込むとき、モジュールが出力するシリアルメッセージを読むとき、GPSやBluetoothモジュールをパソコンから直接設定するときに使います。実は、Arduino UnoとNanoにはどれもこの回路が搭載されています。変換モジュールは、その回路を独立した持ち運べるモジュールにしたものです。
このガイドでは、変換モジュールのピン、最もよくある間違いであるTX-RXの配線、ロジックレベルを3.3 Vか5 Vに切り替えるジャンパー、Windows・macOS・Linuxでのドライバのインストールを学びます。その後、DTRピンを使ってボタンを押さずにArduino Pro Miniへ書き込む方法、ESP-01とESP32-CAMへのコードの書き込み、変換モジュールを2つ目のシリアルモニタとして使う方法、広く使われる3種類のチップ、CH340・CP2102・FT232の違いを紹介します。

USB-TTL変換モジュールとは?何に使う?
パソコンとマイコンでは、通信の仕組みが異なります。USBは、パケット、アドレス、ドライバを使う複雑なプロトコルです。一方、マイコンのUARTが使う信号線は2本だけです。一方がデータを送信し(TX)、もう一方が受信します(RX)。各バイトは、あらかじめ決めた速度(ボー)で順番に送られるビットからなります。変換モジュールのチップは、パソコン上では仮想シリアルポートとして表示されます(WindowsではCOM3、macOSでは/dev/cu.usbserial...、Linuxでは/dev/ttyUSB0)。そのポートに書き込んだ各バイトはTXピンからUART信号として出力され、RXピンに届いた各バイトはパソコンに渡されます。名前に含まれるTTLは、信号が0 Vと5 V、または0 Vと3.3 Vの間で変化することを意味します。
- USBのないボードへの書き込み:Arduino Pro Mini、LilyPad、ESP-01、ESP32-CAM、ブートローダーを書き込んだ単体のATmega328Pチップなどに使います。
- シリアルログの読み取り:ボード自身のUSBが別の用途で使われている間、別のウィンドウでデバッグメッセージを確認します。
- モジュールとの直接通信:ESP-01へのATコマンドの送信、GPSモジュールのNMEAセンテンスの読み取り、Bluetoothモジュールの名前の変更などを行います。
- 故障したボードの救済:USBチップが壊れたUnoやNanoに、D0とD1ピンを通じて書き込みます。
- ほかの機器のコンソールへの接続:ルーター、3Dプリンターのボード、シングルボードコンピューターのシリアルコンソール用ピンに接続します。
USB-TTL変換モジュールのピン:GND、VCC、TXD、RXD、DTR、RTS
| ピン | 機能 | 補足 |
|---|---|---|
| GND | 共通グラウンド | 必ず接続 |
| 5V | USBからの5 V出力 | 通常は最大500 mA、パソコンのポートによる |
| 3V3 | 3.3 V出力 | チップまたは小型レギュレーターから供給され、電流に制限がある |
| TXD | データ出力(パソコンからボードへ) | 接続先ボードのRXピンに接続 |
| RXD | データ入力(ボードからパソコンへ) | 接続先ボードのTXピンに接続 |
| DTR | ポートを開くとLOWになる制御線 | Arduinoの自動リセットに使用 |
| RTS / CTS | フロー制御線 | RTSはESPボードの自動書き込み回路に使用し、CTSは多くのプロジェクトでは未接続 |
TX-RXのクロス接続
最もよくある間違いは、TX同士を接続することです。ルールは簡単です。一方の機器が話す線を、もう一方の機器が聞く線につなぎます。つまり、変換モジュールのTXDを接続先ボードのRXに、RXDを接続先のTXに接続します。混乱を避けるため、ラベルに方向を含めているボードもあります。Arduino Pro MiniにはRXI(RX入力)とTXO(TX出力)と表示されており、SparkFun形式のFTDIボードは、2枚をそのまま差し合わせると正しくクロス接続されるようにラベルが付いています。ラベルが信用できない場合は、TXとRXを一度入れ替えて試してください。TXとRXを逆にしても壊れることはなく、通信できないだけです。
| 変換モジュール | 接続先ボード | 説明 |
|---|---|---|
| GND | GND | 共通グラウンド、接続必須 |
| TXD | RX(RXI、U0R) | クロス接続:送信側から受信側へ |
| RXD | TX(TXO、U0T) | クロス接続:受信側から送信側へ |
| 5Vまたは3V3 | VCC | 接続先ボードにほかの電源がない場合のみ |
| DTR | DTR / GRN / RST | 自動リセットが必要な場合のみ |
3.3 V / 5 Vジャンパー:ロジックレベルの選び方
Arduino Uno、Nano、5 V版Pro Miniは5 Vロジックを使い、ESP8266、ESP32、Raspberry Pi Picoは3.3 Vロジックを使います。ESPのRXピンに5 Vの信号を入れると、入力保護ダイオードに負担がかかり、時間とともにピンが劣化するおそれがあります。そのため、多くのCH340Gモジュールには3ピンのジャンパーがあります。これでチップの電源電圧を選ぶと、TXD出力のレベルもその電圧に追従します。CP2102は常に3.3 Vロジックで動作しますが、入力は5 Vトレラントなので、3.3 Vと5 Vのどちらのボードとも通信できます。5 Vで動作するATmega328Pは、3 Vを超える入力をHIGHとして認識するためです。FT232RLモジュールにも、チップのI/Oレベル(VCCIO)を選ぶジャンパーがよく搭載されています。
| 接続先ボード | ジャンパーまたはロジックレベル | 電源 |
|---|---|---|
| Arduino Pro Mini 5 V / 16 MHz | 5 V | 変換モジュールの5Vピンから |
| Arduino Pro Mini 3.3 V / 8 MHz | 3.3 V | 3V3ピンまたは専用電源から |
| ESP-01 / ESP-01S | 3.3 V | 別の3.3 Vレギュレーター(300 mA以上) |
| ESP32-CAM | 3.3 V | 変換モジュールの5Vピンからボードの5Vピンへ |
| Raspberry Pi Pico(UART0) | 3.3 V | Picoは自身のUSBから給電し、GND、TX、RXのみ接続 |
変換モジュールにジャンパーがなく、5 VのTX信号を3.3 V入力に接続する必要がある場合は、簡単な分圧回路が使えます。TX線と接続先のRXの間に1 kΩ、接続先のRXとGNDの間に2 kΩを入れると、5 Vが約3.3 Vまで下がります。詳しい計算は分圧回路の記事にあります。逆方向、つまり3.3 VのTXから5 V入力への接続は、通常はそのままで問題ありません。
CH340・CP2102・FT232の比較
| 特徴 | CH340(G / C) | CP2102 | FT232RL |
|---|---|---|---|
| メーカー | WCH | Silicon Labs | FTDI |
| 最大ボーレート | 2 Mbps | 1 Mbps(CP2102N:3 Mbps) | 3 Mbps |
| 水晶振動子 | CH340Gは外付けの12 MHz水晶振動子が必要、CH340Cは内蔵 | 内蔵 | 内蔵 |
| 3.3 V出力 | モジュールによるが、多くは供給能力が低い | あり、チップ自身の消費分を含めて約100 mA | あり、最大50 mA |
| ロジックレベル | 電源に応じて5 Vまたは3.3 V | 3.3 V、入力は5 Vトレラント | VCCIOに応じて5 Vまたは3.3 V |
| DTRとRTS | あり | あり | あり、すべてのモデム制御線を搭載 |
| ドライバ | Windowsでは通常自動、macOSとLinuxでは内蔵 | Windowsでは通常自動、macOSとLinuxでは内蔵 | Windowsでは自動、macOSとLinuxでは内蔵 |
| 価格 | 最も安価 | 中程度 | 最も高価 |
| 注意点 | モジュールの3V3ピンに負荷をかけすぎない | メーカーによってモジュールのピン順序が異なる | 偽造チップが多く、公式ドライバが一部を拒否する場合がある |
日常的な趣味の工作では、CH340とCP2102に実用上ほとんど差はありません。どちらも115200ボーで問題なく動作し、Arduino IDEが使うすべての速度に余裕で対応します。CP2102は発振器を内蔵し、3.3 V出力の供給能力が高いため、小型の3.3 Vボードへの給電では少し有利です。一方、CH340は最も安価で広く普及しています。FT232RLは詳細な設定ができる信頼性の高いチップですが、市場にある安価なFT232モジュールの多くには偽造チップが搭載されています。新しいESP32ボードで見かけるCH9102とCH343は、同じ系列のより高速なチップで、使い方はまったく同じです。

ドライバのインストール:Windows、macOS、Linux
| OS | 必要な操作 | ポート名 |
|---|---|---|
| Windows 10 / 11 | 通常はWindows Updateが自動でドライバをインストールする。されない場合は、CH340用のCH341SER、またはCP2102用のCP210x VCPドライバをインストールする | デバイスマネージャー>ポート(COMとLPT)の下にCOM3、COM4など |
| macOS | 現行バージョンにはCH340、CP2102、FT232のドライバが内蔵されているため、古いメーカー製ドライバを重ねてインストールしない | /dev/cu.usbserial-...、メーカー製ドライバの場合は/dev/cu.wchusbserial...または/dev/cu.SLAB_USBtoUART |
| Linux | ドライバはカーネルに組み込み済み。ユーザーをdialoutグループに追加し、UbuntuでCH340のポートが消える場合はbrlttyパッケージを削除する | /dev/ttyUSB0 |
Windowsで変換モジュールを接続した後、デバイスマネージャーのほかのデバイスに黄色い感嘆符付きのUSB2.0-Serialが表示される場合は、CH340のドライバがありません。CP2102 USB to UART Bridge Controllerと表示される場合は、CP2102のドライバがありません。ドライバをインストールしたら、変換モジュールを抜き差しし、Arduino IDEのツール>ポートを確認してください。そのとき新しく表示されたポートが変換モジュールのポートです。何も表示されない場合は、まずケーブルを交換してください。充電専用ケーブルにはデータ線がありません。ポート、ドライバ、権限に関する問題の一覧は、Arduinoに書き込めないときにあります。
ループバックテスト:変換モジュールは動いている?
- 変換モジュールからすべての配線を外し、パソコンに接続します。
- ジャンパーワイヤーで、変換モジュール自身のTXDピンとRXDピンをつなぎます。
- Arduino IDEで変換モジュールのポートを選び、シリアルモニタを開きます。このテストでは速度は問いません。
- 何か入力して送信します。その文字列がすぐに戻ってくれば、チップ、ドライバ、ケーブルは正常です。問題は配線か接続先ボードにあります。
- 何も戻ってこない場合は、ポート、ドライバ、ケーブルを確認し、変換モジュールのTXとRXのLEDが点滅するか調べてください。
Arduino Pro Miniへの書き込み:DTRで自動リセット

Arduinoにコードを書き込む際は、最初にボードがリセットされます。リセット後の約1秒間に動くブートローダーが、シリアルポートから新しいプログラムが届いているか確認します。UnoとNanoはこのリセットを自動で行います。USBチップのDTR線とプロセッサーのRESETピンの間に、100 nFのコンデンサがあるためです。IDEがポートを開いた瞬間、DTRがHIGHからLOWに下がり、コンデンサがこの急な変化を短いLOWパルスとしてRESETピンに伝えることで、ボードがリセットされます。Pro Miniにも同じコンデンサがボード上にあり、ヘッダーのGRN(またはDTR)ピンにつながっています。変換モジュールのDTRピンをそこにつなげば、Unoと同じように簡単に書き込めます。
| USB-TTL変換モジュール | Pro Mini | 補足 |
|---|---|---|
| GND | GND(またはBLK) | 共通グラウンド |
| 5Vまたは3V3 | VCC | 5 V / 16 MHz版は5V、3.3 V / 8 MHz版は3V3 |
| TXD | RXI | クロス接続 |
| RXD | TXO | クロス接続 |
| DTR | GRN(DTR) | 自動リセット用。接続しない場合は手動リセットが必要 |
- 裏面や水晶振動子の表示で、ボードの種類を確認します。16 MHzの水晶振動子を搭載したものは5 V版、8 MHzのものは3.3 V版です。
- ボードの種類に合わせて変換モジュールのジャンパーを設定し、表に従って配線します。
- Arduino IDEでツール>ボード>Arduino AVR Boards>Arduino Pro or Pro Miniを選びます。
- ツール>プロセッサで、ボードに合うATmega328P (5V, 16 MHz)またはATmega328P (3.3V, 8 MHz)を選びます。
- 変換モジュールのポートを選び、次のテスト用スケッチを書き込みます。DTRを接続していれば、ボタンを押す必要はありません。
1// Pro Mini + USB-TTL testi: LED yanıp söner, gönderdiğin satır geri gelir
2// Pro Mini + USB-TTL test: the LED blinks and every line you send comes back
3const int LED = 13; // Pro Mini'nin dahili LED'i / Pro Mini onboard LED
4unsigned long sonDegisim = 0;
5bool ledAcik = false;
6
7void setup() {
8 Serial.begin(9600);
9 pinMode(LED, OUTPUT);
10 Serial.println(F("Pro Mini hazir / ready"));
11 Serial.print(F("Derlenen saat / compiled clock: "));
12 Serial.print(F_CPU / 1000000UL); // 16 = 5 V sürüm, 8 = 3,3 V sürüm / 16 = 5 V board, 8 = 3.3 V board
13 Serial.println(F(" MHz"));
14}
15
16void loop() {
17 if (millis() - sonDegisim >= 500) { // yarım saniyede bir / every half second
18 sonDegisim = millis();
19 ledAcik = !ledAcik;
20 digitalWrite(LED, ledAcik);
21 }
22 if (Serial.available()) {
23 String satir = Serial.readStringUntil('\n'); // satır sonuna kadar oku / read up to the line ending
24 satir.trim();
25 Serial.print(F("Geldi / received: "));
26 Serial.println(satir);
27 }
28}書き込みが終わると、ボード上のLEDが0.5秒ごとに点滅します。シリアルモニタを9600ボーで開き、LFのみを選択して何か入力すると、その文字列が戻ってきます。コード内のF_CPUの行は、小さいけれど重要な落とし穴を見つけるためのものです。Pro Miniの両方の版のブートローダーは57600ボーで書き込むため、「プロセッサ」の選択が間違っていてもコードは書き込めます。しかし、8 MHzのボードに16 MHzを選ぶと、すべてが半分の速度で動き、LEDは1秒ごとに切り替わり、シリアルモニタには文字化けした表示しか出ません。変換モジュールにDTRピンがない場合は、手動でタイミングを合わせられます。IDEがコンパイルを終え、出力にUploading...(書き込み中)が表示された瞬間に、Pro Miniのリセットボタンを押して離してください。
ESP-01とESP32-CAMへのコードの書き込み
ESP8266とESP32のブートローダーはチップに内蔵されており、起動時にGPIO 0ピンを確認します。GPIO 0がLOWならダウンロードモードに入り、コードを待ちます。HIGHならフラッシュ内のプログラムを実行します。開発ボードには、2つのトランジスタを介してDTRとRTSをENとGPIO 0に接続する自動書き込み回路があります。esptoolがこれらの線を順番に切り替え、自動でダウンロードモードに移行させます。単純なUSB-TTL変換モジュールにはこの回路がないため、手動で行います。GPIO 0をGNDにつなぎ、ボードをリセットしてコードを書き込み、その後GPIO 0の接続を外してもう一度リセットします。
| USB-TTL変換モジュール(ジャンパーは3.3 V) | ESP-01 | ESP32-CAM |
|---|---|---|
| GND | GND | GND |
| TXD | RX | U0R(GPIO 3) |
| RXD | TX | U0T(GPIO 1) |
| 電源 | 別の3.3 VレギュレーターからVCCとEN(CH_PD)へ | 変換モジュールの5Vピンからボードの5Vピンへ |
| 書き込みモード | GPIO 0をGNDにつなぎ、RSTを一瞬GNDに触れさせる | IO0をGNDにつなぎ、RSTボタンを押す |
| Arduino IDEのボード設定 | Generic ESP8266 Module | AI Thinker ESP32-CAM |
ESP-01はWi-Fi接続時に300 mAを超えるピーク電流を消費します。変換モジュールの3V3ピンでは供給できず、モジュールがリセットを繰り返します。そのため、5Vピンから給電するAMS1117-3.3レギュレーターを使ってください。ESP-01の配線とATコマンドの詳細はESP-01モジュールに、ESP32-CAMへの書き込み手順はESP32-CAMの使い方にあります。ESP32-CAMにPIRを追加し、写真をスマートフォンに送るプロジェクトは、ESP32-CAMの写真をTelegramに送信をご覧ください。
シリアルログを読む:USB-TTL変換モジュールを2つ目のシリアルポートに
あまり知られていないものの、とても便利な使い方が、ボードに2つ目のシリアルモニタを追加することです。ボード自身のUSBポートがPythonプログラム、シリアルプロッタ、別の機器と通信している間、別のポートで詳しいデバッグメッセージを確認できます。ESP32には3つのハードウェアUARTがあります。次のコードではUART2をGPIO 16と17に割り当て、1秒ごとにログを1行、変換モジュールへ送ります。変換モジュールからrを送信するとカウンターがリセットされ、双方向に通信できていることを確認できます。
1// ESP32: USB portu Serial'de kalır, ikinci log kanalı USB-TTL'ye gider
2// ESP32: the USB port stays on Serial, a second log channel goes to the USB-TTL
3#define LOG_RX 16 // USB-TTL TXD buraya / USB-TTL TXD goes here
4#define LOG_TX 17 // USB-TTL RXD buraya / USB-TTL RXD goes here
5
6unsigned long sayac = 0;
7
8void setup() {
9 Serial.begin(115200); // kartın kendi USB portu / the board's own USB port
10 Serial2.begin(115200, SERIAL_8N1, LOG_RX, LOG_TX); // UART2: USB-TTL'ye / UART2: to the USB-TTL
11 Serial.println("Ana port / main port");
12 Serial2.println("Log portu hazir / log port ready");
13}
14
15void loop() {
16 sayac++;
17 int deger = analogRead(34); // GPIO 34'e bağlı bir sensör / a sensor on GPIO 34
18 Serial2.printf("[%lu ms] #%lu ADC=%d\n", millis(), sayac, deger); // ayrıntılı log / detailed log
19 if (sayac % 10 == 0) Serial.println(deger); // ana portta yalnız özet / only a summary on the main port
20
21 while (Serial2.available()) { // USB-TTL'den gelen komut / command from the USB-TTL
22 char c = Serial2.read();
23 if (c == 'r') {
24 Serial2.println("Sayac sifirlandi / counter reset");
25 sayac = 0;
26 }
27 }
28 delay(1000);
29}配線は、変換モジュールのジャンパーを3.3 Vに設定し、TXDをGPIO 16へ、RXDをGPIO 17へ、GNDをGNDへ接続します。その後、Arduino IDEをもう1つ開く代わりに、PuTTY、macOSやLinuxのscreen、またはPythonで自作した小さな読み取りプログラムを使えます。Python側については、ArduinoとPythonのシリアル通信を参照してください。Raspberry Pi Picoでは、同じことが数行のMicroPythonでできます。UART0はGP0(TX)とGP1(RX)にあり、コードはログを送信すると同時に、受信したバイトをそのまま返します。
1# Raspberry Pi Pico (MicroPython): UART0 üzerinden USB-TTL'ye log ve yankı
2# Raspberry Pi Pico (MicroPython): log and echo to a USB-TTL over UART0
3from machine import UART, Pin
4import time
5
6uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1)) # GP0 = TX, GP1 = RX
7led = Pin(25, Pin.OUT) # Pico dahili LED / Pico onboard LED (Pico W: "LED")
8sayac = 0
9son = time.ticks_ms()
10
11uart.write("Pico UART0 hazir / ready\r\n")
12while True:
13 if time.ticks_diff(time.ticks_ms(), son) >= 1000: # saniyede bir log / one log line per second
14 son = time.ticks_ms()
15 sayac += 1
16 led.toggle()
17 uart.write("[%d ms] #%d\r\n" % (time.ticks_ms(), sayac))
18 if uart.any(): # USB-TTL'den gelen baytlar / bytes from the USB-TTL
19 veri = uart.read()
20 uart.write(b"Geldi / received: " + veri)
21 time.sleep_ms(10)同じ方法で、Arduinoを間に挟まずにモジュールの出力を読むこともできます。NEO-6M GPSモジュールを変換モジュールに直接接続して9600ボーで開くと、NMEAセンテンスが次々に届きます。HC-05 BluetoothモジュールをATモードで38400ボーで開けば、名前とPINを変更できます。シリアルモニタの改行コードとボーレートの設定は、Arduinoのシリアルモニタで詳しく解説しています。
よくある問題と対処法
| 症状 | 考えられる原因 | 対処法 |
|---|---|---|
| 変換モジュールがポート一覧に表示されない | 充電専用ケーブル、ドライバの不足、Linuxのbrltty | データ通信用ケーブルを使い、ドライバをインストールし、brlttyを削除する |
| avrdude: stk500_getsync(): not in sync: resp=0x00(同期できない) | TX-RXがストレート接続、DTRが未接続、またはボードの選択が違う | TXをRXI、RXをTXOにつなぐ。DTRをGRNにつなぐか、Uploading...が表示されたらリセットを押す |
| コードは書き込めたがシリアルモニタが文字化けする | ボーレートの不一致、またはPro MiniのMHzの選択が違う | シリアルモニタをコード内の速度に設定し、「プロセッサ」メニューで実際のボードに合う種類を選ぶ |
| Failed to connect to ESP8266 / ESP32(接続できない) | 起動時にGPIO 0がLOWになっていない、またはTX-RXが逆 | GPIO 0をGNDにつないでからリセットし、TX-RXを確認する |
| ESPが再起動を繰り返す | 変換モジュールの3.3 V出力がピーク電流に対応できない | 別の3.3 Vレギュレーターと100〜470 µFのコンデンサを使う |
| シリアルモニタを開くたびにPro Miniがリセットされる | DTRが接続されており、ポートを開いたときのリセットは正常な動作 | リセットさせたくない場合は、書き込み後にDTRの配線を外す |
| 接続するとパソコンがUSBポートを停止する | 短絡、または2つの電源の競合 | 配線を外す。接続先に専用電源がある場合はVCCを接続しない |
USB-TTL変換モジュールは、引き出しに入る工具の中でも特に小さく、使用頻度の高いものの1つです。USBのないボードに書き込み、パソコンとモジュールを通信させ、プロジェクトの内部で起きていることを1行ずつ表示できます。TXとRXをクロス接続し、正しいロジックレベルを選び、GNDを共通にすることを覚えておけば、ほとんどの問題を避けられます。BlueGraysアプリには、2台のArduino間のシリアル通信、Bluetoothによるスマートフォンからの制御、ESP32のWi-Fiプロジェクトがあり、手順ごとの配線図とそのまま使えるコードを用意しています。
よくある質問
USB-TTL変換モジュールは何に使いますか?
パソコンのUSBポートを、マイコンが使うUARTシリアル通信に変換します。Arduino Pro Mini、ESP-01、ESP32-CAMなど、USBのないボードにコードを書き込んだり、シリアルメッセージを読んだり、GPSやBluetoothなどのモジュールをパソコンから直接設定したりできます。
CH340とCP2102はどちらがよいですか?
趣味のプロジェクトでは、どちらも115200ボーで問題なく動作し、実用上の差はほとんど感じません。CP2102は発振器を内蔵し、3.3 V出力の供給能力が高く、入力が5 Vトレラントです。CH340はより安価で広く普及しています。現行のmacOSとLinuxには、両方のドライバが内蔵されています。
USB-TTL変換モジュールのTXとRXはどう接続しますか?
クロス接続にします。変換モジュールのTXDを接続先ボードのRXに、RXDを接続先のTXにつなぎます。GNDは必ず共通にしてください。信号線を逆にしても壊れませんが、何も受信できません。判断できない場合は、入れ替えてもう一度試してください。
USB-TTL変換モジュールでArduino Pro Miniに書き込むには?
GNDをGNDに、VCCをVCCに、TXDをRXIに、RXDをTXOに、DTRをGRNピンに接続します。Arduino IDEでArduino Pro or Pro Miniを選び、ボードに合うATmega328P (5V, 16 MHz)または(3.3V, 8 MHz)を選択して、通常どおり書き込みます。DTRがない場合は、Uploading...が表示された瞬間にリセットボタンを押してください。
USB-TTL変換モジュールは3.3 Vと5 Vのどちらにすべきですか?
ロジックレベルは接続先ボードに合わせます。Uno、Nano、5 V版Pro Miniには5 V、ESP8266、ESP32、Raspberry Pi Picoには3.3 Vです。ジャンパー付きモジュールでは、ジャンパーで選びます。CP2102の出力は常に3.3 Vで、入力は5 Vに対応するため、どちらのボードでも使えます。
Arduino UnoをUSB-TTL変換モジュールとして使えますか?
はい。UnoのRESETピンをGNDにつなぐか、空のスケッチを書き込むと、D0とD1を通じてUSBチップを直接使えます。この場合はストレート接続で、接続先のTXをD1に、RXをD0につなぎます。Unoは5 Vロジックを使うため、3.3 VボードではD0線に分圧回路を追加してください。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
HC-SR04で距離を測定(シリアルモニタ表示)
HC-SR04センサーは、コウモリが暗闇で道を見つけるのと同じ仕組みで動作します。人には聞こえない音を出し、その反響を捉えて前方の物体までの距離を測ります。Arduinoは0.5秒ごとに距離をセンチメートル単位でコンピューターの画面に表示し、3〜100センチメートルの測定値を示します。駐車センサーや障害物を避けるロボットなどのプロジェクトの基礎になります。

DHT11で温度と湿度を測定
部屋の温度は何度で、空気は湿っているでしょうか、それとも乾燥しているでしょうか?DHT11センサーが温度と湿度を測定し、Arduinoが2行のLCDディスプレイに値を表示して、数秒ごとに更新します。センサーに異常があればエラーメッセージが表示されます。自分だけの小さな気象観測装置を作る第一歩です。

ESP32でLEDを点滅
ESP32のGPIO出力の基本を学びます。デジタルピンからLEDを点灯・消灯させて、点滅させます。Arduino UNOの定番のLED点滅プロジェクトのESP32版です。Arduino環境で使う基本的な点滅コマンドは同じですが、ESP32のピン配置と3.3 VのGPIO電圧レベルはArduino UNOとは異なります。

2台のArduinoで一方向通信
2台のArduinoを1本のワイヤーで通信させます。一方のボタンを押すともう一方のLEDが点灯し、もう一度押すと消灯します。送信側のボードがボタンの押下を短いメッセージで伝え、受信側のボードはそのメッセージを受け取るとLEDの点灯と消灯を切り替えます。機器同士が情報を伝える仕組みを、最もシンプルな形で確かめられます。

2台のArduinoで双方向通信
2台のArduinoをケーブルでつないで通信します。片方のボタンを押すともう片方のライトが点灯し、もう一度押すと消灯します。両方のボードで同じプログラムを動かすので、どちらからでもメッセージを送受信できます。ボード同士でメッセージをやり取りする仕組みを、シンプルな構成で学べます。

BluetoothでスマートフォンからLEDを操作
スマートフォンで部屋の照明をつけたり消したりするための、小さな練習です。Bluetoothモジュールがスマートフォンから送られた文字をArduinoに伝えます。ある文字で赤いLEDが、別の文字で緑のLEDが点灯し、同じ文字を小文字で送ると消灯します。無線操作の仕組みを、ごくシンプルな形で学べます。

ESP32 Wi-Fi STA接続(LCDディスプレイ付き)
このプロジェクトでは、ESP32をステーション(STA)モードで家庭のWi-Fiネットワークに接続し、安全で障害に強い接続を実現します。SSIDとパスワードを別のsecrets.hファイルに保存してGitへの流出を防ぎ、自動再接続の仕組みを実装します。RSSIによる信号強度とIPアドレスはI2C LCDディスプレイに表示します。内蔵LEDは状態表示に使います。実運用を想定した接続管理の仕組みです。

ESP32 OTA更新:無線でファームウェアを書き込み(LCD付き)
このプロジェクトでは、USBケーブルを使わず、Wi-Fi経由でESP32に新しいファームウェアを書き込む方法を学びます。ArduinoOTAライブラリを使うと、ESP32がネットワーク上で検出され、Arduino IDEの「ネットワークポート」タブにbluegrays-otaとして自動表示されます。初回はUSBで書き込み、その後の更新はすべて無線で行えます。設置済みのデバイスにとって非常に重要な機能です。I2C LCDディスプレイには、Wi-Fiの状態、IPアドレス、ホスト名、OTA書き込みの進捗率、エラーメッセージをトルコ語と英語で表示します。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

