ESP32でファイル読み込み
https://github.com/earlephilhower/arduino-littlefs-upload
https://qiita.com/kumakumao/items/be51f174bfeb0e4a6a06
Debugモニターは必ず閉じる

こんな感じでファイルを返却できる様になります
#include <WiFi.h>
#include <WebServer.h>
#include <LittleFS.h>
const char* ssid = "YOUR_SSID";
const char* pass = "YOUR_PASS";
WebServer server(80);
String contentType(const String& path) {
if (path.endsWith(".html")) return "text/html; charset=utf-8";
if (path.endsWith(".css")) return "text/css; charset=utf-8";
if (path.endsWith(".js")) return "application/javascript; charset=utf-8";
if (path.endsWith(".png")) return "image/png";
if (path.endsWith(".jpg")) return "image/jpeg";
if (path.endsWith(".ico")) return "image/x-icon";
return "text/plain; charset=utf-8";
}
bool handleFileRead(String path) {
if (path.endsWith("/")) path += "index.html";
if (!LittleFS.exists(path)) return false;
File file = LittleFS.open(path, "r");
server.streamFile(file, contentType(path));
file.close();
return true;
}
void setup() {
Serial.begin(115200);
if (!LittleFS.begin(true)) {
Serial.println("LittleFS mount failed");
return;
}
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println();
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// どんなURLでも、LittleFS上のファイルを探して返す
server.onNotFound([]() {
if (!handleFileRead(server.uri())) {
server.send(404, "text/plain; charset=utf-8", "Not Found");
}
});
server.begin();
}
void loop() {
server.handleClient();
}
ESP32でサーボ
秋月電子で売られているこのキットを動かすための準備です
2WD Mini Robot Mobile Platform Kit: キット一般 秋月電子通商-電子部品・ネット通販
ギヤードモータ(FM90)を2つ、モータドライバコントローラFT-SMC-4ch経由でコントロールします このモータはサーボのように信号線があり、サーボと違い無限回転仕様です。
Library ManagerからESP32 Servoをインストール

ESP32の32,33番ピンにサーボの信号を繋ぎます
#include <ESP32Servo.h>
int R_SPEED = 0;//-500 to 500 (0=STOP)
int L_SPEED = 0;//-500 to 500 (0=STOP)
Servo L_SERVO;
Servo R_SERVO;
int PWM_N = 1500; // Neutral
int PWM_MIN = 1000;
int PWM_MAX = 2000;
void setup() {
L_SERVO.attach(32, PWM_MIN, PWM_MAX);
R_SERVO.attach(33, PWM_MIN, PWM_MAX);
}
void loop() {
L_SERVO.writeMicroseconds(PWM_N + L_SPEED);
R_SERVO.writeMicroseconds(PWM_N - R_SPEED);
while(1);
}
Stop状態が1500μsでそこから±500μs増減で車輪が前後します。
Amazonにある格安昇圧コンバーターを試す

このような商品で10個で639円です。1個あたり64円で格安です。商品名は「DAOKAI」でいいんでしょうか

基盤は切り取られていないので自分で切り離します。
試しにLEDを4つ光らせてみます
- 入力:5.00V 0.289A = 1.445W
- 出力:11.49V 92.4mA = 1.062W
この場合だと効率72%でした。 商品説明ページには特に効率に関して言及されていなかったので、問題ない範囲ではないでしょうか。
秋月の3WパワーLED ASMT-MY22-NLM00 を雑に評価
ウォームホワイト色3WパワーLED ASMT-MY22-NLM00: オプトエレクトロニクス 秋月電子通商-電子部品・ネット通販
秋月で購入したこちらのLEDを”とても雑に”評価します。
| 電圧[V] | 電流[A] | 消費電力[W] | 明るさ[LUX] |
|---|---|---|---|
| 2.00 | 0.000 | 0.000 | 0.7 |
| 2.10 | 0.000 | 0.000 | 0.8 |
| 2.20 | 0.000 | 0.000 | 0.0 |
| 2.30 | 0.000 | 0.000 | 0.7 |
| 2.40 | 0.000 | 0.000 | 1.0 |
| 2.50 | 0.000 | 0.000 | 8.9 |
| 2.60 | 0.004 | 0.008 | 36.7 |
| 2.70 | 0.024 | 0.065 | 1767 |
| 2.80 | 0.060 | 0.168 | 3702 |
| 2.90 | 0.110 | 0.319 | 5900 |
| 3.00 | 0.183 | 0.549 | 17990 |
| 3.10 | 0.278 | 0.862 | 22700 |
| 3.20 | 0.290 | 0.928 | 23800 |
2.40Vで光り始めました

ESP32のdeep sleepを試す
以下がDeep Sleepのコードです。
#define LED 2 void setup() { Serial.begin(9600); Serial.println("ESP32 launching..."); pinMode(LED, OUTPUT); esp_sleep_wakeup_cause_t wakeup_reason; wakeup_reason = esp_sleep_get_wakeup_cause(); switch (wakeup_reason) { case ESP_SLEEP_WAKEUP_EXT0: Serial.println("Wakeup by ESP_SLEEP_WAKEUP_EXT0"); break; case ESP_SLEEP_WAKEUP_EXT1: Serial.println("Wakeup by ESP_SLEEP_WAKEUP_EXT1"); break; case ESP_SLEEP_WAKEUP_TIMER: Serial.println("Wakeup by ESP_SLEEP_WAKEUP_TIMER"); break; case ESP_SLEEP_WAKEUP_TOUCHPAD: Serial.println("Wakeup by ESP_SLEEP_WAKEUP_TOUCHPAD"); break; case ESP_SLEEP_WAKEUP_ULP: Serial.println("Wakeup by ESP_SLEEP_WAKEUP_ULP"); break; default: Serial.printf("Wakeup by unknown reason: %d\n", wakeup_reason); break; } esp_deep_sleep(10 * 1000 * 1000); } void loop() { }
10秒ごとにスリープに入り復帰後にはリセットされます

ただし wakeup_reason が0の場合があります。その場合は esp_wifi_stop などを呼び出しといた方がいい感じです
参考
Esp_sleep_get_wakeup_cause returns always 0 - #2 by hodmi - Arduino & Seeeduino - Seeed Studio Forum
ESP32の基盤実装LEDのLチカ
ESP32-WROVERに基盤実装されているLEDは2番ポートなので

#define LED 2 //基板実装LED
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
ESP32 導入
ESP32の初期設定(Arduino IDEの導入からLチカまでの手順) – マイコン技術Navi
こちらの手順を参考にしています。
Amazonで売られていた「ESP32-WROVER」を使います。
https://www.amazon.co.jp/dp/B0CJJKSN4F
以下のプログラムを実行しようとしたところエラーが
#define LED 2 void setup() { Serial.begin(115200); pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW); delay(500); }
以下エラー
A fatal error occurred: Unable to verify flash chip connection (Invalid head of packet (0xE0): Possible serial noise or corruption.).
アップロード速度を 115200 に変更

無事にIO2のLEDが点滅しました。

コンソールに文字を出せるようにします。
#define LED 2 void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW); delay(500); Serial.println("Hello ESP32!!"); }
Tools > Serial Monitor を開く
