2026年3月23日月曜日

golang :wifiLAN内のuno r4 wifiのLED制御 ・ uno r4 wifi 単体でも


 「ArduinoをWebサーバーにする」方法が最も簡単で確実です。Arduino R4 WiFiの標準ライブラリ(WiFiS3)だけで完結

1. Arduino側のコード

以下のスケッチをコピーして、SSIDとパスワードを書き換えて書き込んでください。/led/on で点灯、/led/off で消灯します。

#include "WiFiS3.h"

char ssid[] = "あなたのSSID";

char pass[] = "あなたのパスワード";

WiFiServer server(80);

void setup() {

  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(9600);

  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED) delay(500);

  server.begin();

  Serial.print("IP Address: ");

  Serial.println(WiFi.localIP());

}


void loop() {

  WiFiClient client = server.available();

  if (client) {

    String req = client.readStringUntil('\r');

    if (req.indexOf("GET /led/on") != -1) digitalWrite(LED_BUILTIN, HIGH);

    if (req.indexOf("GET /led/off") != -1) digitalWrite(LED_BUILTIN, LOW);

    client.println("HTTP/1.1 200 OK\n\nOK");

    client.stop();

  }

}

※ 書き込み後、シリアルモニタに表示される IPアドレス をメモしてください。

2. Go言語側のコード

Goからは標準の http パッケージを使って、ArduinoのURLを叩くだけです。

package main

import (

"fmt"

"net/http"

"time"

)


func main() {

// ArduinoのIPアドレスに書き換えてください

baseURL := "http://192.168.x.x"

for {

// LED ON

fmt.Println("LED ON")

http.Get(baseURL + "/led/on")

time.Sleep(1 * time.Second)


// LED OFF

fmt.Println("LED OFF")

http.Get(baseURL + "/led/off")

time.Sleep(1 * time.Second)

}

}

コードは注意してご使用ください。


この方法のメリット

ライブラリ不要&安定性: Arduino R4 WiFi公式の WiFiS3 ライブラリを使うため、接続が非常に安定します。

拡張性: ブラウザから http://IPアドレス/led/on と入力するだけでも操作OK

まずは ArduinoのシリアルモニタにIPアドレスが表示されるか 確認してみてください!=>数回unoのリセットをかけんとipが0.0.0.0となる、secrets.h必要?

ーーーーーーーーーーーーーーーーーーーーーーーーー

softapの場合はsecrets.h設定不要だった
#include "WiFiS3.h"

// アクセスポイントの設定
char ssid[] = "UNO-R4-AP"; // 任意のSSID
char pass[] = "password";  // 8文字以上のパスワード
int status = WL_IDLE_STATUS;

WiFiServer server(80); // 80番ポートでサーバーを起動

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);

  // APを作成
  Serial.print("Creating access point named: ");
  Serial.println(ssid);
  status = WiFi.beginAP(ssid, pass);

  if (status != WL_AP_LISTENING) {
    Serial.println("Creating access point failed");
    while (true);
  }

  // サーバー起動
  server.begin();

  // IPアドレス表示
  IPAddress ip = WiFi.localIP();
  Serial.print("AP IP address: ");
  Serial.println(ip);
}

void loop() {
  WiFiClient client = server.available(); // クライアントの接続を待つ

  if (client) {
    Serial.println("new client");
    String currentLine = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n') {
          if (currentLine.length() == 0) {
            // HTTPレスポンスの送信
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.print("Click <a href=\"/H\">here</a> to turn the
LED on.<br>");
            client.print("Click <a href=\"/L\">here</a> to turn the
LED off.<br>");
            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }

        // URLによるLED制御
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(LED_BUILTIN, HIGH);
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(LED_BUILTIN, LOW);
        }
      }
    }
    client.stop();
    Serial.println("client disconnected");
  }
}




0 件のコメント:

コメントを投稿