部品 · 読了まで11分

NodeMCU ESP8266ガイド:ピン配置、Arduino IDEのセットアップ、Webサーバー

NodeMCU ESP8266とは?D1〜D8とGPIOの対応、Arduino IDEのセットアップ、Wi-Fi、LEDを切り替えるWebサーバー、3.3 Vの制約、ESP32との違いを解説します。

NodeMCUは、Wi-Fiに対応したESP8266チップに、USB接続、3.3 Vレギュレーター、ブレッドボードに挿しやすいピンを組み合わせた手ごろな開発ボードです。Arduino IDEでおなじみの命令でプログラムでき、単体で家のネットワークに接続し、スマートフォンで開けるWebページを配信できます。温度センサーをインターネットにつなぎたい、スマートフォンからリレーを切り替えたい、家のLEDテープを制御したいなら、NodeMCU ESP8266はもっとも安く始められる選択肢のひとつです。

このガイドでは、NodeMCUの仕様、まぎらわしいD1〜D8とGPIOのピンの対応、ボードの起動に影響するピン、Arduino IDEのセットアップ、Wi-Fiへの接続、スマートフォンからLEDを切り替えるWebサーバーをステップごとに見ていきます。最後の章では、ESP8266とESP32の違いと、よくある間違いの対処法を紹介します。

NodeMCU V3 ESP8266開発ボード
NodeMCU V3(LoLin):金属シールドで覆われたESP-12EモジュールにESP8266チップと4 MBのフラッシュメモリが入っています。ボードにはCH340のUSBシリアル変換チップ、3.3 Vレギュレーター、RSTボタンとFLASHボタンがあります。

ESP8266とNodeMCUとは?

ESP8266は、Espressifが2014年に発表した、Wi-Fiを内蔵した32ビットのマイコンです。とても安価だったため、メイカーの世界でWi-Fiプロジェクトを一気に身近なものにしました。NodeMCUという名前は、もともとこのチップ向けに書かれたLuaベースのファームウェアと、そのオープンソースの開発ボードを指していました。現在ではESP-12Eモジュールを使ったボードの総称として使われています。ただし、Luaでプログラムすることはまれで、ほとんどの人はArduino IDEかMicroPythonを使います。

項目値
チップESP8266EX、Tensilica L106、32ビット
クロック周波数80 MHz(160 MHzに上げられる)
RAMユーザー用RAM約80 KB(Wi-Fi接続中にスケッチが使えるのは40〜50 KB)
フラッシュメモリ4 MB(ESP-12Eモジュール)
Wi-Fi802.11 b/g/n、2.4 GHzのみ。ステーション、アクセスポイント、またはその両方
Bluetoothなし
使えるGPIO約11本(D0〜D8、RX、TX)
アナログ入力1チャンネル(A0)、10ビット、ボード上で約0〜3.2 V
PWMソフトウェア方式、初期設定1 kHz、範囲0〜255
動作電圧3.3 V(USBかVINから5 Vで給電)
電流Wi-Fi接続中の平均70〜80 mA、送信中は最大170 mA

市場には2つの一般的なNodeMCUのバージョンがあります。V2(Amica)は幅が狭く、CP2102のUSBシリアル変換チップを使い、ブレッドボードに挿すと両側に1列ずつ空いた穴が残ります。V3(LoLin)は幅が広く、CH340Gチップを使い、標準的なブレッドボードをほぼ覆ってしまうため、ブレッドボードを2枚並べるとV3がずっと扱いやすくなります。どちらのバージョンもピン配置は同じで、同じコードが動きます。もっと小さなボードがほしいなら、Wemos D1 Miniも同じチップを積んでいて、同じスケッチが動きます。

NodeMCUのピン配置:D1〜D8とGPIOの対応

NodeMCUでいちばんまぎらわしいのは、ボードに印刷されたDの表示が、チップの本当のGPIO番号ではないことです。たとえば、D1と書かれたピンは実際にはGPIO 5です。Arduino IDEでNodeMCUのボードを選べば、コードにD1と書くとコンパイラが自動的に5に変換します。しかし、digitalWrite(1, HIGH)と書くと、シリアルポートのTXピンであるGPIO 1を駆動してしまいます。MicroPythonでは常にGPIO番号を使います。

