Week 12: Application Programming
This week, I made a web interface to control my Fabduino. The interface allowed me to taggle the onboard LED on and off from the web. To do this, I used PySerial and Python’s web microframework, Flask.
First, I created the Arduino code to make the Arduino listen for input over serial. The code (shown below) listens for a ‘1’ or a ‘0’ char to be sent over the serial. If it recieves a ‘1’, it turns the LED on by setting to voltage to HIGH. If it recives a ‘0’, it turns the LED off by setting the voltage to LOW.
toggle.ino
void setup() {
Serial.begin(9600); // Set the baud rate
pinMode(13, OUTPUT); // Set the onboard LED to output
Serial.println("Ready");
}
void loop() {
char toggle = ' ';
if(Serial.available()){ // Only send data back if data has been sent
char toggle = Serial.read(); // Read the incoming data
if(toggle == '1'){
digitalWrite(13, HIGH); // Turn the LED on (HIGH is the voltage level)
}
if(toggle == '0'){
digitalWrite(13, LOW); // Turn the LED off (LOW is the voltage level)
}
}
delay(100); // delay for 1/10 of a second
}
Next, I created the Python code to send the ‘1’ or ‘0’ to the serial. I used Flask to make a simple (2 button) webpage that, when clicked, submitted a post request with either the value ‘ON’ or ‘OFF’ to the application.
toggle.py
import serial
from time import sleep
from flask import request
from flask import Flask
app = Flask(__name__)
@app.route("/", methods = ['POST', 'GET'])
def hello():
if request.method == 'POST':
print request.form['submit']
ser = serial.Serial('/dev/tty.usbserial-FTGS552S', 9600, timeout=1)
if request.form['submit'] == 'ON':
print '1'
ser.write('1')
elif request.form['submit'] == 'OFF':
print '0'
ser.write('0')
else:
pass # unknown
return '<form action="/" method="POST"><input type="submit" name="submit" value="ON"><input type="submit" name="submit" value="OFF"></form>'
if __name__ == "__main__":
app.run()
To run the program, first load the toggle.ino code onto the Fabduino. Next, run the python code using ‘python toggle.py’ and open up http://localhost:5000. Clicking the buttons on the screen turns the on-board LED on and off (:
Working Demo