Raspberry Pi Android App communication

Hello everyone

Because app's are being used almost everywhere, I decided to make my own tutorial on how to make an app and connect to a MySQL database hosted on a raspberry pi.

Raspberry Pi Android App communication

For exchanging the data between the server and the client, I'm going to use JSON.

Step 1: Parts

For this instructables you'll need several things.

  • An android phone or the emulator from android studio
  • A raspberry pi (I tried B and 2B)
  • An internet connection with port 80 forwarded to the IP of your Raspberry Pi (How to forward port 80?)
    you can do it without forwarding, but then it's only going to work inside your network
  • A computer (I'm running windows 8.1. But ,as mentioned in the comments, you can also use mac or linux)Raspberry Pi Android App communication

Step 2: Software for the computers

Software for the computers

For this instructables you'll need android studio from Google.

Step 3: Software Raspberry Pi

I'm assuming you already have a running Raspberry Pi with raspbian. Otherwise: How to set up a raspbian?.

Software Raspberry Pi

For the Raspberry Pi you'll also need software. As server I'm using:

  • Apache 2
  • PHP
  • MySQL
  • PHPMyadmin (Not needed but recommended)

To install apache 2, PHP and MySQL I used this tutorial.
To install PHPmyadmin I used this tutorial.

Step 4: Creating the database using phpmyadmin

Creating the Database Using Phpmyadmin

First open a web-browser and go to:
IP_RPi/phpmyadmin

Login to phpmyadmin
Click Databases
Create new database: Parts
Press create.

Open the database Parts.
Create new table Parts with 3 fields.
Press Start

First column:

column: ID
Type: INT
Auto increment: v

Second column:
column: Name
Type: VARCHAR
Length: 30

Third column:
column: part_nr
Type: INT

Press Save

Step 5: Server side scripting

On the Raspberry Pi we'll need 4 files. You need to place them in the www directory of your raspberry pi:

Server Side Scripting

The db_config file is used for storing the username, password and database name
The db_connect file is used to connect to the database specified in the db_config file.
The db_create file is used to create a row in the table in the connected database.
The db_view file is used to get all data stored in the database.

Step 6: Writing an app (Layout)

In this step I'll explain how to make a simple app using android studio.
Here we will make the layout of the app and in the next step I'll explain how to make the app working and how to communicate with the raspberry pi server.

Writing an app (Layout)

So first start Android Studio.

Give your app a name and choose the directory to place it. Press Next.
Choose which devices you would like to support. I'm using phones starting from android 4.0.3.
After that you need to choose the activity. Choose: “Blank Activity”.
Let the last screen as it is.

After all these steps, you get an example “hello world” app.

In activity_main.xml remove the textview element at the right bar.

In values/strings.xml remove:

Hello world!

Go back to main_activity.xml

Drag a linear layout (vertical) to the top left corner of the screen.

Drag 2 text fields to the screen. The first one plaintext and the other one Number.

At the right scroll down untill you see “id”.
Change this for the first one to Name and for the second one to part_nr.

At the right scroll down untill you see “hint”.
Change this for the first one to Name and for the second one to Part Number.

Now drag a button onto the screen and change “text” to Send.

Now is the layout done.

You can test the app by connecting your phone to your computer and compiling the app.(The green arrow a the top)
This will take a while.

It should look something like the last image.

Up to the coding of the app.

Step 7: Writing an App (Java Code)

For making an app work, you don't only need a layout. You also need the code running in the background.

Writing an App (Java Code)
The language we are going to use is Java, because all android apps are written in Java. So lets start coding.

First of all, you need to download the attached file.
This file is a library so you can easily use JSON.

Place this file in:
directiory/app_name/app/src/main/java/company/app_name/JSONParser.java

For me it's:
C:/Users/Laurens1/Desktop/instructables/Instructables/app/src/main/java/Laurens_wuyts/Instructables/JSONParser.java

After that you can open JSONParser in android studio. You now need to change the first line to:
package company.app_name;

Ok now we can start writing the main code.
Open the file MainActivity.java

First make a new Progress-dialog. This is used to display when the code is executing and you need to wait.

Place this in the main class.
private ProgressDialog pDialog;

Then we need a JSONparser object to send the data. So place this line under the previous line:
JSONParser jsonParser = new JSONParser();

Now we need two EditText items, so we can extrude the inserted text. This goes under the JSONParser.
EditText editText;
EditText editText2;

We move on to the oncreate function. Here we need to link the EditTexts from above with the real edittexts in the layout. You do it like this:
editText = (EditText) findViewById(R.id.Name);
editText2 = (EditText) findViewById(R.id.part_nr);

At the end we need to create a new class for connecting to the server and sending the previous typed info.
This is the class Create_part:

class Create_Part extends AsyncTask {

@Override protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage(“Sending part to the database…”); //Set the message for the loading window
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show(); //Place the loading message on the screen
}

@Override protected String doInBackground(String… args) {

String String_name = editText.getText().toString(); //Get the inserted text from the editText files
String Int_Part = editText2.getText().toString();

List params = new ArrayList<>();
params.add(new BasicNameValuePair(“Name”, String_name)); //Add the parameters to an array
params.add(new BasicNameValuePair(“part_nr”, Int_Part));

// Do the HTTP POST Request with the JSON parameters
// Change “RaspberryPi_IP to your home IP address or Noip service

JSONObject json = jsonParser.makeHttpRequest(“RaspberryPi_IP/db_create.php”, “POST”, params);

try {

int success = json.getInt(“success”);

if(success == 1){

Intent i = new Intent(getApplicationContext(), ConfirmActivity.class);
// Open a new activity to confirm it was sent. We're going to create it later.
startActivity(i);
finish();

}

} catch (JSONException e) {

e.printStackTrace();

}

return null;

}

protected void onPostExecute(String file_url){

pDialog.dismiss(); // Close the loading window when ready

}

}

Now you can make a new function called Send. In this function you call Create_Part. Like so:

public void Send(View view) {

new Create_Part().execute();

}

In the activity_main.xml you now change the onclick action of the button on the right to:
Send

Ok your almost done, now you only need to make a new activity like you see in the image.

Change the activity name to: ConfirmActivity

Click Finish

Now go again to strings.xml and change the “hello_world” string from Hello World! to The part was created.

Now it should be done.

Rebuild the app and test it on your phone!

Step 8: Resume

In this instructables we saw how to make a basic android app and connect it to a php mysql server.

I'm going to make a video for this tutorial, but now I don't have time for it.

If you have questions/remarks please share them and I will see if I can answer them.

Thank you very much for following this instructables.

Laurens Wuyts

P.S. Please be kind, it's my first instructables.

Source: Raspberry Pi Android App communication


About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top