Ciao a tutti,
come ho detto in presentazione ho da poco preso un Arduino YUN con modulo Wi-Fi in quanto avrei piacere di far interagire un'applicazione con l'Arduino via Wi-Fi in modo da controllare luci e tapparelle in casa (per iniziare).
Al momento è da qualche giorno che sbatto la testa su un problema che non riesco a risolvere e non so più che pesci prendere.
Ho collegato il computer e l'Arduino a una rete Wi-Fi LAN fornita da un web pocket (senza sim inserita).
Premetto che la comunicazione tra i 2 funziona perché posso uploadare gli sketch sull'Arduino via Wi-Fi senza problemi.
Il mio obiettivo al momento è quello di far accendere un banalissimo LED premendo un pulsante sulla mia applicazione in Unity. Ecco il codice:
UNITY 3-D
using UnityEngine;
using System.Collections;
using System;
using System.IO;
using System.Text;
using System.Net.Sockets;
public class ClientSocket: MonoBehaviour {
bool socketReady = false;
TcpClient mySocket;
public NetworkStream theStream;
StreamWriter theWriter;
public String Host = "192.168.8.100";
public Int32 Port = 5555;
public bool lightStatus;
void Start() {
setupSocket ();
}
void Update() {
}
public void setupSocket() {
try {
mySocket = new TcpClient(Host, Port);
theStream = mySocket.GetStream();
theWriter = new StreamWriter(theStream);
socketReady = true;
}
catch (Exception e) {
Debug.Log("Socket error:" + e);
}
}
public void LedOn(){
if (!socketReady)
return;
String temp = "1";
theWriter.Write (temp);
theWriter.Flush ();
}
public void LedOff(){
if (!socketReady)
return;
String temp = "0";
theWriter.Write (temp);
theWriter.Flush ();
}
}
e qua il codice ARDUINO
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
YunServer server;
int LED = 13;
char thisChar = 0;
boolean alreadyConnected = false; // whether or not the client was connected previously
void setup() {
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
delay(3000);
digitalWrite(LED, LOW);
Serial.begin(9600);
Bridge.begin();
digitalWrite(LED, HIGH);
delay(2000);
server.listenOnLocalhost();
digitalWrite(LED,LOW);
delay(2000);
server.begin();
digitalWrite(LED,HIGH);
}
void loop () {
YunClient client = server.accept();
digitalWrite(LED,LOW);
if(client){
digitalWrite(LED,HIGH);
delay(15000);
thisChar = client.read();
client.flush();
if (thisChar == 1) {
digitalWrite(LED, HIGH);
}
if(thisChar == 0) {
digitalWrite(LED,LOW);
}
delay(50);
}
}
ho inserito alcune accensioni/spegnimenti di luce con successivi delay per seguire il codice e vedere cosa succede e sembra andare tutto bene fino al comando if(client) dentro al quale non entra mai.
Premetto ulteriormente che io carico prima lo Sketch sull'arduino per farlo eseguire e poi mando in play l'applicazione Unity.
Qualsiasi suggerimento è ben accetto.
Saluti!