Hi guys,
Thanks in advance for reading and helping.
Ok, so I am trying to send data from an app on my android phone to my arduino wifi shield using the home wifi network.
I am using an app called packet sender that can send info if destination IP and destination port are known. ( https://play.google.com/store/apps/details?id=com.grayson.packetsender )
I am using this as my arduino code that I found on the website and forums etc.
#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>
int status = WL_IDLE_STATUS;
char ssid[] = "NETGEAR"; // your network SSID (name)
char pass[] = "harvey08"; // your network password (use for WPA, or use as key for WEP)
unsigned int localPort = 50505; // local port to listen on
char packetBuffer[255]; //buffer to hold incoming packet
IPAddress remote_ip(192, 168, 0, 4);
unsigned int remote_port = 50505;
char ReplyBuffer[] = "acknowledged"; // a string to send back
WiFiUDP Udp;
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue:
while(true);
}
// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
// you're connected now, so print out the data:
Serial.print("You're connected to the network");
delay(10000);
printWifiStatus();
Serial.println("\nStarting connection to server...");
// if you get a connection, report back via serial:
Udp.begin(localPort);
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize)
{
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remoteIp = Udp.remoteIP();
Serial.print(remoteIp);
Serial.print(", port ");
Serial.println(Udp.remotePort());
// read the packet into packetBufffer
int len = Udp.read(packetBuffer, 255);
if (len > 0) packetBuffer[len] = 0;
Serial.println("Contents:");
Serial.println(packetBuffer);
// send a reply, to the IP address and port that sent us the packet we received
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
WHEN , I open my serial monitor I see this.
Attempting to connect to WPA SSID: NETGEAR
You're connected to the networkSSID: NETGEAR
IP Address: 192.168.0.7
signal strength (RSSI):-82 dBm
Starting connection to server...
and that's where it all stops..
Following are the problems.
-
When I use the android app to send info to my shield , the app says verify if source socket is open .. So I looked into this and changed my laptop's incoming connections settings to allow all connections, this still didnt make any difference. I used these instructions Windows help & learning
-
I dont know what happens to trying to connect to server .. it just gets stuck there. I am not making any claims on programming , I can see the logic of the code but not necessarily how to build or debug it. Can anyone also explain how do you choose what port to receive information on? like how do you know its 2390 or 50505 ? sorry I read articles on google but no one explained how to choose one for UDP send or receive.
Many thanks