2026年3月24日火曜日

golangで公開ブローカへpub成功

package main import ( "fmt" "time" mqtt "github.com/eclipse/paho.mqtt.golang" ) func main() { // 1. MQTTブローカーの設定 broker := "tcp://broker.hivemq.com:1883" // 公開ブローカー topic := "fseigojp/test" // smart-appで受信できた clientID := "go_client_pub" // 名前はなんでもよかった opts := mqtt.NewClientOptions() opts.AddBroker(broker) opts.SetClientID(clientID) // 接続ロスト時のハンドラ(オプション) opts.OnConnectionLost = func(c mqtt.Client, err error) { fmt.Printf("Connection lost: %v\n", err) } // 2. クライアントの作成と接続 client := mqtt.NewClient(opts) if token := client.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } fmt.Println("Connected to", broker) // 3. メッセージのパブリッシュ payload := fmt.Sprintf("Hello from Go! Time: %s", time.Now().Format(time.RFC3339)) token := client.Publish(topic, 1, false, payload) token.Wait() // 完了を待つ fmt.Printf("Published to %s: %s\n", topic, payload) // 4. クライアントの切断 client.Disconnect(250) fmt.Println("Disconnected") }

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




2026年3月21日土曜日

gobot uno3-builtinLED

scratchino,johnfive同様にuart制御である、ラズパイやesp8266でもOKみたい 

package main

import (

"time"

"gobot.io/x/gobot"

"gobot.io/x/gobot/drivers/gpio"

"gobot.io/x/gobot/platforms/firmata"

)

func main() {

adaptor := firmata.NewAdaptor("COM8")

led := gpio.NewLedDriver(adaptor, "13")


work := func() {

gobot.Every(1*time.Second, func() {

led.Toggle()

})

}


robot := gobot.NewRobot("bot",

[]gobot.Connection{adaptor},

[]gobot.Device{led},

work,

)


robot.Start()

}


2026年3月18日水曜日

teratermでuno r4のLED制御(モータなんかへ転用可)

 Arduino Uno R4(Minima / WiFi共通)で、Tera Termなどのシリアルモニタから文字を入力して、オンボードのBuilt-in LED(L)をオン/オフするArduinoコードです。

Arduino IDE用プログラムコード
cpp
void setup() {
  // シリアル通信を開始 (ボーレートは115200)
  Serial.begin(115200);                
  // LEDのピンを出力に設定
  pinMode(LED_BUILTIN, OUTPUT);
  
  Serial.println("Arduino Uno R4 LED Control");
  Serial.println("Type '1' to turn ON, '0' to turn OFF");
}

void loop() {
  // シリアルデータが届いているか確認
  if (Serial.available() > 0) {
    char incomingByte = Serial.read(); // 1バイト読み込み

    if (incomingByte == '1') {
      digitalWrite(LED_BUILTIN, HIGH); // LEDオン
      Serial.println("LED: ON");
    } 
    else if (incomingByte == '0') {
      digitalWrite(LED_BUILTIN, LOW);  // LEDオフ
      Serial.println("LED: OFF");
    }
  }
}
Tera Termでの操作方法
  1. 接続:
    • Arduino Uno R4をUSBでパソコンに接続します。
    • Arduino IDEで上記コードを書き込みます。
  2. Tera Term設定:
    • Tera Termを起動し、Arduinoが接続されているシリアルポート(COMポート)を選択します。
    • [設定] -> [シリアルポート] で、ボーレート(Speed)を 115200 に設定します。
    • [設定] -> [端末] で、改行コードを 送信: CR+LF受信: CR+LF に設定します(必須ではありませんが推奨)。
  3. LED操作:
    • キーボードで 1 を入力するとLEDが点灯します。
    • キーボードで 0 を入力するとLEDが消灯します。
技術的な特徴
  • LED_BUILTIN: Uno R4では自動的に適切なピン(通常はデジタル13番)に割り当てられます。
  • 通信速度: 115200bpsを使用しています。
  • 対応ボード: Uno R4 MinimaおよびWiFiの両方で動作します

2026年3月17日火曜日

golang /?temp=xx.1%humid=yy.1でfileに書き/で、それを読み表示

 package main 

import (

"fmt"

"html/template"

"log"

"net/http"

"os"

"strings"

"sync"

)


// テンプレート用データ

type PageData struct {

Temp  string

Humid string

}


var (

tmpl *template.Template

once sync.Once

)


// テンプレート読み込み

func initTemplate() {

var err error

tmpl, err = template.ParseFiles("index.html")

if err != nil {

log.Fatalf("テンプレート読み込み失敗: %v", err)

}

}


func handler(w http.ResponseWriter, r *http.Request) {


once.Do(initTemplate)


if r.Method != http.MethodGet {

http.Error(w, "GETのみ対応", http.StatusMethodNotAllowed)

return

}


query := r.URL.Query()

temp := query.Get("temp")

humid := query.Get("humid")


// ------------------------

// データ保存

// ------------------------

if temp != "" && humid != "" {


log.Printf("受信 temp=%s humid=%s\n", temp, humid)


file, err := os.OpenFile("data.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

if err != nil {

log.Println("保存エラー:", err)

} else {

defer file.Close()


line := fmt.Sprintf("temp=%s,humid=%s\n", temp, humid)

file.WriteString(line)

}

}


// ------------------------

// / の場合 data.txt 読み込み

// ------------------------

if temp == "" && humid == "" {


b, err := os.ReadFile("data.txt")

if err == nil {


lines := strings.Split(string(b), "\n")


for i := len(lines) - 1; i >= 0; i-- {


if lines[i] != "" {


line := lines[i]


parts := strings.Split(line, ",")

if len(parts) == 2 {


t := strings.Split(parts[0], "=")

h := strings.Split(parts[1], "=")


if len(t) == 2 && len(h) == 2 {

temp = t[1]

humid = h[1]

}

}


break

}

}

}

}


data := PageData{

Temp:  temp,

Humid: humid,

}


err := tmpl.Execute(w, data)

if err != nil {

http.Error(w, err.Error(), http.StatusInternalServerError)

}

}


func main() {


http.HandleFunc("/", handler)


addr := "192.168.150.188:8080"


log.Println("サーバ起動 http://" + addr)


err := http.ListenAndServe(addr, nil)

if err != nil {

log.Fatal(err)

}

}

------------------------------uno r4 wifi---------------------------------------------------

#include "WiFiS3.h"
#include "secrets.h"
// Wi-Fi設定

int port = 8080;

WiFiClient client;

void setup() {
  Serial.begin(9600);
  while (WiFi.begin(ssid, pass) != WL_CONNECTED) delay(1000);
}

void loop() {
  if (client.connect(server, port)) {
    // GETリクエストの構築
    String url = "/?temp=34.5&humid=56.1";
    client.print("GET " + url + " HTTP/1.1\r\n");
    client.print("Host: " + String(server) + "\r\n");
    client.print("Connection: close\r\n\r\n");
    client.stop();
  }
  delay(8000);
}
今後はdht11から読み込むコードへrefactoring

2026年3月7日土曜日

xampp そしてGetリクでデータを保存する

xreaなら永続的にwordressOK,paizacloudなら一時的にOK(十分かも)

indows 11でXAMPPを使ってPHPを動かすには、公式サイトからインストーラーをダウンロード・実行し、XAMPPコントロールパネルでApacheを起動します。PHPファイルは
> C:\xampp\htdocs に保存し、ブラウザで http://localhost/ファイル名.php にアクセスして動作を確認します。
> 手順の概要:
>
> ダウンロード・インストール: XAMPPをインストールします。
> Apacheを起動: コントロールパネルでApacheの[Start]をクリック。
> PHPファイルを作成: C:\xampp\htdocs フォルダに test.php などを保存。
> ブラウザで確認: http://localhost/test.php にアクセス。
>
> この動画でXAMPPのインストールと動作確認の手順を確認できます:
1. インストール: XAMPPの公式サイトからWindows版をダウンロードし、インストールします。管理者として実行でインストール先のフォルダはデフォルトのまま(C:\xampp)にすることをおすすめします  

2. コントロールパネルの操作: インストール後、XAMPP Control Panelを起動し、Apacheの「Start」ボタンをクリックします。Apacheの背景が緑色になれば準備完了です。

 3. PHPファイルの作成: C:\xampp\htdocs フォルダの中に、メモ帳などのエディタでPHPファイル(例: hello.php)を作成します。

> php
>
> <?php
> echo "Hello, XAMPP!";
> ?>
>
> 4. ブラウザで確認: ブラウザを開き、アドレスバーに http://localhost/hello.php と入力します。ブラウザ画面に
> "Hello, XAMPP!" と表示されれば成功です。
>
> 注意点:
>
> ポート80が他のアプリケーション(IISやSkypeなど)で使用されている場合、Apacheが起動しません。
> データベースを使用する場合は、MySQLの「Start」をクリックします。
> PHPのバージョンは、最新のXAMPPをインストールすることで自動的に設定されます。
>

ーーーーーlocalhostでなくLAN内からアクセスしたい場合ーーーー

 Windows 11上のXAMPPをIPアドレス(例:http://192.168.x.x)でアクセスできるようにするには、以下の手順で設定を行います。主な作業は「IPアドレスの確認」「ファイアウォールの設定」「Apacheの設定」です。

手順1: Windows 11のIPアドレスを確認する

スタートボタンを右クリックし、「ターミナル」または「コマンドプロンプト」を開きます。
ipconfig と入力し、Enterキーを押します。
表示された情報の中から「IPv4 アドレス」(例: 192.168.1.10)をメモします。

手順2: WindowsファイアウォールでApacheのアクセスを許可する
外部(スマホや他のPC)からアクセスするために、Windowsのセキュリティ設定を変更します。

タスクバーの検索で「Windows ファイアウォールを介したアプリの許可」を検索して開きます。
「設定の変更」ボタンをクリックします。
リストから「Apache HTTP Server」を探し、チェックボックスがオン(パブリック・プライベート両方)になっていることを確認します。
もしリストになければ、「別のアプリの許可」から C:\xampp\apache\bin\httpd.exe を追加します。

手順3: Apacheの設定ファイル (httpd-xampp.conf) を変更する
デフォルトでは外部からのアクセスが拒否されているため、設定を変更します。

XAMPPコントロールパネルを開き、Apacheの「Config」ボタンをクリックし、Apache (httpd-xampp.conf) を選択します。
ファイル内で <Directory "C:/xampp/phpMyAdmin"> などのブロックを探し、Require local
と書かれている箇所を Require all granted に書き換えます。

※この変更により、同じLAN内の端末から誰でもアクセスできるようになります。

手順4: Apacheを再起動する

XAMPPコントロールパネルでApacheの「Stop」をクリックし、再度「Start」をクリックして再起動します。


手順5: IPアドレスでアクセス確認
別のPCまたはスマホのブラウザで、手順1で確認したIPアドレスを入力します。

例: http://192.168.x.x/
XAMPPのダッシュボードが表示されれば成功です。

________________________________
トラブルシューティング

アクセスできない場合: セキュリティソフトが通信をブロックしている可能性があります。一時的にファイアウォールをオフにして確認してください(確認後は必ず戻してください)。
別PCから接続不可の場合: 端末同士が同じWi-Fi(またはLAN)に接続されているか確認してください。IPアドレスが変わる: DHCP環境では再起動時にIPアドレスが変わることがあります。固定IPアドレス運用をおすすめします。

> > Windows 11 ProにXAMPP(Apache, MariaDB, PHP,
> > Perl)をインストールする手順を解説します。XAMPPを導入することで、ローカルPC上でWebアプリケーション開発環境を簡単に構築できます。
> > 1. XAMPPのダウンロード
> >
> > 公式サイトにアクセス: Apache Friends へアクセスします。
> > Windows版をダウンロード: Windows向けの最新版(PHP 8.2 または 8.3が推奨)の「XAMPP for
> > Windows」をダウンロードします。
> > XAMPP Installers and Downloads for Apache Friends +2
> >
> > 2. インストール手順
> >
> > インストーラーの実行: ダウンロードした.exeファイルをダブルクリックして起動します。
> >
> > ヒント: 右クリックして「管理者として実行」を選択すると、権限トラブルを回避しやすいです。
> >
> > 警告表示: UAC(ユーザーアカウント制御)の警告が出た場合は「OK」をクリックします。
> > ウィザードの進行: 「Next」をクリックして進めます。
> > コンポーネントの選択: デフォルト(全てにチェック)のままで「Next」をクリックします。
> > インストールフォルダの選択: デフォルトの C:\xampp のまま「Next」をクリックします。
> > 言語の選択: Englishを選択し「Next」をクリックします。
> > インストール開始: 「Next」をクリックするとインストールが始まります。
> > ファイアウォールの許可: インストール中にWindows
> > Defender(ファイアウォール)がアクセスをブロックする通知が出た場合、「プライベートネットワーク」にチェックを入れてアクセスを許可します。
> > 完了: 「Finish」をクリックしてウィザードを閉じます。「Do you want to start the Control Panel
> > now?」にチェックを入れておくと、そのままコントロールパネルが起動します。
> > YouTube +4
> >
> > 3. 起動と動作確認
> >
> > コントロールパネルを開く: Windowsのスタートメニューから「XAMPP Control Panel」を検索して起動します。
> > ApacheとMySQLを起動: 「Actions」欄の「Start」ボタンをクリックします。緑色になれば正常に起動しています。
> > ブラウザでアクセス: ブラウザを立ち上げ、アドレスバーに http://localhost/ と入力してアクセスします。
> > ダッシュボード表示: XAMPPのダッシュボード画面が表示されれば、インストールは成功です。
> > > Windows 11でXAMPPを起動するには、C:\xamppフォルダー内のxampp-control.exeを管理者権限で実行します。スタートメニューの「すべて」から探すか、タスクトレイのアイコンから「Show/Hide」をクリックしてコンパイルを開き、ApacheやMySQLの「Start」ボタンを押してサービスを開始してください。
> > > 主な操作手順:
> > >
> > > インストール先へ移動: 通常は C:\xampp にインストールされます。
> > > 起動: xampp-control.exe を右クリックし、「管理者として実行」を選択します。
> > > モジュール開始: ApacheやMySQLの「Start」をクリックして緑色になれば起動完了です。
> > >
> > > 起動しない場合の対処法:
> > >
> > > 権限不足: XAMPPを右クリックし、「管理者として実行」を選んで起動してください。
> > > ポート競合: ポート80(Apache)が他のアプリで使用されている場合、サービスを止めるかポートを変更します。
> > > ファイアウォール: Windows Defenderがブロックしている場合、プライベートネットワークでのアクセスを許可します。
> > > タスクトレイ: コンパイルが開かない場合は、タスクトレイのXAMPPアイコンから表示してください。
> > >
> > > 再起動時、セキュリティの警告(Windows Defender)が表示された場合は、「アクセスを許可する」を選択して許可してください。

ーーー ファイル読み書き と Getきりわけ ーーーー
> > > > <?php
> > > > $dataFile = 'data.txt'; // 保存先ファイル
> > > > $dataToSave = ""; // 読み込みまたは保存するデータ
> > > >
> > > > // --- 切り分け処理 ---
> > > > if (isset($_GET['save']) && !empty($_GET['save'])) {
> > > >     // 1. GET命令(save)でデータが送られてきた場合:データを保
> > > >     $dataToSave = $_GET['save'];
> > > >     file_put_contents($dataFile, $dataToSave);
> > > >     echo "データを保存しました: " . htmlspecialchars($dataToSave);
> > > > } else {
> > > >     // 2. 通常のアクセスの(または別のGETパラメータ)の場合:保存データから読み出し
> > > >     if (file_exists($dataFile)) {
> > > >         $dataToSave = file_get_contents($dataFile);
> > > >         echo "保存データから読み出しました: " . htmlspecialchars($dataToSave);
> > > >     } else {
> > > >         echo "保存データはありません。";
> > > >     }
> > > > }
> > > > ?>

2026年3月6日金曜日

golang and nodejs on ubuntu in wsl2

---------------------golang--------

 https://qiita.com/riiiii/items/eac0d5cabf6cac2f6902でインストできた

tar.gzを~にもってくるのはググった ちょっとメンド。。。

------------------------------以下はnodejs------------------------

https://learn.microsoft.com/ja-jp/windows/dev-environment/javascript/nodejs-on-wsl