ESP32 C3 SuperMiniをUbuntu 24.04で使うときのメモ

ある一定温度になったら5Vファンを回す、程度の制御に使うマイコンとしてなんか買うか、とaliexpress見てたら、506円で ESP32 C3 SuperMiniというのがあったので買ってみた

購入したセラーのページには詳細がなかったので、調べてみたら、「【Arduino】ESP32 C3 SuperMiniを使う」を発見

ESP32 C3 SuperMini という製品名に対して、細かなバージョン違いがあるらしい。

掲載されている写真の部品配置と比較してみたところ、今回買ったものは「ESP32 C3 Super Mini(K2)」に相当しているみたいである

で・・・Ubuntu 24.04Serverをインストールして、arduinoをインストールし、Windows上にいんすとーるしたVcXsrvに画面を飛ばす。

Arduiono上では、ボードマネージャにESP32追加し、ESP32 C3 Dev boardを選択して、サンプルを書き込み

エラー発生

Arduino:1.8.19 (Linux), ボード:"ESP32C3 Dev Module, Disabled, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 160MHz (WiFi), QIO, 80MHz, 4MB (32Mb), 921600, None, Disabled, Disabled"

警告:ライブラリESP_SRのカテゴリ「Sound」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリHashのカテゴリ「Security」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリESP Insightsのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリESP RainMakerのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリTFLite Microのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリWiFiProvのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
最大1310720バイトのフラッシュメモリのうち、スケッチが282882バイト(21%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が14240バイト(4%)を使っていて、ローカル変数で313440バイト使うことができます。
                                                                                
 Usage: esptool [OPTIONS] COMMAND [ARGS]...                                     
                                                                                
 Try 'esptool -h' for help                                                      
╭─ Error ──────────────────────────────────────────────────────────────────────╮
│ Invalid value for '--port' / '-p': Path '/dev/ttyACM0' is not readable.      │
╰──────────────────────────────────────────────────────────────────────────────╯
                                                                                
シリアルポート「                                                                                
」が選択されていますが、そのポートは存在しないか、ボードが接続されていません。


「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。

確認してみる

まず、USBデバイスが存在しているかを確認

pcuser@ubuntu:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 007: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 008: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 022: ID 303a:1001 Espressif USB JTAG/serial debug unit
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
pcuser@ubuntu:~$

ある

rootユーザでesptoolを実行したらどうなる?

root@ubuntu:~# /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id
esptool v5.1.0
Connected to ESP32-C3 on /dev/ttyACM0:
Chip type:          ESP32-C3 (QFN32) (revision v0.4)
Features:           Wi-Fi, BT 5 (LE), Single Core, 160MHz, Embedded Flash 4MB (XMC)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                ac:eb:e6:6d:6b:b0

Stub flasher running.

Warning: ESP32-C3 has no chip ID. Reading MAC address instead.
MAC:                ac:eb:e6:6d:6b:b0

Hard resetting via RTS pin...
root@ubuntu:~#

情報が取得できる

一般ユーザだとどうなる?

pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id

 Usage: esptool [OPTIONS] COMMAND [ARGS]...

 Try 'esptool -h' for help
lq Error qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Invalid value for '--port' / '-p': Path '/dev/ttyACM0' is not readable.     x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

pcuser@ubuntu:~$

エラーとなる

つまり・・・/dev/ttyACM0 にアクセス権がない

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0  4月  8 11:40 /dev/ttyACM0
pcuser@ubuntu:~$

面倒くさいので /dev/ttyACM0自体に権限を与えてしまう

pcuser@ubuntu:~$ sudo chmod a+rw /dev/ttyACM0
[sudo] pcuser のパスワード:
pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0  4月  8 11:40 /dev/ttyACM0
pcuser@ubuntu:~$

変更後は一般ユーザでもesptoolの実行に成功した

pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id
esptool v5.1.0
Connected to ESP32-C3 on /dev/ttyACM0:
Chip type:          ESP32-C3 (QFN32) (revision v0.4)
Features:           Wi-Fi, BT 5 (LE), Single Core, 160MHz, Embedded Flash 4MB (XMC)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                ac:eb:e6:6d:6b:b0

Stub flasher running.

Warning: ESP32-C3 has no chip ID. Reading MAC address instead.
MAC:                ac:eb:e6:6d:6b:b0

Hard resetting via RTS pin...
pcuser@ubuntu:~$

ただ、これだと、1回抜き差しすると/dev/ttyACM0は再作成されるので権限が元に戻ってしまう

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw—- 1 root dialout 166, 0 4月 8 11:53 /dev/ttyACM0
pcuser@ubuntu:~$

簡単に解決する方法は、上記/dev/ttyACM0のグループ権限にある「dialout」に、一般ユーザを追加すること

pcuser@ubuntu:~$ sudo usermod -aG dialout pcuser
[sudo] pcuser のパスワード:
pcuser@ubuntu:~$

設定後、一回ログアウトする必要がある。ログアウトしないと古い権限が適用され使用できない

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0  4月  8 11:53 /dev/ttyACM0
pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id

 Usage: esptool [OPTIONS] COMMAND [ARGS]...

 Try 'esptool -h' for help
lq Error qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Invalid value for '--port' / '-p': Path '/dev/ttyACM0' is not readable.     x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

pcuser@ubuntu:~$

ログインしなおすと、使えるようになる

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0  4月  8 11:53 /dev/ttyACM0
pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id
esptool v5.1.0
Connected to ESP32-C3 on /dev/ttyACM0:
Chip type:          ESP32-C3 (QFN32) (revision v0.4)
Features:           Wi-Fi, BT 5 (LE), Single Core, 160MHz, Embedded Flash 4MB (XMC)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                ac:eb:e6:6d:6b:b0

Stub flasher running.

Warning: ESP32-C3 has no chip ID. Reading MAC address instead.
MAC:                ac:eb:e6:6d:6b:b0

Hard resetting via RTS pin...
pcuser@ubuntu:~$ id
uid=1000(pcuser) gid=1000(pcuser) groups=1000(pcuser),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),101(lxd)
pcuser@ubuntu:~$

シリアル出力をしない設定がある

debugのために下記の様な感じでシリアル出力を書いた

#define LED_PIN (8)

void setup() {
  Serial.begin(9600);
  Serial.print("start");
  pinMode(LED_PIN, OUTPUT);

  while(1)
  {
    digitalWrite(LED_PIN, LOW);
    delay(500);

    digitalWrite(LED_PIN, HIGH);
    delay(100);
  }

}

void loop() {

  Serial.println("loop test");
  delay(3000);
}

しかし、シリアルモニタに何も出力されない

調べると「esp32 c3系でシリアルモニタに出力されない」に「USB CDC On Boot」が「Disabled」になってると出力されない、という話があった

確認すると、Disabledであった

しかし「Enabled」に変えてから書き込みを行ってもシリアル出力はされない状態

arduiono 1.8.19 on ubuntu 24.04

他の事例「ESP32C3 Super Mini doen’t communicate with Serial Monitor in one setup, but it does in another setup — why?」には「ESP32C3 Dev Module」ではなく「LOLIN C3 Mini」を選んで「USB CDC On Boot:Enabled」で書き込め、ということでやってみたが、ダメだった

claudeに「esp32 c3 super mini にて シリアル出力が出てこない」と聞いてみたら「USB CDC の初期化待ち(重要!)」だそうな

ということでSerial.begin(9600);の次にdelay(2000)を追加したところ、とりあえずsetup内のserial.printについては出力はされたが、loop無いのやつが出力されない…って、あ、setup内でループしてんじゃん

#define LED_PIN (8)

void setup() {
  Serial.begin(9600);
  delay(2000); 
  Serial.print("start");
  pinMode(LED_PIN, OUTPUT);

  //while(1)
  //{
  //  digitalWrite(LED_PIN, LOW);
  //  delay(500);

  //  digitalWrite(LED_PIN, HIGH);
  //  delay(100);
  //}

}

void loop() {

  Serial.println("loop test");
  delay(3000);
}

ということで動作を確認

TTGO T-Watch用開発環境の作り方2020年3月版

最初に入手したときと作成手法が変わっていたのでメモ書き

(1) Arduino IDEをインストール

Windowsの場合、Microsoft StoreからArduino IDEをインストールする。

(2)githubのTTGO_TWatch_LibraryをArduino IDEに組み込む

githubの https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library にて「Download ZIP」を行い、T-Wach用ライブラリzipをダウンロード。

