• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Arduino / Arduino応用編 / ArduinoでSTEM教育​ 応用編:ESP8266開発ボードでIoTウェブサーバーを作る

ArduinoでSTEM教育​ 応用編:ESP8266開発ボードでIoTウェブサーバーを作る

2020年9月12日 by STEMSHIP コメントを書く

前回はESP32でWi-Fiを使用してIoTウェブサーバを作りましたが、もう一つの選択肢として、ESP32と同じくespressif社のESP8266マイクロコントローラがあります。これは先述のESP32の一つ前の世代のマイクロコントローラです。性能面ではESP32に劣りますが、それでもArduinoのATMega328Pよりもはるかに高性能です。また、ESP32よりも長く市販されているということは、より多くの人に利用されているとも言えます。そのため、ESP32よりもESP8266の方がサンプルとなるスケッチやライブラリが見つけやすい一面もありますArduino向けのWiFiシールドにもWiFi用のチップとしてESP8266を採用しているものが数多くあります。

図1. ESP8266モジュール

ESP8266モジュールはESP32よりもさらに一回り小さなサイズです。こちらにも、パターンアンテナが内蔵されています。ESP8266もESP32と同様に非常に小さなチップとなっており、その小ささゆえに電線の接続がしにくくなってしまっています。ESP8266をより大きな基板に載せて扱いやすくしたモジュールが多数販売されています。

ESP8266 NodeMCU WiFi開発ボード の環境設定

ここでは、「NodeMCU WiFi開発ボード」を使用します。

図2. NodeMCU WiFi開発ボード

NodeMCU WiFi開発ボードはUSB経由でスケッチの書き込みが行えます。ブレッドボードで使用することもできます。NodeMCU WiFi開発ボードを使用するためには、Arduino IDEにファイルをインストールする必要がありますが、前回のESP32よりは簡単に行えます。まず、Aruino IDEで「ファイル」>「環境設定」メニューを開きます。

図3. 環境設定メニューを開く

「追加のボードマネージャーのURL」に、次の内容を追記します。ボードマネージャーが設定ファイルなどを探しに行く先のURLの設定をする場所です。

http://arduino.esp8266.com/stable/package_esp8266com_index.json

「OK」ボタンを押して設定画面を閉じます。

図4. ボードマネージャーのURLを入力します。その他の設定はそのままです。

「ツール」>「ボード」>「ボードマネージャー」で新しいボードをインストールするウィンドウを呼び出します。

図5. Arduino IDEには、ライブラリと同様にボードを管理する画面があります。
図6. 「NodeMCU」で検索してインストールする

検索ウィンドウで「NodeMCU」で検索して、esp8266 communityのESP8266パッケージをインストールします。インストール後、「ツール」>「ボード」で確認すると、ESP8266を使用したボードがたくさん出てきます。

図7. ESP8266ボードが新たに追加されました。

ここでは「NodeMCU 1.0」を選択して、可変抵抗とLEDを使った実験を行います。
先のESP32の実験から、ボードだけが変わります。今回も2枚のブレッドボードをまたぐように設置しました。

回路図

図8. 配線図

プログラム

スケッチもESP32から大きく変わりません。

#define LEDPIN D3  //(1)
#define ANALOGPIN A0

#define NETZWERKNAME "MeinWLAN"
#define PASSWORT "M.e.i.n)P.a-s/s-wo{rt"

#include "ESP8266WiFi.h"  //(2)

WiFiServer Server(80);
WiFiClient Client;
String Request;
 
void setup()
{
  pinMode(LEDPIN, OUTPUT);
  Serial.begin(115200);
  delay(100);
  Serial.println();
  Serial.print("Verbinde mit: ");
  Serial.println("MeinWLAN");//Serial.println(NETZWERKNAME);
 
  WiFi.begin(NETZWERKNAME, PASSWORT);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Erfolgreich. Eigene IP-Adresse: ");
  Serial.println(WiFi.localIP());

  Server.begin();
}
 
void loop() 
{
  Client = Server.available();

  if (Client)
  {
    Serial.println("Neuer Client");
    boolean leereZeile = true;
 
    while (Client.connected())
    {
      if (Client.available())
      {
        char c = Client.read();
        if (Request.length() < 100)
          Request += c;

        if (c == '\n' && leereZeile)
        {
          Serial.print("Request von Client: ");
          Serial.println(Request);
          if(Request.indexOf("ein")>0)
            digitalWrite(LEDPIN,HIGH);

          if(Request.indexOf("aus")>0)
            digitalWrite(LEDPIN,LOW);
                           
          Client.println("HTTP/1.1 200 OK");
          Client.println("Content-Type: text/html");
          Client.println("Connection: close"); 
          Client.println("Refresh: 2"); 
          Client.println();
          Client.println("<!DOCTYPE HTML>");
          Client.println("<html>");
          Client.print("Analogwert: ");        
          Client.print(analogRead(ANALOGPIN));
          Client.println("<br><br>"); 
          Client.println("<a href='?ein'>LED einschalten</a>");
          Client.println("<br><br>");
          Client.println("<a href='?aus'>LED ausschalten</a>");
          Client.println("</html>");
  
          Request = "";
          break;
        }
        
        if (c == '\n')
          leereZeile = true;
        else if (c != '\r')
            leereZeile = false;
      }
    }

    delay(1);
    Client.stop();
    Serial.println("Verbindung mit Client beendet.");
    Serial.println("");
  }
}

スケッチの解説

(1) ArduinoやESP32ではデジタル出入力ピンは数字だけで指定しましたが、NodeMCUでは「D」を付けた状態で指定します。

(2) WiFi接続に使用するライブラリが「ESP8266WiFi.h」に変わります。ESP8266ボードをインストールした際に一緒にインストールされています。

(3) ESP32とは異なり、アナログ入力の命令はArduinoと同じanalogRead()関数が使えます。

スケッチのアップロード後、ESP32の時と同じ動作をします。

シリアルモニタで確認したIPアドレスにアクセスすると、webサイトが表示されます。

最後に、「NodeMCU」という言葉は実験用のボード(基板)のことだけを意味するものではないことを付け加えておきます。ESP8266を中心に構築された、オープンソース・低コストのIoTプラットフォームとして開発・公開されています。(https://www.nodemcu.com/index_en.html)

このプラットフォームではESP8266にロードできるNodeMCUというフリーのOSが開発されていて、コンパイルをすることなく、Luaスクリプト言語を使ってプログラムをマイコン上で直接開発・実行することができます。

Filed Under: Arduino応用編 関連タグ:ESP8266, IoT, WiFi

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM