「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:t
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");
}
}