部品 · 読了まで13分

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の違いを紹介します。

CP2102 USB-TTL変換モジュール
CP2102 USB-TTL変換モジュールです。一端にUSB、もう一端にGND、TXD、RXD、DTR、電源ピンがあります。Pro Mini、ESP-01、ESP32-CAMへの書き込みに便利です。

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共通グラウンド必ず接続
5VUSBからの5 V出力通常は最大500 mA、パソコンのポートによる
3V33.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を逆にしても壊れることはなく、通信できないだけです。

変換モジュール接続先ボード説明
GNDGND共通グラウンド、接続必須
TXDRX(RXI、U0R)クロス接続:送信側から受信側へ
RXDTX(TXO、U0T)クロス接続:受信側から送信側へ
5Vまたは3V3VCC接続先ボードにほかの電源がない場合のみ
DTRDTR / GRN / RST自動リセットが必要な場合のみ
接続先ボードにすでに専用のACアダプターや電池から給電している場合は、変換モジュールのVCCピンを接続しないでください。GND、TXD、RXDだけで十分です。2つの独立した電源の出力をつなぐと、一方からもう一方へ電流が流れ込み、変換モジュールやパソコンのUSBポートを壊すおそれがあります。ただし、GNDは必ず接続してください。共通グラウンドがなければ、信号レベルの基準が定まりません。

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 MHz5 V変換モジュールの5Vピンから
Arduino Pro Mini 3.3 V / 8 MHz3.3 V3V3ピンまたは専用電源から
ESP-01 / ESP-01S3.3 V別の3.3 Vレギュレーター(300 mA以上)
ESP32-CAM3.3 V変換モジュールの5Vピンからボードの5Vピンへ
Raspberry Pi Pico(UART0)3.3 VPicoは自身の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)CP2102FT232RL
メーカーWCHSilicon LabsFTDI
最大ボーレート2 Mbps1 Mbps(CP2102N:3 Mbps)3 Mbps
水晶振動子CH340Gは外付けの12 MHz水晶振動子が必要、CH340Cは内蔵内蔵内蔵
3.3 V出力モジュールによるが、多くは供給能力が低いあり、チップ自身の消費分を含めて約100 mAあり、最大50 mA
ロジックレベル電源に応じて5 Vまたは3.3 V3.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は、同じ系列のより高速なチップで、使い方はまったく同じです。

CH340 USB-TTL変換モジュール
CH340 USB-TTL変換モジュールは、最も手頃な選択肢です。ジャンパーで5 Vか3.3 Vのロジックレベルを選びます。

ドライバのインストール: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に書き込めないときにあります。

ループバックテスト:変換モジュールは動いている?

  1. 変換モジュールからすべての配線を外し、パソコンに接続します。
  2. ジャンパーワイヤーで、変換モジュール自身のTXDピンとRXDピンをつなぎます。
  3. Arduino IDEで変換モジュールのポートを選び、シリアルモニタを開きます。このテストでは速度は問いません。
  4. 何か入力して送信します。その文字列がすぐに戻ってくれば、チップ、ドライバ、ケーブルは正常です。問題は配線か接続先ボードにあります。
  5. 何も戻ってこない場合は、ポート、ドライバ、ケーブルを確認し、変換モジュールのTXとRXのLEDが点滅するか調べてください。

Arduino Pro Miniへの書き込み:DTRで自動リセット

Arduino Pro Miniボード
Arduino Pro MiniにはUSB端子がありません。短辺側のBLK、GND、VCC、RXI、TXO、GRNという6ピンのヘッダーは、USB-TTL変換モジュール用です。

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補足
GNDGND(またはBLK)共通グラウンド
5Vまたは3V3VCC5 V / 16 MHz版は5V、3.3 V / 8 MHz版は3V3
TXDRXIクロス接続
RXDTXOクロス接続
DTRGRN(DTR)自動リセット用。接続しない場合は手動リセットが必要
  1. 裏面や水晶振動子の表示で、ボードの種類を確認します。16 MHzの水晶振動子を搭載したものは5 V版、8 MHzのものは3.3 V版です。
  2. ボードの種類に合わせて変換モジュールのジャンパーを設定し、表に従って配線します。
  3. Arduino IDEでツール>ボード>Arduino AVR Boards>Arduino Pro or Pro Miniを選びます。
  4. ツール>プロセッサで、ボードに合うATmega328P (5V, 16 MHz)またはATmega328P (3.3V, 8 MHz)を選びます。
  5. 変換モジュールのポートを選び、次のテスト用スケッチを書き込みます。DTRを接続していれば、ボタンを押す必要はありません。
