How do you transfer data between different internet networks?


I would like to control arduino MKR WiFi 1010 through a smart phone using MIT app Inventor. My arduino will be connected at home to my home network. My smart phone will be connected to my office network. How I can transfer data for arduino control? Help please!
Here is my code for arduino:

#include <SPI.h> //What is used to communicate witht he WiFi chip
#include <WiFi101.h> //Wifi library fro Arduino MKR1000 and WiFi shield

int lControl = 6; //Digital pin that LED is connected to on the MKR1000
char ssid[] = "YourNetwork"; // your network SSID (name)
char pass[] = "YourPassword"; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS; //status of wifi

WiFiServer server(80); //declare server object and spedify port, 80 is port used for internet

void setup() {

// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {

while (true);


// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:

void loop() {
WiFiClient client = server.available(); // listen for incoming clients

if (client) { // if you get a client,
// Serial.println("new client"); // print a message out the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c =; // read a byte, then
// Serial.write(c); // print it out the serial monitor
if (c == '\n') { // if the byte is a newline character

      // if the current line is blank, you got two newline characters in a row.
      // that's the end of the client HTTP request, so send a response:
      if (currentLine.length() == 0) {
        // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
        // and a content-type so the client knows what's coming, then a blank line:
        client.println("HTTP/1.1 200 OK");
        client.print("Value at A0 is ");
        // The HTTP response ends with another blank line:
        // break out of the while loop:
      else {      // if you got a newline, then clear currentLine:
        currentLine = "";
    else if (c != '\r') {    // if you got anything else but a carriage return character,
      currentLine += c;      // add it to the end of the currentLine

    // Check to see if the client request was "GET /H" or "GET /L":
    if (currentLine.endsWith("GET /H")) {
      digitalWrite(lControl, HIGH);               // GET /H turns the LED on
    if (currentLine.endsWith("GET /L")) {
      digitalWrite(lControl, LOW);                // GET /L turns the LED off
// close the connection:


void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");

// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.println(" dBm");

In general, when you want to access your home network from outside you can use port forwarding. In your modem/router. You assign a specific port to your Arduino's ip address (e.g. 15000) and then you can access the Arduino from outside with http://<your_public_ip>:15000. You can find your public ip address in your modem/router.

Then you can use the web component from the connectivity tab to send data from your phone to your Arduino with the PostText method and let your Arduino handle the data.

Warning! Port forwarding is not a very safe method. Anyone who knows the port number can access your Arduino. A safer method is setting up your own VPN server to access your home network. You can use a Raspberry PI with OpenVPN:

You have to access the Arduino device passing trough the internet. So if you want to access it from everywhere you should use the mobile network, if you use your home wifi you will be able to access it only from your home. In the first case you have to set your mobile phone to use the mobile network and the Arduino device the office network so you have to set/configure the office router. Instead in the last case you have to set both your office and home routers. But... do you have access to your office router setup?

Use the MQTT protocol. For arduino you will find many libraries, for AppInventor there are extensions supporting MQTT. You can use any free broker (server) or build your own on Raspberry.