ボードの表示GPIO追加機能使用上の注意
D0GPIO 16ディープスリープからの復帰割り込み非対応。ディープスリープ用にRSTへつなぐ
D1GPIO 5I2C SCL安全、汎用
D2GPIO 4I2C SDA安全、汎用
D3GPIO 0FLASHボタン起動時にLOWだと書き込みモードに入る
D4GPIO 2ボード上のLED(反転ロジック)、TX1起動時にHIGHでなければならない
D5GPIO 14SPI SCK安全、汎用
D6GPIO 12SPI MISO安全、汎用
D7GPIO 13SPI MOSI安全、汎用
D8GPIO 15SPI CS起動時にLOWでなければならない。ボードにプルダウン抵抗あり
RXGPIO 3UART RXシリアルモニタ使用中は空けておく
TXGPIO 1UART TX起動時にブートメッセージを送る
A0ADC0アナログ入力アナログ読み取り専用、約0〜3.2 V
SD2、SD3GPIO 9、10フラッシュメモリにつながっている使わない

この表によると、最初のプロジェクトで気兼ねなく使えるピンはD1、D2、D5、D6、D7です。D3、D4、D8はボードの起動モードを決めるピンです。電源が入ると、ESP8266はGPIO 0、GPIO 2、GPIO 15のレベルを確認し、通常の起動にはGPIO 0とGPIO 2がHIGH、GPIO 15がLOWであることを求めます。これらのピンにつないだボタン、リレー、センサーが起動時にレベルを変えてしまうと、ボードはプログラムではなく書き込みモードで起動するか、まったく起動しません。起動時にボタンは押されていないので、D3とD4はボタンには使えますが、出力がLOWのままになるモジュールはこれらのピンから離してください。

ESP8266のピンは3.3 Vで動作し、公式には5 Vトレラントではありません。ピンから取り出す電流は約12 mAまでにしてください。5 Vを出力するセンサー(たとえばHC-SR04のECHOピン)は直結せず、間に分圧回路かレベル変換モジュールを入れてください。3V3ピンには決して5 Vを入れず、ボードにはUSBかVINピンから5 Vで給電してください。

A0ピンも特別です。ESP8266チップのアナログ入力は0〜1 Vしか測れませんが、NodeMCUのボードにある220 kΩと100 kΩの分圧回路のおかげで、A0には約0〜3.2 Vを入力でき、analogRead(A0)はその範囲を0〜1023で返します。アナログ入力は1つしかないため、複数のアナログセンサーを使いたいなら、ADS1115のようなI2CのADCが必要です。D1とD2のピンは初期設定のI2Cバスです。I2Cの基本はI2Cとは?で確認できます。

Arduino IDEでESP8266をセットアップする

  1. Arduino IDEで「ファイル」>「基本設定」を開き、「追加のボードマネージャのURL」欄にhttps://arduino.esp8266.com/stable/package_esp8266com_index.jsonを追加します。
  2. 「ツール」>「ボード」>「ボードマネージャ」を開き、esp8266を検索して、ESP8266 Communityのパッケージをインストールします。
  3. 「ツール」>「ボード」メニューでNodeMCU 1.0 (ESP-12E Module)を選びます。Wemos D1 Miniを使うなら、代わりにLOLIN(WEMOS) D1 R2 & miniを選んでください。
  4. データ通信用ケーブルでボードをつなぎ、「ツール」>「ポート」でポートを選びます。ポートが表示されなければ、V3ボードならCH340の、V2ボードならCP2102のドライバをインストールしてください。
  5. Upload Speedは115200のままにしておきます。書き込みが安定して動くようになったら、921600に上げて速くできます。

最初のスケッチ:ボード上のLEDを点滅させる

NodeMCUでは、ESP-12Eモジュール上にGPIO 2(D4)につながった青いLEDがあります。V2(Amica)ボードにはD0に2つ目のLEDがあります。これらのLEDは反転ロジックで、ピンがLOWのときに点き、HIGHのときに消えます。Arduinoコアでは、LED_BUILTIN定数はすでに2と定義されています。

