質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

ESP8266でWiFiしたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,659

score 43

前提・実現したいこと

ESP8266を積んだNodeモジュールをArduinoとして使おうとしています。

ピリオドの前に何か問題があるということはわかりますが、
そのあたりのヘッダファイルをのぞいてみたりしましたが、
結局Grepなどを使ってもたどり着けませんでした。

発生している問題・エラーメッセージ

D:\Arduino\ESP32_LED_Train\ESP32_LED_Train.ino: In function 'void setup()':

ESP32_LED_Train:39:10: error: 'class WiFiServer' has no member named 'on'

   server.on("/RH", handleon(LED_R));  // IPアドレス+/Hの時 handleon()関数の起動を設定


ESP32_LED_Train:47:9: error: expected unqualified-id before '.' token

   Server.begin();        // サーバを開始

         ^

D:\Arduino\ESP32_LED_Train\ESP32_LED_Train.ino: In function 'void loop()':

ESP32_LED_Train:53:9: error: expected unqualified-id before '.' token

   Server.handleClient();  // ブラウザへのアクセスに応じて適切な関数を起動処理する

         ^

D:\Arduino\ESP32_LED_Train\ESP32_LED_Train.ino: In function 'void handleRoot()':

ESP32_LED_Train:61:9: error: expected unqualified-id before '.' token

   Server.Send(200, "text/HTML", temp);

         ^

該当のソースコード

#include <ESP8266WebServer.h>
#include <ESP8266WebServerSecure.h>
//#include <ESP8266WebServerSecureAxTLS.h>
//#include <ESP8266WebServerSecureBearSSL.h>

#include <SPI.h>
#include <WiFi.h>
#include <WiFiServer.h>

const char ssid[] = "SPWN_N34_3e32a6";
const char password[] = "6046e5d4b0d04";
WiFiServer server(80);
IPAddress ipadr;

#define LED_G 4
#define LED_R 5

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_G, OUTPUT);  // LED接続ポートを出力に設定
  pinMode(LED_R, OUTPUT);  // LED接続ポートを出力に設定
  digitalWrite(LED_G, LOW);  // 出力をLOWにしてLEDを消灯する
  digitalWrite(LED_R, LOW);  // 出力をLOWにしてLEDを消灯する
  Serial.begin(9600);  // シリアルモニタを115200bpsで初期化
  WiFi.mode(WIFI_STA);  // Wi-Fiのモードを設定
  WiFi.begin(ssid, password);  // 接続するSSID キーを指定してWi-Fiを開始
  Serial.println("Now Connecting");         // シリアルプリントの出力改行のみ
  while (WiFi.status() != WL_CONNECTED) {  // 接続が完了するまで待つ
    delay(500);  // 各回500msの時間待つ
    //Serial.print(".");  // 待ち時間500msごとに1ドット表示 接続が完了すると抜ける
  }
  ipadr = WiFi.localIP();
  Serial.println("");
  Serial.print("Connected to ");  // Wi-Fi接続を表示
  Serial.println(ssid);  // SSID表示
  Serial.print("IP address: ");
  Serial.println(ipadr);  // シリアルモニタにIPアドレスを表示

  Server.on("/", handleRoot);  // IPアドレスのみのアクセス時はhandleRoot()を起動
  Server.on("/RH", handleon(LED_R));  // IPアドレス+/Hの時 handleon()関数の起動を設定
  Server.on("/RL", handleoff(LED_R));  // IPアドレス+/Lの時 handleoff()関数の起動を設定
  Server.on("/GH", handleon(LED_G));  // IPアドレス+/Hの時 handleon()関数の起動を設定
  Server.on("/GL", handleoff(LED_G));  // IPアドレス+/Lの時 handleoff()関数の起動を設定
  Server.begin();        // サーバを開始

  Serial.println("HTTP server started");
}

void loop() {
  // put your main code here, to run repeatedly:
  Server.handleClient();  // ブラウザへのアクセスに応じて適切な関数を起動処理する

}

void handleRoot() {
  String temp = "Click <a href=\"/RH\">here</a> to turn the LED RED on.<br />";
  temp += "Click <a href=\"/RL\">here</a> to turn the LED RED off.<br />\n";
  temp += "Click <a href=\"/GH\">here</a> to turn the LED GREEN on.<br />";
  temp += "Click <a href=\"/GL\">here</a> to turn the LED GREEN off.\n";
  ~~server.send(200, "text/HTML", temp)~~;
  Server.send(200, "text/HTML", temp);
}

void handleon(int led) {
    digitalWrite(led, HIGH); // GET /H turns the LED on
    handleRoot();
}

void handleoff(int led) {
    digitalWrite(led, LOW); // GET /L turns the LED off
    handleRoot();
}