次にArduino IDEを起動して、「スケッチ」-「ライブラリをインクルード」-[.ZIP形式のライブラリをインストール」を選択し、ダウンロードしたT-Watch用ライブラリzipを読み込む。

この結果、「スケッチ」-「ライブラリをインクルード」を開くと下の方にある「提供されたライブラリ」の下に「TTGO T-Watch」が追加される。

(3)Ardbuino IDEのボードマネージャにESP32を追加

Installation instructions using Arduino IDE Boards Manager」に書いてあるとおりだけど、「ファイル」-「環境設定」を開き、「追加のボードマネージャのURL」に「 https://dl.espressif.com/dl/package_esp32_index.json 」を追加します。

なお、既にURLが書かれている場合は「,」で区切ることで複数のURLを記述できます。

追加した後は「ツール」-「ボード」-「ボードマネージャ」を選択し、検索欄に「esp32」と入力すると、「esp32 by Espressif SYstems」というのが登場しますので、それをインストールします。

(4) ボードでTTGO T-Watchを選択する

「ツール」-「ボード」から「TTGO T-Watch」を選択する。

ESP32腕時計TTGO T-Watchが届いた

ESP32を搭載した腕時計風のTTGO T-Watchを約49ドルで購入しました。

約2週間で届いたので早速遊んでみました。

資料系

メーカページ(LILYGO)
公式英語マニュアル
公式中国語マニュアル
サンプルソフトウェア

開梱

かわいらしい感じの梱包ですね。

内容物はこちら

T-Watch本体と、予備のボード?、T-Watchの横にあるコネクタから拡張するためのケーブル、Type-Cケーブル、腕時計用バンド、裏蓋取り外し用ネジ回しと予備のネジ

説明書には中を開けた時にどういう感じになっているのか書かれています。

とりあえずこちらも開けてみました。

元に戻して電源ON

最初はタッチパネルの検査プログラムが起動しタッチした座標を報告します、Type-Cコネクタの隣のボタンを押すと、今度は衝撃検知プログラムが起動しstepCountとして振り回した回数を表示します。

とりあえず、パソコンにつなげるとドライバがあれば「Silicon Labs CP210x USB to UART Bridge (COM?)」として認識します。

ドライバがインストールされていない場合は下記の様に「CP2104 USB to UART Bridge Controller」として認識されます。ドライバのインストールについては後述します。

デモ用のプログラムがgithubで公開されていますのでArduio IDEをセットアップします。

ただし、普通にインストールしただけでは認識せず、追加手順が必要となります。

必要なもの

Arduino IDE
git for Windows

T-watch ソフトウェア書き込み手順

TTGO公式の設定手順を参照しながらやりました。

その1:git for Windowsをインストール

以前に別の件でインストールしていたのでそのまま使っています。

その2:Arduino IDEをインストール

今回はArduino IDE ver 1.8.9をインストールしました。

その3: Arduino IDEのインストール先のhardwareディレクトリ内にespressifディレクトリを作る

標準インストールだとC:\Program Files (x86)\Arduino\hardware ディレクトリ内にespressifディレクトリを作る。

その4:作成したespressifディレクトリ内でコマンドプロンプトを開く

作成したC:\Program Files (x86)\Arduino\hardware\espressifディレクトリででコマンドプロンプトを開きます。

その5:gitでespressifのarduino-esp32レポジトリを取得する

espressifディレクトリで「git clone –recursive https://github.com/espressif/arduino-esp32.git esp32」(wordpress編集画面だと「-」が2個なのに1個だけになる・・・)を実行します。

そうすると、 C:\Program Files (x86)\Arduino\hardware\espressif\esp32 ディレクトリが作成されファイルが置かれていきます。

その6:esp32\toolsディレクトリにあるgetコマンドを実行し追加ファイルを取得

C:\Program Files (x86)\Arduino\hardware\espressif\esp32\tools\ ディレクトリ内にある「get.exe」を実行し、追加ファイルを取得します。

その7:Silicon Labs CP210xをインストール/アップデート

手順には明記されていないのですが、古いドライバ Ver6.7.4.261で書き込もうとするとエラーになりました。「T-WatchマニュアルのGetting started」に掲載されているCP2104-Win10(Ver10.1.8.2466)だと正常に動きますので、アップデートします。
(CP2104の製造メーカ公式ドライバダウンロードページ)

なお、書き込み時のエラーは下記の「A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header」です。

その8:T-Watchをパソコンに接続

その9:Arduino IDEを起動し、TTGO T-Watchを選択

Arduino IDEを起動し、「ツール」-「ボード」の一覧から「TTGO T-Watch」を選択します。

その10:T-Watchサンプルソフトを取得

git for Windowsを使って、 https://github.com/Xinyuan-LilyGO/TTGO-T-Watch で公開されているサンプルソフトウェアを取得します。

「git clone –recursive https://github.com/Xinyuan-LilyGO/TTGO-T-Watch」

取得完了後、「library」にあるディレクトリを、マイドキュメントの中にある「Arduino\library」内にコピーします。

その11:書き込み

Arduino IDEからサンプルソフトウェアを書き込みます。


サンプルソフトウェアを書き込んだのですが、うまいこと自宅のWiFiに接続できず、時計合わせに失敗しています。

また、タッチパネルの動作が若干微妙な感じもあります・・・

ブラウザプログラミングができるESP8266モジュールのWebduinoを入手して動かしてみた!

WiFi接続が簡単にできるESP8266を使った製品で、Webブラウザを使ってプログラミングができる「Webduino」というものがある。

2016/11/06に「WebからプログラミングができるESP8266モジュールWebduinoが送料込み$5.88で発売開始」という記事を書いたが、発注から8日で製品が到着。

webdiuno-1
白い箱に袋に入った基板が入っているだけ、という簡易梱包。

基板の裏面はこんな感じで「3色LED」と「明度センサー」が付いています
webdiuno-2

設定手順は「Webduino Smart Wi-Fi Setup」にあるので開きながら実施していきます。

まずはmicroUSBケーブルをさして電源を入れます。
webdiuno-3
青LEDが点灯し、また裏面の3色LEDは赤点灯します。

この状態でスマホなどからWiFi APを検索すると「Smart」というAPがいますので、そこに接続します。
webdiuno-4
接続パスワードは「12345678」です。

接続したらブラウザから「http://192.168.4.1」にアクセスします。
webdiuno-5

WiFi SSID/WiFI PWDは、自宅などのWiFI APを指定します。
また、Device IDは識別できるようなものを指定します。
「SUBMIT」ボタンをクリックし、変更を反映したら、電源を抜きます。

電源を入れ直すと、裏面の3色LEDは、赤点灯したあと、一瞬緑点灯し、消灯します。
この状態で、自宅WiFI APに接続された状態となります。

Webdiunoに割り当てられたIPアドレスを確認するには、スマホなどでWiFi AP検索をします。
webdiuno-8
上記の様に「Smart_<IPアドレス>」という形でIPアドレスが表示されるので確認します。

まずは動作確認として、パソコンから「http://<IPアドレス>」にアクセスできることを確認します。

次にWebブラウザを使ったプログラミングを行います。

サンプルコード」を使いましょう。
webdiuno-10

IPアドレスを指定し、また、「Set color」の横をクリックすると点灯させたいLEDの色を指定できます。

指定が終わったら右上の再生ボタン▶をクリックすると、プログラムが転送され、WebdiunoのLEDが点灯するはずです。
うまく行かない場合は、一度Webdiunoの電源を入れ直してみましょう。

以上のような感じで結構お手軽にプログラミングができます。

なお、手順にはStep5としてfirmwareアップデートがあるのですが、ちゃんと動作しているのかどうかが判断できなかったので、記事には含めていません。
Ver3.0.07より新しいバージョンがあるんだろうか??

USB2.0-Serialのドライバ(esp8266の安ボードで使っていたシリアル)はCH341

esp8266搭載の安いボードを買って、Windows7パソコンにつなげるとドライバが標準認識せず「USB2.0-Serial」となる。

VID 1A86, PID 7523 (VID_1A86&PID_7523) のドライバは何であるのかを調べると、江苏沁恒股份有限公司(WCH)CH340らしい。

ドライバは下記のメーカページからダウンロードできる。
CH341SER.EXE(実行形式のドライバインストーラ)
CH341SER.ZIP(ZIP形式のドライバ)

どちらもバージョンは3.4(2015/10/30 or 2015/11/02)なので、好みに応じてどうぞ

インストールするとドライバのバージョンは 3.4.2014.8 (2014/08/08) でした。


2019/06/27追記

現在は、2019/01/30付けのバージョン3.5が配布されています。


2021/12/01追記

コメントでMicrosoft Updateカタログで「VID_1A86&PID_7523」を検索するとドライバが入手できるようになっている、との情報をいただきました。

というわけで、ネットワークをつないだ状態で該当デバイスをさして、Microsoft Updateをかければドライバがインストールされそうですね。


2023/08/17追記

Microsoft Updateで検索すると「wch.cn – Ports – 1.7.2023.2」と「wch.cn – Ports – 3.8.2023.2」のメジャーバージョンが異なる2種類が出てるようになっていた。

「wch.cn – Ports – 3.8.2023.2」は CH330, CH340, CH341 用のドライバ

USB-SERIAL CH340,USB-SERIAL CH341A,USB-SERIAL CH340K,USB-SERIAL CH330

「wch.cn – Ports – 1.7.2023.2」は CH342以降やCH9101以降などの新しめのやつのドライバ

USB-Enhanced-SERIAL-A CH342,USB-Enhanced-SERIAL-B CH342,USB-Enhanced-SERIAL CH343,USB-Enhanced-SERIAL-A CH344,USB-Enhanced-SERIAL-B CH344,USB-Enhanced-SERIAL-C CH344,USB-Enhanced-SERIAL-D CH344,USB-Enhanced-SERIAL CH9101,USB-Enhanced-SERIAL CH9102,USB-Enhanced-SERIAL-A CH9103,USB-Enhanced-SERIAL-B CH9103,USB-Enhanced-SERIAL-A CH9104,USB-Enhanced-SERIAL-B CH9104,USB-Enhanced-SERIAL-C CH9104,USB-Enhanced-SERIAL-D CH9104,USB-BLE-SERIAL CH9143,USB-HiSpeed-SERIAL-A CH347,USB-HiSpeed-SERIAL-B CH347