C++ (Arduino IDE)
1// NodeMCU dahili LED'i: GPIO2 (D4), ters mantık / onboard LED: GPIO2 (D4), inverted logic
2
3void setup() {
4  pinMode(LED_BUILTIN, OUTPUT);
5}
6
7void loop() {
8  digitalWrite(LED_BUILTIN, LOW);    // LOW = yanar / LOW = on
9  delay(500);
10  digitalWrite(LED_BUILTIN, HIGH);   // HIGH = söner / HIGH = off
11  delay(500);
12}
書き込み後にシリアルモニタに文字化けした文字が出るのは正常です。ESP8266はブートメッセージを74880 baudで送るからです。シリアルモニタを74880に設定すればリセットの原因と起動モードを読めます。自分のメッセージは、コードで選んだ速度(たとえば115200)で表示されます。

Wi-Fiに接続する

Wi-FiこそがESP8266の本当の強みです。次のスケッチは、ボードをステーションモードで家のネットワークに接続し、ルーターが割り当てたIPアドレスと信号の強さをシリアルモニタに表示します。20秒以内に接続できなければ、待つのをやめて警告を表示します。ネットワーク名とパスワードを自分のものに置き換え、シリアルモニタを115200 baudで開いてください。

C++ (Arduino IDE)
1#include <ESP8266WiFi.h>
2
3const char* ssid = "AgAdi";          // Wi-Fi adın / your Wi-Fi name
4const char* password = "Sifre123";   // Wi-Fi şifren / your Wi-Fi password
5
6void setup() {
7  Serial.begin(115200);
8  Serial.println();
9  WiFi.mode(WIFI_STA);               // istemci modu / station mode
10  WiFi.begin(ssid, password);
11  Serial.print("Baglaniyor / connecting");
12  unsigned long start = millis();
13  while (WiFi.status() != WL_CONNECTED) {
14    delay(500);
15    Serial.print('.');
16    if (millis() - start > 20000) {  // 20 sn'de bağlanamazsa / give up after 20 s
17      Serial.println("\nBaglanamadi, ag adini ve sifreyi kontrol et / failed, check SSID and password");
18      return;
19    }
20  }
21  Serial.println();
22  Serial.print("IP: ");
23  Serial.println(WiFi.localIP());    // modemin verdiği adres / address given by the router
24  Serial.print("Sinyal / RSSI: ");
25  Serial.print(WiFi.RSSI());         // -50 iyi, -80 zayıf / -50 good, -80 weak
26  Serial.println(" dBm");
27}
28
29void loop() {
30}
RSSIの値信号の品質期待できること
-30〜-50 dBm非常によい安定した高速な接続
-50〜-67 dBmよいWebサーバーやセンサーデータには十分
-67〜-80 dBm弱いときどき切断、ページの読み込みが遅い
-80 dBm未満非常に弱いまったく接続できないこともある。ボードをルーターに近づける
ESP8266が接続できるのは2.4 GHzのネットワークだけです。ルーターが2.4 GHzと5 GHzの帯域を同じ名前で出していてボードが接続できない場合は、2.4 GHzの帯域に別のネットワーク名を付けるとたいてい解決します。企業向け(WPA2-Enterprise)のネットワークや、ブラウザのログインページがあるゲストネットワークは、追加のコードなしでは使えません。

スマートフォンからLEDを操作する:簡単なWebサーバー

では、NodeMCUを小さなWebサーバーにしてみましょう。LEDを220 Ωの抵抗を通してD1(GPIO 5)ピンにつなぎます。LEDの長い足を抵抗経由でD1に、短い足をGNDにつなぎます。赤いLEDなら、この抵抗で電流は(3.3 V − 2 V) / 220 Ω ≈ 6 mAとなり、ピンの上限を余裕で下回ります。自分のLEDに合った値はLED抵抗計算ツールで計算してください。書き込んだら、シリアルモニタに表示されたアドレスを、同じWi-Fiにつないだスマートフォンのブラウザで開きます。

