Arduino UNO R4 WiFiでLEDを制御するーTCP通信による方法ー

Arduino

パソコンとAruduino Uno R4 WiFiをWiFiで連携し、TCP通信でパソコンから「1」を送信すればLEDが点灯し、「0」を送信すればLEDが消灯する方法についてメモしておきます。

Arduino側のプログラム

ArduinoをTCPサーバーにし、パソコンから送られてくるデータによってLEDの動作を変えるプログラムです。

#include <WiFiS3.h>

const char ssid[] = "***";         // ←あなたのWiFi SSID
const char pass[] = "***";     // ←あなたのWiFiパスワード

int status = WL_IDLE_STATUS;

WiFiServer server(5000);  // TCPポート番号(任意で変更可)
WiFiClient client;

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

  // WiFi接続

  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("Failed to WiFi communication.");
    while(true);
  }
  while (status != WL_CONNECTED) {
    Serial.print("Try Connect to ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);

    delay(10000);
  }

  Serial.println("\nWiFi connected.");
  Serial.print("IP address: ");
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);

  server.begin();  // TCPサーバー起動
  Serial.println("TCP server started");
}

void loop() {
  if (!client || !client.connected()) {
    client = server.available();  // 新しいクライアントを取得
    if (client) {
      Serial.println("Client connected");
    }
  }

  if (client && client.connected() && client.available()) {
    char command = client.read();
    Serial.print("Received: ");
    Serial.println(command);

    if (command == '1') {
      digitalWrite(LED_BUILTIN, HIGH);
    } else if (command == '0') {
      digitalWrite(LED_BUILTIN, LOW);
    }

    // 応答送信(オプション)
    client.print("ACK: ");
    client.println(command);
  }
}

パソコン側のプログラム

Pythonによるプログラムです。パソコンからTCPサーバー(Arduino)へ向けてデータを送ります。

import socket

HOST = "172.20.10.2"  # ← ArduinoのIPアドレスに置き換えてください
PORT = 5000           # ← Arduinoスケッチと一致させてください

while(1):
    led = input('led 点灯:1、消灯:0、終了:q → ')
    if led == 'q':
        break

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((HOST, PORT))
        s.sendall(led.encode())  # LEDをONにするには '1' を送る

まとめ

これでやっとパソコン側からのデータをWiFiを経由してArduinoに送ることができました。次回はこれを音声認識と組み合わせてみたいと思います。

コメント

タイトルとURLをコピーしました