注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!
WiFi制御LED(アクセスポイント)
このプロジェクトでは、Webインターフェースを通じてLEDライトを制御することができます。ArduinoボードはWiFiアクセスポイントとして機能し、独自のローカルネットワークを作成します。そのネットワークにWebブラウザで接続すると、ボードのピン13に接続されたLEDをオン/オフするオプションが表示されます。プロジェクトは、シリアルモニターを通じてLEDの状態をリアルタイムでフィードバックし、デバッグと操作の流れを容易に理解できるようにします。
1. コードのアップロード
elite-explorer-kit-main\r4_new_feature\01-wifi_ap のパス下にある 01-wifi_ap.ino ファイルを開くか、このコードを Arduino IDE にコピーします。
注釈
Wi-Fi®サポートは、Arduino UNO R4 Coreに付属の内蔵 WiFiS3 ライブラリを通じて有効になります。コアをインストールすると、 WiFiS3 ライブラリも自動的にインストールされます。
arduino_secrets.h を作成または変更し、 SECRET_SSID と SECRET_PASS をWi-Fiアクセスポイントの名前とパスワードに置き換えます。ファイルには次のように記載されている必要があります:
//arduino_secrets.h header file
#define SECRET_SSID "yournetwork"
#define SECRET_PASS "yourpassword"
2. コードの説明
必要なライブラリのインポート
Wi-Fi機能のための
WiFiS3ライブラリと、パスワードなどの機密データのためのarduino_secrets.hをインポートします。#include "WiFiS3.h" #include "arduino_secrets.h"
設定と変数の初期化
Wi-Fi SSID、パスワード、キーインデックスを定義すると共に、LEDピンとWi-Fiステータスを初期化します。
char ssid[] = SECRET_SSID; char pass[] = SECRET_PASS; int keyIndex = 0; int led = LED_BUILTIN; int status = WL_IDLE_STATUS; WiFiServer server(80);
setup()関数シリアル通信を初期化し、Wi-Fiモジュールを設定します。
void setup() { // ... setup code ... // Create access point status = WiFi.beginAP(ssid, pass); // ... error handling ... // start the web server on port 80 server.begin(); }
また、uno R4 wifiのファームウェアが最新であるかどうかを確認します。最新版でない場合は、アップグレードの促進が表示されます。ファームウェアのアップグレードについては、 UNO R4 WiFiボードのラジオモジュールファームウェアの更新 を参照してください。
... String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } ...
ArduinoのデフォルトIPを変更するために、以下のコードを修正することも検討してください。
WiFi.config(IPAddress(192,48,56,2));
メイン
loop()関数Arduinoのコードにおける
loop()関数はいくつかの重要な操作を行います。具体的には以下のような操作です:アクセスポイントへのデバイスの接続または切断のチェック。
HTTPリクエストを行うクライアントの受信待ち。
クライアントのデータの読み取りと、そのデータに基づいたアクションの実行(例えば、LEDのオン/オフ)。
ここで、これらのステップをより理解しやすくするために、
loop()関数を詳しく見ていきましょう。Wi-Fiステータスのチェック
コードは最初にWi-Fiのステータスが変わったかどうかをチェックします。デバイスが接続または切断された場合、シリアルモニターにそれに応じた情報が表示されます。
if (status != WiFi.status()) { status = WiFi.status(); if (status == WL_AP_CONNECTED) { Serial.println("Device connected to AP"); } else { Serial.println("Device disconnected from AP"); } }
クライアントの受信待ち
WiFiClient client = server.available();はクライアントの受信待ちを行います。WiFiClient client = server.available();
クライアントリクエストの処理
クライアントの受信待ちを行い、HTMLウェブページを提供します。ユーザーが提供されたウェブページ上の「Click here to turn the LED on」または「Click here to turn the LED off」というリンクをクリックすると、ArduinoサーバーにHTTP GETリクエストが送信されます。具体的には、LEDを点灯させるためのURL「http://yourAddress/H」と、LEDを消灯させるためのURL「http://yourAddress/L」にアクセスされます。
WiFiClient client = server.available(); if (client) { // ... client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.print("<p style=\"font-size:7vw;\">Click <a href=\"/H\">here</a> turn the LED on<br></p>"); client.print("<p style=\"font-size:7vw;\">Click <a href=\"/L\">here</a> turn the LED off<br></p>"); // ... }
ArduinoのコードはこれらのGETリクエストを受信します。受信したテキスト行(HTTPヘッダー)の最後に
GET /Hと検出した場合、ピン13に接続されたLEDをHIGHに設定し、LEDを点灯させます。同様に、GET /Lと検出した場合、LEDをLOWに設定し、LEDを消灯させます。while (client.connected()) { // loop while the client's connected delayMicroseconds(10); // This is required for the Arduino Nano RP2040 Connect - otherwise it will loop so fast that SPI will never be served. if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out to the serial monitor if (c == '\n') { // if the byte is a newline character ... } else { // if you got a newline, then clear currentLine: currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } // Check to see if the client request was "GET /H" or "GET /L": if (currentLine.endsWith("GET /H")) { digitalWrite(led, HIGH); // GET /H turns the LED on } if (currentLine.endsWith("GET /L")) { digitalWrite(led, LOW); // GET /L turns the LED off } }
参照