C++ (Arduino IDE)
1#include <ESP8266WiFi.h>
2#include <ESP8266WebServer.h>
3#include <ESP8266mDNS.h>
4
5const char* ssid = "AgAdi";          // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123";   // Wi-Fi şifren / your Wi-Fi password
7
8const int LED_PIN = D1;              // GPIO5, 220 ohm direnç ile LED / LED through a 220 ohm resistor
9bool ledOn = false;
10
11ESP8266WebServer server(80);
12
13void handleRoot() {
14  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>"
15                "<meta name='viewport' content='width=device-width,initial-scale=1'>"
16                "<title>NodeMCU</title></head>"
17                "<body style='font-family:sans-serif;text-align:center'>"
18                "<h1>NodeMCU LED</h1><p>LED: <b>";
19  html += ledOn ? "ACIK / ON" : "KAPALI / OFF";
20  html += "</b></p><p>A0: ";
21  html += analogRead(A0);            // 0-1023 arası analog değer / analog value 0-1023
22  html += "</p><p><a href='/on'><button>AC / ON</button></a> "
23          "<a href='/off'><button>KAPAT / OFF</button></a></p></body></html>";
24  server.send(200, "text/html", html);
25}
26
27void setLed(bool on) {
28  ledOn = on;
29  digitalWrite(LED_PIN, on ? HIGH : LOW);
30  server.sendHeader("Location", "/");   // ana sayfaya yönlendir / redirect to the main page
31  server.send(303, "text/plain", "");
32}
33
34void setup() {
35  pinMode(LED_PIN, OUTPUT);
36  digitalWrite(LED_PIN, LOW);
37  Serial.begin(115200);
38  WiFi.mode(WIFI_STA);
39  WiFi.begin(ssid, password);
40  while (WiFi.status() != WL_CONNECTED) {
41    delay(500);
42    Serial.print('.');
43  }
44  Serial.println();
45  Serial.print("Tarayicida ac / open in browser: http://");
46  Serial.println(WiFi.localIP());
47
48  if (MDNS.begin("nodemcu")) {       // http://nodemcu.local adresi / address http://nodemcu.local
49    MDNS.addService("http", "tcp", 80);
50  }
51
52  server.on("/", handleRoot);
53  server.on("/on", []() { setLed(true); });
54  server.on("/off", []() { setLed(false); });
55  server.onNotFound([]() { server.send(404, "text/plain", "Bulunamadi / not found"); });
56  server.begin();
57}
58
59void loop() {
60  server.handleClient();             // gelen istekleri işle / handle incoming requests
61  MDNS.update();
62}
コードの部分働き
ESP8266WebServer server(80)80番ポート(HTTP)でサーバーを作ります
server.on("/on", ...)ブラウザが/onを要求したらLEDを点けます
sendHeader("Location", "/")とsend(303)操作のあとブラウザをメインページに戻すので、ページを再読み込みしても命令が再送されません
analogRead(A0)A0の値をページに表示します。LDRやポテンショメーターをつなげます
MDNS.begin("nodemcu")IPの代わりにnodemcu.localという名前で機器にアクセスできるようにします
server.handleClient()loopで常に呼ぶ必要があります。届いたリクエストを処理します

ページが開かないときは、スマートフォンがゲストネットワークやモバイルデータではなく、NodeMCUと同じWi-Fiネットワークにつながっているか確認してください。nodemcu.localという名前はたいていパソコンやiPhoneで使えますが、mDNSに対応していないAndroidのスマートフォンもあるので、その場合はIPアドレスが必要です。LEDの代わりにリレーモジュールをつなげば、同じコードで本物のランプを操作できます。くわしくはリレーモジュールとは?を参照してください。

アクセスポイント(AP)モード:ルーターなしで接続する

周りにWi-Fiがなければ、NodeMCUは自分のネットワークを作れます。アクセスポイントモードでは、スマートフォンをNodeMCU-APネットワークに直接つなぎ、ボードはたいてい192.168.4.1で応答します。このモードは、庭の水やりシステムや屋外で使う測定器に最適です。上のWebサーバーとこのモードを組み合わせるには、WiFi.beginの行の代わりにsoftAPの行を使うだけです。WIFI_AP_STAモードなら両方の役割を同時にこなせます。パスワードは8文字以上でなければならず、そうでないとネットワークが作られません。

