liamsgotgenes
liamsgotgenes

Reputation: 31

Interface between Raspberry Pi and Android

I am trying to do some wacky home automation which will require me to send a signal from my Android phone to my Pi 3 in order to execute a script to control a motor using the GPIO pins.
The only part I'm stumped on is the best way to connect the Android and Pi.

I've read so many different things and it's all overwhelming, the amount of differing answers I've seen.

So far I'm leaning towards using Jsch in my app to ssh into the Pi and execute the command, but I have been told this is silly.

Can anybody explain to me why this is a bad idea and explain to me a better one? Ideally the phone app would be able to connect over both local network and other networks.

Upvotes: 0

Views: 471

Answers (3)

OneCricketeer
OneCricketeer

Reputation: 192023

Nothing is wrong with SSH, but people typically use web servers on the Pi plus HTTP requests on the Android side. Or you can run your own protocol via a raw socket connection.

SSH commands might be more secure if you use SSH keys.

Otherwise, you'd be exposing your commands to anyone snooping on your internet traffic, and random people will be controlling your devices

Either way, if you want access both internal and external to home, you can do more research to see if you can "port forward" your router

Upvotes: 1

user1209216
user1209216

Reputation: 7984

Yes, ssh is silly solution. I suggest to develop rest api webservice, host it on your PI and invoke it from your Android app

Upvotes: 0

Kevin Boone
Kevin Boone

Reputation: 4307

The advantage of using HTTP for this sort of thing is that it potentially creates its own user interface. What I mean by this is that, if the interface on the Pi is a Web server, then you have a way to provide an HTML/JavaScript interface to your Android device, and thus avoid the need to create an Android app at all -- the user just needs a browser. The whole user interface is managed from the Pi.

I've used this approach for motor control on the Pi a fair bit. On the Pi I use a C program that embeds the libmicrohttpd webserver engine. The program can serve out ordinary HTML pages to create the user interface on the browser, or respond to particular HTTP GET requests that result from the user clicking buttons or manipulating sliders or whatever. You can do some really sophisticated stuff by sending JavaScript functions that make their HTTP requests outside the normal HTTP request/response flow, so you can (for example) have a browser display that updates dynamically (e.g., display sensor values from the Pi).

Moreover, it's easy-ish to provide some kind of security using SSL and HTTP authentication. I prefer C, but there are webserver libraries for Python that work on the Pi as well.

To my way of thinking, the only time it's worth considering something more complex than this is when you need a user interface on Android that can't be implemented in HTML/JavaScript.

I'm sure there are many different ways to do what you want. I prefer to do most of the work on the Pi, because I find writing Android apps deeply unrewarding. On the other hand, if you like developing for Android and have plenty of experience doing so, the approach you suggested -- sending commands to the Pi over SSH -- could work perfectly well. It would just mean doing most of the work in Android.

Upvotes: 0

Related Questions