数年ぶり(?)にESP8266の書き込みを行うことになり、Ubuntu LinuxにArduino IDEのセットアップを行うところから「試行錯誤」したメモ。
どうやるのか完全に忘れ去っているので、Google Gemini AIに質問しまくって、ほぼ1時間ほど掛かってシリアル出力とLEDフラッシュのテストプログラムの書き込みを完了した。
検証環境
OSは
・Ubuntu 22.04LTS
・WeMos X-8266
・WeMos D1 mini
Arduino IDEのセットアップ(インストール)
最近はdebパッケージやzipファイルの展開をする必要もなく、ダウンロードしたAppImageファイルを実行するだけなんですね。
Arduino IDEは公式Webから最新版の次のものをダウンロードした。
Arduino IDE 2.3.6 - Linux AppImage (64bit X86-64)
ダウンロードしたファイルを、適当なディレクトリに移動して、実行可能属性をつければ完了。
ファイルサイズをターミナルで表示した
$ ll ~/ArduinoIDE/ 合計 196512 drwxrwxr-x 2 vm vm 4096 2025-11-24 12:06:30 ./ drwxr-x--- 57 vm vm 4096 2025-11-24 18:55:23 ../ -rwxrwxr-x 1 vm vm 200980456 2025-11-23 19:35:30 arduino-ide_2.3.6_Linux_64bit.AppImage* -rw-rw-r-- 1 vm vm 232496 2025-11-24 12:06:17 arduino_icon.svg
ターミナルから実行すると、IDEのメインウインドウが表示される。

Arduino IDE Version 2.3のメインウインドウ (一連のセットアップ作業が完了した時点のもの)
日本語化
日本語リソースはデフォルトで組み込まれているので、基本設定ダイアログで次のように設定するだけ。
Arduino IDEメインウインドウの「ファイル」メニュー → 「基本設定」ダイアログ → 「エディター言語」を日本語に設定する。
ESP8266のボードマネージャを登録
Arduino IDEメインウインドウの「ファイル」メニュー → 「基本設定」ダイアログ → 「追加のボードマネージャのURL」に次のJSONリソースファイル名を設定する。
https://arduino.esp8266.com/stable/package_esp8266com_index.json
マイコンボード種別の選択
Arduino IDEメインウインドウの「ツール」メニュー → 「ボード」 → 「ボードマネージャ」で次の項目をインストールするする。
esp8266 by ESP8266 Comunity, Version 3.1.2(最新版の選択肢)
リソースがインストールされたら、ESP8266関連のボードがメニューに表示される。
再びArduino IDEメインウインドウの「ツール」メニュー → 「ボード」 → 「ESP8266」 → 「Generic ESP8266 Module」を選択する。
シリアルポートの選択、設定
次に接続ポートの設定を行う。
ESP8266をUSBに接続して、Arduino IDEメインウインドウの「ツール」メニュー → 「ポート」 → 「/dev/ttyUSB0」選択する。
さらに、接続スピードは 115,200 bps とするように、「ツール」メニューのUpload Speedで選択する。(シリアルモニタについても、利用時にはこの接続速度に設定すること)
最終確認
ボードとポートの設定が正しく行われたか、確認を行うこと。