C++ (Arduino IDE)
1#include <ESP8266WiFi.h>
2
3void setup() {
4  Serial.begin(115200);
5  WiFi.mode(WIFI_AP);                            // kendi ağını kur / create its own network
6  bool ok = WiFi.softAP("NodeMCU-AP", "12345678"); // ad ve en az 8 karakter şifre / name and 8+ char password
7  Serial.println(ok ? "AP hazir / AP ready" : "AP hatasi / AP error");
8  Serial.print("IP: ");
9  Serial.println(WiFi.softAPIP());               // genellikle 192.168.4.1 / usually 192.168.4.1
10}
11
12void loop() {
13  Serial.print("Bagli cihaz / stations: ");
14  Serial.println(WiFi.softAPgetStationNum());
15  delay(3000);
16}

MicroPythonでESP8266を使う

NodeMCUはArduinoの言語のほかにMicroPythonでもプログラムできます。esptoolでMicroPythonのファームウェアをボードに書き込めば、Thonnyのようなエディタから直接Pythonのコードを実行できます。ESP8266はメモリが限られているため、大きなMicroPythonのプログラムではメモリエラーにぶつかることがありますが、簡単なWi-Fiやセンサーのプロジェクトにはとても便利です。MicroPythonでは、ピン番号としてDの表示ではなくGPIO番号を書くことに注意してください。

MicroPython
1import network, time
2from machine import Pin
3
4led = Pin(2, Pin.OUT)                     # D4 = GPIO2, dahili LED / onboard LED
5wlan = network.WLAN(network.STA_IF)
6wlan.active(True)
7wlan.connect("AgAdi", "Sifre123")         # Wi-Fi adı ve şifresi / Wi-Fi name and password
8
9while not wlan.isconnected():
10    time.sleep(0.5)
11print("IP:", wlan.ifconfig()[0])
12
13while True:
14    led.value(not led.value())            # ters mantık: 0 = yanar / inverted: 0 = on
15    time.sleep(0.5)

ESP8266とESP32、どちらにする?

項目ESP8266(NodeMCU)ESP32(DevKit)
プロセッサシングルコア、80/160 MHzデュアルコア、240 MHz
RAMユーザー用RAM約80 KB520 KB
Wi-Fi802.11 b/g/n、2.4 GHz802.11 b/g/n、2.4 GHz
BluetoothなしClassicとBLE
GPIO約11本約34本(一部は入力専用)
アナログ入力1チャンネル、10ビット18チャンネル、12ビット
PWMソフトウェア方式16チャンネルのハードウェアPWM(LEDC)
I2CとUARTソフトウェアI2C、完全なUART 1つと送信専用のUART1ハードウェアI2C 2つ、UART 3つ
タッチピンとDACなしタッチピン10本、DAC 2つ
価格より安い少し高い

まとめると、センサー1つのデータをインターネットに送る、スマートフォンからリレーを切り替える、簡単なWebページを配信するといった用途なら、ESP8266は今でも十分以上で、しかも安価です。Bluetooth、多くのアナログ入力、カメラ、高速な処理、多くのタスクの同時実行が必要な新しいプロジェクトには、ESP32のほうが適しています。コードの移植は簡単で、ESP8266WiFi.hをWiFi.hに、ESP8266WebServer.hをWebServer.hに、ESP8266mDNS.hをESPmDNS.hに替え、MDNS.update()の行を削除し(ESP32にはありません)、D1のようなボードの表示の代わりにGPIO番号を使えば、たいていそれで済みます。くわしくはESP32とは?とArduinoとESP32の違いは?を参照してください。

電源とディープスリープ

NodeMCUにはUSBかVINピンから5 Vで給電し、ボード上のレギュレーターが3.3 Vに下げます。Wi-Fi送信中の170 mAの電流のピークは、電力の弱いUSBポートや細いケーブルで電圧低下を起こし、ボードが勝手にリセットされる原因になります。品質のよいケーブルと、1 A以上を供給できるACアダプターを使ってください。電池で動かすプロジェクトでは、ESP.deepSleep()でチップを約20 µAで眠らせられます。タイマーが切れたときに起きられるよう、D0(GPIO 16)ピンをRSTピンにつなぐ必要があります。ただし、ボード上のUSBシリアル変換チップとレギュレーターはスリープ中も電流を消費し続けるため、電池を長持ちさせるなら単体のESP-12モジュールか低消費電力ボードのほうがよい結果になります。電池の持ちを見積もるには電池寿命計算ツールを使ってください。

