Morjens,
Android-puhelimelleni olen tehnyt ohjelman joka lähettää verkon yli Arduinolle UDP-paketin johon Arduino vastaa. Kun molemmat laitteet ovat sisäverkossa, puhelin vastaanottaa Arduinon paketin. Jos yhdistän puhelimella internetin kautta Arduinoon (julkinen IP ja porttiohjaus), puhelin lähettää kyllä paketin mutta ei vastaanota vastausta. Mikäköhän voisi olla?
Puhelimelle olen tehnyt tälläisen pätkän:
byte[] data = ("dataa").getBytes(); try { DatagramPacket packet = new DatagramPacket(data, data.length, arduinoAddress, arduinoPort); socket.send(packet); byte[] receiveData = new byte[1]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); socket.receive(receivePacket); System.out.println(new String(receivePacket.getData())); } catch(InterruptedIOException e) { e.printStackTrace(); return 2; } catch(IOException e) { e.printStackTrace(); }
Arduinolta taas löytyy tälläinen
void loop() { int packetSize = UDP.parsePacket(); if(packetSize) { UDP.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); String data = String(packetBuffer); for(int i = 0; i < UDP_TX_PACKET_MAX_SIZE; i++) { packetBuffer[i] = 0; } Serial.println(data); UDP.beginPacket(UDP.remoteIP(), UDP.remotePort()); UDP.print("1"); UDP.endPacket(); ...
Katselin netistä, eikä pitäisi operaattorien porttirajoitusten koskea käyttämääni porttia.
http://www.elisa.fi/saunalahti/asiakaspalvelu/
lainaus:
Normaalisti sisäänpäin kulkevassa liikenteessä on suljettuna portit: 135, 137-139, 445 ja 25
http://www2.dna.fi/tekniset-tiedot
lainaus:
Kaikista liittymistä on tietoturvasyistä johtuen estetty liikenne seuraaviin TCP/UDP-portteihin: 25, 135, 137, 138, 139, 445 ja 593.
No kannattaisi nyt aluksi edes paikantaa itse se, että onko vika siinä, ettei Arduino koskaan saa viestiä, vai siinä että sen lähettämä vastaus häviää jonnekin.
Olet ehkä tehnyt portinohjauksen väärin tai vastaavaa. Kuten Alchemisti sanoi, varmista, että viesti menee perille.
Vika ei ole porttiohjauksissa eikä siinä, ettei Arduino saisi viestiä.
Miten alustat yhteyden Arduino-koodissasi?
veikkaan että kun puhelin on "internetissä" eli ilmeisesti mobiiliverkossa niin se saattaa olla NATin takana eikä UDP-paketit välttämättä siitä johtuen tule puhelimen suuntaan.
Jotain sellasta siellä ehkä oli ongelmana. Muutinpahan ihan normaaliksi socketiksi, niin alkoi pelittää (ei ollut silti porttiohjauksissa: sekä UDP- että TCP-portit oli ohjattu).
Aihe on jo aika vanha, joten et voi enää vastata siihen.