C++ (Arduino IDE)
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-01ESP32-CAM
GNDGNDGND
TXDRXU0R(GPIO 3)
RXDTXU0T(GPIO 1)
電源別の3.3 VレギュレーターからVCCとEN(CH_PD)へ変換モジュールの5Vピンからボードの5Vピンへ
書き込みモードGPIO 0をGNDにつなぎ、RSTを一瞬GNDに触れさせるIO0をGNDにつなぎ、RSTボタンを押す
Arduino IDEのボード設定Generic ESP8266 ModuleAI 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に送信をご覧ください。

ESP8266は、74880ボーという特殊な速度で起動メッセージを送信します。シリアルモニタをその速度に設定すると、モジュールがダウンロードモード(boot mode:(1,x))で起動したのか、通常モード(boot mode:(3,x))で起動したのかを確認できます。ESP32の起動メッセージは115200ボーです。waiting for downloadという行は、GPIO 0がまだGNDにつながっていることを意味します。

シリアルログを読む:USB-TTL変換モジュールを2つ目のシリアルポートに

あまり知られていないものの、とても便利な使い方が、ボードに2つ目のシリアルモニタを追加することです。ボード自身のUSBポートがPythonプログラム、シリアルプロッタ、別の機器と通信している間、別のポートで詳しいデバッグメッセージを確認できます。ESP32には3つのハードウェアUARTがあります。次のコードではUART2をGPIO 16と17に割り当て、1秒ごとにログを1行、変換モジュールへ送ります。変換モジュールからrを送信するとカウンターがリセットされ、双方向に通信できていることを確認できます。

C++ (Arduino IDE)
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)にあり、コードはログを送信すると同時に、受信したバイトをそのまま返します。

MicroPython
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を接続しない
変換モジュールがなければ、Arduino Unoを一時的な代用品にできます。UnoのRESETピンをGNDにつなぐか、空のスケッチを書き込んでください。この場合はクロス接続ではなく、ストレート接続にします。接続先のTXをUnoのD1 (TX)に、RXをUnoのD0 (RX)につなぎます。データが通るのはUnoのプロセッサーではなく、USBチップだからです。Unoは5 Vロジックで動作するため、3.3 Vボードの場合はD0線に分圧回路を入れるのを忘れないでください。

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で距離を測定(シリアルモニタ表示)
#27初級

HC-SR04で距離を測定(シリアルモニタ表示)

HC-SR04センサーは、コウモリが暗闇で道を見つけるのと同じ仕組みで動作します。人には聞こえない音を出し、その反響を捉えて前方の物体までの距離を測ります。Arduinoは0.5秒ごとに距離をセンチメートル単位でコンピューターの画面に表示し、3〜100センチメートルの測定値を示します。駐車センサーや障害物を避けるロボットなどのプロジェクトの基礎になります。

4.6(46)
71
DHT11で温度と湿度を測定
#55中級

DHT11で温度と湿度を測定

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

4.7(47)
73
ESP32でLEDを点滅
#103初級

ESP32でLEDを点滅

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

4.7(37)
99
2台のArduinoで一方向通信
#57中級
プレミアム

2台のArduinoで一方向通信

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

4.4(37)
50
2台のArduinoで双方向通信
#58中級
プレミアム

2台のArduinoで双方向通信

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

4.5(20)
26
BluetoothでスマートフォンからLEDを操作
#34初級
プレミアム

BluetoothでスマートフォンからLEDを操作

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

4.8(68)
89
ESP32 Wi-Fi STA接続(LCDディスプレイ付き)
#127上級

ESP32 Wi-Fi STA接続(LCDディスプレイ付き)

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

4.4(21)
34
ESP32 OTA更新:無線でファームウェアを書き込み(LCD付き)
#132上級
プレミアム

ESP32 OTA更新:無線でファームウェアを書き込み(LCD付き)

このプロジェクトでは、USBケーブルを使わず、Wi-Fi経由でESP32に新しいファームウェアを書き込む方法を学びます。ArduinoOTAライブラリを使うと、ESP32がネットワーク上で検出され、Arduino IDEの「ネットワークポート」タブにbluegrays-otaとして自動表示されます。初回はUSBで書き込み、その後の更新はすべて無線で行えます。設置済みのデバイスにとって非常に重要な機能です。I2C LCDディスプレイには、Wi-Fiの状態、IPアドレス、ホスト名、OTA書き込みの進捗率、エラーメッセージをトルコ語と英語で表示します。

4.6(14)
22