NodeMCUを使ったプロジェクトアイデア

  • Wi-Fi温度計:DHT11で測った温度と湿度を、スマートフォンで開くページに表示します。
  • スマートプラグ:リレーモジュールとWebページのボタンで、ランプをオン・オフします。
  • 植物の水やりアラート:土壌水分センサーをA0につなぎ、土が乾いたらページに警告を表示します。
  • Wi-Fi LEDテープ:WS2812Bテープの色とエフェクトをスマートフォンから選びます。
  • インターネット時計:NTPサーバーから時刻を取得し、I2C LCDディスプレイに表示します。
  • 動体アラーム:PIRセンサーが動きを検知したらTelegramのメッセージを送ります。

よくある間違いと対処法

症状考えられる原因対処法
ポートが表示されない充電専用ケーブル、またはドライバがないデータ通信用ケーブルを使う。CH340かCP2102のドライバをインストールする
「Failed to connect to ESP8266: Timed out waiting for packet header」(ESP8266に接続できない)ボードが書き込みモードに入れなかったFLASHを押したままRSTを押して離し、FLASHを離してから書き込みをやり直す
ボードが起動しない、またはリセットを繰り返すD3、D4、D8の回路が起動時のレベルを乱しているその回路をD5、D6、D7などの安全なピンに移す
シリアルモニタに文字化けした文字が出るボーレートの不一致コードと同じ速度を選ぶ。ブートメッセージは74880 baud
Wi-Fiに接続できない5 GHzのネットワーク、パスワードの間違い、または弱い信号2.4 GHzのネットワークを使い、大文字・小文字を確認し、RSSIを見る
LEDが点かず、シリアルモニタも黙ってしまうコードにD1ではなく1と書いた(GPIO 1 = TX)コードではD1の表示かGPIO 5を使う
「Soft WDT reset」エラー(ウォッチドッグによるリセット)loop()の中のループが長く続きすぎる長いループの中にyield()かdelay(1)を入れる。どちらもバックグラウンドのWi-Fiの処理とウォッチドッグを動かす
書き込み中に接続のトラブルがあるなら、まずボードをパソコンから外し、D3、D4、D8、RXにつないだものをすべて外してから再度試してください。これらのピンにつないだモジュールが、起動時にボードが書き込みモードに入るのを妨げることがあります。USBハブではなくパソコン本体のUSBポートを使うと、急な電流で起こる切断も減らせます。

NodeMCU ESP8266は、Arduinoで学んだことをワイヤレスの世界へ広げる、もっとも手ごろな方法です。数行のコードで家のネットワークにつながり、スマートフォンから操作できる機器を作れます。BlueGraysアプリには、ESP32でのWi-Fi接続、Webサーバー、WebSocket、NTP時計、mDNSなどのワイヤレスプロジェクトが、ステップごとの回路図とコード付きでそろっており、同じ考え方をNodeMCUにも簡単に応用できます。

よくある質問

NodeMCUとESP8266は同じものですか?

ESP8266は、Espressifが製造するWi-Fiチップの名前です。NodeMCUは、そのチップを載せたESP-12Eモジュールに、USB接続、レギュレーター、ブレッドボードに挿しやすいピンを組み合わせた開発ボードです。つまり、NodeMCUはすべてESP8266ボードですが、ESP8266ボードがすべてNodeMCUというわけではありません。ESP-01やWemos D1 Miniも同じチップを使っています。

NodeMCUは5 Vで動きますか?

ボードにはUSBかVINピンから5 Vで給電でき、レギュレーターがそれを3.3 Vに下げます。ただし、GPIOピンは3.3 Vで動作し、公式には5 Vトレラントではありません。5 Vの信号は分圧回路かレベル変換モジュールを通してつないでください。

NodeMCUのD1はどのGPIOですか?

D1はGPIO 5で、初期設定のI2C SCLピンです。ほかによく使う対応は、D2 = GPIO 4、D4 = GPIO 2、D5 = GPIO 14、D6 = GPIO 12、D7 = GPIO 13、D8 = GPIO 15です。Arduino IDEではコードにD1と直接書けますが、MicroPythonではGPIO番号を使う必要があります。

ESP8266は5 GHzのWi-Fiに接続できますか?

