📖 Scenario: You have a Raspberry Pi connected to a temperature sensor. You want to create a simple REST API so other devices or apps can get the current temperature reading.This project will guide you step-by-step to build a basic REST API using Python and Flask on your Raspberry Pi.
🎯 Goal: Build a REST API on your Raspberry Pi that returns the current temperature reading as JSON when accessed.
📋 What You'll Learn
Create a Python dictionary to simulate sensor data
Add a configuration variable for the API endpoint path
Use Flask to create a REST API endpoint that returns the sensor data
Print the API URL to the console
💡 Why This Matters
🌍 Real World
IoT devices often need to share sensor data with other devices or apps. A REST API is a common way to do this over a network.
💼 Career
Understanding how to build REST APIs on devices like Raspberry Pi is useful for IoT developers, embedded systems engineers, and backend programmers working with connected devices.
Progress0 / 4 steps
1
Create sensor data dictionary
Create a Python dictionary called sensor_data with these exact entries: 'temperature': 22.5, 'unit': 'Celsius'.
Raspberry Pi
Hint
Use curly braces {} to create a dictionary with keys and values.
2
Add API endpoint path configuration
Create a variable called api_path and set it to the string "/temperature".
Raspberry Pi
Hint
Assign the string "/temperature" to the variable api_path.
3
Create Flask REST API endpoint
Import Flask and jsonify from flask. Create a Flask app called app. Use @app.route(api_path) to define a function get_temperature() that returns jsonify(sensor_data).
Raspberry Pi
Hint
Use @app.route(api_path) to create the API endpoint and return the sensor data as JSON.
4
Run the Flask app and print API URL
Add the code to run the Flask app with app.run(host='0.0.0.0', port=5000) inside if __name__ == '__main__':. Before running, print the string "API running at http://localhost:5000".
Raspberry Pi
Hint
Use if __name__ == '__main__': to run the app and print the API URL before starting.
Practice
(1/5)
1. What is the main purpose of a REST API on a Raspberry Pi IoT device?
easy
A. To connect the Raspberry Pi to a monitor
B. To allow remote communication and control over the network
C. To store large amounts of data locally
D. To increase the Raspberry Pi's processing speed
Solution
Step 1: Understand REST API role
A REST API enables devices to communicate over a network using standard web protocols.
Step 2: Identify IoT device needs
IoT devices use REST APIs to send sensor data or receive commands remotely.
Final Answer:
To allow remote communication and control over the network -> Option B
Quick Check:
REST API = Remote communication [OK]
Hint: REST APIs enable network communication for IoT devices [OK]
Common Mistakes:
Confusing REST API with hardware speed
Thinking REST API stores data locally
Assuming REST API connects to display devices
2. Which Python library is commonly used on Raspberry Pi to create a REST API for IoT devices?
easy
A. Flask
B. NumPy
C. Pandas
D. Matplotlib
Solution
Step 1: Identify common Python libraries
NumPy, Pandas, and Matplotlib are for data processing and visualization, not REST APIs.
Step 2: Recognize Flask's role
Flask is a lightweight web framework used to build REST APIs easily on Raspberry Pi.
Final Answer:
Flask -> Option A
Quick Check:
Flask = REST API framework [OK]
Hint: Flask is the go-to Python web framework for REST APIs [OK]
Common Mistakes:
Choosing data libraries instead of web frameworks
Confusing Flask with data analysis tools
Assuming Matplotlib creates APIs
3. What will be the output of this Flask route code on a Raspberry Pi?
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/sensor')
def sensor():
data = {'temperature': 22, 'humidity': 60}
return jsonify(data)
# Assume app is running and /sensor is requested
medium
A. {"temperature": 22, "humidity": 60}
B. temperature=22, humidity=60
C. temperature: 22, humidity: 60
D. Error: jsonify not defined
Solution
Step 1: Understand jsonify function
jsonify converts Python dict to JSON string with correct headers for API response.
Step 2: Analyze route output
The route returns JSON with keys 'temperature' and 'humidity' and their values.
Final Answer:
{"temperature": 22, "humidity": 60} -> Option A
Quick Check:
jsonify(dict) = JSON string [OK]
Hint: jsonify returns JSON string from dict in Flask [OK]
Common Mistakes:
Expecting plain text instead of JSON
Confusing jsonify with HTML output
Missing import of jsonify causing errors
4. Identify the error in this Flask route code for Raspberry Pi IoT device:
from flask import Flask
app = Flask(__name__)
@app.route('/led/on')
def led_on():
GPIO.output(17, True)
return 'LED is ON'
medium
A. Return statement must be JSON, not string
B. Route decorator syntax is incorrect
C. Missing import and setup for GPIO module
D. Flask app is not created properly
Solution
Step 1: Check GPIO usage
GPIO module must be imported and configured before use to control pins.
Step 2: Verify code completeness
Code lacks 'import RPi.GPIO as GPIO' and GPIO setup like GPIO.setmode() and GPIO.setup().
Final Answer:
Missing import and setup for GPIO module -> Option C
Quick Check:
GPIO needs import and setup before use [OK]
Hint: Always import and setup GPIO before controlling pins [OK]
Common Mistakes:
Assuming Flask route syntax is wrong
Thinking return must be JSON always
Ignoring GPIO initialization steps
5. You want to create a REST API on Raspberry Pi that returns sensor data only if temperature is above 25°C. Which code snippet correctly implements this logic using Flask?
hard
A. from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/sensor')
def sensor():
temp = 30
if temp >= 25:
return {'temperature': temp}
else:
return {'message': 'Temperature too low'}
B. from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/sensor')
def sensor():
temp = 20
if temp < 25:
return jsonify({'temperature': temp})
else:
return jsonify({'message': 'Temperature too low'})
C. from flask import Flask
app = Flask(__name__)
@app.route('/sensor')
def sensor():
temp = 30
if temp > 25:
return {'temperature': temp}
else:
return {'message': 'Temperature too low'}
D. from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/sensor')
def sensor():
temp = 30
if temp > 25:
return jsonify({'temperature': temp})
else:
return jsonify({'message': 'Temperature too low'})
Solution
Step 1: Check temperature condition logic
We want to return data only if temperature is above 25, so 'temp > 25' is correct.
Step 2: Verify response format
Flask needs jsonify to return proper JSON response with correct headers.
Final Answer:
Code with temp=30, condition temp > 25, and jsonify responses -> Option D
Quick Check:
Use temp > 25 and jsonify for JSON response [OK]
Hint: Use if temp > 25 and jsonify() to return JSON [OK]
Common Mistakes:
Using wrong temperature comparison operator
Returning dict without jsonify causing errors
Setting temperature below threshold incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.