"Arduino IDEでボードとポートが正しく設定されたか確認する
シリアルポートとして正常に認識しない、機能しない場合の対処法
/dev/ttyUSB* への書き込み権限の付与
はじめてシリアル/USB変換デバイスを利用する場合は、ユーザ権限で書き込み権限が無いはずだ。
シリアルポートデバイスの状態をターミナルで表示
$ ll /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 2025-11-24 16:19:52 /dev/ttyUSB0
この場合、次の方法のいずれかを実施する。
1) 現在のユーザをdialoutグループに追加する
グループに追加し、結果を確認する
$ sudo usermod -a -G dialout $USER
$ groups $USER
vm : vm dialout sudo video sambashare
2) udevルールを設定する
USBデバイスのVendor/Manufucture IDを得る
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 046d:c534 Logitech, Inc. Unifying Receiver
Bus 001 Device 004: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Bus 001 Device 003: ID 8087:0a2a Intel Corp. Bluetooth wireless interface
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
udevルールを追加する
/etc/udev/rules.d/50-udev.rules に次の設定行を追加
# ESP8266 WeMos X-8266 DevBoard
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="0666"
brltty-udev.serviceと干渉してシリアルポートデバイスとして認識しない場合
エラーメッセージで次のように表示された場合、brlttyが干渉している。
エラーメッセージ
$ sudo dmesg |less [ 1802.290868] usb 1-5: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.62 [ 1802.290879] usb 1-5: New USB device strings: Mfr=0, Product=2, SerialNumber=0 [ 1802.290883] usb 1-5: Product: USB2.0-Serial [ 1802.293017] ch341 1-5:1.0: ch341-uart converter detected [ 1802.293730] usb 1-5: ch341-uart converter now attached to ttyUSB0 [ 1802.865843] input: BRLTTY 6.4 Linux Screen Driver Keyboard as /devices/virtual/input/input32 [ 1802.965617] usb 1-5: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1 [ 1802.967194] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0 [ 1802.967226] ch341 1-5:1.0: device disconnected
この場合、次の3つの方法のいずれかを試す。
1) brltty パッケージを削除
同時に削除されてしまうパッケージに問題がなければ、パッケージ削除を行う。ただし、apt-cache rdepends brlttyコマンドで依存パッケージを観察すると、Ubuntuデスクトップのコアパッケージがズラッと列挙されるため、brlttyパッケージは削除しないほうが良いと思われる。
brltty パッケージを削除
$ sudo apt remove --simulate brltty $ sudo apt remove brltty
2) サービスを無効化する
brltty-udevサービスの無効化
$ sudo systemctl disable brltty-udev.service
3) brltty が対象デバイスを検出するのを阻止する
brlttyのudevルールを修正する
/usr/lib/udev/rules.d/85-brltty.rules の特定箇所をコメントアウト
# Device: 1A86:7523 # Baum [NLS eReader Zoomax (20 cells)] # ENV{PRODUCT}=="1a86/7523/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run"
テストプログラムの書き込み
LEDフラッシュ、シリアル出力のテストプログラム
起動したら"ESP8266 start ..."をシリアル出力し、その後GPIO 0に接続したLEDを点滅させるとともに、"GPIO-0 ON"の文字列をシリアル出力するループ処理を行う。
ソースコードは次の通り。
テストプログラムのC言語ソースコード
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(500);
Serial.println();
Serial.println("ESP8266 start ...");
pinMode(0, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
delay(1000);
Serial.println("GPIO-0 ON");
digitalWrite(0, HIGH);
delay(1000);
digitalWrite(0, LOW);
}
コンパイルおよび書き込み
エラー確認のため、まずコンパイルを行う。エラーが報告されなければ、書き込みを行う。
コンパイル時の出力ウインドウの内容例
. Variables and constants in RAM (global, static), used 28196 / 80192 bytes (35%) ║ SEGMENT BYTES DESCRIPTION ╠══ DATA 1496 initialized variables ╠══ RODATA 948 constants ╚══ BSS 25752 zeroed variables . Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60267 / 65536 bytes (91%) ║ SEGMENT BYTES DESCRIPTION ╠══ ICACHE 32768 reserved space for flash instruction cache ╚══ IRAM 27499 code in IRAM . Code in flash (default, ICACHE_FLASH_ATTR), used 236212 / 1048576 bytes (22%) ║ SEGMENT BYTES DESCRIPTION ╚══ IROM 236212 code in flash
書き込み時の出力ウインドウの内容例
. Variables and constants in RAM (global, static), used 28196 / 80192 bytes (35%) ║ SEGMENT BYTES DESCRIPTION ╠══ DATA 1496 initialized variables ╠══ RODATA 948 constants ╚══ BSS 25752 zeroed variables . Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60267 / 65536 bytes (91%) ║ SEGMENT BYTES DESCRIPTION ╠══ ICACHE 32768 reserved space for flash instruction cache ╚══ IRAM 27499 code in IRAM . Code in flash (default, ICACHE_FLASH_ATTR), used 236212 / 1048576 bytes (22%) ║ SEGMENT BYTES DESCRIPTION ╚══ IROM 236212 code in flash esptool.py v3.0 Serial port /dev/ttyUSB0 Connecting.... Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: 68:c6:3a:e1:53:ff Uploading stub... Running stub... Stub running... Configuring flash size... Auto-detected Flash size: 4MB Flash params set to 0x0340 Compressed 270304 bytes to 198818... Writing at 0x00000000... (7 %) Writing at 0x00004000... (15 %) Writing at 0x00008000... (23 %) Writing at 0x0000c000... (30 %) Writing at 0x00010000... (38 %) Writing at 0x00014000... (46 %) Writing at 0x00018000... (53 %) Writing at 0x0001c000... (61 %) Writing at 0x00020000... (69 %) Writing at 0x00024000... (76 %) Writing at 0x00028000... (84 %) Writing at 0x0002c000... (92 %) Writing at 0x00030000... (100 %) Wrote 270304 bytes (198818 compressed) at 0x00000000 in 17.6 seconds (effective 123.0 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...
Flashボタンのある開発ボードでの書き込み処理
WeMos X-8266では、Flashボタンを押し下げてから書き込みボタンを押す。そして、"Writing at 0x00000000... (7 %)"と書き込み開始の表示が出てからFlashボタンから手を離す。