できません。ESP8266が対応しているのは2.4 GHz帯の802.11 b/g/nのネットワークだけです。ルーターの2.4 GHz帯が有効になっているか確認してください。両方の帯域が同じ名前なら、2.4 GHz帯に別のネットワーク名を付けると接続のトラブルが解決することがよくあります。

NodeMCU V2とV3の違いは?

V2(Amica)は幅の狭いボードで、CP2102のUSBシリアル変換チップを使い、ブレッドボードの両側に空いた穴が残ります。V3(LoLin)は幅が広く、CH340Gチップを使います。ピン、プロセッサ、コードは同じで、違うのは大きさとインストールすべきUSBドライバだけです。

ESP8266にBluetoothはありますか?

ありません。ESP8266にはBluetoothのハードウェアがなく、Wi-Fiだけに対応しています。BluetoothやBLEが必要なプロジェクトでは、ESP32を使うか、HC-05のような別のBluetoothモジュールをボードに加えてください。

全プロジェクトを見る
ESP32でLEDを点滅
#103初級

ESP32でLEDを点滅

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

4.7(37)
99
ESP32の内蔵LEDを点滅
#106初級

ESP32の内蔵LEDを点滅

ESP32 DevKit V1に内蔵された青色LEDを点滅させます。外付け部品は不要です!ESP32を購入したら、最初に試すプロジェクトです。GPIO 2が内蔵LEDにつながっています。

4.8(29)
53
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非同期Webサーバー(LCDにIPアドレスを表示)
#129上級

ESP32非同期Webサーバー(LCDにIPアドレスを表示)

このプロジェクトでは、ESP32を同じWi-Fiネットワーク上のスマートフォンやパソコンから操作できる非同期Webサーバーにします。ESPAsyncWebServerライブラリを使うと、従来のWebServer.hのように1つのリクエストで処理がブロックされず、複数のリクエストを同時に処理できます。ブラウザーでESP32のIPアドレスを開き、ON/OFFボタン(/onと/offのルート)を押すと、GPIO 5に接続したLEDを点灯・消灯できます。

4.8(16)
26
ESP32 WebSocketカウンター(2つのボタン+LCD+Webリアルタイム表示)
#130上級
プレミアム

ESP32 WebSocketカウンター(2つのボタン+LCD+Webリアルタイム表示)

このプロジェクトでは、ESP32に接続した2つのボタンでカウンターの値を変更します(GPIO 5で増加、GPIO 4で減少)。値は16x2 I2C LCDに即座に反映され、ESPAsyncWebServerのWebSocket機能により、接続中のすべてのブラウザーでもページを再読み込みせずに更新されます。HTTPポーリングの代わりに1つの接続を維持し、ESP32がws.textAll()で新しい値を全員に送信します。

4.5(14)
23
ESP32 mDNS:bluegrays-esp.localでデバイスにアクセス(LCD付き)
#131上級
プレミアム

ESP32 mDNS:bluegrays-esp.localでデバイスにアクセス(LCD付き)

このプロジェクトでは、ESP32にmDNS(Multicast DNS)サービスを追加し、IPアドレスの代わりにbluegrays-esp.localのような覚えやすいホスト名でアクセスできるようにします。DHCPで割り当てられるIPアドレスが変わっても、同じ名前でデバイスにアクセスできます。小さなWebサーバーも動かし、ブラウザーでhttp://bluegrays-esp.local/を開いてLEDを操作します。I2C LCDディスプレイにはホスト名、IPアドレス、LEDの状態をトルコ語と英語で表示します。iOS、macOS、LinuxはmDNSに標準対応しています。

4.8(14)
23
ESP32とNTPでインターネットから正確な時刻を取得
#128上級
プレミアム

ESP32とNTPでインターネットから正確な時刻を取得

ESP32をWi-Fiに接続し、NTP(Network Time Protocol)サーバーからミリ秒精度の現在時刻を取得します。configTzTime()関数でタイムゾーンを自動適用し、夏時間を採用する国ではPOSIX TZ文字列で夏時間と標準時間の切り替えも自動管理します。時刻はシリアルモニタと、必要に応じて接続するI2C LCDに表示します。configTzTime()がSNTPサービスを開始し、ネットワークにアクセスできる間は定期的に再同期します。

4.5(13)
21
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