試したこと

WiFiServerのサンプルにしました。
書き込み官僚となりましたが、文字が赤色でした。

回答者の方のアドバイスにより
ServerのSを小文字から大文字に変更しました。

補足情報(FW/ツールのバージョンなど)

Windows10、
Arduino1.8.9

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • thkana

    2019/07/14 17:28 編集

    前にも言ったと思いますが、2016年の情報ではESP-12Eは日本でWiFiを使うと法律違反になるはずですが、その辺は大丈夫ですね? (最近技適を取ったとかいうことであればよいのですが)

    キャンセル

  • HiroPokeHero

    2019/07/14 19:27

    thkanaさん、
    ご指摘ありがとうございます。
    現時点では技適取得済みとのことです。
    ただ、そういった法律があることも今回知ることができて勉強になりました。

    キャンセル

  • thkana

    2019/07/14 21:38

    参考までに、Web上で「技適取得済」の情報が確認出来るところがありますか?

    キャンセル

回答 2

checkベストアンサー

0

回答者の方のアドバイスにより
ServerのSを小文字から大文字に変更しました。 

誰もそうしろなんて言ってなくて、エラーの内容を説明されただけでしょう。
なぜ、そうしたのですか?

で、「新しいエラー」はなんと言っているのか読みましたか? 英語だからダメ、とか言わないですよね。エラーメッセージが読めるようにならなくてはプログラミングなんて無理、と言っても過言ではありません。ちなみに、google翻訳に'expected unqualified'まで入れたら、サジェスチョンとして'expected unqualified-id before '' token'->「トークンの前には修飾されていないIDが必要です」まで出てきましたよ。その他、そのメッセージのままググってもいろいろヒットします。とにかく、.の前にあるものつまり'Select'がID(クラスとか変数とか関数とかの名前)として認められていない、ということです。

その他いろいろ目茶苦茶なので、今のプログラムは一旦忘れて、まずはArduinoのIDE(ESP8266ボード)に含まれているサンプルプログラムを動かして、そこから一歩ずつ改造していくのがよいのでは。(「試したこと:WiFiServerのサンプルにしました。」がそういう意味なのかしら? よくわからないけど)
IDEのメニュー[ファイル]-[スケッチ例]-(Generic ESP8266 Module用のスケッチ例)[ESP8266WebServer]-[HelloServer]
あたりがベースにするのによさそうに思いますけれど。server.on()もコンパイルを通っていますよ。
イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ESP32_LED_Train:39:10: error: 'class WiFiServer' has no member named 'on'

WiFiServerクラスには、onという名前のメンバはありません
というエラーですね。そこんところをどうにかしましょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/12 07:04

    ヒントをいただき、
    ありがとうございます。
    ヘッダファイルの違いでしょうか、
    本プログラムの参考にしたサイトをもう一度確認してみます。

    キャンセル

  • 2019/07/14 11:15

    クラスの綴り(大文字小文字)が間違っていたようです。

    最初
    ```ここに言語を入力
    server.on("/", handleRoot); // IPアドレスのみのアクセス時はhandleRoot()を起動
    server.on("/RH", handleon(LED_R)); // IPアドレス+/Hの時 handleon()関数の起動を設定
    server.on("/RL", handleoff(LED_R)); // IPアドレス+/Lの時 handleoff()関数の起動を設定
    ```

    変更後
    ```ここに言語を入力
    Server.on("/", handleRoot); // IPアドレスのみのアクセス時はhandleRoot()を起動
    Server.on("/RH", handleon(LED_R)); // IPアドレス+/Hの時 handleon()関数の起動を設定
    Server.on("/RL", handleoff(LED_R)); // IPアドレス+/Lの時 handleoff()関数の起動を設定
    ```

    そこで、新しいエラーが出てきました。

    以下

    キャンセル

  • 2019/07/14 11:15

    ピリオドの前に何か問題があるということはわかりますが、
    そのあたりのヘッダファイルをのぞいてみたりしましたが、
    結局Grepなどを使ってもたどり着けませんでした。

    ```

    ESP32_LED_Train:47:9: error: expected unqualified-id before '.' token

    Server.begin(); // サーバを開始

    ^

    D:\Arduino\ESP32_LED_Train\ESP32_LED_Train.ino: In function 'void loop()':

    ESP32_LED_Train:53:9: error: expected unqualified-id before '.' token

    Server.handleClient(); // ブラウザへのアクセスに応じて適切な関数を起動処理する

    ^

    D:\Arduino\ESP32_LED_Train\ESP32_LED_Train.ino: In function 'void handleRoot()':

    ESP32_LED_Train:61:9: error: expected unqualified-id before '.' token

    Server.Send(200, "text/HTML", temp);

    ^
    ```

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る