Talking to a Raspberry Pi from your Phone using Bottle (Python)



Here’s a short post on communicating with the raspberry from your phone’s browser.


Our goal is to turn an LED connected to the Pi on and off, by accessing a web page on the phone’s browser. Both the phone and the Pi are on the local WiFi network.


Here’s how we do it:


Start a web server on the Pi. For this, we will use the simple and elegant Bottle web framework, which consists of a single source file. Accessing the LED control web page displays a button, and clicking on it uses jQuery AJAX to send a request to the web server, which in turn changes the GPIO pin state to turn the LED on.


Here’s the code:


 

"""
ledctrl.py
A simple example for communicating with a Raspberry Pi from you phone's
browser. Uses the Bottle Python web framework, and jQuery AJAX.
Author: Mahesh Venkitachalam / electronut.in
"""

from bottle import route, request, run, get

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, False)

@route('/led')
def led():
return '''






RPi LED Control





'''

@route('/action', method='POST')
def action():
val = request.forms.get('strState')
on = bool(int(val))
GPIO.output(18, on)

run(host = '192.168.4.31', port = '8080')

To start it, first run the server on your Pi. (You can ssh into your pi for this.)


pi@raspberrypi ~/code/python/bottle $ sudo python ledctrl.py


Then, access the web page from your phone’s browser. In my case, the address is:

http://192.168.4.31:8080/led


You can control the LED from anywhere as long as you are in the local network. This can also work, from outside provided you do port forwarding on your router. I plan to explore this myself.


This is the starting point for me for a Raspberry Pi based home monitor robot. Watch this site for updates on this topic!